diff --git a/libmwereader/mweparser.cpp b/libmwereader/mweparser.cpp index 35307601aaac0b13b5d09aacaff4b38eb592f574..901b1efc61f4f175bae6fa9594bf039d65c9d37b 100644 --- a/libmwereader/mweparser.cpp +++ b/libmwereader/mweparser.cpp @@ -14,7 +14,32 @@ namespace Corpus2 { MWEBuilder::MWEBuilder(const Tagset& tagset) : tagset_(tagset), parser_(tagset) { + } + + MWEBuilder::BoolOpPtr MWEBuilder::get_head_condition( + const std::string & headcond) + { + return get_condition(headcond, head_conditions_); + } + MWEBuilder::BoolOpPtr MWEBuilder::get_mwe_condition( + const std::string &cond) + { + return get_condition(cond, main_conditions_); + } + MWEBuilder::BoolOpPtr MWEBuilder::get_condition( + const std::string & cond, value_type& where) + { + value_type::iterator search = where.find(cond); + + if(search != where.end()) + return search->second; + + BoolOpPtr op = parser_.parseBoolOperator(cond); + + where[cond] = op; + + return op; } MWEParser::MWEParser(MWEIndex &index) @@ -29,7 +54,10 @@ namespace Corpus2 { void MWEParser::create_mwe() { - + MWEBuilder::BoolOpPtr main = mwe_builder_->get_mwe_condition( + wccl_operator_); + MWEBuilder::BoolOpPtr head = mwe_builder_->get_head_condition( + head_cond_); } std::string MWEParser::get_attribute(const AttributeList& attributes, diff --git a/libmwereader/mweparser.h b/libmwereader/mweparser.h index 71f4ce84e549e0ff828c9ade2381f098b68841ed..bb382287f58c1c9447ac6ecfa0a7336985c70428 100644 --- a/libmwereader/mweparser.h +++ b/libmwereader/mweparser.h @@ -6,7 +6,7 @@ #include <boost/unordered_map.hpp> #include <libwccl/parser/Parser.h> - +#include <libwccl/ops/operator.h> #include "mwe.h" namespace Corpus2 { @@ -14,11 +14,18 @@ namespace Corpus2 { class MWEBuilder { public: + typedef boost::shared_ptr<Wccl::Operator<Wccl::Bool> > BoolOpPtr; + MWEBuilder(const Tagset& tagset); + BoolOpPtr get_head_condition(const std::string &); + BoolOpPtr get_mwe_condition(const std::string &); + private: - typedef boost::unordered_map<std::string, std::string> value_type; + typedef boost::unordered_map<std::string, BoolOpPtr> value_type; + + BoolOpPtr get_condition(const std::string & cond, value_type& where); const Tagset& tagset_; /// str -> ptr to ccl operator