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
Branches
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% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment