[Saga-devel] saga SVN commit 3295: /trunk/saga/impl/packages/sd/

paul.livesey at stfc.ac.uk paul.livesey at stfc.ac.uk
Thu Jan 15 06:54:59 CST 2009


User: svn_plivesey
Date: 2009/01/15 06:54 AM

Modified:
 /trunk/saga/impl/packages/sd/
  sdTokenTypes.hpp, sdTokenTypes.txt, sd_lexer.cpp, sd_lexer.hpp, sd_parser.cpp, sd_parser.hpp

Log:
 New versions of ANTLR generated files from the new grammer.

File Changes:

Directory: /trunk/saga/impl/packages/sd/
========================================

File [modified]: sdTokenTypes.hpp
Delta lines: +35 -32
===================================================================
--- trunk/saga/impl/packages/sd/sdTokenTypes.hpp	2009-01-15 12:53:02 UTC (rev 3294)
+++ trunk/saga/impl/packages/sd/sdTokenTypes.hpp	2009-01-15 12:54:46 UTC (rev 3295)
@@ -1,7 +1,7 @@
 #ifndef INC_sdTokenTypes_hpp_
 #define INC_sdTokenTypes_hpp_
 
-/* $ANTLR 2.7.7 (20080506): "sd_grammar.g" -> "sdTokenTypes.hpp"$ */
+/* $ANTLR 2.7.7 (20081210): "sd_grammar.g" -> "sdTokenTypes.hpp"$ */
 
 #ifndef CUSTOM_API
 # define CUSTOM_API
@@ -14,37 +14,40 @@
 		EOF_ = 1,
 		K_IN = 4,
 		K_LIKE = 5,
-		K_NOT = 6,
-		K_AND = 7,
-		K_OR = 8,
-		K_VO = 9,
-		K_TYPE = 10,
-		K_NAME = 11,
-		K_UID = 12,
-		K_URI = 13,
-		K_ENDPOINT = 14,
-		K_SITE = 15,
-		K_SERVICE = 16,
-		SVC_CMP = 17,
-		DATA_CMP = 18,
-		S_CHAR_LITERAL = 19,
-		LPAREN = 20,
-		RPAREN = 21,
-		COMMA = 22,
-		LPARAN = 23,
-		NE = 24,
-		EQ = 25,
-		LESS = 26,
-		GT = 27,
-		LE = 28,
-		GE = 29,
-		S_IDENTIFIER = 30,
-		S_NUMBER = 31,
-		WS_ = 32,
-		DIGIT = 33,
-		INTEGER = 34,
-		FLOAT = 35,
-		LETTER = 36,
+		K_ESCAPE = 6,
+		K_NOT = 7,
+		K_AND = 8,
+		K_OR = 9,
+		K_VO = 10,
+		K_TYPE = 11,
+		K_NAME = 12,
+		K_UID = 13,
+		K_URI = 14,
+		K_ENDPOINT = 15,
+		K_SITE = 16,
+		K_SERVICE = 17,
+		K_ALL = 18,
+		K_ANY = 19,
+		K_STRING_LIST = 20,
+		SVC_CMP = 21,
+		DATA_CMP = 22,
+		S_CHAR_LITERAL = 23,
+		LPAREN = 24,
+		RPAREN = 25,
+		S_NUMBER = 26,
+		COMMA = 27,
+		NE = 28,
+		EQ = 29,
+		LESS = 30,
+		GT = 31,
+		LE = 32,
+		GE = 33,
+		S_IDENTIFIER = 34,
+		WS_ = 35,
+		DIGIT = 36,
+		INTEGER = 37,
+		FLOAT = 38,
+		LETTER = 39,
 		NULL_TREE_LOOKAHEAD = 3
 	};
 #ifdef __cplusplus

File [modified]: sdTokenTypes.txt
Delta lines: +35 -32
===================================================================
--- trunk/saga/impl/packages/sd/sdTokenTypes.txt	2009-01-15 12:53:02 UTC (rev 3294)
+++ trunk/saga/impl/packages/sd/sdTokenTypes.txt	2009-01-15 12:54:46 UTC (rev 3295)
@@ -1,35 +1,38 @@
-// $ANTLR 2.7.7 (20080506): sd_grammar.g -> sdTokenTypes.txt$
+// $ANTLR 2.7.7 (20081210): sd_grammar.g -> sdTokenTypes.txt$
 sd    // output token vocab name
 K_IN="in"=4
 K_LIKE="like"=5
-K_NOT="not"=6
-K_AND="and"=7
-K_OR="or"=8
-K_VO="vo"=9
-K_TYPE="type"=10
-K_NAME="name"=11
-K_UID="uid"=12
-K_URI="uri"=13
-K_ENDPOINT="endpoint"=14
-K_SITE="site"=15
-K_SERVICE="related_services"=16
-SVC_CMP=17
-DATA_CMP=18
-S_CHAR_LITERAL("char literal")=19
-LPAREN("left parenthesis")=20
-RPAREN("right parenthesis")=21
-COMMA("comma")=22
-LPARAN=23
-NE("not equals")=24
-EQ("equals")=25
-LESS=26
-GT("greater than")=27
-LE=28
-GE=29
-S_IDENTIFIER("identifier")=30
-S_NUMBER("number")=31
-WS_("white space")=32
-DIGIT("digit")=33
-INTEGER("integer")=34
-FLOAT("float")=35
-LETTER("letter")=36
+K_ESCAPE="escape"=6
+K_NOT="not"=7
+K_AND="and"=8
+K_OR="or"=9
+K_VO="vo"=10
+K_TYPE="type"=11
+K_NAME="name"=12
+K_UID="uid"=13
+K_URI="uri"=14
+K_ENDPOINT="endpoint"=15
+K_SITE="site"=16
+K_SERVICE="related_services"=17
+K_ALL="all"=18
+K_ANY="any"=19
+K_STRING_LIST=20
+SVC_CMP=21
+DATA_CMP=22
+S_CHAR_LITERAL("char literal")=23
+LPAREN("left parenthesis")=24
+RPAREN("right parenthesis")=25
+S_NUMBER("number")=26
+COMMA("comma")=27
+NE("not equals")=28
+EQ("equals")=29
+LESS=30
+GT("greater than")=31
+LE=32
+GE=33
+S_IDENTIFIER("identifier")=34
+WS_("white space")=35
+DIGIT("digit")=36
+INTEGER("integer")=37
+FLOAT("float")=38
+LETTER("letter")=39

File [modified]: sd_lexer.cpp
Delta lines: +34 -31
===================================================================
--- trunk/saga/impl/packages/sd/sd_lexer.cpp	2009-01-15 12:53:02 UTC (rev 3294)
+++ trunk/saga/impl/packages/sd/sd_lexer.cpp	2009-01-15 12:54:46 UTC (rev 3295)
@@ -1,4 +1,4 @@
-/* $ANTLR 2.7.7 (20080506): "sd_grammar.g" -> "sd_lexer.cpp"$ */
+/* $ANTLR 2.7.7 (20081210): "sd_grammar.g" -> "sd_lexer.cpp"$ */
 #include "sd_lexer.hpp"
 #include <antlr/CharBuffer.hpp>
 #include <antlr/TokenStreamException.hpp>
@@ -30,19 +30,22 @@
 
 void sd_lexer::initLiterals()
 {
-	literals["related_services"] = 16;
-	literals["type"] = 10;
-	literals["name"] = 11;
+	literals["related_services"] = 17;
+	literals["type"] = 11;
+	literals["name"] = 12;
 	literals["like"] = 5;
-	literals["site"] = 15;
+	literals["all"] = 18;
+	literals["site"] = 16;
 	literals["in"] = 4;
-	literals["or"] = 8;
-	literals["endpoint"] = 14;
-	literals["uid"] = 12;
-	literals["vo"] = 9;
-	literals["and"] = 7;
-	literals["not"] = 6;
-	literals["uri"] = 13;
+	literals["or"] = 9;
+	literals["endpoint"] = 15;
+	literals["uid"] = 13;
+	literals["escape"] = 6;
+	literals["vo"] = 10;
+	literals["and"] = 8;
+	literals["not"] = 7;
+	literals["uri"] = 14;
+	literals["any"] = 19;
 }
 
 ANTLR_USE_NAMESPACE(antlr)RefToken sd_lexer::nextToken()
@@ -216,9 +219,9 @@
 	}
 	}
 	}
-#line 232 "sd_grammar.g"
+#line 397 "sd_grammar.g"
 	_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP;
