#ifndef SEARCH_RULE__ #define SEARCH_RULE__ #include "lm/left.hh" #include "search/arity.hh" #include "search/types.hh" #include "search/word.hh" #include #include #include namespace search { template class Context; class Rule { public: Rule() : arity_(0) {} void AppendTerminal(Word w) { items_.push_back(w); } void AppendNonTerminal() { items_.resize(items_.size() + 1); ++arity_; } template void FinishedAdding(const Context &context, Score additive, bool prepend_bos); Score Bound() const { return bound_; } Score Additive() const { return additive_; } unsigned int Arity() const { return arity_; } const lm::ngram::ChartState &Lexical(unsigned int index) const { return lexical_[index]; } // For printing. typedef const std::vector ItemsRet; ItemsRet &Items() const { return items_; } private: Score bound_, additive_; unsigned int arity_; // TODO: pool? std::vector items_; std::vector lexical_; }; std::ostream &operator<<(std::ostream &o, const Rule &rule); } // namespace search #endif // SEARCH_RULE__