All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.appengine.api.search.query.ExpressionParser Maven / Gradle / Ivy

// $ANTLR 3.5.3 com/google/appengine/api/search/query/Expression.g 2024-06-06 12:43:20

  package com.google.appengine.api.search.query;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

import org.antlr.runtime.tree.*;


@SuppressWarnings("all")
public class ExpressionParser extends Parser {
	public static final String[] tokenNames = new String[] {
		"", "", "", "", "ABS", "AND", "ASCII_LETTER", 
		"ATOM", "COMMA", "COND", "COUNT", "DATE", "DIGIT", "DISTANCE", "DIV", 
		"DOLLAR", "DOT", "EQ", "ESC_SEQ", "EXPONENT", "FLOAT", "GE", "GEO", "GEOPOINT", 
		"GT", "HEX_DIGIT", "HTML", "INDEX", "INT", "LE", "LOG", "LPAREN", "LSQUARE", 
		"LT", "MAX", "MIN", "MINUS", "NAME", "NAME_START", "NE", "NEG", "NOT", 
		"NUMBER", "OCTAL_ESC", "OR", "PHRASE", "PLUS", "POW", "QUOTE", "RPAREN", 
		"RSQUARE", "SNIPPET", "SWITCH", "TEXT", "TIMES", "UNDERSCORE", "UNICODE_ESC", 
		"VECTOR", "WS", "XOR", "'.'"
	};
	public static final int EOF=-1;
	public static final int T__60=60;
	public static final int ABS=4;
	public static final int AND=5;
	public static final int ASCII_LETTER=6;
	public static final int ATOM=7;
	public static final int COMMA=8;
	public static final int COND=9;
	public static final int COUNT=10;
	public static final int DATE=11;
	public static final int DIGIT=12;
	public static final int DISTANCE=13;
	public static final int DIV=14;
	public static final int DOLLAR=15;
	public static final int DOT=16;
	public static final int EQ=17;
	public static final int ESC_SEQ=18;
	public static final int EXPONENT=19;
	public static final int FLOAT=20;
	public static final int GE=21;
	public static final int GEO=22;
	public static final int GEOPOINT=23;
	public static final int GT=24;
	public static final int HEX_DIGIT=25;
	public static final int HTML=26;
	public static final int INDEX=27;
	public static final int INT=28;
	public static final int LE=29;
	public static final int LOG=30;
	public static final int LPAREN=31;
	public static final int LSQUARE=32;
	public static final int LT=33;
	public static final int MAX=34;
	public static final int MIN=35;
	public static final int MINUS=36;
	public static final int NAME=37;
	public static final int NAME_START=38;
	public static final int NE=39;
	public static final int NEG=40;
	public static final int NOT=41;
	public static final int NUMBER=42;
	public static final int OCTAL_ESC=43;
	public static final int OR=44;
	public static final int PHRASE=45;
	public static final int PLUS=46;
	public static final int POW=47;
	public static final int QUOTE=48;
	public static final int RPAREN=49;
	public static final int RSQUARE=50;
	public static final int SNIPPET=51;
	public static final int SWITCH=52;
	public static final int TEXT=53;
	public static final int TIMES=54;
	public static final int UNDERSCORE=55;
	public static final int UNICODE_ESC=56;
	public static final int VECTOR=57;
	public static final int WS=58;
	public static final int XOR=59;

	// delegates
	public Parser[] getDelegates() {
		return new Parser[] {};
	}

	// delegators