-#line 222 "sd_lexer.cpp"
+#line 225 "sd_lexer.cpp"
 	if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
 	   _token = makeToken(_ttype);
 	   _token->setText(text.substr(_begin, text.length()-_begin));
@@ -289,18 +292,18 @@
 	ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
 	
 	{ // ( ... )+
-	int _cnt47=0;
+	int _cnt57=0;
 	for (;;) {
 		if (((LA(1) >= 0x30 /* '0' */  && LA(1) <= 0x39 /* '9' */ ))) {
 			mDIGIT(false);
 		}
 		else {
-			if ( _cnt47>=1 ) { goto _loop47; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
+			if ( _cnt57>=1 ) { goto _loop57; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
 		}
 		
-		_cnt47++;
+		_cnt57++;
 	}
-	_loop47:;
+	_loop57:;
 	}  // ( ... )+
 	if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
 	   _token = makeToken(_ttype);
@@ -427,11 +430,11 @@
 			matchNot('\'' /* charlit */ );
 		}
 		else {
-			goto _loop56;
+			goto _loop66;
 		}
 		
 	}
-	_loop56:;
+	_loop66:;
 	} // ( ... )*
 	match('\'' /* charlit */ );
 	if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
@@ -465,18 +468,18 @@
 	case 0x3c /* '<' */ :
 	{
 		match('<' /* charlit */ );
-#line 255 "sd_grammar.g"
+#line 420 "sd_grammar.g"
 		_ttype = LESS;
-#line 471 "sd_lexer.cpp"
+#line 474 "sd_lexer.cpp"
 		{
 		switch ( LA(1)) {
 		case 0x3e /* '>' */ :
 		{
 			{
 			match('>' /* charlit */ );
-#line 256 "sd_grammar.g"
+#line 421 "sd_grammar.g"
 			_ttype = NE;
-#line 480 "sd_lexer.cpp"
+#line 483 "sd_lexer.cpp"
 			}
 			break;
 		}
@@ -484,9 +487,9 @@
 		{
 			{
 			match('=' /* charlit */ );
-#line 257 "sd_grammar.g"
+#line 422 "sd_grammar.g"
 			_ttype = LE;
-#line 490 "sd_lexer.cpp"
+#line 493 "sd_lexer.cpp"
 			}
 			break;
 		}
@@ -524,9 +527,9 @@
 	{
 	if ((LA(1) == 0x3d /* '=' */ )) {
 		match('=' /* charlit */ );
-#line 259 "sd_grammar.g"
+#line 424 "sd_grammar.g"
 		_ttype = GE;
-#line 530 "sd_lexer.cpp"
+#line 533 "sd_lexer.cpp"
 	}
 	else {
 	}
@@ -614,11 +617,11 @@
 		}
 		default:
 		{
-			goto _loop67;
+			goto _loop77;
 		}
 		}
 	}
-	_loop67:;
+	_loop77:;
 	} // ( ... )*
 	_ttype = testLiteralsTable(_ttype);
 	if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
@@ -633,6 +636,6 @@
 const unsigned long sd_lexer::_tokenSet_0_data_[] = { 4294967295UL, 4294967167UL, 4294967295UL, 4294967295UL, 0UL, 0UL, 0UL, 0UL };
 // 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 
 // 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 
-// 0x1f   ! \" # $ 
+// 0x1f   ! \" # $ % & 
 const ANTLR_USE_NAMESPACE(antlr)BitSet sd_lexer::_tokenSet_0(_tokenSet_0_data_,8);
 

File [modified]: sd_lexer.hpp
Delta lines: +12 -11
===================================================================
--- trunk/saga/impl/packages/sd/sd_lexer.hpp	2009-01-15 12:53:02 UTC (rev 3294)
+++ trunk/saga/impl/packages/sd/sd_lexer.hpp	2009-01-15 12:54:46 UTC (rev 3295)
@@ -2,27 +2,28 @@
 #define INC_sd_lexer_hpp_
 
 #include <antlr/config.hpp>
-/* $ANTLR 2.7.7 (20080506): "sd_grammar.g" -> "sd_lexer.hpp"$ */
+/* $ANTLR 2.7.7 (20081210): "sd_grammar.g" -> "sd_lexer.hpp"$ */
 #include <antlr/CommonToken.hpp>
 #include <antlr/InputBuffer.hpp>
 #include <antlr/BitSet.hpp>
 #include "sdTokenTypes.hpp"
 #include <antlr/CharScanner.hpp>
-#line 1 "sd_grammar.g"
+#line 2 "sd_grammar.g"
 
-  #include "sd_leafnode.hpp"
-  #include "sd_internalnode.hpp"
-  #include <iostream>
-  #include <string>
-  #include <list>
-  #include <math.h>
-  using namespace std;
+   #include "sd_leafnode.hpp"
+   #include "sd_internalnode.hpp"
+   #include <iostream>
+   #include <string>
+   #include <list>
+   #include <math.h>
+   #include <utility>
+   using namespace std;
 
-#line 22 "sd_lexer.hpp"
+#line 23 "sd_lexer.hpp"
 class CUSTOM_API sd_lexer : public ANTLR_USE_NAMESPACE(antlr)CharScanner, public sdTokenTypes
 {
 #line 1 "sd_grammar.g"
-#line 26 "sd_lexer.hpp"
+#line 27 "sd_lexer.hpp"
 private:
 	void initLiterals();
 public:

File [modified]: sd_parser.cpp
Delta lines: +688 -254
===================================================================
--- trunk/saga/impl/packages/sd/sd_parser.cpp	2009-01-15 12:53:02 UTC (rev 3294)
+++ trunk/saga/impl/packages/sd/sd_parser.cpp	2009-01-15 12:54:46 UTC (rev 3295)
@@ -1,4 +1,4 @@
-/* $ANTLR 2.7.7 (20080506): "sd_grammar.g" -> "sd_parser.cpp"$ */
+/* $ANTLR 2.7.7 (20081210): "sd_grammar.g" -> "sd_parser.cpp"$ */
 #include "sd_parser.hpp"
 #include <antlr/NoViableAltException.hpp>
 #include <antlr/SemanticException.hpp>
@@ -31,7 +31,7 @@
 }
 
 int  sd_parser::service_keyword() {
-#line 41 "sd_grammar.g"
+#line 49 "sd_grammar.g"
 	int tok_type = 0;
 #line 37 "sd_parser.cpp"
 	returnAST = ANTLR_USE_NAMESPACE(antlr)nullAST;
@@ -59,7 +59,7 @@
 			k1 = LT(1);
 			k1_AST = astFactory->create(k1);
 			match(K_TYPE);
-#line 42 "sd_grammar.g"
+#line 50 "sd_grammar.g"
 			tok_type = k1->getType();
 #line 65 "sd_parser.cpp"
 			break;
@@ -69,7 +69,7 @@
 			k2 = LT(1);
 			k2_AST = astFactory->create(k2);
 			match(K_NAME);
-#line 43 "sd_grammar.g"
+#line 51 "sd_grammar.g"
 			tok_type = k2->getType();
 #line 75 "sd_parser.cpp"
 			break;
@@ -79,7 +79,7 @@
 			k3 = LT(1);
 			k3_AST = astFactory->create(k3);
 			match(K_SITE);
-#line 44 "sd_grammar.g"
+#line 52 "sd_grammar.g"
 			tok_type = k3->getType();
 #line 85 "sd_parser.cpp"
 			break;
@@ -89,7 +89,7 @@
 			k4 = LT(1);
 			k4_AST = astFactory->create(k4);
 			match(K_ENDPOINT);
-#line 45 "sd_grammar.g"
+#line 53 "sd_grammar.g"
 			tok_type = k4->getType();
 #line 95 "sd_parser.cpp"
 			break;
@@ -99,7 +99,7 @@
 			k5 = LT(1);
 			k5_AST = astFactory->create(k5);
 			match(K_SERVICE);
-#line 46 "sd_grammar.g"
+#line 54 "sd_grammar.g"
 			tok_type = k5->getType();
 #line 105 "sd_parser.cpp"
 			break;
@@ -109,7 +109,7 @@
 			k6 = LT(1);
 			k6_AST = astFactory->create(k6);
 			match(K_UID);
-#line 47 "sd_grammar.g"
+#line 55 "sd_grammar.g"
 			tok_type = k6->getType();
 #line 115 "sd_parser.cpp"
 			break;
@@ -119,7 +119,7 @@
 			k7 = LT(1);
 			k7_AST = astFactory->create(k7);
 			match(K_URI);
-#line 48 "sd_grammar.g"
+#line 56 "sd_grammar.g"
 			tok_type = k7->getType();
 #line 125 "sd_parser.cpp"
 			break;
@@ -229,37 +229,70 @@
 	ANTLR_USE_NAMESPACE(antlr)RefAST service_expression_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)RefToken  rval = ANTLR_USE_NAMESPACE(antlr)nullToken;
 	ANTLR_USE_NAMESPACE(antlr)RefAST rval_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
