From ccb85ebff5e1e5947b3c9a26b04f87038b2f4fc1 Mon Sep 17 00:00:00 2001 From: Adam Wardynski <award@.(win7-laptop)> Date: Tue, 30 Nov 2010 02:40:23 +0100 Subject: [PATCH] Adding relative position to grammar as infix +- --- libwccl/parser/grammar.g | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g index b6178c6..d53ddd4 100644 --- a/libwccl/parser/grammar.g +++ b/libwccl/parser/grammar.g @@ -538,11 +538,16 @@ symset_condition position_operator [const Corpus2::Tagset& tagset, Variables& vars] returns [boost::shared_ptr<Function<Position> > ret] - : ret = position_var_val [vars] - | ret = position_relpos [tagset, vars] + : + ( ret = position_var_val [vars] | ret = position_condition [tagset, vars] - // | LPAREN ret = position_operator [tagset, vars] RPAREN + ) + ( // if there is SIGNED_INT after the position, it is actually a relative position + i: SIGNED_INT { + ret.reset(new RelativePosition(ret, token_ref_to_int(i))); + } + )? ; // ---------------------------------------------------------------------------- @@ -554,21 +559,6 @@ position_var_val | ret = position_variable [vars] ; -// ---------------------------------------------------------------------------- -// Realtive position operator. -// TODO 2+2, actually relative gets position is possible only as relpos(...,...) -position_relpos - [const Corpus2::Tagset& tagset, Variables& vars] - returns [boost::shared_ptr<Function<Position> > ret] -{ - int n = 0; - boost::shared_ptr<Function<Position> > pos; -} - : "relpos" LPAREN pos = position_operator [tagset, vars] COMMA n = number RPAREN { - ret.reset(new RelativePosition(pos, n)); - } -; - // ---------------------------------------------------------------------------- // Condition of the position value // if (Bool, Position, Position) -- GitLab