From 4ec1c7f206890077d3e0ad463c40e65f24c78e2c 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 14:54:42 +0100
Subject: [PATCH] Fixed grammar

---
 libwccl/ops/functions/bool/predicates/nor.h |  2 +-
 libwccl/parser/grammar.g                    | 45 +++++++++++++++------
 2 files changed, 33 insertions(+), 14 deletions(-)

diff --git a/libwccl/ops/functions/bool/predicates/nor.h b/libwccl/ops/functions/bool/predicates/nor.h
index 7b78471..8cd5920 100644
--- a/libwccl/ops/functions/bool/predicates/nor.h
+++ b/libwccl/ops/functions/bool/predicates/nor.h
@@ -21,7 +21,7 @@ public:
 	 * @returns Name of the function: "not"
 	 */
 	std::string raw_name() const {
-		return "nor";
+		return "not";
 	}
 
 protected :
diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index bc57652..6047b72 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -92,6 +92,21 @@ private:
 		return ret_ustr;
 	}
 	//
+	const std::string str_token_rem_grav(antlr::RefToken& rstr) const {
+		size_t len = 0;
+		std::string ret = token_ref_to_std_string(rstr);
+
+		if ((len = ret.length()) < 2) {
+			return ret;
+		}
+
+		if (ret[0] == '`' && ret[len - 1] == '`') {
+			return ret.substr(1, len - 2);
+		}
+
+		return ret;
+	}
+	//
 	const std::string token_ref_to_std_string(antlr::RefToken& rstr) const { 
 		return (((antlr::Token*)rstr)->getText());
 	}
@@ -187,7 +202,10 @@ str_set_literal
 {
 	s_set.reset(new Wccl::StrSet());
 }
-	: LBRACKET
+	: s0: STRING {
+			s_set->insert(str_token_ref_to_ustring(s0)); 
+		}
+	| LBRACKET
 	  ( s1: STRING {
 			s_set->insert(str_token_ref_to_ustring(s1)); 
 		}
@@ -217,7 +235,7 @@ sym_set_elem
 	[const Corpus2::Tagset& tagset, boost::shared_ptr<Wccl::TSet>& t_set]
 	: s1: SYMBOL {
 		try {
-			t_set->insert_symbol(tagset, token_ref_to_std_string(s1));
+			t_set->insert_symbol(tagset, str_token_rem_grav(s1));
 		}
 		catch(Corpus2::TagParseError &e) {
 			throw(ParserException(e.info()));
@@ -234,7 +252,8 @@ sym_set_literal
 {
 	t_set.reset(new Wccl::TSet());
 }
-	: LCURLY 
+	: sym_set_elem[tagset, t_set]
+	| LCURLY 
 	  ( sym_set_elem[tagset, t_set] (COMMA sym_set_elem[tagset, t_set])* )?
 	  RCURLY
 ;
@@ -328,10 +347,10 @@ position_variable_acc
 	[Wccl::Variables& vars] 
 	returns [boost::shared_ptr<Wccl::VariableAccessor<Wccl::Position> > pos_acc]
 	: POS_PREFIX n: SYMBOL { 
-		vars.get_put<Wccl::Position>(token_ref_to_std_string(n));
+		vars.get_put<Wccl::Position>(str_token_rem_grav(n));
 
 		Wccl::VariableAccessor<Wccl::Position> acc = 
-			vars.create_accessor<Wccl::Position>(token_ref_to_std_string(n));
+			vars.create_accessor<Wccl::Position>(str_token_rem_grav(n));
 
 		pos_acc.reset(new Wccl::VariableAccessor<Wccl::Position>(acc));
 	}
@@ -371,11 +390,11 @@ str_set_variable_acc
 	returns [boost::shared_ptr<Wccl::VariableAccessor<Wccl::StrSet> > strset_acc]
 	:	STR_PREFIX n: SYMBOL {
 		// get/put variable to variables
-		vars.get_put<Wccl::StrSet>(token_ref_to_std_string(n));
+		vars.get_put<Wccl::StrSet>(str_token_rem_grav(n));
 		
 		// makes accessor for value
 		Wccl::VariableAccessor<Wccl::StrSet> acc = 
-			vars.create_accessor<Wccl::StrSet>(token_ref_to_std_string(n));
+			vars.create_accessor<Wccl::StrSet>(str_token_rem_grav(n));
 
 		strset_acc.reset(new Wccl::VariableAccessor<Wccl::StrSet>(acc));
 	}
@@ -400,10 +419,10 @@ sym_set_variable_acc
 	[Wccl::Variables& vars] 
 	returns [boost::shared_ptr<Wccl::VariableAccessor<Wccl::TSet> > symset_acc]
 	: TST_PREFIX n: SYMBOL { 
-			vars.get_put<Wccl::TSet>(token_ref_to_std_string(n)); 	
+			vars.get_put<Wccl::TSet>(str_token_rem_grav(n)); 	
 
 			Wccl::VariableAccessor<Wccl::TSet> acc = 
-				vars.create_accessor<Wccl::TSet>(token_ref_to_std_string(n));
+				vars.create_accessor<Wccl::TSet>(str_token_rem_grav(n));
 
 			symset_acc.reset(new Wccl::VariableAccessor<Wccl::TSet>(acc));
 	}
@@ -428,10 +447,10 @@ boolean_variable_acc
 	[Wccl::Variables& vars] 
 	returns [boost::shared_ptr<Wccl::VariableAccessor<Wccl::Bool> > bool_acc]
 	: BOOL_PREFIX n: SYMBOL { 
-			vars.get_put<Wccl::Bool>(token_ref_to_std_string(n));
+			vars.get_put<Wccl::Bool>(str_token_rem_grav(n));
 
 			Wccl::VariableAccessor<Wccl::Bool> acc = 
-				vars.create_accessor<Wccl::Bool>(token_ref_to_std_string(n));
+				vars.create_accessor<Wccl::Bool>(str_token_rem_grav(n));
 
 			bool_acc.reset(new Wccl::VariableAccessor<Wccl::Bool>(acc));
 	}
@@ -1004,8 +1023,8 @@ STRING
 options {
 	paraphrase = "a string";
 }
-	: '"' (~'"')* '"'
-	| '\'' (~'\'')* '\''
+	: '"'! (~'"')* '"'!
+	| '\''! (~'\'')* '\''!
 ;
 
 SIGNED_INT
-- 
GitLab