-#line 57 "sd_grammar.g"
-	int knot=0; int lhs, op; string rhs, comp; Refsd_leafnode myRef; std::list<std::string> slist; std::string s;
-#line 235 "sd_parser.cpp"
+#line 65 "sd_grammar.g"
+	int knot = 0; int lhs; int op;
+	std::pair<std::string, char> rhs;
+	std::list<std::string> slist;
+	std::string s;
+	Refsd_leafnode myRef;
 	
+#line 240 "sd_parser.cpp"
+	
 	try {      // for error handling
+		{
 		if (((LA(1) >= K_TYPE && LA(1) <= K_SERVICE)) && (LA(2) == K_IN || LA(2) == K_NOT) && (LA(3) == K_IN || LA(3) == LPAREN)) {
 			lhs=service_keyword();
 			astFactory->addASTChild( currentAST, returnAST );
-			slist=in_clause(&knot);
+			{
+			switch ( LA(1)) {
+			case K_NOT:
+			{
+				match(K_NOT);
+#line 73 "sd_grammar.g"
+				knot=1;
+#line 254 "sd_parser.cpp"
+				break;
+			}
+			case K_IN:
+			{
+				break;
+			}
+			default:
+			{
+				throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+			}
+			}
+			}
+			match(K_IN);
+			slist=in_clause();
 			astFactory->addASTChild( currentAST, returnAST );
 			service_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
-#line 59 "sd_grammar.g"
+#line 74 "sd_grammar.g"
 			
-			service_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(SVC_CMP)))); 
-			myRef = (Refsd_leafnode)service_expression_AST;   
+			service_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(SVC_CMP))));
+			myRef = (Refsd_leafnode)service_expression_AST;
 			myRef->setLValue(lhs);
-						myRef->setOpType(K_IN);
-			//myRef->setList(&slist);
+			myRef->setOpType(K_IN);
+			myRef->setRValType(K_STRING_LIST);
+			
 			while (slist.size() > 0)
 			{
-			s = slist.front(); 
+			s = slist.front();
 			myRef->addListElement(s);
 			slist.pop_front();
 			}
-			if (knot)
-			myRef->setNotPrefix(); 
-			//std::cout << "front list element : " << myRef->frontListElement() << endl; 
-			//std::cout << "list size : " << myRef->getListSize() << endl; 
+			
+			if ( knot )
+			{
+			myRef->setNotPrefix();
+			}
+			//std::cout << "front list element : "
+			//          << myRef->frontListElement() << endl;
+			//std::cout << "list size : "
+			//          << myRef->getListSize() << endl;
 			//std::cout << "in clause parsed" << endl;
 			
-#line 263 "sd_parser.cpp"
+#line 296 "sd_parser.cpp"
 			currentAST.root = service_expression_AST;
 			if ( service_expression_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
 				service_expression_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
@@ -267,25 +300,52 @@
 			else
 				currentAST.child = service_expression_AST;
 			currentAST.advanceChildToEnd();
-			service_expression_AST = currentAST.root;
 		}
 		else if (((LA(1) >= K_TYPE && LA(1) <= K_SERVICE)) && (LA(2) == K_LIKE || LA(2) == K_NOT) && (LA(3) == K_LIKE || LA(3) == S_CHAR_LITERAL)) {
 			lhs=service_keyword();
 			astFactory->addASTChild( currentAST, returnAST );
-			rhs=like_clause(&knot);
+			{
+			switch ( LA(1)) {
+			case K_NOT:
+			{
+				match(K_NOT);
+#line 99 "sd_grammar.g"
+				knot = 1;
+#line 315 "sd_parser.cpp"
+				break;
+			}
+			case K_LIKE:
+			{
+				break;
+			}
+			default:
+			{
+				throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+			}
+			}
+			}
+			match(K_LIKE);
+			rhs=like_clause();
 			astFactory->addASTChild( currentAST, returnAST );
 			service_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
-#line 79 "sd_grammar.g"
+#line 100 "sd_grammar.g"
 			
-			service_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(SVC_CMP)))); 
-			myRef = (Refsd_leafnode)service_expression_AST;   
+			service_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(SVC_CMP))));
+			myRef = (Refsd_leafnode)service_expression_AST;
 			myRef->setLValue(lhs);
-						myRef->setOpType(K_LIKE);
-			myRef->setRValue(rhs);
-			if (knot)
+			myRef->setOpType(K_LIKE);
+			myRef->setRValue(rhs.first);
+			
+			//Set the escape character
+			//for the 'LIKE' clause
+			myRef->setEscapeChar(rhs.second);
+			
+			if ( knot )
+			{
 			myRef->setNotPrefix();
+			}
 			
-#line 289 "sd_parser.cpp"
+#line 349 "sd_parser.cpp"
 			currentAST.root = service_expression_AST;
 			if ( service_expression_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
 				service_expression_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
@@ -293,7 +353,6 @@
 			else
 				currentAST.child = service_expression_AST;
 			currentAST.advanceChildToEnd();
-			service_expression_AST = currentAST.root;
 		}
 		else if (((LA(1) >= K_TYPE && LA(1) <= K_SERVICE)) && (LA(2) == NE || LA(2) == EQ)) {
 			lhs=service_keyword();
@@ -304,10 +363,10 @@
 			rval_AST = astFactory->create(rval);
 			match(S_CHAR_LITERAL);
 			service_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
-#line 89 "sd_grammar.g"
+#line 118 "sd_grammar.g"
 			
-			service_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(SVC_CMP)))); 
-			myRef = (Refsd_leafnode)service_expression_AST;   
+			service_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(SVC_CMP))));
+			myRef = (Refsd_leafnode)service_expression_AST;
 			myRef->setLValue(lhs);
 			//std::cout << "keyword type " << lhs << endl;
 			myRef->setOpType(op);
@@ -315,7 +374,7 @@
 			myRef->setRValue(rval->getText());
 			//std::cout << "literal " << rval->getText() << endl;
 			
-#line 319 "sd_parser.cpp"
+#line 378 "sd_parser.cpp"
 			currentAST.root = service_expression_AST;
 			if ( service_expression_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
 				service_expression_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
@@ -323,19 +382,19 @@
 			else
 				currentAST.child = service_expression_AST;
 			currentAST.advanceChildToEnd();
-			service_expression_AST = currentAST.root;
 		}
 		else if ((LA(1) == LPAREN)) {
 			match(LPAREN);
 			service_filter_expression();
 			astFactory->addASTChild( currentAST, returnAST );
 			match(RPAREN);
-			service_expression_AST = currentAST.root;
 		}
 		else {
 			throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
 		}
 		
+		}
+		service_expression_AST = currentAST.root;
 	}
 	catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
 		reportError(ex);
@@ -344,75 +403,18 @@
 	returnAST = service_expression_AST;
 }
 
-std::list<std::string>  sd_parser::in_clause(
-	int *knot
-) {
-#line 110 "sd_grammar.g"
+std::list<std::string>  sd_parser::in_clause() {
+#line 157 "sd_grammar.g"
 	std::list<std::string> slist;
-#line 353 "sd_parser.cpp"
+#line 410 "sd_parser.cpp"
 	returnAST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)ASTPair currentAST;
 	ANTLR_USE_NAMESPACE(antlr)RefAST in_clause_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
-	ANTLR_USE_NAMESPACE(antlr)RefToken  lit = ANTLR_USE_NAMESPACE(antlr)nullToken;
-	ANTLR_USE_NAMESPACE(antlr)RefAST lit_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
-	ANTLR_USE_NAMESPACE(antlr)RefToken  lit2 = ANTLR_USE_NAMESPACE(antlr)nullToken;
-	ANTLR_USE_NAMESPACE(antlr)RefAST lit2_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
-#line 110 "sd_grammar.g"
-	string list;
-#line 363 "sd_parser.cpp"
 	
 	try {      // for error handling
-		{
-		switch ( LA(1)) {
-		case K_NOT:
-		{
-			match(K_NOT);
-#line 111 "sd_grammar.g"
-			*knot = 1;
-#line 373 "sd_parser.cpp"
-			break;
-		}
-		case K_IN:
-		{
-			break;
-		}
-		default:
-		{
-			throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
-		}
-		}
-		}
-		match(K_IN);
-		match(LPAREN);
-		lit = LT(1);
-		lit_AST = astFactory->create(lit);
-		match(S_CHAR_LITERAL);
-#line 113 "sd_grammar.g"
-		
-		slist.push_back(lit->getText()); 
-		
-#line 395 "sd_parser.cpp"
-		{ // ( ... )*
-		for (;;) {
-			if ((LA(1) == COMMA)) {
-				match(COMMA);
-				lit2 = LT(1);
-				lit2_AST = astFactory->create(lit2);
-				match(S_CHAR_LITERAL);
-#line 117 "sd_grammar.g"
-				
-				slist.push_back(lit2->getText()); 
-				
-#line 407 "sd_parser.cpp"
-			}
-			else {
-				goto _loop15;
-			}
-			
-		}
-		_loop15:;
-		} // ( ... )*
-		match(RPAREN);
+		slist=bracketed_list();
+		astFactory->addASTChild( currentAST, returnAST );
+		in_clause_AST = currentAST.root;
 	}
 	catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
 		reportError(ex);
@@ -422,32 +424,61 @@
 	return slist;
 }
 
-string  sd_parser::like_clause(
-	int *knot
-) {
-#line 102 "sd_grammar.g"
-	string s;
+pair<string, char>  sd_parser::like_clause() {
+#line 133 "sd_grammar.g"
+	pair<string, char> s;
 #line 431 "sd_parser.cpp"
 	returnAST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)ASTPair currentAST;
 	ANTLR_USE_NAMESPACE(antlr)RefAST like_clause_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)RefToken  rhs = ANTLR_USE_NAMESPACE(antlr)nullToken;
 	ANTLR_USE_NAMESPACE(antlr)RefAST rhs_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+	ANTLR_USE_NAMESPACE(antlr)RefToken  esc = ANTLR_USE_NAMESPACE(antlr)nullToken;
+	ANTLR_USE_NAMESPACE(antlr)RefAST esc_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	
 	try {      // for error handling
+		rhs = LT(1);
+		rhs_AST = astFactory->create(rhs);
+		match(S_CHAR_LITERAL);
+#line 135 "sd_grammar.g"
+		
+		s.first = rhs->getText();
+		s.second = '\0';
+		
+#line 449 "sd_parser.cpp"
 		{
 		switch ( LA(1)) {
-		case K_NOT:
+		case K_ESCAPE:
 		{
-			ANTLR_USE_NAMESPACE(antlr)RefAST tmp10_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
-			tmp10_AST = astFactory->create(LT(1));
-			match(K_NOT);
-#line 103 "sd_grammar.g"
-			*knot = 1;
-#line 448 "sd_parser.cpp"
+			ANTLR_USE_NAMESPACE(antlr)RefAST tmp9_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+			tmp9_AST = astFactory->create(LT(1));
+			astFactory->addASTChild(currentAST, tmp9_AST);
+			match(K_ESCAPE);
+			esc = LT(1);
+			esc_AST = astFactory->create(esc);
+			match(S_CHAR_LITERAL);
+#line 140 "sd_grammar.g"
+			
+			//Check there are at least three characters
+			//to allow for the quotes
+			if ( esc->getText().size() > 2 )
+			{
+			//Character [1] to allow for the quote
+			s.second = esc->getText()[1];
+			}
+			
+			else
+			{
+			s.second = '\0';
+			}
+			
+#line 476 "sd_parser.cpp"
 			break;
 		}
-		case K_LIKE:
+		case ANTLR_USE_NAMESPACE(antlr)Token::EOF_TYPE:
+		case K_AND:
+		case K_OR:
+		case RPAREN:
 		{
 			break;
 		}
@@ -457,17 +488,7 @@
 		}
 		}
 		}
-		ANTLR_USE_NAMESPACE(antlr)RefAST tmp11_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
-		tmp11_AST = astFactory->create(LT(1));
-		match(K_LIKE);
-		rhs = LT(1);
-		rhs_AST = astFactory->create(rhs);
-		match(S_CHAR_LITERAL);
-#line 105 "sd_grammar.g"
-		
-				   s = rhs->getText();
-		
-#line 471 "sd_parser.cpp"
+		like_clause_AST = currentAST.root;
 	}
 	catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
 		reportError(ex);
@@ -478,9 +499,9 @@
 }
 
 int  sd_parser::eqop() {
-#line 189 "sd_grammar.g"
+#line 270 "sd_grammar.g"
 	int tok_type = 0;
-#line 484 "sd_parser.cpp"
+#line 505 "sd_parser.cpp"
 	returnAST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)ASTPair currentAST;
 	ANTLR_USE_NAMESPACE(antlr)RefAST eqop_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
@@ -496,9 +517,10 @@
 			o1 = LT(1);
 			o1_AST = astFactory->create(o1);
 			match(NE);
-#line 189 "sd_grammar.g"
+#line 271 "sd_grammar.g"
 			tok_type = o1->getType();
-#line 502 "sd_parser.cpp"
+#line 523 "sd_parser.cpp"
+			eqop_AST = currentAST.root;
 			break;
 		}
 		case EQ:
@@ -506,9 +528,10 @@
 			o2 = LT(1);
 			o2_AST = astFactory->create(o2);
 			match(EQ);
-#line 190 "sd_grammar.g"
+#line 272 "sd_grammar.g"
 			tok_type = o2->getType();
-#line 512 "sd_parser.cpp"
+#line 534 "sd_parser.cpp"
+			eqop_AST = currentAST.root;
 			break;
 		}
 		default:
@@ -525,6 +548,109 @@
 	return tok_type;
 }
 
+std::list<std::string>  sd_parser::bracketed_list() {
+#line 163 "sd_grammar.g"
+	std::list<std::string> slist;
+#line 555 "sd_parser.cpp"
+	returnAST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+	ANTLR_USE_NAMESPACE(antlr)ASTPair currentAST;
+	ANTLR_USE_NAMESPACE(antlr)RefAST bracketed_list_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+	ANTLR_USE_NAMESPACE(antlr)RefToken  lit = ANTLR_USE_NAMESPACE(antlr)nullToken;
+	ANTLR_USE_NAMESPACE(antlr)RefAST lit_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+	ANTLR_USE_NAMESPACE(antlr)RefToken  num = ANTLR_USE_NAMESPACE(antlr)nullToken;
+	ANTLR_USE_NAMESPACE(antlr)RefAST num_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+	ANTLR_USE_NAMESPACE(antlr)RefToken  lit2 = ANTLR_USE_NAMESPACE(antlr)nullToken;
+	ANTLR_USE_NAMESPACE(antlr)RefAST lit2_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+	ANTLR_USE_NAMESPACE(antlr)RefToken  num2 = ANTLR_USE_NAMESPACE(antlr)nullToken;
+	ANTLR_USE_NAMESPACE(antlr)RefAST num2_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+	
+	try {      // for error handling
+		ANTLR_USE_NAMESPACE(antlr)RefAST tmp10_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+		tmp10_AST = astFactory->create(LT(1));
+		astFactory->addASTChild(currentAST, tmp10_AST);
+		match(LPAREN);
+		{
+		switch ( LA(1)) {
+		case S_CHAR_LITERAL:
+		{
+			lit = LT(1);
+			lit_AST = astFactory->create(lit);
+			match(S_CHAR_LITERAL);
+#line 166 "sd_grammar.g"
+			slist.push_back(lit->getText());
+#line 582 "sd_parser.cpp"
+			break;
+		}
+		case S_NUMBER:
+		{
+			num = LT(1);
+			num_AST = astFactory->create(num);
+			match(S_NUMBER);
+#line 167 "sd_grammar.g"
+			slist.push_back(num->getText());
+#line 592 "sd_parser.cpp"
+			break;
+		}
+		default:
+		{
+			throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+		}
+		}
+		}
+		{ // ( ... )*
+		for (;;) {
+			if ((LA(1) == COMMA)) {
+				match(COMMA);
+				{
+				switch ( LA(1)) {
+				case S_CHAR_LITERAL:
+				{
+					lit2 = LT(1);
+					lit2_AST = astFactory->create(lit2);
+					match(S_CHAR_LITERAL);
+#line 169 "sd_grammar.g"
+					slist.push_back(lit2->getText());
+#line 614 "sd_parser.cpp"
+					break;
+				}
+				case S_NUMBER:
+				{
+					num2 = LT(1);
+					num2_AST = astFactory->create(num2);
+					match(S_NUMBER);
+#line 170 "sd_grammar.g"
+					slist.push_back(num2->getText());
+#line 624 "sd_parser.cpp"
+					break;
+				}
+				default:
+				{
+					throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+				}
+				}
+				}
+			}
+			else {
+				goto _loop20;
+			}
+			
+		}
+		_loop20:;
+		} // ( ... )*
+		ANTLR_USE_NAMESPACE(antlr)RefAST tmp12_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+		tmp12_AST = astFactory->create(LT(1));
+		astFactory->addASTChild(currentAST, tmp12_AST);
+		match(RPAREN);
+		bracketed_list_AST = currentAST.root;
+	}
+	catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
+		reportError(ex);
+		recover(ex,_tokenSet_4);
+	}
+	returnAST = bracketed_list_AST;
+	return slist;
+}
+
 void sd_parser::string_literal_list() {
 	returnAST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)ASTPair currentAST;
@@ -545,21 +671,21 @@
 				lit2 = LT(1);
 				lit2_AST = astFactory->create(lit2);
 				match(S_CHAR_LITERAL);
-#line 130 "sd_grammar.g"
+#line 181 "sd_grammar.g"
 				
-				//s = s + "," + lit2->getText(); 
+				//s = s + "," + lit2->getText();
 				//std::cout << myRef->getListSize() <<endl;
 				//myRef->addListElement(lit2->getText());
 				//std::cout << lit2->getText() <<endl;
 				
-#line 556 "sd_parser.cpp"
+#line 682 "sd_parser.cpp"
 			}
 			else {
-				goto _loop18;
+				goto _loop23;
 			}
 			
 		}
-		_loop18:;
+		_loop23:;
 		} // ( ... )*
 	}
 	catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@@ -597,19 +723,19 @@
 		{ // ( ... )*
 		for (;;) {
 			if ((LA(1) == K_OR)) {
-				Refsd_internalnode tmp13_AST = Refsd_internalnode(ANTLR_USE_NAMESPACE(antlr)nullAST);
-				tmp13_AST = astFactory->create(LT(1));
-				astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp13_AST));
+				Refsd_internalnode tmp14_AST = Refsd_internalnode(ANTLR_USE_NAMESPACE(antlr)nullAST);
+				tmp14_AST = astFactory->create(LT(1));
+				astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp14_AST));
 				match(K_OR);
 				vo_and_expression();
 				astFactory->addASTChild( currentAST, returnAST );
 			}
 			else {
-				goto _loop22;
+				goto _loop27;
 			}
 			
 		}
-		_loop22:;
+		_loop27:;
 		} // ( ... )*
 		vo_filter_expression_AST = currentAST.root;
 	}
@@ -631,19 +757,19 @@
 		{ // ( ... )*
 		for (;;) {
 			if ((LA(1) == K_AND)) {
-				Refsd_internalnode tmp14_AST = Refsd_internalnode(ANTLR_USE_NAMESPACE(antlr)nullAST);
-				tmp14_AST = astFactory->create(LT(1));
-				astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp14_AST));
+				Refsd_internalnode tmp15_AST = Refsd_internalnode(ANTLR_USE_NAMESPACE(antlr)nullAST);
+				tmp15_AST = astFactory->create(LT(1));
+				astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp15_AST));
 				match(K_AND);
 				vo_expression();
 				astFactory->addASTChild( currentAST, returnAST );
 			}
 			else {
-				goto _loop25;
+				goto _loop30;
 			}
 			
 		}
-		_loop25:;
+		_loop30:;
 		} // ( ... )*
 		vo_and_expression_AST = currentAST.root;
 	}
@@ -660,33 +786,68 @@
 	ANTLR_USE_NAMESPACE(antlr)RefAST vo_expression_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)RefToken  rval = ANTLR_USE_NAMESPACE(antlr)nullToken;
 	ANTLR_USE_NAMESPACE(antlr)RefAST rval_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
-#line 148 "sd_grammar.g"
-	int knot=0; int op; string rhs, comp; Refsd_leafnode myRef; list<string> slist; string s;
-#line 666 "sd_parser.cpp"
+#line 198 "sd_grammar.g"
 	
+	int knot = 0;
+	int op;
+	string rhs;
+	string comp;
+	string s;
+	Refsd_leafnode myRef;
+	list<string> slist;
+	std::pair<std::string, char> rhsLike;
+	
+#line 801 "sd_parser.cpp"
+	
 	try {      // for error handling
-		if ((LA(1) == K_VO) && (LA(2) == K_IN || LA(2) == K_NOT)) {
+		if ((LA(1) == K_VO) && (LA(2) == K_IN || LA(2) == K_NOT) && (LA(3) == K_IN || LA(3) == LPAREN)) {
 			match(K_VO);
-			slist=in_clause(&knot);
+			{
+			switch ( LA(1)) {
+			case K_NOT:
+			{
+				match(K_NOT);
+#line 209 "sd_grammar.g"
+				knot=1;
+#line 813 "sd_parser.cpp"
+				break;
+			}
+			case K_IN:
+			{
+				break;
+			}
+			default:
+			{
+				throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+			}
+			}
+			}
+			match(K_IN);
+			slist=in_clause();
 			astFactory->addASTChild( currentAST, returnAST );
 			vo_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
-#line 150 "sd_grammar.g"
+#line 210 "sd_grammar.g"
 			
 			vo_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(SVC_CMP))));
 			myRef = (Refsd_leafnode)vo_expression_AST;
 			myRef->setLValue(K_VO);
 			myRef->setOpType(K_IN);
-			while (slist.size() > 0)
+			myRef->setRValType(K_STRING_LIST);
+			
+			while ( slist.size() > 0 )
 			{
 			s = slist.front();
 			myRef->addListElement(s);
 			slist.pop_front();
 			}
-			if (knot)
+			
+			if ( knot )
+			{
 			myRef->setNotPrefix();
+			}
 			
 			
-#line 690 "sd_parser.cpp"
+#line 851 "sd_parser.cpp"
 			currentAST.root = vo_expression_AST;
 			if ( vo_expression_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
 				vo_expression_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
@@ -696,6 +857,62 @@
 			currentAST.advanceChildToEnd();
 			vo_expression_AST = currentAST.root;
 		}
+		else if ((LA(1) == K_VO) && (LA(2) == K_LIKE || LA(2) == K_NOT) && (LA(3) == K_LIKE || LA(3) == S_CHAR_LITERAL)) {
+			match(K_VO);
+			{
+			switch ( LA(1)) {
+			case K_NOT:
+			{
+				match(K_NOT);
+#line 230 "sd_grammar.g"
+				knot = 1;
+#line 870 "sd_parser.cpp"
+				break;
+			}
+			case K_LIKE:
+			{
+				break;
+			}
+			default:
+			{
+				throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+			}
+			}
+			}
+			ANTLR_USE_NAMESPACE(antlr)RefAST tmp21_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+			tmp21_AST = astFactory->create(LT(1));
+			astFactory->addASTChild(currentAST, tmp21_AST);
+			match(K_LIKE);
+			rhsLike=like_clause();
+			astFactory->addASTChild( currentAST, returnAST );
+			vo_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
+#line 231 "sd_grammar.g"
+			
+			vo_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(SVC_CMP))));
+			myRef = (Refsd_leafnode)vo_expression_AST;
+			myRef->setLValue(K_VO);
+			myRef->setOpType(K_LIKE);
+			myRef->setRValue(rhsLike.first);
+			
+			//Set the escape character
+			//for the 'LIKE' clause
+			myRef->setEscapeChar(rhsLike.second);
+			
+			if ( knot )
+			{
+			myRef->setNotPrefix();
+			}
+			
+#line 907 "sd_parser.cpp"
+			currentAST.root = vo_expression_AST;
+			if ( vo_expression_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
+				vo_expression_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
+				  currentAST.child = vo_expression_AST->getFirstChild();
+			else
+				currentAST.child = vo_expression_AST;
+			currentAST.advanceChildToEnd();
+			vo_expression_AST = currentAST.root;
+		}
 		else if ((LA(1) == K_VO) && (LA(2) == NE || LA(2) == EQ)) {
 			match(K_VO);
 			op=eqop();
@@ -704,15 +921,15 @@
 			rval_AST = astFactory->create(rval);
 			match(S_CHAR_LITERAL);
 			vo_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
-#line 166 "sd_grammar.g"
+#line 248 "sd_grammar.g"
 			
 			vo_expression_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(SVC_CMP))));
 			myRef = (Refsd_leafnode)vo_expression_AST;
 			myRef->setLValue(K_VO);
 			myRef->setOpType(op);
