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

Range operator gets symset literal or class

parent 88d12d07
Branches
No related merge requests found
......@@ -578,32 +578,25 @@ symset_class
;
// ----------------------------------------------------------------------------
// Range operator
// WARNING! This rule can throw ParserException! Be careful!
// Range operator: range(class, begin, end) or range({...}, begin, end)
symset_range
[const Corpus2::Tagset& tagset, Variables& vars]
returns [boost::shared_ptr<Function<TSet> > ret]
{
Corpus2::Tag tag;
boost::shared_ptr<TSet> tset;
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]
: "range" LPAREN
(tset = symset_literal [tagset] | 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()));
}
if (tag_class) {
ret.reset(new GetSymbolsInRange(Corpus2::Tag(-1), p1, p2));
}
else {
tag = Corpus2::Tag(-1);
ret.reset(new GetSymbolsInRange(tset->get_value(), p1, p2));
}
ret.reset(new GetSymbolsInRange(tag, p1, p2));
}
;
......
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