#ifndef _AGRAMMAR_H_ #define _AGRAMMAR_H_ #include "grammar.h" using namespace std; class aTGImpl; struct aTextGrammar : public Grammar { aTextGrammar(); aTextGrammar(const std::string& file); void SetMaxSpan(int m) { max_span_ = m; } virtual const GrammarIter* GetRoot() const; void AddRule(const TRulePtr& rule); void ReadFromFile(const std::string& filename); virtual bool HasRuleForSpan(int i, int j, int distance) const; const std::vector& GetUnaryRules(const WordID& cat) const; void setMaxSplit(int max_split); void printAllNonterminals() const; void addNonterminal(WordID wordID); void splitAllNonterminals(); void splitNonterminal(WordID wordID); // inline map > & getSplitNonterminals(){return splitNonterminals_;} // map > splitNonterminals_; private: int max_span_; boost::shared_ptr pimpl_; int max_split_; map nonterminals_; //list of nonterminals of the grammar if nonterminals_[WordID] > 0 the nonterminal WordID is found in the grammar }; #endif