summaryrefslogtreecommitdiff
path: root/decoder/scfg_translator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'decoder/scfg_translator.cc')
-rw-r--r--decoder/scfg_translator.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/decoder/scfg_translator.cc b/decoder/scfg_translator.cc
index afe796a5..a19e9d75 100644
--- a/decoder/scfg_translator.cc
+++ b/decoder/scfg_translator.cc
@@ -91,6 +91,17 @@ struct SCFGTranslatorImpl {
bool show_tree_structure_;
unsigned int ctf_iterations_;
vector<GrammarPtr> grammars;
+ GrammarPtr sup_grammar_;
+
+ struct Equals { Equals(const GrammarPtr& v) : v_(v) {}
+ bool operator()(const GrammarPtr& x) const { return x == v_; } const GrammarPtr& v_; };
+
+ void SetSupplementalGrammar(const std::string& grammar_string) {
+ grammars.erase(remove_if(grammars.begin(), grammars.end(), Equals(sup_grammar_)), grammars.end());
+ istringstream in(grammar_string);
+ sup_grammar_.reset(new TextGrammar(&in));
+ grammars.push_back(sup_grammar_);
+ }
bool Translate(const string& input,
SentenceMetadata* smeta,
@@ -290,6 +301,10 @@ void SCFGTranslator::ProcessMarkupHintsImpl(const map<string, string>& kv) {
}
+void SCFGTranslator::SetSupplementalGrammar(const std::string& grammar) {
+ pimpl_->SetSupplementalGrammar(grammar);
+}
+
void SCFGTranslator::SentenceCompleteImpl() {
if(usingSentenceGrammar) // Drop the last sentence grammar from the list of grammars
@@ -299,3 +314,7 @@ void SCFGTranslator::SentenceCompleteImpl() {
}
}
+std::string SCFGTranslator::GetDecoderType() const {
+ return "SCFG";
+}
+