-					 myRef->setRValue(rval->getText());
+			myRef->setRValue(rval->getText());
 			
-#line 716 "sd_parser.cpp"
+#line 933 "sd_parser.cpp"
 			currentAST.root = vo_expression_AST;
 			if ( vo_expression_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
 				vo_expression_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
@@ -722,8 +939,8 @@
 			currentAST.advanceChildToEnd();
 			vo_expression_AST = currentAST.root;
 		}
-		else if ((LA(1) == LPARAN)) {
-			match(LPARAN);
+		else if ((LA(1) == LPAREN)) {
+			match(LPAREN);
 			vo_filter_expression();
 			astFactory->addASTChild( currentAST, returnAST );
 			match(RPAREN);
@@ -769,19 +986,19 @@
 		{ // ( ... )*
 		for (;;) {
 			if ((LA(1) == K_OR)) {
-				Refsd_internalnode tmp19_AST = Refsd_internalnode(ANTLR_USE_NAMESPACE(antlr)nullAST);
-				tmp19_AST = astFactory->create(LT(1));
-				astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp19_AST));
+				Refsd_internalnode tmp25_AST = Refsd_internalnode(ANTLR_USE_NAMESPACE(antlr)nullAST);
+				tmp25_AST = astFactory->create(LT(1));
+				astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp25_AST));
 				match(K_OR);
 				data_and_expression();
 				astFactory->addASTChild( currentAST, returnAST );
 			}
 			else {
-				goto _loop30;
+				goto _loop37;
 			}
 			
 		}
-		_loop30:;
+		_loop37:;
 		} // ( ... )*
 		data_filter_expression_AST = currentAST.root;
 	}
@@ -803,19 +1020,19 @@
 		{ // ( ... )*
 		for (;;) {
 			if ((LA(1) == K_AND)) {
-				Refsd_internalnode tmp20_AST = Refsd_internalnode(ANTLR_USE_NAMESPACE(antlr)nullAST);
-				tmp20_AST = astFactory->create(LT(1));
-				astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp20_AST));
+				Refsd_internalnode tmp26_AST = Refsd_internalnode(ANTLR_USE_NAMESPACE(antlr)nullAST);
+				tmp26_AST = astFactory->create(LT(1));
+				astFactory->makeASTRoot(currentAST, ANTLR_USE_NAMESPACE(antlr)RefAST(tmp26_AST));
 				match(K_AND);
 				data_expression();
 				astFactory->addASTChild( currentAST, returnAST );
 			}
 			else {
-				goto _loop33;
+				goto _loop40;
 			}
 			
 		}
-		_loop33:;
+		_loop40:;
 		} // ( ... )*
 		data_and_expression_AST = currentAST.root;
 	}
@@ -833,6 +1050,8 @@
 	
 	try {      // for error handling
 		switch ( LA(1)) {
+		case K_ALL:
+		case K_ANY:
 		case S_IDENTIFIER:
 		{
 			data_comparison();
@@ -868,73 +1087,285 @@
 	ANTLR_USE_NAMESPACE(antlr)RefAST data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)RefToken  lhs = ANTLR_USE_NAMESPACE(antlr)nullToken;
 	ANTLR_USE_NAMESPACE(antlr)RefAST lhs_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+	ANTLR_USE_NAMESPACE(antlr)RefToken  lhs0 = ANTLR_USE_NAMESPACE(antlr)nullToken;
+	ANTLR_USE_NAMESPACE(antlr)RefAST lhs0_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+	ANTLR_USE_NAMESPACE(antlr)RefToken  lhs1 = ANTLR_USE_NAMESPACE(antlr)nullToken;
+	ANTLR_USE_NAMESPACE(antlr)RefAST lhs1_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)RefToken  lit = ANTLR_USE_NAMESPACE(antlr)nullToken;
 	ANTLR_USE_NAMESPACE(antlr)RefAST lit_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)RefToken  num = ANTLR_USE_NAMESPACE(antlr)nullToken;
 	ANTLR_USE_NAMESPACE(antlr)RefAST num_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
-#line 201 "sd_grammar.g"
-	int op; int rhs1 = 0; double dval; Refsd_leafnode myRef;
-#line 878 "sd_parser.cpp"
+	ANTLR_USE_NAMESPACE(antlr)RefToken  lhs2 = ANTLR_USE_NAMESPACE(antlr)nullToken;
+	ANTLR_USE_NAMESPACE(antlr)RefAST lhs2_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+#line 284 "sd_grammar.g"
 	
+	bool allVal = false;
+	bool anyVal = false;
+	int op; int rhs1 = 0; int knot = 0;
+	double dval;
+	Refsd_leafnode myRef;
+	std::list<std::string> slist;
+	std::string s;
+	std::pair<std::string, char> likePair;
+	std::string likeString;
+	
+#line 1113 "sd_parser.cpp"
+	
 	try {      // for error handling
-		lhs = LT(1);
-		lhs_AST = astFactory->create(lhs);
-		match(S_IDENTIFIER);
-		op=relop();
-		astFactory->addASTChild( currentAST, returnAST );
-		{
-		switch ( LA(1)) {
-		case S_CHAR_LITERAL:
-		{
-			lit = LT(1);
-			lit_AST = astFactory->create(lit);
-			match(S_CHAR_LITERAL);
-#line 202 "sd_grammar.g"
-			rhs1 = 1;
-#line 895 "sd_parser.cpp"
-			break;
+		if ((LA(1) == K_ALL || LA(1) == K_ANY || LA(1) == S_IDENTIFIER) && (LA(2) == K_IN || LA(2) == K_NOT || LA(2) == S_IDENTIFIER) && (LA(3) == K_IN || LA(3) == K_NOT || LA(3) == LPAREN)) {
+			{
+			switch ( LA(1)) {
+			case K_ANY:
+			{
+				match(K_ANY);
+#line 297 "sd_grammar.g"
+				anyVal = true;
+#line 1124 "sd_parser.cpp"
+				break;
+			}
+			case K_ALL:
+			{
+				match(K_ALL);
+#line 298 "sd_grammar.g"
+				allVal = true;
+#line 1132 "sd_parser.cpp"
+				break;
+			}
+			case S_IDENTIFIER:
+			{
+				break;
+			}
+			default:
+			{
+				throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+			}
+			}
+			}
+			lhs = LT(1);
+			lhs_AST = astFactory->create(lhs);
+			match(S_IDENTIFIER);
+			{
+			switch ( LA(1)) {
+			case K_NOT:
+			{
+				match(K_NOT);
+#line 300 "sd_grammar.g"
+				knot=1;
+#line 1155 "sd_parser.cpp"
+				break;
+			}
+			case K_IN:
+			{
+				break;
+			}
+			default:
+			{
+				throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+			}
+			}
+			}
+			match(K_IN);
+			slist=in_clause();
+			astFactory->addASTChild( currentAST, returnAST );
+			data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
+#line 301 "sd_grammar.g"
+			
+			//Deal with the 'IN' oerator
+			data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(DATA_CMP))));
+			myRef = (Refsd_leafnode)data_comparison_AST;
+			myRef->setLKey(lhs->getText());
+			myRef->setOpType(K_IN);
+			myRef->setRValType(K_STRING_LIST);
+			
+			//Add everything in the 'IN' list to this element
+			while ( slist.size() > 0 )
+			{
+			s = slist.front();
+			myRef->addListElement(s);
+			slist.pop_front();
+			}
+			
+			//Deal with the NOT condition
+			if ( knot )
+			{
+			myRef->setNotPrefix();
+			}
+			
+#line 1195 "sd_parser.cpp"
+			currentAST.root = data_comparison_AST;
+			if ( data_comparison_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
+				data_comparison_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
+				  currentAST.child = data_comparison_AST->getFirstChild();
+			else
+				currentAST.child = data_comparison_AST;
+			currentAST.advanceChildToEnd();
+			data_comparison_AST = currentAST.root;
 		}
-		case S_NUMBER:
-		{
-			num = LT(1);
-			num_AST = astFactory->create(num);
-			match(S_NUMBER);
-			break;
+		else if ((LA(1) == S_IDENTIFIER) && (LA(2) == K_LIKE || LA(2) == K_NOT) && (LA(3) == K_LIKE || LA(3) == S_CHAR_LITERAL)) {
+			lhs0 = LT(1);
+			lhs0_AST = astFactory->create(lhs0);
+			astFactory->addASTChild(currentAST, lhs0_AST);
+			match(S_IDENTIFIER);
+			{
+			switch ( LA(1)) {
+			case K_NOT:
+			{
+				match(K_NOT);
+#line 324 "sd_grammar.g"
+				knot = 1;
+#line 1217 "sd_parser.cpp"
+				break;
+			}
+			case K_LIKE:
+			{
+				break;
+			}
+			default:
+			{
+				throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+			}
+			}
+			}
+			ANTLR_USE_NAMESPACE(antlr)RefAST tmp34_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
+			tmp34_AST = astFactory->create(LT(1));
+			astFactory->addASTChild(currentAST, tmp34_AST);
+			match(K_LIKE);
+			likePair=like_clause();
+			astFactory->addASTChild( currentAST, returnAST );
+			data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
+#line 325 "sd_grammar.g"
+			
+			//Deal with the 'LIKE' oerator
+			likeString = likePair.first;
+			data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(DATA_CMP))));
+			myRef = (Refsd_leafnode)data_comparison_AST;
+			myRef->setLKey(lhs0->getText());
+			myRef->setOpType(K_LIKE);
+			myRef->setRValue(likeString);
+			
+			//Set the escape character
+			//for the 'LIKE' clause
+			myRef->setEscapeChar(likePair.second);
+			
+			//Deal with the NOT condition
+			if ( knot )
+			{
+			myRef->setNotPrefix();
+			}
+			
+#line 1257 "sd_parser.cpp"
+			currentAST.root = data_comparison_AST;
+			if ( data_comparison_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
+				data_comparison_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
+				  currentAST.child = data_comparison_AST->getFirstChild();
+			else
+				currentAST.child = data_comparison_AST;
+			currentAST.advanceChildToEnd();
+			data_comparison_AST = currentAST.root;
 		}
-		default:
-		{
-			throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+		else if ((LA(1) == S_IDENTIFIER) && ((LA(2) >= NE && LA(2) <= GE)) && (LA(3) == S_CHAR_LITERAL || LA(3) == S_NUMBER)) {
+			lhs1 = LT(1);
+			lhs1_AST = astFactory->create(lhs1);
+			match(S_IDENTIFIER);
+			op=relop();
+			astFactory->addASTChild( currentAST, returnAST );
+			{
+			switch ( LA(1)) {
+			case S_CHAR_LITERAL:
+			{
+				lit = LT(1);
+				lit_AST = astFactory->create(lit);
+				match(S_CHAR_LITERAL);
+#line 345 "sd_grammar.g"
+				rhs1 = 1;
+#line 1282 "sd_parser.cpp"
+				break;
+			}
+			case S_NUMBER:
+			{
+				num = LT(1);
+				num_AST = astFactory->create(num);
+				match(S_NUMBER);
+				break;
+			}
+			default:
+			{
+				throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
+			}
+			}
+			}
+			data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
+#line 346 "sd_grammar.g"
+			
+			//Deal with the remaining operators
+			data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(DATA_CMP))));
+			myRef = (Refsd_leafnode)data_comparison_AST;
+			myRef->setLKey(lhs1->getText());
+			myRef->setOpType(op);
+			
+			if ( rhs1 )
+			{
+			myRef->setRValType(S_CHAR_LITERAL);
+			myRef->setRValue(lit->getText());
+			}
+			
+			else
+			{
+			myRef->setRValType(S_NUMBER);
+			dval = atof(num->getText().c_str());
+			myRef->setRValNum(dval);
+			}
+			
+#line 1320 "sd_parser.cpp"
+			currentAST.root = data_comparison_AST;
+			if ( data_comparison_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
+				data_comparison_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
+				  currentAST.child = data_comparison_AST->getFirstChild();
+			else
+				currentAST.child = data_comparison_AST;
+			currentAST.advanceChildToEnd();
+			data_comparison_AST = currentAST.root;
 		}
