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