From a5b993fc896a529e5b9ccbde40895c7ac9278cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20K=C4=99dzia?= <pawel.kedzia@pwr.wroc.pl> Date: Fri, 3 Dec 2010 12:51:22 +0100 Subject: [PATCH] Added range operator --- libwccl/parser/grammar.g | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g index bf12dd5..444b379 100644 --- a/libwccl/parser/grammar.g +++ b/libwccl/parser/grammar.g @@ -42,6 +42,7 @@ header { #include <libwccl/ops/functions/tset/getsymbols.h> #include <libwccl/ops/functions/tset/getwordclass.h> + #include <libwccl/ops/functions/tset/getsymbolsinrange.h> #include <libwccl/ops/functions/position/relativeposition.h> @@ -490,6 +491,7 @@ symset_operator | (symset_getsymbol[tagset, vars]) => (ret = symset_getsymbol [tagset, vars]) | (symset_var_val [tagset, vars]) => (ret = symset_var_val [tagset, vars]) | (symset_class [tagset, vars]) => (ret = symset_class [tagset, vars]) + | (symset_range [tagset, vars]) => (ret = symset_range [tagset, vars]) // | LPAREN ret = symset_operator [tagset, vars] RPAREN ; @@ -568,6 +570,36 @@ symset_class } ; +// ---------------------------------------------------------------------------- +// Range operator +// WARNING! This rule can throw ParserException! Be careful! +symset_range + [const Corpus2::Tagset& tagset, Variables& vars] + returns [boost::shared_ptr<Function<TSet> > ret] +{ + Corpus2::Tag tag; + boost::shared_ptr<Function<Position> > p1, p2; +} + : "range" LPAREN (tag_sym: SYMBOL | tag_class: "class") COMMA + p1 = position_operator [tagset, vars] COMMA + p2 = position_operator [tagset, vars] + RPAREN { + if (tag_sym) { + try { + tag = tagset.parse_symbol(str_token_rem_grav(tag_sym)); + } + catch(Corpus2::TagParseError &e) { + throw(ParserException(e.info())); + } + } + else { + tag = Corpus2::Tag(-1); + } + + ret.reset(new GetSymbolsInRange(tag, p1, p2)); + } +; + /////////////////////////////////////////////////////////////////////////////// // Position operator // Returns boost::shared_ptr<Function<Position> > -- GitLab