diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g index a4ac6c4a554ad3f4da89b82cacbb7a519c7d2f92..49c60a52d61bc14bf9ba91604a5a22993fbdc2bf 100644 --- a/libwccl/parser/grammar.g +++ b/libwccl/parser/grammar.g @@ -40,6 +40,7 @@ header { #include <libwccl/ops/functions/strset/tolower.h> #include <libwccl/ops/functions/strset/getlemmas.h> + #include <libwccl/ops/functions/tset/catfilter.h> #include <libwccl/ops/functions/tset/getsymbols.h> #include <libwccl/ops/functions/tset/getwordclass.h> #include <libwccl/ops/functions/tset/getsymbolsinrange.h> @@ -497,6 +498,7 @@ symset_operator | ret = symset_var_val [tagset, vars] | ret = symset_class [tagset, vars] | ret = symset_range [tagset, vars] + | ret = symset_catflt [tagset, vars] // | LPAREN ret = symset_operator [tagset, vars] RPAREN ; @@ -605,6 +607,24 @@ symset_range } ; +// ---------------------------------------------------------------------------- +// Catflt operator +symset_catflt + [const Corpus2::Tagset& tagset, Variables& vars] + returns [boost::shared_ptr<Function<TSet> > ret] +{ + boost::shared_ptr<Function<TSet> > selector, mask; + boost::shared_ptr<Function<Position> > position; +} + : "catflt" LPAREN + position = position_operator [tagset, vars] COMMA + selector = symset_operator [tagset, vars] COMMA + mask = symset_operator [tagset, vars] + RPAREN { + ret.reset(new CatFilter(position, selector, mask)); + } +; + /////////////////////////////////////////////////////////////////////////////// // Position operator // Returns boost::shared_ptr<Function<Position> >