Skip to content
Snippets Groups Projects
Commit a5b993fc authored by Paweł Kędzia's avatar Paweł Kędzia
Browse files

Added range operator

parent 617bf142
No related branches found
No related tags found
No related merge requests found
......@@ -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> >
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment