From a5b993fc896a529e5b9ccbde40895c7ac9278cad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20K=C4=99dzia?= <pawel.kedzia@pwr.wroc.pl>
Date: Fri, 3 Dec 2010 12:51:22 +0100
Subject: [PATCH] Added range operator

---
 libwccl/parser/grammar.g | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index bf12dd5..444b379 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -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> >
-- 
GitLab