+		else if ((LA(1) == S_IDENTIFIER) && (LA(2) == NE || LA(2) == EQ) && (LA(3) == LPAREN)) {
+			lhs2 = LT(1);
+			lhs2_AST = astFactory->create(lhs2);
+			match(S_IDENTIFIER);
+			op=eqop();
+			astFactory->addASTChild( currentAST, returnAST );
+			slist=bracketed_list();
+			astFactory->addASTChild( currentAST, returnAST );
+			data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
+#line 368 "sd_grammar.g"
+			
+			//Deal with the remaining operators
+			data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(DATA_CMP))));
+			myRef = (Refsd_leafnode)data_comparison_AST;
+			myRef->setLKey(lhs2->getText());
+			myRef->setOpType(op);
+			myRef->setRValType(K_STRING_LIST);
+			
+			//Add everything in the 'IN' list to this element
+			while ( slist.size() > 0 )
+			{
+			s = slist.front();
+			myRef->addListElement(s);
+			slist.pop_front();
+			}
+			
+#line 1356 "sd_parser.cpp"
+			currentAST.root = data_comparison_AST;
+			if ( data_comparison_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
+				data_comparison_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
+				  currentAST.child = data_comparison_AST->getFirstChild();
+			else
+				currentAST.child = data_comparison_AST;
+			currentAST.advanceChildToEnd();
+			data_comparison_AST = currentAST.root;
 		}
+		else {
+			throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
 		}
-		data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(currentAST.root);
-#line 203 "sd_grammar.g"
 		
-						data_comparison_AST = ANTLR_USE_NAMESPACE(antlr)RefAST(astFactory->make((new ANTLR_USE_NAMESPACE(antlr)ASTArray(1))->add(astFactory->create(DATA_CMP))));
-		myRef = (Refsd_leafnode)data_comparison_AST;
-		myRef->setLKey(lhs->getText());
-		myRef->setOpType(op);
-		if (rhs1)
-		{
-		myRef->setRValType(S_CHAR_LITERAL);
-						     myRef->setRValue(lit->getText());
-		}
-						else
-		{
-		myRef->setRValType(S_NUMBER);
-						     dval = atof(num->getText().c_str());
-		myRef->setRValNum(dval);
-		}
-					
-#line 930 "sd_parser.cpp"
-		currentAST.root = data_comparison_AST;
-		if ( data_comparison_AST!=ANTLR_USE_NAMESPACE(antlr)nullAST &&
-			data_comparison_AST->getFirstChild() != ANTLR_USE_NAMESPACE(antlr)nullAST )
-			  currentAST.child = data_comparison_AST->getFirstChild();
-		else
-			currentAST.child = data_comparison_AST;
-		currentAST.advanceChildToEnd();
-		data_comparison_AST = currentAST.root;
 	}
 	catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
 		reportError(ex);
@@ -944,9 +1375,9 @@
 }
 
 int  sd_parser::relop() {
-#line 193 "sd_grammar.g"
+#line 275 "sd_grammar.g"
 	int tok_type = 0;
-#line 950 "sd_parser.cpp"
+#line 1381 "sd_parser.cpp"
 	returnAST = ANTLR_USE_NAMESPACE(antlr)nullAST;
 	ANTLR_USE_NAMESPACE(antlr)ASTPair currentAST;
 	ANTLR_USE_NAMESPACE(antlr)RefAST relop_AST = ANTLR_USE_NAMESPACE(antlr)nullAST;
@@ -970,9 +1401,9 @@
 			o1 = LT(1);
 			o1_AST = astFactory->create(o1);
 			match(EQ);
-#line 193 "sd_grammar.g"
+#line 276 "sd_grammar.g"
 			tok_type = o1->getType();
-#line 976 "sd_parser.cpp"
+#line 1407 "sd_parser.cpp"
 			break;
 		}
 		case LESS:
@@ -980,9 +1411,9 @@
 			o2 = LT(1);
 			o2_AST = astFactory->create(o2);
 			match(LESS);
-#line 194 "sd_grammar.g"
+#line 277 "sd_grammar.g"
 			tok_type = o2->getType();
-#line 986 "sd_parser.cpp"
+#line 1417 "sd_parser.cpp"
 			break;
 		}
 		case GT:
@@ -990,9 +1421,9 @@
 			o3 = LT(1);
 			o3_AST = astFactory->create(o3);
 			match(GT);
-#line 195 "sd_grammar.g"
+#line 278 "sd_grammar.g"
 			tok_type = o3->getType();
-#line 996 "sd_parser.cpp"
+#line 1427 "sd_parser.cpp"
 			break;
 		}
 		case NE:
@@ -1000,9 +1431,9 @@
 			o4 = LT(1);
 			o4_AST = astFactory->create(o4);
 			match(NE);
-#line 196 "sd_grammar.g"
+#line 279 "sd_grammar.g"
 			tok_type = o4->getType();