	public ExpressionParser(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public ExpressionParser(TokenStream input, RecognizerSharedState state) {
		super(input, state);
	}

	protected TreeAdaptor adaptor = new CommonTreeAdaptor();

	public void setTreeAdaptor(TreeAdaptor adaptor) {
		this.adaptor = adaptor;
	}
	public TreeAdaptor getTreeAdaptor() {
		return adaptor;
	}
	@Override public String[] getTokenNames() { return ExpressionParser.tokenNames; }
	@Override public String getGrammarFileName() { return "com/google/appengine/api/search/query/Expression.g"; }


	  @Override
	  public Object recoverFromMismatchedSet(IntStream input,
	      RecognitionException e, BitSet follow) throws RecognitionException {
	    throw e;
	  }

	  @Override
	  protected Object recoverFromMismatchedToken(
	      IntStream input, int ttype, BitSet follow) throws RecognitionException {
	    throw new MismatchedTokenException(ttype, input);
	  }


	public static class expression_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "expression"
	// com/google/appengine/api/search/query/Expression.g:64:1: expression : conjunction EOF ;
	public final ExpressionParser.expression_return expression() throws RecognitionException {
		ExpressionParser.expression_return retval = new ExpressionParser.expression_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token EOF2=null;
		ParserRuleReturnScope conjunction1 =null;

		CommonTree EOF2_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:65:3: ( conjunction EOF )
			// com/google/appengine/api/search/query/Expression.g:65:5: conjunction EOF
			{
			root_0 = (CommonTree)adaptor.nil();


			pushFollow(FOLLOW_conjunction_in_expression82);
			conjunction1=conjunction();
			state._fsp--;

			adaptor.addChild(root_0, conjunction1.getTree());

			EOF2=(Token)match(input,EOF,FOLLOW_EOF_in_expression84); 
			EOF2_tree = (CommonTree)adaptor.create(EOF2);
			adaptor.addChild(root_0, EOF2_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "expression"


	public static class condExpr_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "condExpr"
	// com/google/appengine/api/search/query/Expression.g:68:1: condExpr : conjunction ( COND ^ addExpr )? ;
	public final ExpressionParser.condExpr_return condExpr() throws RecognitionException {
		ExpressionParser.condExpr_return retval = new ExpressionParser.condExpr_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token COND4=null;
		ParserRuleReturnScope conjunction3 =null;
		ParserRuleReturnScope addExpr5 =null;

		CommonTree COND4_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:69:3: ( conjunction ( COND ^ addExpr )? )
			// com/google/appengine/api/search/query/Expression.g:69:5: conjunction ( COND ^ addExpr )?
			{
			root_0 = (CommonTree)adaptor.nil();


			pushFollow(FOLLOW_conjunction_in_condExpr97);
			conjunction3=conjunction();
			state._fsp--;

			adaptor.addChild(root_0, conjunction3.getTree());

			// com/google/appengine/api/search/query/Expression.g:69:17: ( COND ^ addExpr )?
			int alt1=2;
			int LA1_0 = input.LA(1);
			if ( (LA1_0==COND) ) {
				alt1=1;
			}
			switch (alt1) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:69:18: COND ^ addExpr
					{
					COND4=(Token)match(input,COND,FOLLOW_COND_in_condExpr100); 
					COND4_tree = (CommonTree)adaptor.create(COND4);
					root_0 = (CommonTree)adaptor.becomeRoot(COND4_tree, root_0);

					pushFollow(FOLLOW_addExpr_in_condExpr103);
					addExpr5=addExpr();
					state._fsp--;

					adaptor.addChild(root_0, addExpr5.getTree());

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "condExpr"


	public static class conjunction_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "conjunction"
	// com/google/appengine/api/search/query/Expression.g:72:1: conjunction : disjunction ( AND ^ disjunction )* ;
	public final ExpressionParser.conjunction_return conjunction() throws RecognitionException {
		ExpressionParser.conjunction_return retval = new ExpressionParser.conjunction_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token AND7=null;
		ParserRuleReturnScope disjunction6 =null;
		ParserRuleReturnScope disjunction8 =null;

		CommonTree AND7_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:73:3: ( disjunction ( AND ^ disjunction )* )
			// com/google/appengine/api/search/query/Expression.g:73:5: disjunction ( AND ^ disjunction )*
			{
			root_0 = (CommonTree)adaptor.nil();


			pushFollow(FOLLOW_disjunction_in_conjunction118);
			disjunction6=disjunction();
			state._fsp--;

			adaptor.addChild(root_0, disjunction6.getTree());

			// com/google/appengine/api/search/query/Expression.g:73:17: ( AND ^ disjunction )*
			loop2:
			while (true) {
				int alt2=2;
				int LA2_0 = input.LA(1);
				if ( (LA2_0==AND) ) {
					alt2=1;
				}

				switch (alt2) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:73:18: AND ^ disjunction
					{
					AND7=(Token)match(input,AND,FOLLOW_AND_in_conjunction121); 
					AND7_tree = (CommonTree)adaptor.create(AND7);
					root_0 = (CommonTree)adaptor.becomeRoot(AND7_tree, root_0);

					pushFollow(FOLLOW_disjunction_in_conjunction124);
					disjunction8=disjunction();
					state._fsp--;

					adaptor.addChild(root_0, disjunction8.getTree());

					}
					break;

				default :
					break loop2;
				}
			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "conjunction"


	public static class disjunction_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "disjunction"
	// com/google/appengine/api/search/query/Expression.g:76:1: disjunction : negation ( ( OR | XOR ) ^ negation )* ;
	public final ExpressionParser.disjunction_return disjunction() throws RecognitionException {
		ExpressionParser.disjunction_return retval = new ExpressionParser.disjunction_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token set10=null;
		ParserRuleReturnScope negation9 =null;
		ParserRuleReturnScope negation11 =null;

		CommonTree set10_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:77:3: ( negation ( ( OR | XOR ) ^ negation )* )
			// com/google/appengine/api/search/query/Expression.g:77:5: negation ( ( OR | XOR ) ^ negation )*
			{
			root_0 = (CommonTree)adaptor.nil();


			pushFollow(FOLLOW_negation_in_disjunction139);
			negation9=negation();
			state._fsp--;

			adaptor.addChild(root_0, negation9.getTree());

			// com/google/appengine/api/search/query/Expression.g:77:14: ( ( OR | XOR ) ^ negation )*
			loop3:
			while (true) {
				int alt3=2;
				int LA3_0 = input.LA(1);
				if ( (LA3_0==OR||LA3_0==XOR) ) {
					alt3=1;
				}

				switch (alt3) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:77:15: ( OR | XOR ) ^ negation
					{
					set10=input.LT(1);
					set10=input.LT(1);
					if ( input.LA(1)==OR||input.LA(1)==XOR ) {
						input.consume();
						root_0 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(set10), root_0);
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_negation_in_disjunction151);
					negation11=negation();
					state._fsp--;

					adaptor.addChild(root_0, negation11.getTree());

					}
					break;

				default :
					break loop3;
				}
			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "disjunction"


	public static class negation_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "negation"
	// com/google/appengine/api/search/query/Expression.g:80:1: negation : ( cmpExpr | NOT ^ cmpExpr );
	public final ExpressionParser.negation_return negation() throws RecognitionException {
		ExpressionParser.negation_return retval = new ExpressionParser.negation_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token NOT13=null;
		ParserRuleReturnScope cmpExpr12 =null;
		ParserRuleReturnScope cmpExpr14 =null;

		CommonTree NOT13_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:81:3: ( cmpExpr | NOT ^ cmpExpr )
			int alt4=2;
			int LA4_0 = input.LA(1);
			if ( (LA4_0==ABS||LA4_0==ATOM||(LA4_0 >= COUNT && LA4_0 <= DATE)||LA4_0==DISTANCE||LA4_0==DOT||LA4_0==FLOAT||(LA4_0 >= GEO && LA4_0 <= GEOPOINT)||LA4_0==HTML||LA4_0==INT||(LA4_0 >= LOG && LA4_0 <= LPAREN)||(LA4_0 >= MAX && LA4_0 <= NAME)||LA4_0==NUMBER||LA4_0==PHRASE||LA4_0==POW||(LA4_0 >= SNIPPET && LA4_0 <= TEXT)||LA4_0==VECTOR) ) {
				alt4=1;
			}
			else if ( (LA4_0==NOT) ) {
				alt4=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 4, 0, input);
				throw nvae;
			}

			switch (alt4) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:81:5: cmpExpr
					{
					root_0 = (CommonTree)adaptor.nil();


					pushFollow(FOLLOW_cmpExpr_in_negation166);
					cmpExpr12=cmpExpr();
					state._fsp--;

					adaptor.addChild(root_0, cmpExpr12.getTree());

					}
					break;
				case 2 :
					// com/google/appengine/api/search/query/Expression.g:82:5: NOT ^ cmpExpr
					{
					root_0 = (CommonTree)adaptor.nil();


					NOT13=(Token)match(input,NOT,FOLLOW_NOT_in_negation172); 
					NOT13_tree = (CommonTree)adaptor.create(NOT13);
					root_0 = (CommonTree)adaptor.becomeRoot(NOT13_tree, root_0);

					pushFollow(FOLLOW_cmpExpr_in_negation175);
					cmpExpr14=cmpExpr();
					state._fsp--;

					adaptor.addChild(root_0, cmpExpr14.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "negation"


	public static class cmpExpr_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "cmpExpr"
	// com/google/appengine/api/search/query/Expression.g:85:1: cmpExpr : addExpr ( cmpOp ^ addExpr )? ;
	public final ExpressionParser.cmpExpr_return cmpExpr() throws RecognitionException {
		ExpressionParser.cmpExpr_return retval = new ExpressionParser.cmpExpr_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		ParserRuleReturnScope addExpr15 =null;
		ParserRuleReturnScope cmpOp16 =null;
		ParserRuleReturnScope addExpr17 =null;


		try {
			// com/google/appengine/api/search/query/Expression.g:86:3: ( addExpr ( cmpOp ^ addExpr )? )
			// com/google/appengine/api/search/query/Expression.g:86:5: addExpr ( cmpOp ^ addExpr )?
			{
			root_0 = (CommonTree)adaptor.nil();


			pushFollow(FOLLOW_addExpr_in_cmpExpr188);
			addExpr15=addExpr();
			state._fsp--;

			adaptor.addChild(root_0, addExpr15.getTree());

			// com/google/appengine/api/search/query/Expression.g:86:13: ( cmpOp ^ addExpr )?
			int alt5=2;
			int LA5_0 = input.LA(1);
			if ( (LA5_0==EQ||LA5_0==GE||LA5_0==GT||LA5_0==LE||LA5_0==LT||LA5_0==NE) ) {
				alt5=1;
			}
			switch (alt5) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:86:14: cmpOp ^ addExpr
					{
					pushFollow(FOLLOW_cmpOp_in_cmpExpr191);
					cmpOp16=cmpOp();
					state._fsp--;

					root_0 = (CommonTree)adaptor.becomeRoot(cmpOp16.getTree(), root_0);
					pushFollow(FOLLOW_addExpr_in_cmpExpr194);
					addExpr17=addExpr();
					state._fsp--;

					adaptor.addChild(root_0, addExpr17.getTree());

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "cmpExpr"


	public static class cmpOp_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "cmpOp"
	// com/google/appengine/api/search/query/Expression.g:89:1: cmpOp : ( LT | LE | GT | GE | EQ | NE );
	public final ExpressionParser.cmpOp_return cmpOp() throws RecognitionException {
		ExpressionParser.cmpOp_return retval = new ExpressionParser.cmpOp_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token set18=null;

		CommonTree set18_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:90:3: ( LT | LE | GT | GE | EQ | NE )
			// com/google/appengine/api/search/query/Expression.g:
			{
			root_0 = (CommonTree)adaptor.nil();


			set18=input.LT(1);
			if ( input.LA(1)==EQ||input.LA(1)==GE||input.LA(1)==GT||input.LA(1)==LE||input.LA(1)==LT||input.LA(1)==NE ) {
				input.consume();
				adaptor.addChild(root_0, (CommonTree)adaptor.create(set18));
				state.errorRecovery=false;
			}
			else {
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "cmpOp"


	public static class addExpr_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "addExpr"
	// com/google/appengine/api/search/query/Expression.g:98:1: addExpr : multExpr ( addOp ^ multExpr )* ;
	public final ExpressionParser.addExpr_return addExpr() throws RecognitionException {
		ExpressionParser.addExpr_return retval = new ExpressionParser.addExpr_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		ParserRuleReturnScope multExpr19 =null;
		ParserRuleReturnScope addOp20 =null;
		ParserRuleReturnScope multExpr21 =null;


		try {
			// com/google/appengine/api/search/query/Expression.g:99:3: ( multExpr ( addOp ^ multExpr )* )
			// com/google/appengine/api/search/query/Expression.g:99:5: multExpr ( addOp ^ multExpr )*
			{
			root_0 = (CommonTree)adaptor.nil();


			pushFollow(FOLLOW_multExpr_in_addExpr252);
			multExpr19=multExpr();
			state._fsp--;

			adaptor.addChild(root_0, multExpr19.getTree());

			// com/google/appengine/api/search/query/Expression.g:99:14: ( addOp ^ multExpr )*
			loop6:
			while (true) {
				int alt6=2;
				int LA6_0 = input.LA(1);
				if ( (LA6_0==MINUS||LA6_0==PLUS) ) {
					alt6=1;
				}

				switch (alt6) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:99:15: addOp ^ multExpr
					{
					pushFollow(FOLLOW_addOp_in_addExpr255);
					addOp20=addOp();
					state._fsp--;

					root_0 = (CommonTree)adaptor.becomeRoot(addOp20.getTree(), root_0);
					pushFollow(FOLLOW_multExpr_in_addExpr258);
					multExpr21=multExpr();
					state._fsp--;

					adaptor.addChild(root_0, multExpr21.getTree());

					}
					break;

				default :
					break loop6;
				}
			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "addExpr"


	public static class addOp_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "addOp"
	// com/google/appengine/api/search/query/Expression.g:102:1: addOp : ( PLUS | MINUS );
	public final ExpressionParser.addOp_return addOp() throws RecognitionException {
		ExpressionParser.addOp_return retval = new ExpressionParser.addOp_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token set22=null;

		CommonTree set22_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:103:3: ( PLUS | MINUS )
			// com/google/appengine/api/search/query/Expression.g:
			{
			root_0 = (CommonTree)adaptor.nil();


			set22=input.LT(1);
			if ( input.LA(1)==MINUS||input.LA(1)==PLUS ) {
				input.consume();
				adaptor.addChild(root_0, (CommonTree)adaptor.create(set22));
				state.errorRecovery=false;
			}
			else {
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "addOp"


	public static class multExpr_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "multExpr"
	// com/google/appengine/api/search/query/Expression.g:107:1: multExpr : unary ( multOp ^ unary )* ;
	public final ExpressionParser.multExpr_return multExpr() throws RecognitionException {
		ExpressionParser.multExpr_return retval = new ExpressionParser.multExpr_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		ParserRuleReturnScope unary23 =null;
		ParserRuleReturnScope multOp24 =null;
		ParserRuleReturnScope unary25 =null;


		try {
			// com/google/appengine/api/search/query/Expression.g:108:3: ( unary ( multOp ^ unary )* )
			// com/google/appengine/api/search/query/Expression.g:108:5: unary ( multOp ^ unary )*
			{
			root_0 = (CommonTree)adaptor.nil();


			pushFollow(FOLLOW_unary_in_multExpr292);
			unary23=unary();
			state._fsp--;

			adaptor.addChild(root_0, unary23.getTree());

			// com/google/appengine/api/search/query/Expression.g:108:11: ( multOp ^ unary )*
			loop7:
			while (true) {
				int alt7=2;
				int LA7_0 = input.LA(1);
				if ( (LA7_0==DIV||LA7_0==TIMES) ) {
					alt7=1;
				}

				switch (alt7) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:108:12: multOp ^ unary
					{
					pushFollow(FOLLOW_multOp_in_multExpr295);
					multOp24=multOp();
					state._fsp--;

					root_0 = (CommonTree)adaptor.becomeRoot(multOp24.getTree(), root_0);
					pushFollow(FOLLOW_unary_in_multExpr298);
					unary25=unary();
					state._fsp--;

					adaptor.addChild(root_0, unary25.getTree());

					}
					break;

				default :
					break loop7;
				}
			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "multExpr"


	public static class multOp_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "multOp"
	// com/google/appengine/api/search/query/Expression.g:111:1: multOp : ( TIMES | DIV );
	public final ExpressionParser.multOp_return multOp() throws RecognitionException {
		ExpressionParser.multOp_return retval = new ExpressionParser.multOp_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token set26=null;

		CommonTree set26_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:112:3: ( TIMES | DIV )
			// com/google/appengine/api/search/query/Expression.g:
			{
			root_0 = (CommonTree)adaptor.nil();


			set26=input.LT(1);
			if ( input.LA(1)==DIV||input.LA(1)==TIMES ) {
				input.consume();
				adaptor.addChild(root_0, (CommonTree)adaptor.create(set26));
				state.errorRecovery=false;
			}
			else {
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "multOp"


	public static class unary_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "unary"
	// com/google/appengine/api/search/query/Expression.g:116:1: unary : ( MINUS atom -> ^( NEG[\"-\"] atom ) | atom );
	public final ExpressionParser.unary_return unary() throws RecognitionException {
		ExpressionParser.unary_return retval = new ExpressionParser.unary_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token MINUS27=null;
		ParserRuleReturnScope atom28 =null;
		ParserRuleReturnScope atom29 =null;

		CommonTree MINUS27_tree=null;
		RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS");
		RewriteRuleSubtreeStream stream_atom=new RewriteRuleSubtreeStream(adaptor,"rule atom");

		try {
			// com/google/appengine/api/search/query/Expression.g:117:3: ( MINUS atom -> ^( NEG[\"-\"] atom ) | atom )
			int alt8=2;
			int LA8_0 = input.LA(1);
			if ( (LA8_0==MINUS) ) {
				alt8=1;
			}
			else if ( (LA8_0==ABS||LA8_0==ATOM||(LA8_0 >= COUNT && LA8_0 <= DATE)||LA8_0==DISTANCE||LA8_0==DOT||LA8_0==FLOAT||(LA8_0 >= GEO && LA8_0 <= GEOPOINT)||LA8_0==HTML||LA8_0==INT||(LA8_0 >= LOG && LA8_0 <= LPAREN)||(LA8_0 >= MAX && LA8_0 <= MIN)||LA8_0==NAME||LA8_0==NUMBER||LA8_0==PHRASE||LA8_0==POW||(LA8_0 >= SNIPPET && LA8_0 <= TEXT)||LA8_0==VECTOR) ) {
				alt8=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 8, 0, input);
				throw nvae;
			}

			switch (alt8) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:117:5: MINUS atom
					{
					MINUS27=(Token)match(input,MINUS,FOLLOW_MINUS_in_unary332);  
					stream_MINUS.add(MINUS27);

					pushFollow(FOLLOW_atom_in_unary334);
					atom28=atom();
					state._fsp--;

					stream_atom.add(atom28.getTree());

					// AST REWRITE
					// elements: atom
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 117:16: -> ^( NEG[\"-\"] atom )
					{
						// com/google/appengine/api/search/query/Expression.g:117:19: ^( NEG[\"-\"] atom )
						{
						CommonTree root_1 = (CommonTree)adaptor.nil();
						root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(NEG, "-"), root_1);
						adaptor.addChild(root_1, stream_atom.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// com/google/appengine/api/search/query/Expression.g:118:5: atom
					{
					root_0 = (CommonTree)adaptor.nil();


					pushFollow(FOLLOW_atom_in_unary349);
					atom29=atom();
					state._fsp--;

					adaptor.addChild(root_0, atom29.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "unary"


	public static class atom_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "atom"
	// com/google/appengine/api/search/query/Expression.g:121:1: atom : ( var | num | str | fn | LPAREN conjunction RPAREN -> conjunction );
	public final ExpressionParser.atom_return atom() throws RecognitionException {
		ExpressionParser.atom_return retval = new ExpressionParser.atom_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token LPAREN34=null;
		Token RPAREN36=null;
		ParserRuleReturnScope var30 =null;
		ParserRuleReturnScope num31 =null;
		ParserRuleReturnScope str32 =null;
		ParserRuleReturnScope fn33 =null;
		ParserRuleReturnScope conjunction35 =null;

		CommonTree LPAREN34_tree=null;
		CommonTree RPAREN36_tree=null;
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_conjunction=new RewriteRuleSubtreeStream(adaptor,"rule conjunction");

		try {
			// com/google/appengine/api/search/query/Expression.g:122:3: ( var | num | str | fn | LPAREN conjunction RPAREN -> conjunction )
			int alt9=5;
			switch ( input.LA(1) ) {
			case NAME:
				{
				alt9=1;
				}
				break;
			case TEXT:
				{
				int LA9_2 = input.LA(2);
				if ( (LA9_2==EOF||LA9_2==AND||(LA9_2 >= COMMA && LA9_2 <= COND)||LA9_2==DIV||LA9_2==EQ||LA9_2==GE||LA9_2==GT||LA9_2==LE||(LA9_2 >= LSQUARE && LA9_2 <= LT)||LA9_2==MINUS||LA9_2==NE||LA9_2==OR||LA9_2==PLUS||LA9_2==RPAREN||LA9_2==TIMES||LA9_2==XOR) ) {
					alt9=1;
				}
				else if ( (LA9_2==LPAREN) ) {
					alt9=4;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 9, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case HTML:
				{
				int LA9_3 = input.LA(2);
				if ( (LA9_3==EOF||LA9_3==AND||(LA9_3 >= COMMA && LA9_3 <= COND)||LA9_3==DIV||LA9_3==EQ||LA9_3==GE||LA9_3==GT||LA9_3==LE||(LA9_3 >= LSQUARE && LA9_3 <= LT)||LA9_3==MINUS||LA9_3==NE||LA9_3==OR||LA9_3==PLUS||LA9_3==RPAREN||LA9_3==TIMES||LA9_3==XOR) ) {
					alt9=1;
				}
				else if ( (LA9_3==LPAREN) ) {
					alt9=4;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 9, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ATOM:
				{
				int LA9_4 = input.LA(2);
				if ( (LA9_4==EOF||LA9_4==AND||(LA9_4 >= COMMA && LA9_4 <= COND)||LA9_4==DIV||LA9_4==EQ||LA9_4==GE||LA9_4==GT||LA9_4==LE||(LA9_4 >= LSQUARE && LA9_4 <= LT)||LA9_4==MINUS||LA9_4==NE||LA9_4==OR||LA9_4==PLUS||LA9_4==RPAREN||LA9_4==TIMES||LA9_4==XOR) ) {
					alt9=1;
				}
				else if ( (LA9_4==LPAREN) ) {
					alt9=4;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 9, 4, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case DATE:
				{
				int LA9_5 = input.LA(2);
				if ( (LA9_5==EOF||LA9_5==AND||(LA9_5 >= COMMA && LA9_5 <= COND)||LA9_5==DIV||LA9_5==EQ||LA9_5==GE||LA9_5==GT||LA9_5==LE||(LA9_5 >= LSQUARE && LA9_5 <= LT)||LA9_5==MINUS||LA9_5==NE||LA9_5==OR||LA9_5==PLUS||LA9_5==RPAREN||LA9_5==TIMES||LA9_5==XOR) ) {
					alt9=1;
				}
				else if ( (LA9_5==LPAREN) ) {
					alt9=4;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 9, 5, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case NUMBER:
				{
				int LA9_6 = input.LA(2);
				if ( (LA9_6==EOF||LA9_6==AND||(LA9_6 >= COMMA && LA9_6 <= COND)||LA9_6==DIV||LA9_6==EQ||LA9_6==GE||LA9_6==GT||LA9_6==LE||(LA9_6 >= LSQUARE && LA9_6 <= LT)||LA9_6==MINUS||LA9_6==NE||LA9_6==OR||LA9_6==PLUS||LA9_6==RPAREN||LA9_6==TIMES||LA9_6==XOR) ) {
					alt9=1;
				}
				else if ( (LA9_6==LPAREN) ) {
					alt9=4;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 9, 6, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case GEO:
				{
				int LA9_7 = input.LA(2);
				if ( (LA9_7==EOF||LA9_7==AND||(LA9_7 >= COMMA && LA9_7 <= COND)||LA9_7==DIV||LA9_7==EQ||LA9_7==GE||LA9_7==GT||LA9_7==LE||(LA9_7 >= LSQUARE && LA9_7 <= LT)||LA9_7==MINUS||LA9_7==NE||LA9_7==OR||LA9_7==PLUS||LA9_7==RPAREN||LA9_7==TIMES||LA9_7==XOR) ) {
					alt9=1;
				}
				else if ( (LA9_7==LPAREN) ) {
					alt9=4;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 9, 7, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case GEOPOINT:
				{
				int LA9_8 = input.LA(2);
				if ( (LA9_8==EOF||LA9_8==AND||(LA9_8 >= COMMA && LA9_8 <= COND)||LA9_8==DIV||LA9_8==EQ||LA9_8==GE||LA9_8==GT||LA9_8==LE||(LA9_8 >= LSQUARE && LA9_8 <= LT)||LA9_8==MINUS||LA9_8==NE||LA9_8==OR||LA9_8==PLUS||LA9_8==RPAREN||LA9_8==TIMES||LA9_8==XOR) ) {
					alt9=1;
				}
				else if ( (LA9_8==LPAREN) ) {
					alt9=4;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 9, 8, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case FLOAT:
			case INT:
				{
				alt9=2;
				}
				break;
			case PHRASE:
				{
				alt9=3;
				}
				break;
			case ABS:
			case COUNT:
			case DISTANCE:
			case DOT:
			case LOG:
			case MAX:
			case MIN:
			case POW:
			case SNIPPET:
			case SWITCH:
			case VECTOR:
				{
				alt9=4;
				}
				break;
			case LPAREN:
				{
				alt9=5;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 9, 0, input);
				throw nvae;
			}
			switch (alt9) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:122:5: var
					{
					root_0 = (CommonTree)adaptor.nil();


					pushFollow(FOLLOW_var_in_atom362);
					var30=var();
					state._fsp--;

					adaptor.addChild(root_0, var30.getTree());

					}
					break;
				case 2 :
					// com/google/appengine/api/search/query/Expression.g:123:5: num
					{
					root_0 = (CommonTree)adaptor.nil();


					pushFollow(FOLLOW_num_in_atom368);
					num31=num();
					state._fsp--;

					adaptor.addChild(root_0, num31.getTree());

					}
					break;
				case 3 :
					// com/google/appengine/api/search/query/Expression.g:124:5: str
					{
					root_0 = (CommonTree)adaptor.nil();


					pushFollow(FOLLOW_str_in_atom374);
					str32=str();
					state._fsp--;

					adaptor.addChild(root_0, str32.getTree());

					}
					break;
				case 4 :
					// com/google/appengine/api/search/query/Expression.g:125:5: fn
					{
					root_0 = (CommonTree)adaptor.nil();


					pushFollow(FOLLOW_fn_in_atom380);
					fn33=fn();
					state._fsp--;

					adaptor.addChild(root_0, fn33.getTree());

					}
					break;
				case 5 :
					// com/google/appengine/api/search/query/Expression.g:126:5: LPAREN conjunction RPAREN
					{
					LPAREN34=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_atom386);  
					stream_LPAREN.add(LPAREN34);

					pushFollow(FOLLOW_conjunction_in_atom388);
					conjunction35=conjunction();
					state._fsp--;

					stream_conjunction.add(conjunction35.getTree());
					RPAREN36=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_atom390);  
					stream_RPAREN.add(RPAREN36);


					// AST REWRITE
					// elements: conjunction
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 126:31: -> conjunction
					{
						adaptor.addChild(root_0, stream_conjunction.nextTree());
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "atom"


	public static class var_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "var"
	// com/google/appengine/api/search/query/Expression.g:129:1: var : ( name | name index -> ^( INDEX[$index.text] name ) );
	public final ExpressionParser.var_return var() throws RecognitionException {
		ExpressionParser.var_return retval = new ExpressionParser.var_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		ParserRuleReturnScope name37 =null;
		ParserRuleReturnScope name38 =null;
		ParserRuleReturnScope index39 =null;

		RewriteRuleSubtreeStream stream_name=new RewriteRuleSubtreeStream(adaptor,"rule name");
		RewriteRuleSubtreeStream stream_index=new RewriteRuleSubtreeStream(adaptor,"rule index");

		try {
			// com/google/appengine/api/search/query/Expression.g:130:3: ( name | name index -> ^( INDEX[$index.text] name ) )
			int alt10=2;
			alt10 = dfa10.predict(input);
			switch (alt10) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:130:5: name
					{
					root_0 = (CommonTree)adaptor.nil();


					pushFollow(FOLLOW_name_in_var407);
					name37=name();
					state._fsp--;

					adaptor.addChild(root_0, name37.getTree());

					}
					break;
				case 2 :
					// com/google/appengine/api/search/query/Expression.g:131:5: name index
					{
					pushFollow(FOLLOW_name_in_var413);
					name38=name();
					state._fsp--;

					stream_name.add(name38.getTree());
					pushFollow(FOLLOW_index_in_var415);
					index39=index();
					state._fsp--;

					stream_index.add(index39.getTree());

					// AST REWRITE
					// elements: name
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 131:16: -> ^( INDEX[$index.text] name )
					{
						// com/google/appengine/api/search/query/Expression.g:131:19: ^( INDEX[$index.text] name )
						{
						CommonTree root_1 = (CommonTree)adaptor.nil();
						root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(INDEX, (index39!=null?input.toString(index39.start,index39.stop):null)), root_1);
						adaptor.addChild(root_1, stream_name.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "var"


	public static class index_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "index"
	// com/google/appengine/api/search/query/Expression.g:134:1: index : LSQUARE x= INT RSQUARE -> $x;
	public final ExpressionParser.index_return index() throws RecognitionException {
		ExpressionParser.index_return retval = new ExpressionParser.index_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token x=null;
		Token LSQUARE40=null;
		Token RSQUARE41=null;

		CommonTree x_tree=null;
		CommonTree LSQUARE40_tree=null;
		CommonTree RSQUARE41_tree=null;
		RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE");
		RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE");
		RewriteRuleTokenStream stream_INT=new RewriteRuleTokenStream(adaptor,"token INT");

		try {
			// com/google/appengine/api/search/query/Expression.g:135:3: ( LSQUARE x= INT RSQUARE -> $x)
			// com/google/appengine/api/search/query/Expression.g:135:5: LSQUARE x= INT RSQUARE
			{
			LSQUARE40=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_index437);  
			stream_LSQUARE.add(LSQUARE40);

			x=(Token)match(input,INT,FOLLOW_INT_in_index441);  
			stream_INT.add(x);

			RSQUARE41=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_index443);  
			stream_RSQUARE.add(RSQUARE41);


			// AST REWRITE
			// elements: x
			// token labels: x
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleTokenStream stream_x=new RewriteRuleTokenStream(adaptor,"token x",x);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (CommonTree)adaptor.nil();
			// 135:27: -> $x
			{
				adaptor.addChild(root_0, stream_x.nextNode());
			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "index"


	public static class name_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "name"
	// com/google/appengine/api/search/query/Expression.g:138:1: name : ( NAME ( '.' ^ NAME )* |t= TEXT -> NAME[$t] |t= HTML -> NAME[$t] |t= ATOM -> NAME[$t] |t= DATE -> NAME[$t] |t= NUMBER -> NAME[$t] |t= GEO -> NAME[$t] |t= GEOPOINT -> NAME[$t] );
	public final ExpressionParser.name_return name() throws RecognitionException {
		ExpressionParser.name_return retval = new ExpressionParser.name_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token t=null;
		Token NAME42=null;
		Token char_literal43=null;
		Token NAME44=null;

		CommonTree t_tree=null;
		CommonTree NAME42_tree=null;
		CommonTree char_literal43_tree=null;
		CommonTree NAME44_tree=null;
		RewriteRuleTokenStream stream_GEO=new RewriteRuleTokenStream(adaptor,"token GEO");
		RewriteRuleTokenStream stream_DATE=new RewriteRuleTokenStream(adaptor,"token DATE");
		RewriteRuleTokenStream stream_NUMBER=new RewriteRuleTokenStream(adaptor,"token NUMBER");
		RewriteRuleTokenStream stream_GEOPOINT=new RewriteRuleTokenStream(adaptor,"token GEOPOINT");
		RewriteRuleTokenStream stream_TEXT=new RewriteRuleTokenStream(adaptor,"token TEXT");
		RewriteRuleTokenStream stream_HTML=new RewriteRuleTokenStream(adaptor,"token HTML");
		RewriteRuleTokenStream stream_ATOM=new RewriteRuleTokenStream(adaptor,"token ATOM");

		try {
			// com/google/appengine/api/search/query/Expression.g:139:3: ( NAME ( '.' ^ NAME )* |t= TEXT -> NAME[$t] |t= HTML -> NAME[$t] |t= ATOM -> NAME[$t] |t= DATE -> NAME[$t] |t= NUMBER -> NAME[$t] |t= GEO -> NAME[$t] |t= GEOPOINT -> NAME[$t] )
			int alt12=8;
			switch ( input.LA(1) ) {
			case NAME:
				{
				alt12=1;
				}
				break;
			case TEXT:
				{
				alt12=2;
				}
				break;
			case HTML:
				{
				alt12=3;
				}
				break;
			case ATOM:
				{
				alt12=4;
				}
				break;
			case DATE:
				{
				alt12=5;
				}
				break;
			case NUMBER:
				{
				alt12=6;
				}
				break;
			case GEO:
				{
				alt12=7;
				}
				break;
			case GEOPOINT:
				{
				alt12=8;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 12, 0, input);
				throw nvae;
			}
			switch (alt12) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:139:5: NAME ( '.' ^ NAME )*
					{
					root_0 = (CommonTree)adaptor.nil();


					NAME42=(Token)match(input,NAME,FOLLOW_NAME_in_name461); 
					NAME42_tree = (CommonTree)adaptor.create(NAME42);
					adaptor.addChild(root_0, NAME42_tree);

					// com/google/appengine/api/search/query/Expression.g:139:10: ( '.' ^ NAME )*
					loop11:
					while (true) {
						int alt11=2;
						int LA11_0 = input.LA(1);
						if ( (LA11_0==60) ) {
							alt11=1;
						}

						switch (alt11) {
						case 1 :
							// com/google/appengine/api/search/query/Expression.g:139:11: '.' ^ NAME
							{
							char_literal43=(Token)match(input,60,FOLLOW_60_in_name464); 
							char_literal43_tree = (CommonTree)adaptor.create(char_literal43);
							root_0 = (CommonTree)adaptor.becomeRoot(char_literal43_tree, root_0);

							NAME44=(Token)match(input,NAME,FOLLOW_NAME_in_name467); 
							NAME44_tree = (CommonTree)adaptor.create(NAME44);
							adaptor.addChild(root_0, NAME44_tree);

							}
							break;

						default :
							break loop11;
						}
					}

					}
					break;
				case 2 :
					// com/google/appengine/api/search/query/Expression.g:142:5: t= TEXT
					{
					t=(Token)match(input,TEXT,FOLLOW_TEXT_in_name483);  
					stream_TEXT.add(t);


					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 142:12: -> NAME[$t]
					{
						adaptor.addChild(root_0, (CommonTree)adaptor.create(NAME, t));
					}


					retval.tree = root_0;

					}
					break;
				case 3 :
					// com/google/appengine/api/search/query/Expression.g:143:5: t= HTML
					{
					t=(Token)match(input,HTML,FOLLOW_HTML_in_name496);  
					stream_HTML.add(t);


					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 143:12: -> NAME[$t]
					{
						adaptor.addChild(root_0, (CommonTree)adaptor.create(NAME, t));
					}


					retval.tree = root_0;

					}
					break;
				case 4 :
					// com/google/appengine/api/search/query/Expression.g:144:5: t= ATOM
					{
					t=(Token)match(input,ATOM,FOLLOW_ATOM_in_name509);  
					stream_ATOM.add(t);


					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 144:12: -> NAME[$t]
					{
						adaptor.addChild(root_0, (CommonTree)adaptor.create(NAME, t));
					}


					retval.tree = root_0;

					}
					break;
				case 5 :
					// com/google/appengine/api/search/query/Expression.g:145:5: t= DATE
					{
					t=(Token)match(input,DATE,FOLLOW_DATE_in_name522);  
					stream_DATE.add(t);


					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 145:12: -> NAME[$t]
					{
						adaptor.addChild(root_0, (CommonTree)adaptor.create(NAME, t));
					}


					retval.tree = root_0;

					}
					break;
				case 6 :
					// com/google/appengine/api/search/query/Expression.g:146:5: t= NUMBER
					{
					t=(Token)match(input,NUMBER,FOLLOW_NUMBER_in_name535);  
					stream_NUMBER.add(t);


					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 146:14: -> NAME[$t]
					{
						adaptor.addChild(root_0, (CommonTree)adaptor.create(NAME, t));
					}


					retval.tree = root_0;

					}
					break;
				case 7 :
					// com/google/appengine/api/search/query/Expression.g:147:5: t= GEO
					{
					t=(Token)match(input,GEO,FOLLOW_GEO_in_name548);  
					stream_GEO.add(t);


					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 147:11: -> NAME[$t]
					{
						adaptor.addChild(root_0, (CommonTree)adaptor.create(NAME, t));
					}


					retval.tree = root_0;

					}
					break;
				case 8 :
					// com/google/appengine/api/search/query/Expression.g:148:5: t= GEOPOINT
					{
					t=(Token)match(input,GEOPOINT,FOLLOW_GEOPOINT_in_name561);  
					stream_GEOPOINT.add(t);


					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (CommonTree)adaptor.nil();
					// 148:16: -> NAME[$t]
					{
						adaptor.addChild(root_0, (CommonTree)adaptor.create(NAME, t));
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "name"


	public static class num_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "num"
	// com/google/appengine/api/search/query/Expression.g:151:1: num : ( INT | FLOAT );
	public final ExpressionParser.num_return num() throws RecognitionException {
		ExpressionParser.num_return retval = new ExpressionParser.num_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token set45=null;

		CommonTree set45_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:152:3: ( INT | FLOAT )
			// com/google/appengine/api/search/query/Expression.g:
			{
			root_0 = (CommonTree)adaptor.nil();


			set45=input.LT(1);
			if ( input.LA(1)==FLOAT||input.LA(1)==INT ) {
				input.consume();
				adaptor.addChild(root_0, (CommonTree)adaptor.create(set45));
				state.errorRecovery=false;
			}
			else {
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "num"


	public static class str_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "str"
	// com/google/appengine/api/search/query/Expression.g:156:1: str : PHRASE ;
	public final ExpressionParser.str_return str() throws RecognitionException {
		ExpressionParser.str_return retval = new ExpressionParser.str_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token PHRASE46=null;

		CommonTree PHRASE46_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:157:3: ( PHRASE )
			// com/google/appengine/api/search/query/Expression.g:157:5: PHRASE
			{
			root_0 = (CommonTree)adaptor.nil();


			PHRASE46=(Token)match(input,PHRASE,FOLLOW_PHRASE_in_str598); 
			PHRASE46_tree = (CommonTree)adaptor.create(PHRASE46);
			adaptor.addChild(root_0, PHRASE46_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "str"


	public static class fn_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "fn"
	// com/google/appengine/api/search/query/Expression.g:160:1: fn : fnName LPAREN condExpr ( COMMA condExpr )* RPAREN -> ^( fnName ( condExpr )+ ) ;
	public final ExpressionParser.fn_return fn() throws RecognitionException {
		ExpressionParser.fn_return retval = new ExpressionParser.fn_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token LPAREN48=null;
		Token COMMA50=null;
		Token RPAREN52=null;
		ParserRuleReturnScope fnName47 =null;
		ParserRuleReturnScope condExpr49 =null;
		ParserRuleReturnScope condExpr51 =null;

		CommonTree LPAREN48_tree=null;
		CommonTree COMMA50_tree=null;
		CommonTree RPAREN52_tree=null;
		RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
		RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
		RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN");
		RewriteRuleSubtreeStream stream_fnName=new RewriteRuleSubtreeStream(adaptor,"rule fnName");
		RewriteRuleSubtreeStream stream_condExpr=new RewriteRuleSubtreeStream(adaptor,"rule condExpr");

		try {
			// com/google/appengine/api/search/query/Expression.g:161:3: ( fnName LPAREN condExpr ( COMMA condExpr )* RPAREN -> ^( fnName ( condExpr )+ ) )
			// com/google/appengine/api/search/query/Expression.g:161:5: fnName LPAREN condExpr ( COMMA condExpr )* RPAREN
			{
			pushFollow(FOLLOW_fnName_in_fn611);
			fnName47=fnName();
			state._fsp--;

			stream_fnName.add(fnName47.getTree());
			LPAREN48=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_fn613);  
			stream_LPAREN.add(LPAREN48);

			pushFollow(FOLLOW_condExpr_in_fn615);
			condExpr49=condExpr();
			state._fsp--;

			stream_condExpr.add(condExpr49.getTree());
			// com/google/appengine/api/search/query/Expression.g:161:28: ( COMMA condExpr )*
			loop13:
			while (true) {
				int alt13=2;
				int LA13_0 = input.LA(1);
				if ( (LA13_0==COMMA) ) {
					alt13=1;
				}

				switch (alt13) {
				case 1 :
					// com/google/appengine/api/search/query/Expression.g:161:29: COMMA condExpr
					{
					COMMA50=(Token)match(input,COMMA,FOLLOW_COMMA_in_fn618);  
					stream_COMMA.add(COMMA50);

					pushFollow(FOLLOW_condExpr_in_fn620);
					condExpr51=condExpr();
					state._fsp--;

					stream_condExpr.add(condExpr51.getTree());
					}
					break;

				default :
					break loop13;
				}
			}

			RPAREN52=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_fn624);  
			stream_RPAREN.add(RPAREN52);


			// AST REWRITE
			// elements: condExpr, fnName
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (CommonTree)adaptor.nil();
			// 162:7: -> ^( fnName ( condExpr )+ )
			{
				// com/google/appengine/api/search/query/Expression.g:162:10: ^( fnName ( condExpr )+ )
				{
				CommonTree root_1 = (CommonTree)adaptor.nil();
				root_1 = (CommonTree)adaptor.becomeRoot(stream_fnName.nextNode(), root_1);
				if ( !(stream_condExpr.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_condExpr.hasNext() ) {
					adaptor.addChild(root_1, stream_condExpr.nextTree());
				}
				stream_condExpr.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "fn"


	public static class fnName_return extends ParserRuleReturnScope {
		CommonTree tree;
		@Override
		public CommonTree getTree() { return tree; }
	};


	// $ANTLR start "fnName"
	// com/google/appengine/api/search/query/Expression.g:165:1: fnName : ( ABS | COUNT | DISTANCE | GEOPOINT | LOG | MAX | MIN | POW | SNIPPET | SWITCH | TEXT | HTML | ATOM | DATE | NUMBER | GEO | DOT | VECTOR );
	public final ExpressionParser.fnName_return fnName() throws RecognitionException {
		ExpressionParser.fnName_return retval = new ExpressionParser.fnName_return();
		retval.start = input.LT(1);

		CommonTree root_0 = null;

		Token set53=null;

		CommonTree set53_tree=null;

		try {
			// com/google/appengine/api/search/query/Expression.g:166:2: ( ABS | COUNT | DISTANCE | GEOPOINT | LOG | MAX | MIN | POW | SNIPPET | SWITCH | TEXT | HTML | ATOM | DATE | NUMBER | GEO | DOT | VECTOR )
			// com/google/appengine/api/search/query/Expression.g:
			{
			root_0 = (CommonTree)adaptor.nil();


			set53=input.LT(1);
			if ( input.LA(1)==ABS||input.LA(1)==ATOM||(input.LA(1) >= COUNT && input.LA(1) <= DATE)||input.LA(1)==DISTANCE||input.LA(1)==DOT||(input.LA(1) >= GEO && input.LA(1) <= GEOPOINT)||input.LA(1)==HTML||input.LA(1)==LOG||(input.LA(1) >= MAX && input.LA(1) <= MIN)||input.LA(1)==NUMBER||input.LA(1)==POW||(input.LA(1) >= SNIPPET && input.LA(1) <= TEXT)||input.LA(1)==VECTOR ) {
				input.consume();
				adaptor.addChild(root_0, (CommonTree)adaptor.create(set53));
				state.errorRecovery=false;
			}
			else {
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			retval.tree = (CommonTree)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}

		  catch (RecognitionException e) {
		    reportError(e);
		    throw e;
		  }

		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "fnName"

	// Delegated rules


	protected DFA10 dfa10 = new DFA10(this);
	static final String DFA10_eotS =
		"\15\uffff";
	static final String DFA10_eofS =
		"\1\uffff\10\12\3\uffff\1\12";
	static final String DFA10_minS =
		"\1\7\10\5\1\45\2\uffff\1\5";
	static final String DFA10_maxS =
		"\1\65\1\74\7\73\1\45\2\uffff\1\74";
	static final String DFA10_acceptS =
		"\12\uffff\1\1\1\2\1\uffff";
	static final String DFA10_specialS =
		"\15\uffff}>";
	static final String[] DFA10_transitionS = {
			"\1\4\3\uffff\1\5\12\uffff\1\7\1\10\2\uffff\1\3\12\uffff\1\1\4\uffff\1"+
			"\6\12\uffff\1\2",
			"\1\12\2\uffff\2\12\4\uffff\1\12\2\uffff\1\12\3\uffff\1\12\2\uffff\1"+
			"\12\4\uffff\1\12\2\uffff\1\13\1\12\2\uffff\1\12\2\uffff\1\12\4\uffff"+
			"\1\12\1\uffff\1\12\2\uffff\1\12\4\uffff\1\12\4\uffff\1\12\1\11",
			"\1\12\2\uffff\2\12\4\uffff\1\12\2\uffff\1\12\3\uffff\1\12\2\uffff\1"+
			"\12\4\uffff\1\12\2\uffff\1\13\1\12\2\uffff\1\12\2\uffff\1\12\4\uffff"+
			"\1\12\1\uffff\1\12\2\uffff\1\12\4\uffff\1\12\4\uffff\1\12",
			"\1\12\2\uffff\2\12\4\uffff\1\12\2\uffff\1\12\3\uffff\1\12\2\uffff\1"+
			"\12\4\uffff\1\12\2\uffff\1\13\1\12\2\uffff\1\12\2\uffff\1\12\4\uffff"+
			"\1\12\1\uffff\1\12\2\uffff\1\12\4\uffff\1\12\4\uffff\1\12",
			"\1\12\2\uffff\2\12\4\uffff\1\12\2\uffff\1\12\3\uffff\1\12\2\uffff\1"+
			"\12\4\uffff\1\12\2\uffff\1\13\1\12\2\uffff\1\12\2\uffff\1\12\4\uffff"+
			"\1\12\1\uffff\1\12\2\uffff\1\12\4\uffff\1\12\4\uffff\1\12",
			"\1\12\2\uffff\2\12\4\uffff\1\12\2\uffff\1\12\3\uffff\1\12\2\uffff\1"+
			"\12\4\uffff\1\12\2\uffff\1\13\1\12\2\uffff\1\12\2\uffff\1\12\4\uffff"+
			"\1\12\1\uffff\1\12\2\uffff\1\12\4\uffff\1\12\4\uffff\1\12",
			"\1\12\2\uffff\2\12\4\uffff\1\12\2\uffff\1\12\3\uffff\1\12\2\uffff\1"+
			"\12\4\uffff\1\12\2\uffff\1\13\1\12\2\uffff\1\12\2\uffff\1\12\4\uffff"+
			"\1\12\1\uffff\1\12\2\uffff\1\12\4\uffff\1\12\4\uffff\1\12",
			"\1\12\2\uffff\2\12\4\uffff\1\12\2\uffff\1\12\3\uffff\1\12\2\uffff\1"+
			"\12\4\uffff\1\12\2\uffff\1\13\1\12\2\uffff\1\12\2\uffff\1\12\4\uffff"+
			"\1\12\1\uffff\1\12\2\uffff\1\12\4\uffff\1\12\4\uffff\1\12",
			"\1\12\2\uffff\2\12\4\uffff\1\12\2\uffff\1\12\3\uffff\1\12\2\uffff\1"+
			"\12\4\uffff\1\12\2\uffff\1\13\1\12\2\uffff\1\12\2\uffff\1\12\4\uffff"+
			"\1\12\1\uffff\1\12\2\uffff\1\12\4\uffff\1\12\4\uffff\1\12",
			"\1\14",
			"",
			"",
			"\1\12\2\uffff\2\12\4\uffff\1\12\2\uffff\1\12\3\uffff\1\12\2\uffff\1"+
			"\12\4\uffff\1\12\2\uffff\1\13\1\12\2\uffff\1\12\2\uffff\1\12\4\uffff"+
			"\1\12\1\uffff\1\12\2\uffff\1\12\4\uffff\1\12\4\uffff\1\12\1\11"
	};

	static final short[] DFA10_eot = DFA.unpackEncodedString(DFA10_eotS);
	static final short[] DFA10_eof = DFA.unpackEncodedString(DFA10_eofS);
	static final char[] DFA10_min = DFA.unpackEncodedStringToUnsignedChars(DFA10_minS);
	static final char[] DFA10_max = DFA.unpackEncodedStringToUnsignedChars(DFA10_maxS);
	static final short[] DFA10_accept = DFA.unpackEncodedString(DFA10_acceptS);
	static final short[] DFA10_special = DFA.unpackEncodedString(DFA10_specialS);
	static final short[][] DFA10_transition;

	static {
		int numStates = DFA10_transitionS.length;
		DFA10_transition = new short[numStates][];
		for (int i=0; i ^( INDEX[$index.text] name ) );";
		}
	}

	public static final BitSet FOLLOW_conjunction_in_expression82 = new BitSet(new long[]{0x0000000000000000L});
	public static final BitSet FOLLOW_EOF_in_expression84 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_conjunction_in_condExpr97 = new BitSet(new long[]{0x0000000000000202L});
	public static final BitSet FOLLOW_COND_in_condExpr100 = new BitSet(new long[]{0x0238A43CD4D12C90L});
	public static final BitSet FOLLOW_addExpr_in_condExpr103 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_disjunction_in_conjunction118 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_AND_in_conjunction121 = new BitSet(new long[]{0x0238A63CD4D12C90L});
	public static final BitSet FOLLOW_disjunction_in_conjunction124 = new BitSet(new long[]{0x0000000000000022L});
	public static final BitSet FOLLOW_negation_in_disjunction139 = new BitSet(new long[]{0x0800100000000002L});
	public static final BitSet FOLLOW_set_in_disjunction142 = new BitSet(new long[]{0x0238A63CD4D12C90L});
	public static final BitSet FOLLOW_negation_in_disjunction151 = new BitSet(new long[]{0x0800100000000002L});
	public static final BitSet FOLLOW_cmpExpr_in_negation166 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOT_in_negation172 = new BitSet(new long[]{0x0238A43CD4D12C90L});
	public static final BitSet FOLLOW_cmpExpr_in_negation175 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_addExpr_in_cmpExpr188 = new BitSet(new long[]{0x0000008221220002L});
	public static final BitSet FOLLOW_cmpOp_in_cmpExpr191 = new BitSet(new long[]{0x0238A43CD4D12C90L});
	public static final BitSet FOLLOW_addExpr_in_cmpExpr194 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_multExpr_in_addExpr252 = new BitSet(new long[]{0x0000401000000002L});
	public static final BitSet FOLLOW_addOp_in_addExpr255 = new BitSet(new long[]{0x0238A43CD4D12C90L});
	public static final BitSet FOLLOW_multExpr_in_addExpr258 = new BitSet(new long[]{0x0000401000000002L});
	public static final BitSet FOLLOW_unary_in_multExpr292 = new BitSet(new long[]{0x0040000000004002L});
	public static final BitSet FOLLOW_multOp_in_multExpr295 = new BitSet(new long[]{0x0238A43CD4D12C90L});
	public static final BitSet FOLLOW_unary_in_multExpr298 = new BitSet(new long[]{0x0040000000004002L});
	public static final BitSet FOLLOW_MINUS_in_unary332 = new BitSet(new long[]{0x0238A42CD4D12C90L});
	public static final BitSet FOLLOW_atom_in_unary334 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_atom_in_unary349 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_var_in_atom362 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_num_in_atom368 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_str_in_atom374 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_fn_in_atom380 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LPAREN_in_atom386 = new BitSet(new long[]{0x0238A63CD4D12C90L});
	public static final BitSet FOLLOW_conjunction_in_atom388 = new BitSet(new long[]{0x0002000000000000L});
	public static final BitSet FOLLOW_RPAREN_in_atom390 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_name_in_var407 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_name_in_var413 = new BitSet(new long[]{0x0000000100000000L});
	public static final BitSet FOLLOW_index_in_var415 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LSQUARE_in_index437 = new BitSet(new long[]{0x0000000010000000L});
	public static final BitSet FOLLOW_INT_in_index441 = new BitSet(new long[]{0x0004000000000000L});
	public static final BitSet FOLLOW_RSQUARE_in_index443 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NAME_in_name461 = new BitSet(new long[]{0x1000000000000002L});
	public static final BitSet FOLLOW_60_in_name464 = new BitSet(new long[]{0x0000002000000000L});
	public static final BitSet FOLLOW_NAME_in_name467 = new BitSet(new long[]{0x1000000000000002L});
	public static final BitSet FOLLOW_TEXT_in_name483 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HTML_in_name496 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ATOM_in_name509 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DATE_in_name522 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NUMBER_in_name535 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GEO_in_name548 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_GEOPOINT_in_name561 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PHRASE_in_str598 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_fnName_in_fn611 = new BitSet(new long[]{0x0000000080000000L});
	public static final BitSet FOLLOW_LPAREN_in_fn613 = new BitSet(new long[]{0x0238A63CD4D12C90L});
	public static final BitSet FOLLOW_condExpr_in_fn615 = new BitSet(new long[]{0x0002000000000100L});
	public static final BitSet FOLLOW_COMMA_in_fn618 = new BitSet(new long[]{0x0238A63CD4D12C90L});
	public static final BitSet FOLLOW_condExpr_in_fn620 = new BitSet(new long[]{0x0002000000000100L});
	public static final BitSet FOLLOW_RPAREN_in_fn624 = new BitSet(new long[]{0x0000000000000002L});
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy