From 38dd623d716eb763e0fc51f54759aec7ed7a6fa2 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:34:28 +0100
Subject: [PATCH] Added getsymbol operator eg cas[], nmb[], m1[]...

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

diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index 3fe3115..9628c69 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -19,33 +19,31 @@ header {
 	#include <libwccl/sentencecontext.h>
 
 	// operators
+	#include <libwccl/ops/functions/constant.h>
+	#include <libwccl/ops/functions/vargetter.h>
+	#include <libwccl/ops/functions/conditional.h>
+
 	#include <libwccl/ops/functions/bool/predicates/or.h>
 	#include <libwccl/ops/functions/bool/predicates/nor.h>
 	#include <libwccl/ops/functions/bool/predicates/and.h>
 	#include <libwccl/ops/functions/bool/predicates/regex.h>
-	#include <libwccl/ops/functions/bool/predicates/equals.h>
-
 	#include <libwccl/ops/functions/bool/varsetter.h>
+	#include <libwccl/ops/functions/bool/predicates/intersects.h>
+	#include <libwccl/ops/functions/bool/predicates/issubsetof.h>
+	#include <libwccl/ops/functions/bool/predicates/isinside.h>
+	#include <libwccl/ops/functions/bool/predicates/isoutside.h>
+	#include <libwccl/ops/functions/bool/predicates/equals.h>
 
 	#include <libwccl/ops/functions/strset/affix.h>
 	#include <libwccl/ops/functions/strset/getorth.h>
 	#include <libwccl/ops/functions/strset/toupper.h>
 	#include <libwccl/ops/functions/strset/tolower.h>
 	#include <libwccl/ops/functions/strset/getlemmas.h>
-
-	#include <libwccl/ops/functions/constant.h>
-	#include <libwccl/ops/functions/vargetter.h>
-
-	#include <libwccl/ops/functions/bool/predicates/intersects.h>
-	#include <libwccl/ops/functions/bool/predicates/issubsetof.h>
-
-	#include <libwccl/ops/functions/bool/predicates/isinside.h>
-	#include <libwccl/ops/functions/bool/predicates/isoutside.h>
+	
+	#include <libwccl/ops/functions/tset/getsymbols.h>
 
 	#include <libwccl/ops/functions/position/relativeposition.h>
 
-	#include <libwccl/ops/functions/conditional.h>
-
 	// Unicode String
 	#include <unicode/uniset.h>
 	#include <unicode/unistr.h>
@@ -487,8 +485,9 @@ bool_variable
 symset_operator
 	[const Corpus2::Tagset& tagset, Variables& vars]
 	returns [boost::shared_ptr<Function<TSet> > ret]
-	: ret = symset_var_val   [tagset, vars] 
-	| ret = symset_condition [tagset, vars]
+	: (symset_condition[tagset, vars]) => (ret = symset_condition [tagset, vars])
+	| (symset_getsymbol[tagset, vars]) => (ret = symset_getsymbol [tagset, vars])
+	| (symset_var_val  [tagset, vars]) => (ret = symset_var_val   [tagset, vars])
 	//
 	| LPAREN ret = symset_operator [tagset, vars] RPAREN
 ;
@@ -532,6 +531,28 @@ symset_condition
 		}
 ;
 
+// ----------------------------------------------------------------------------
+// GetSymbol operator may be cas, m1, f, sg...
+// WARNING! This rule can throw ParserException! Be careful!
+symset_getsymbol
+	[const Corpus2::Tagset& tagset, Variables& vars]
+	returns [boost::shared_ptr<Function<TSet> > op]
+{
+	Corpus2::Tag tag;
+	boost::shared_ptr<Wccl::Function<Position> > position;
+}
+	: t: SYMBOL LBRACKET position = position_operator [tagset, vars] RBRACKET {
+			try {
+				tag = tagset.parse_symbol(str_token_rem_grav(t));
+			}
+			catch(Corpus2::TagParseError &e) {
+				throw(ParserException(e.info()));
+			}
+				
+			op.reset(new Wccl::GetSymbols(tag, position));
+		}
+;
+
 ///////////////////////////////////////////////////////////////////////////////
 // Position operator
 // Returns boost::shared_ptr<Function<Position> >
-- 
GitLab