-#line 1006 "sd_parser.cpp"
+#line 1437 "sd_parser.cpp"
 			break;
 		}
 		case LE:
@@ -1010,9 +1441,9 @@
 			o5 = LT(1);
 			o5_AST = astFactory->create(o5);
 			match(LE);
-#line 197 "sd_grammar.g"
+#line 280 "sd_grammar.g"
 			tok_type = o5->getType();
-#line 1016 "sd_parser.cpp"
+#line 1447 "sd_parser.cpp"
 			break;
 		}
 		case GE:
@@ -1020,9 +1451,9 @@
 			o6 = LT(1);
 			o6_AST = astFactory->create(o6);
 			match(GE);
-#line 198 "sd_grammar.g"
+#line 281 "sd_grammar.g"
 			tok_type = o6->getType();
-#line 1026 "sd_parser.cpp"
+#line 1457 "sd_parser.cpp"
 			break;
 		}
 		default:
@@ -1041,11 +1472,11 @@
 
 void sd_parser::initializeASTFactory( ANTLR_USE_NAMESPACE(antlr)ASTFactory& factory )
 {
-	factory.registerFactory(7, "sd_internalnode", sd_internalnode::factory);
 	factory.registerFactory(8, "sd_internalnode", sd_internalnode::factory);
-	factory.registerFactory(17, "sd_leafnode", sd_leafnode::factory);
-	factory.registerFactory(18, "sd_leafnode", sd_leafnode::factory);
-	factory.setMaxNodeType(36);
+	factory.registerFactory(9, "sd_internalnode", sd_internalnode::factory);
+	factory.registerFactory(21, "sd_leafnode", sd_leafnode::factory);
+	factory.registerFactory(22, "sd_leafnode", sd_leafnode::factory);
+	factory.setMaxNodeType(39);
 }
 const char* sd_parser::tokenNames[] = {
 	"<0>",
@@ -1054,6 +1485,7 @@
 	"NULL_TREE_LOOKAHEAD",
 	"\"in\"",
 	"\"like\"",
+	"\"escape\"",
 	"\"not\"",
 	"\"and\"",
 	"\"or\"",
@@ -1065,13 +1497,16 @@
 	"\"endpoint\"",
 	"\"site\"",
 	"\"related_services\"",
+	"\"all\"",
+	"\"any\"",
+	"K_STRING_LIST",
 	"SVC_CMP",
 	"DATA_CMP",
 	"char literal",
 	"left parenthesis",
 	"right parenthesis",
+	"number",
 	"comma",
-	"LPARAN",
 	"not equals",
 	"equals",
 	"LESS",
@@ -1079,7 +1514,6 @@
 	"LE",
 	"GE",
 	"identifier",
-	"number",
 	"white space",
 	"digit",
 	"integer",
@@ -1088,25 +1522,25 @@
 	0
 };
 
-const unsigned long sd_parser::_tokenSet_0_data_[] = { 50331760UL, 0UL, 0UL, 0UL };
+const unsigned long sd_parser::_tokenSet_0_data_[] = { 805306544UL, 0UL, 0UL, 0UL };
 // "in" "like" "not" NE EQ 
 const ANTLR_USE_NAMESPACE(antlr)BitSet sd_parser::_tokenSet_0(_tokenSet_0_data_,4);
 const unsigned long sd_parser::_tokenSet_1_data_[] = { 2UL, 0UL, 0UL, 0UL };
 // EOF 
 const ANTLR_USE_NAMESPACE(antlr)BitSet sd_parser::_tokenSet_1(_tokenSet_1_data_,4);
-const unsigned long sd_parser::_tokenSet_2_data_[] = { 2097154UL, 0UL, 0UL, 0UL };
+const unsigned long sd_parser::_tokenSet_2_data_[] = { 33554434UL, 0UL, 0UL, 0UL };
 // EOF RPAREN 
 const ANTLR_USE_NAMESPACE(antlr)BitSet sd_parser::_tokenSet_2(_tokenSet_2_data_,4);
-const unsigned long sd_parser::_tokenSet_3_data_[] = { 2097410UL, 0UL, 0UL, 0UL };
+const unsigned long sd_parser::_tokenSet_3_data_[] = { 33554946UL, 0UL, 0UL, 0UL };
 // EOF "or" RPAREN 
 const ANTLR_USE_NAMESPACE(antlr)BitSet sd_parser::_tokenSet_3(_tokenSet_3_data_,4);
-const unsigned long sd_parser::_tokenSet_4_data_[] = { 2097538UL, 0UL, 0UL, 0UL };
+const unsigned long sd_parser::_tokenSet_4_data_[] = { 33555202UL, 0UL, 0UL, 0UL };
 // EOF "and" "or" RPAREN 
 const ANTLR_USE_NAMESPACE(antlr)BitSet sd_parser::_tokenSet_4(_tokenSet_4_data_,4);
-const unsigned long sd_parser::_tokenSet_5_data_[] = { 524288UL, 0UL, 0UL, 0UL };
-// S_CHAR_LITERAL 
+const unsigned long sd_parser::_tokenSet_5_data_[] = { 25165824UL, 0UL, 0UL, 0UL };
+// S_CHAR_LITERAL LPAREN 
 const ANTLR_USE_NAMESPACE(antlr)BitSet sd_parser::_tokenSet_5(_tokenSet_5_data_,4);
-const unsigned long sd_parser::_tokenSet_6_data_[] = { 2148007936UL, 0UL, 0UL, 0UL };
+const unsigned long sd_parser::_tokenSet_6_data_[] = { 75497472UL, 0UL, 0UL, 0UL };
 // S_CHAR_LITERAL S_NUMBER 
 const ANTLR_USE_NAMESPACE(antlr)BitSet sd_parser::_tokenSet_6(_tokenSet_6_data_,4);
 

File [modified]: sd_parser.hpp
Delta lines: +17 -19
===================================================================
--- trunk/saga/impl/packages/sd/sd_parser.hpp	2009-01-15 12:53:02 UTC (rev 3294)
+++ trunk/saga/impl/packages/sd/sd_parser.hpp	2009-01-15 12:54:46 UTC (rev 3295)
@@ -2,27 +2,28 @@
 #define INC_sd_parser_hpp_
 
 #include <antlr/config.hpp>
-/* $ANTLR 2.7.7 (20080506): "sd_grammar.g" -> "sd_parser.hpp"$ */
+/* $ANTLR 2.7.7 (20081210): "sd_grammar.g" -> "sd_parser.hpp"$ */
 #include <antlr/TokenStream.hpp>
 #include <antlr/TokenBuffer.hpp>
 #include "sdTokenTypes.hpp"
 #include <antlr/LLkParser.hpp>
 
-#line 1 "sd_grammar.g"
+#line 2 "sd_grammar.g"
 
-  #include "sd_leafnode.hpp"
-  #include "sd_internalnode.hpp"
-  #include <iostream>
-  #include <string>
-  #include <list>
-  #include <math.h>
-  using namespace std;
+   #include "sd_leafnode.hpp"
+   #include "sd_internalnode.hpp"
+   #include <iostream>
+   #include <string>
+   #include <list>
+   #include <math.h>
+   #include <utility>
+   using namespace std;
 
-#line 22 "sd_parser.hpp"
+#line 23 "sd_parser.hpp"
 class CUSTOM_API sd_parser : public ANTLR_USE_NAMESPACE(antlr)LLkParser, public sdTokenTypes
 {
 #line 1 "sd_grammar.g"
-#line 26 "sd_parser.hpp"
+#line 27 "sd_parser.hpp"
 public:
 	void initializeASTFactory( ANTLR_USE_NAMESPACE(antlr)ASTFactory& factory );
 protected:
@@ -52,13 +53,10 @@
 	public: void service_filter_expression();
 	public: void service_and_expression();
 	public: void service_expression();
-	public: std::list<std::string>  in_clause(
-		int *knot
-	);
-	public: string  like_clause(
-		int *knot
-	);
+	public: std::list<std::string>  in_clause();
+	public: pair<string, char>  like_clause();
 	public: int  eqop();
+	public: std::list<std::string>  bracketed_list();
 	public: void string_literal_list();
 	public: void vo_filter();
 	public: void vo_filter_expression();
@@ -81,10 +79,10 @@
 private:
 	static const char* tokenNames[];
 #ifndef NO_STATIC_CONSTS
-	static const int NUM_TOKENS = 37;
+	static const int NUM_TOKENS = 40;
 #else
 	enum {
-		NUM_TOKENS = 37
+		NUM_TOKENS = 40
 	};
 #endif
 	



More information about the saga-devel mailing list