From fe784bbd0320d77033fa6fb5cd71ba80288ff0dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20K=C4=99dzia?= <pawel.kedzia@pwr.wroc.pl>
Date: Mon, 29 Nov 2010 13:50:49 +0100
Subject: [PATCH] Added position condit

---
 libwccl/parser/grammar.g | 27 ++++++++++++---------------
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index e45d48e..bc57652 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -1,4 +1,7 @@
 header {
+	//don't try to add all the headers inside our namespace
+	// ANTLR_END_NAMESPACE
+
 	#include <libwccl/parser/ParserException.h>
 
 	#include <cstdio>
@@ -48,6 +51,9 @@ header {
 
 	//
 	#include <libwccl/parser/ANTLRParserResult.h>
+
+	// start our namespace again
+	// ANTLR_BEGIN_NAMESPACE(Wccl)
 }
 
 options {
@@ -348,17 +354,11 @@ relpos
 	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Position> > ret]
 {
+	int n = 0;
 	boost::shared_ptr<Wccl::Function<Wccl::Position> > pos;
 }
-	: "relpos" 
-			LPAREN 
-				pos = op_position [tagset, vars] ("+" | "-") ofst: UNSIGNED_INT 
-			RPAREN {
-			ret.reset(new Wccl::RelativePosition(
-					pos,
-					token_ref_to_int(ofst)
-				)
-			);
+	: "relpos" LPAREN pos = op_position [tagset, vars] COMMA n = number RPAREN {
+			ret.reset(new Wccl::RelativePosition(pos, n));
 		}
 ;
 
@@ -598,7 +598,7 @@ op_position
 	: op = position_variable [vars]
 	| op = position_value
 	| op = relpos [tagset, vars]
-//	| op = condit_position [tagset, vars]
+	| op = condit_position [tagset, vars]
 ;
 
 // ----------------------------------------------------------------------------
@@ -869,6 +869,7 @@ lpred_eq
 }
 	: "equal" LPAREN
 	(
+		(position_operators [tagset, vars]) =>
 		(
 			p1 = position_operators [tagset, vars] COMMA 
 			p2 = position_operators [tagset, vars] {
@@ -960,15 +961,12 @@ condit_bool
 // ----------------------------------------------------------------------------
 // if (Bool, Position, Position)
 // ? Position ? Bool : 0
-/* Not implemented yet
- */
-/*
 condit_position
 	[const Corpus2::Tagset& tagset, Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Position> > op]
 {
 	boost::shared_ptr<Wccl::Function<Wccl::Bool> > test;
-	boost::shared_ptr<Wccl::Function<Wccl::Bool> > p_true, p_false;
+	boost::shared_ptr<Wccl::Function<Wccl::Position> > p_true, p_false;
 }
 	: "if" LPAREN test  = logical_predicates [tagset, vars] COMMA 
 							p_true  = position_operators [tagset, vars] 
@@ -988,7 +986,6 @@ condit_position
 			op.reset(new Wccl::Conditional<Wccl::Position>(test, p_true));
 		}
 ;
-*/
 
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
-- 
GitLab