diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g index c0f08ca068f06e5412f16bf79ec77c5608bc2ce6..d4ee973a0ad697c0d99c78ee1c0491fd9f4480ca 100644 --- a/libwccl/parser/grammar.g +++ b/libwccl/parser/grammar.g @@ -43,6 +43,7 @@ header { #include <libwccl/ops/functions/strset/tolower.h> #include <libwccl/ops/functions/strset/getlemmas.h> + #include <libwccl/ops/functions/tset/agrfilter.h> #include <libwccl/ops/functions/tset/catfilter.h> #include <libwccl/ops/functions/tset/getsymbols.h> #include <libwccl/ops/functions/tset/getwordclass.h> @@ -498,10 +499,11 @@ symset_operator returns [boost::shared_ptr<Function<TSet> > ret] : ret = symset_condition [tagset, vars] | (SYMBOL LBRACKET) => (ret = symset_getsymbol [tagset, vars]) - | ret = symset_var_val [tagset, vars] - | ret = symset_class [tagset, vars] - | ret = symset_range [tagset, vars] - | ret = symset_catflt [tagset, vars] + | ret = symset_var_val [tagset, vars] + | ret = symset_class [tagset, vars] + | ret = symset_range [tagset, vars] + | ret = symset_catflt [tagset, vars] + | ret = symset_agrflt [tagset, vars] // | LPAREN ret = symset_operator [tagset, vars] RPAREN ; @@ -621,6 +623,26 @@ symset_catflt } ; +// ---------------------------------------------------------------------------- +// Agrflt operator +symset_agrflt + [const Corpus2::Tagset& tagset, Variables& vars] + returns [boost::shared_ptr<Function<TSet> > ret] +{ + boost::shared_ptr<Function<TSet> > attr, mask; + boost::shared_ptr<Function<Position> > lpos, rpos; +} + : "agrflt" LPAREN + lpos = position_operator [tagset, vars] COMMA + rpos = position_operator [tagset, vars] COMMA + attr = symset_operator [tagset, vars] COMMA + mask = symset_operator [tagset, vars] + RPAREN { + ret.reset(new AgrFilter(lpos, rpos, attr, mask, tagset)); + } +; + + /////////////////////////////////////////////////////////////////////////////// // Position operator // Returns boost::shared_ptr<Function<Position> >