#ifndef LIBWCCL_PARSER_PARSER_H #define LIBWCCL_PARSER_PARSER_H #include <iostream> // ---------------------------------------------------------------------------- #include <sstream> // ---------------------------------------------------------------------------- #include <libcorpus2/tagset.h> // ---------------------------------------------------------------------------- #include <libwccl/variables.h> #include <libwccl/values/strset.h> #include <libwccl/ops/operator.h> // rules #include <libwccl/ops/tagrulesequence.h> // match actions #include <libwccl/ops/matchrule.h> // match actions #include <libwccl/wcclfile.h> // exceptions #include <libwccl/parser/ParserException.h> // ---------------------------------------------------------------------------- namespace Wccl{ class Parser { public: explicit Parser(const Corpus2::Tagset&); explicit Parser(const std::string& tagset_name); ~Parser(); // --------------------------------------------------------------------------- // methods for parsing string operators boost::shared_ptr<Operator<StrSet> > parseStringOperator(const std::string& operator_string) const; boost::shared_ptr<Operator<StrSet> > parseStringOperator(std::istream& is) const; // --------------------------------------------------------------------------- // methods for parsing bool operators boost::shared_ptr<Operator<Bool> > parseBoolOperator(const std::string& operator_string) const; boost::shared_ptr<Operator<Bool> > parseBoolOperator(std::istream& is) const; // --------------------------------------------------------------------------- // methods for parsing bool operators boost::shared_ptr<Operator<TSet> > parseSymSetOperator(const std::string& operator_string) const; boost::shared_ptr<Operator<TSet> > parseSymSetOperator(std::istream& is) const; // --------------------------------------------------------------------------- // methods for parsing position operators boost::shared_ptr<Operator<Position> > parsePositionOperator(const std::string& operator_string) const; boost::shared_ptr<Operator<Position> > parsePositionOperator(std::istream& is) const; // --------------------------------------------------------------------------- // methods for parsing any operators boost::shared_ptr<FunctionalOperator> parseAnyOperator(const std::string& operator_string) const; boost::shared_ptr<FunctionalOperator> parseAnyOperator(std::istream& is) const; // --------------------------------------------------------------------------- // Parsing rule sequence from input string boost::shared_ptr<TagRuleSequence> parseTagRuleSequence(const std::string& rule_string) const; boost::shared_ptr<TagRuleSequence> parseTagRuleSequence(std::istream& is) const; // --------------------------------------------------------------------------- // Parsing single rule from input string boost::shared_ptr<TagRule> parseSingleRule(const std::string& rule_string) const; boost::shared_ptr<TagRule> parseSingleRule(std::istream& is) const; // --------------------------------------------------------------------------- // Parsing match rule from input string boost::shared_ptr<MatchRule> parseMatchRule(const std::string& rule_string) const; boost::shared_ptr<MatchRule> parseMatchRule(std::istream& is) const; // --------------------------------------------------------------------------- // WCCL file parsing boost::shared_ptr<WcclFile> parseWcclFile(const std::string& file_contents_string, const std::string& search_path = ".") const; boost::shared_ptr<WcclFile> parseWcclFile(std::istream& is, const std::string& search_path = ".") const; // --------------------------------------------------------------------------- const Corpus2::Tagset& tagset() const { return tagset_; } private: const Corpus2::Tagset &tagset_; }; } // end Wccl ns #endif // LIBWCCL_PARSER_PARSER_H