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

org.hibernate.sql.ordering.antlr.GeneratedOrderByFragmentParser Maven / Gradle / Ivy

There is a newer version: 7.0.0.Alpha1
Show newest version
// $ANTLR 2.7.6 (2005-12-22): "order-by.g" -> "GeneratedOrderByFragmentParser.java"$

/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
 * indicated by the @author tags or express copyright attribution
 * statements applied by the authors.  All third-party contributions are
 * distributed under license by Red Hat Middleware LLC.
 *
 * This copyrighted material is made available to anyone wishing to use, modify,
 * copy, or redistribute it subject to the terms and conditions of the GNU
 * Lesser General Public License, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 * for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution; if not, write to:
 * Free Software Foundation, Inc.
 * 51 Franklin Street, Fifth Floor
 * Boston, MA  02110-1301  USA
 *
 */
package org.hibernate.sql.ordering.antlr;

import antlr.TokenBuffer;
import antlr.TokenStreamException;
import antlr.TokenStreamIOException;
import antlr.ANTLRException;
import antlr.LLkParser;
import antlr.Token;
import antlr.TokenStream;
import antlr.RecognitionException;
import antlr.NoViableAltException;
import antlr.MismatchedTokenException;
import antlr.SemanticException;
import antlr.ParserSharedInputState;
import antlr.collections.impl.BitSet;
import antlr.collections.AST;
import java.util.Hashtable;
import antlr.ASTFactory;
import antlr.ASTPair;
import antlr.collections.impl.ASTArray;

/**
 * Antlr grammar for dealing with order-by mapping fragments.

 * @author Steve Ebersole
 */
public class GeneratedOrderByFragmentParser extends antlr.LLkParser       implements OrderByTemplateTokenTypes
 {

    /**
     * Method for logging execution trace information.
     *
     * @param msg The trace message.
     */
    protected void trace(String msg) {
        System.out.println( msg );
    }

    /**
     * Extract a node's text.
     *
     * @param ast The node
     *
     * @return The text.
     */
    protected final String extractText(AST ast) {
        // for some reason, within AST creation blocks "[]" I am somtimes unable to refer to the AST.getText() method
        // using #var (the #var is not interpreted as the rule's output AST).
        return ast.getText();
    }

    /**
     * Process the given node as a quote identifier.  These need to be quoted in the dialect-specific way.
     *
     * @param ident The quoted-identifier node.
     *
     * @return The processed node.
     *
     * @see org.hibernate.dialect.Dialect#quote
     */
    protected AST quotedIdentifier(AST ident) {
        return ident;
    }

    /**
     * Process the given node as a quote string.
     *
     * @param ident The quoted string.  This is used from within function param recognition, and represents a
     * SQL-quoted string.
     *
     * @return The processed node.
     */
    protected AST quotedString(AST ident) {
        return ident;
    }

    /**
     * A check to see if the text of the given node represents a known function name.
     *
     * @param ast The node whose text we want to check.
     *
     * @return True if the node's text is a known function name, false otherwise.
     *
     * @see org.hibernate.dialect.function.SQLFunctionRegistry
     */
    protected boolean isFunctionName(AST ast) {
        return false;
    }

    /**
     * Process the given node as a function.
     *
     * @param The node representing the function invocation (including parameters as subtree components).
     *
     * @return The processed node.
     */
    protected AST resolveFunction(AST ast) {
        return ast;
    }

    /**
     * Process the given node as an IDENT.  May represent either a column reference or a property reference.
     *
     * @param ident The node whose text represents either a column or property reference.
     *
     * @return The processed node.
     */
    protected AST resolveIdent(AST ident) {
        return ident;
    }

    /**
     * Allow post processing of each sort specification
     *
     * @param The grammar-built sort specification subtree.
     *
     * @return The processed sort specification subtree.
     */
    protected AST postProcessSortSpecification(AST sortSpec) {
        return sortSpec;
    }


protected GeneratedOrderByFragmentParser(TokenBuffer tokenBuf, int k) {
  super(tokenBuf,k);
  tokenNames = _tokenNames;
  buildTokenTypeASTClassMap();
  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
}

public GeneratedOrderByFragmentParser(TokenBuffer tokenBuf) {
  this(tokenBuf,3);
}

protected GeneratedOrderByFragmentParser(TokenStream lexer, int k) {
  super(lexer,k);
  tokenNames = _tokenNames;
  buildTokenTypeASTClassMap();
  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
}

public GeneratedOrderByFragmentParser(TokenStream lexer) {
  this(lexer,3);
}

public GeneratedOrderByFragmentParser(ParserSharedInputState state) {
  super(state,3);
  tokenNames = _tokenNames;
  buildTokenTypeASTClassMap();
  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
}

/**
 * Main recognition rule for this grammar
 */
	public final void orderByFragment() throws RecognitionException, TokenStreamException {
		
		traceIn("orderByFragment");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST orderByFragment_AST = null;
			trace("orderByFragment");
			
			try {      // for error handling
				sortSpecification();
				astFactory.addASTChild(currentAST, returnAST);
				{
				_loop3:
				do {
					if ((LA(1)==COMMA)) {
						match(COMMA);
						sortSpecification();
						astFactory.addASTChild(currentAST, returnAST);
					}
					else {
						break _loop3;
					}
					
				} while (true);
				}
				if ( inputState.guessing==0 ) {
					orderByFragment_AST = (AST)currentAST.root;
					
					orderByFragment_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(ORDER_BY,"order-by")).add(orderByFragment_AST));
					
					currentAST.root = orderByFragment_AST;
					currentAST.child = orderByFragment_AST!=null &&orderByFragment_AST.getFirstChild()!=null ?
						orderByFragment_AST.getFirstChild() : orderByFragment_AST;
					currentAST.advanceChildToEnd();
				}
				orderByFragment_AST = (AST)currentAST.root;
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_0);
				} else {
				  throw ex;
				}
			}
			returnAST = orderByFragment_AST;
		} finally { // debugging
			traceOut("orderByFragment");
		}
	}
	
/**
 * Reconition rule for what ANSI SQL terms the sort specification, which is essentially each thing upon which
 * the results should be sorted.
 */
	public final void sortSpecification() throws RecognitionException, TokenStreamException {
		
		traceIn("sortSpecification");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST sortSpecification_AST = null;
			trace("sortSpecification");
			
			try {      // for error handling
				sortKey();
				astFactory.addASTChild(currentAST, returnAST);
				{
				switch ( LA(1)) {
				case COLLATE:
				{
					collationSpecification();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case EOF:
				case ASCENDING:
				case DESCENDING:
				case COMMA:
				case LITERAL_ascending:
				case LITERAL_descending:
				{
					break;
				}
				default:
				{
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
				}
				{
				switch ( LA(1)) {
				case ASCENDING:
				case DESCENDING:
				case LITERAL_ascending:
				case LITERAL_descending:
				{
					orderingSpecification();
					astFactory.addASTChild(currentAST, returnAST);
					break;
				}
				case EOF:
				case COMMA:
				{
					break;
				}
				default:
				{
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
				}
				if ( inputState.guessing==0 ) {
					sortSpecification_AST = (AST)currentAST.root;
					
					sortSpecification_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(SORT_SPEC,"{sort specification}")).add(sortSpecification_AST));
					sortSpecification_AST = postProcessSortSpecification( sortSpecification_AST );
					
					currentAST.root = sortSpecification_AST;
					currentAST.child = sortSpecification_AST!=null &&sortSpecification_AST.getFirstChild()!=null ?
						sortSpecification_AST.getFirstChild() : sortSpecification_AST;
					currentAST.advanceChildToEnd();
				}
				sortSpecification_AST = (AST)currentAST.root;
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_1);
				} else {
				  throw ex;
				}
			}
			returnAST = sortSpecification_AST;
		} finally { // debugging
			traceOut("sortSpecification");
		}
	}
	
/**
 * Reconition rule for what ANSI SQL terms the sort key which is the expression (column, function, etc) upon
 * which to base the sorting.
 */
	public final void sortKey() throws RecognitionException, TokenStreamException {
		
		traceIn("sortKey");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST sortKey_AST = null;
			AST e_AST = null;
			trace("sortKey");
			
			try {      // for error handling
				expression();
				e_AST = (AST)returnAST;
				if ( inputState.guessing==0 ) {
					sortKey_AST = (AST)currentAST.root;
					
					sortKey_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(SORT_KEY,"sort key")).add(e_AST));
					
					currentAST.root = sortKey_AST;
					currentAST.child = sortKey_AST!=null &&sortKey_AST.getFirstChild()!=null ?
						sortKey_AST.getFirstChild() : sortKey_AST;
					currentAST.advanceChildToEnd();
				}
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_2);
				} else {
				  throw ex;
				}
			}
			returnAST = sortKey_AST;
		} finally { // debugging
			traceOut("sortKey");
		}
	}
	
/**
 * Reconition rule for what ANSI SQL terms the collation specification used to allow specifying that sorting for
 * the given {@link #sortSpecification} be treated within a specific character-set.
 */
	public final void collationSpecification() throws RecognitionException, TokenStreamException {
		
		traceIn("collationSpecification");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST collationSpecification_AST = null;
			Token  c = null;
			AST c_AST = null;
			AST cn_AST = null;
			trace("collationSpecification");
			
			try {      // for error handling
				c = LT(1);
				c_AST = astFactory.create(c);
				match(COLLATE);
				collationName();
				cn_AST = (AST)returnAST;
				if ( inputState.guessing==0 ) {
					collationSpecification_AST = (AST)currentAST.root;
					
					collationSpecification_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(COLLATE,extractText(cn_AST))));
					
					currentAST.root = collationSpecification_AST;
					currentAST.child = collationSpecification_AST!=null &&collationSpecification_AST.getFirstChild()!=null ?
						collationSpecification_AST.getFirstChild() : collationSpecification_AST;
					currentAST.advanceChildToEnd();
				}
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_3);
				} else {
				  throw ex;
				}
			}
			returnAST = collationSpecification_AST;
		} finally { // debugging
			traceOut("collationSpecification");
		}
	}
	
/**
 * Reconition rule for what ANSI SQL terms the ordering specification; ASCENDING or
 * DESCENDING.
 */
	public final void orderingSpecification() throws RecognitionException, TokenStreamException {
		
		traceIn("orderingSpecification");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST orderingSpecification_AST = null;
			trace("orderingSpecification");
			
			try {      // for error handling
				switch ( LA(1)) {
				case ASCENDING:
				case LITERAL_ascending:
				{
					{
					switch ( LA(1)) {
					case ASCENDING:
					{
						match(ASCENDING);
						break;
					}
					case LITERAL_ascending:
					{
						match(LITERAL_ascending);
						break;
					}
					default:
					{
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
					}
					if ( inputState.guessing==0 ) {
						orderingSpecification_AST = (AST)currentAST.root;
						
						orderingSpecification_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(ORDER_SPEC,"asc")));
						
						currentAST.root = orderingSpecification_AST;
						currentAST.child = orderingSpecification_AST!=null &&orderingSpecification_AST.getFirstChild()!=null ?
							orderingSpecification_AST.getFirstChild() : orderingSpecification_AST;
						currentAST.advanceChildToEnd();
					}
					break;
				}
				case DESCENDING:
				case LITERAL_descending:
				{
					{
					switch ( LA(1)) {
					case DESCENDING:
					{
						match(DESCENDING);
						break;
					}
					case LITERAL_descending:
					{
						match(LITERAL_descending);
						break;
					}
					default:
					{
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
					}
					if ( inputState.guessing==0 ) {
						orderingSpecification_AST = (AST)currentAST.root;
						
						orderingSpecification_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(ORDER_SPEC,"desc")));
						
						currentAST.root = orderingSpecification_AST;
						currentAST.child = orderingSpecification_AST!=null &&orderingSpecification_AST.getFirstChild()!=null ?
							orderingSpecification_AST.getFirstChild() : orderingSpecification_AST;
						currentAST.advanceChildToEnd();
					}
					break;
				}
				default:
				{
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_1);
				} else {
				  throw ex;
				}
			}
			returnAST = orderingSpecification_AST;
		} finally { // debugging
			traceOut("orderingSpecification");
		}
	}
	
/**
 * Reconition rule what this grammar recognizes as valid sort key.
 */
	public final void expression() throws RecognitionException, TokenStreamException {
		
		traceIn("expression");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST expression_AST = null;
			Token  qi = null;
			AST qi_AST = null;
			AST f_AST = null;
			AST p_AST = null;
			Token  i = null;
			AST i_AST = null;
			trace("expression");
			
			try {      // for error handling
				if ((LA(1)==HARD_QUOTE)) {
					AST tmp6_AST = null;
					tmp6_AST = astFactory.create(LT(1));
					match(HARD_QUOTE);
					qi = LT(1);
					qi_AST = astFactory.create(qi);
					match(IDENT);
					AST tmp7_AST = null;
					tmp7_AST = astFactory.create(LT(1));
					match(HARD_QUOTE);
					if ( inputState.guessing==0 ) {
						expression_AST = (AST)currentAST.root;
						
						expression_AST = quotedIdentifier( qi_AST );
						
						currentAST.root = expression_AST;
						currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
							expression_AST.getFirstChild() : expression_AST;
						currentAST.advanceChildToEnd();
					}
				}
				else {
					boolean synPredMatched12 = false;
					if (((LA(1)==IDENT) && (LA(2)==DOT||LA(2)==OPEN_PAREN) && (_tokenSet_4.member(LA(3))))) {
						int _m12 = mark();
						synPredMatched12 = true;
						inputState.guessing++;
						try {
							{
							match(IDENT);
							{
							_loop11:
							do {
								if ((LA(1)==DOT)) {
									match(DOT);
									match(IDENT);
								}
								else {
									break _loop11;
								}
								
							} while (true);
							}
							match(OPEN_PAREN);
							}
						}
						catch (RecognitionException pe) {
							synPredMatched12 = false;
						}
						rewind(_m12);
inputState.guessing--;
					}
					if ( synPredMatched12 ) {
						functionCall();
						f_AST = (AST)returnAST;
						if ( inputState.guessing==0 ) {
							expression_AST = (AST)currentAST.root;
							
							expression_AST = f_AST;
							
							currentAST.root = expression_AST;
							currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
								expression_AST.getFirstChild() : expression_AST;
							currentAST.advanceChildToEnd();
						}
					}
					else if ((LA(1)==IDENT) && (LA(2)==DOT) && (LA(3)==IDENT)) {
						simplePropertyPath();
						p_AST = (AST)returnAST;
						if ( inputState.guessing==0 ) {
							expression_AST = (AST)currentAST.root;
							
							expression_AST = resolveIdent( p_AST );
							
							currentAST.root = expression_AST;
							currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
								expression_AST.getFirstChild() : expression_AST;
							currentAST.advanceChildToEnd();
						}
					}
					else if ((LA(1)==IDENT) && (_tokenSet_5.member(LA(2)))) {
						i = LT(1);
						i_AST = astFactory.create(i);
						match(IDENT);
						if ( inputState.guessing==0 ) {
							expression_AST = (AST)currentAST.root;
							
							if ( isFunctionName( i_AST ) ) {
							expression_AST = resolveFunction( i_AST );
							}
							else {
							expression_AST = resolveIdent( i_AST );
							}
							
							currentAST.root = expression_AST;
							currentAST.child = expression_AST!=null &&expression_AST.getFirstChild()!=null ?
								expression_AST.getFirstChild() : expression_AST;
							currentAST.advanceChildToEnd();
						}
					}
					else {
						throw new NoViableAltException(LT(1), getFilename());
					}
					}
				}
				catch (RecognitionException ex) {
					if (inputState.guessing==0) {
						reportError(ex);
						recover(ex,_tokenSet_5);
					} else {
					  throw ex;
					}
				}
				returnAST = expression_AST;
			} finally { // debugging
				traceOut("expression");
			}
		}
		
/**
 * Recognition rule for a function call
 */
	public final void functionCall() throws RecognitionException, TokenStreamException {
		
		traceIn("functionCall");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST functionCall_AST = null;
			AST fn_AST = null;
			AST pl_AST = null;
			trace("functionCall");
			
			try {      // for error handling
				functionName();
				fn_AST = (AST)returnAST;
				AST tmp8_AST = null;
				tmp8_AST = astFactory.create(LT(1));
				match(OPEN_PAREN);
				functionParameterList();
				pl_AST = (AST)returnAST;
				AST tmp9_AST = null;
				tmp9_AST = astFactory.create(LT(1));
				match(CLOSE_PAREN);
				if ( inputState.guessing==0 ) {
					functionCall_AST = (AST)currentAST.root;
					
					functionCall_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(IDENT,extractText(fn_AST))).add(pl_AST));
					functionCall_AST = resolveFunction( functionCall_AST );
					
					currentAST.root = functionCall_AST;
					currentAST.child = functionCall_AST!=null &&functionCall_AST.getFirstChild()!=null ?
						functionCall_AST.getFirstChild() : functionCall_AST;
					currentAST.advanceChildToEnd();
				}
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_5);
				} else {
				  throw ex;
				}
			}
			returnAST = functionCall_AST;
		} finally { // debugging
			traceOut("functionCall");
		}
	}
	
/**
 * A simple-property-path is an IDENT followed by one or more (DOT IDENT) sequences
 */
	public final void simplePropertyPath() throws RecognitionException, TokenStreamException {
		
		traceIn("simplePropertyPath");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST simplePropertyPath_AST = null;
			Token  i = null;
			AST i_AST = null;
			Token  i2 = null;
			AST i2_AST = null;
			
			trace("simplePropertyPath");
			StringBuffer buffer = new StringBuffer();
			
			
			try {      // for error handling
				i = LT(1);
				i_AST = astFactory.create(i);
				astFactory.addASTChild(currentAST, i_AST);
				match(IDENT);
				if ( inputState.guessing==0 ) {
					buffer.append( i.getText() );
				}
				{
				int _cnt31=0;
				_loop31:
				do {
					if ((LA(1)==DOT)) {
						AST tmp10_AST = null;
						tmp10_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp10_AST);
						match(DOT);
						i2 = LT(1);
						i2_AST = astFactory.create(i2);
						astFactory.addASTChild(currentAST, i2_AST);
						match(IDENT);
						if ( inputState.guessing==0 ) {
							buffer.append( '.').append( i2.getText() );
						}
					}
					else {
						if ( _cnt31>=1 ) { break _loop31; } else {throw new NoViableAltException(LT(1), getFilename());}
					}
					
					_cnt31++;
				} while (true);
				}
				if ( inputState.guessing==0 ) {
					simplePropertyPath_AST = (AST)currentAST.root;
					
					simplePropertyPath_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(IDENT,buffer.toString())));
					
					currentAST.root = simplePropertyPath_AST;
					currentAST.child = simplePropertyPath_AST!=null &&simplePropertyPath_AST.getFirstChild()!=null ?
						simplePropertyPath_AST.getFirstChild() : simplePropertyPath_AST;
					currentAST.advanceChildToEnd();
				}
				simplePropertyPath_AST = (AST)currentAST.root;
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_5);
				} else {
				  throw ex;
				}
			}
			returnAST = simplePropertyPath_AST;
		} finally { // debugging
			traceOut("simplePropertyPath");
		}
	}
	
/**
 * Intended for use as a syntactic predicate to determine whether an IDENT represents a known SQL function name.
 */
	public final void functionCallCheck() throws RecognitionException, TokenStreamException {
		
		traceIn("functionCallCheck");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST functionCallCheck_AST = null;
			trace("functionCallCheck");
			
			try {      // for error handling
				AST tmp11_AST = null;
				tmp11_AST = astFactory.create(LT(1));
				match(IDENT);
				{
				_loop15:
				do {
					if ((LA(1)==DOT)) {
						AST tmp12_AST = null;
						tmp12_AST = astFactory.create(LT(1));
						match(DOT);
						AST tmp13_AST = null;
						tmp13_AST = astFactory.create(LT(1));
						match(IDENT);
					}
					else {
						break _loop15;
					}
					
				} while (true);
				}
				AST tmp14_AST = null;
				tmp14_AST = astFactory.create(LT(1));
				match(OPEN_PAREN);
				if (!( true ))
				  throw new SemanticException(" true ");
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_0);
				} else {
				  throw ex;
				}
			}
			returnAST = functionCallCheck_AST;
		} finally { // debugging
			traceOut("functionCallCheck");
		}
	}
	
/**
 * A function-name is an IDENT followed by zero or more (DOT IDENT) sequences
 */
	public final void functionName() throws RecognitionException, TokenStreamException {
		
		traceIn("functionName");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST functionName_AST = null;
			Token  i = null;
			AST i_AST = null;
			Token  i2 = null;
			AST i2_AST = null;
			
			trace("functionName");
			StringBuffer buffer = new StringBuffer();
			
			
			try {      // for error handling
				i = LT(1);
				i_AST = astFactory.create(i);
				astFactory.addASTChild(currentAST, i_AST);
				match(IDENT);
				if ( inputState.guessing==0 ) {
					buffer.append( i.getText() );
				}
				{
				_loop19:
				do {
					if ((LA(1)==DOT)) {
						AST tmp15_AST = null;
						tmp15_AST = astFactory.create(LT(1));
						astFactory.addASTChild(currentAST, tmp15_AST);
						match(DOT);
						i2 = LT(1);
						i2_AST = astFactory.create(i2);
						astFactory.addASTChild(currentAST, i2_AST);
						match(IDENT);
						if ( inputState.guessing==0 ) {
							buffer.append( '.').append( i2.getText() );
						}
					}
					else {
						break _loop19;
					}
					
				} while (true);
				}
				if ( inputState.guessing==0 ) {
					functionName_AST = (AST)currentAST.root;
					
					functionName_AST = (AST)astFactory.make( (new ASTArray(1)).add(astFactory.create(IDENT,buffer.toString())));
					
					currentAST.root = functionName_AST;
					currentAST.child = functionName_AST!=null &&functionName_AST.getFirstChild()!=null ?
						functionName_AST.getFirstChild() : functionName_AST;
					currentAST.advanceChildToEnd();
				}
				functionName_AST = (AST)currentAST.root;
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_6);
				} else {
				  throw ex;
				}
			}
			returnAST = functionName_AST;
		} finally { // debugging
			traceOut("functionName");
		}
	}
	
/**
 * Recognition rule used to "wrap" all function parameters into an EXPR_LIST node
 */
	public final void functionParameterList() throws RecognitionException, TokenStreamException {
		
		traceIn("functionParameterList");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST functionParameterList_AST = null;
			trace("functionParameterList");
			
			try {      // for error handling
				functionParameter();
				astFactory.addASTChild(currentAST, returnAST);
				{
				_loop22:
				do {
					if ((LA(1)==COMMA)) {
						match(COMMA);
						functionParameter();
						astFactory.addASTChild(currentAST, returnAST);
					}
					else {
						break _loop22;
					}
					
				} while (true);
				}
				if ( inputState.guessing==0 ) {
					functionParameterList_AST = (AST)currentAST.root;
					
					functionParameterList_AST = (AST)astFactory.make( (new ASTArray(2)).add(astFactory.create(EXPR_LIST,"{param list}")).add(functionParameterList_AST));
					
					currentAST.root = functionParameterList_AST;
					currentAST.child = functionParameterList_AST!=null &&functionParameterList_AST.getFirstChild()!=null ?
						functionParameterList_AST.getFirstChild() : functionParameterList_AST;
					currentAST.advanceChildToEnd();
				}
				functionParameterList_AST = (AST)currentAST.root;
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_7);
				} else {
				  throw ex;
				}
			}
			returnAST = functionParameterList_AST;
		} finally { // debugging
			traceOut("functionParameterList");
		}
	}
	
/**
 * Recognized function parameters.
 */
	public final void functionParameter() throws RecognitionException, TokenStreamException {
		
		traceIn("functionParameter");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST functionParameter_AST = null;
			trace("functionParameter");
			
			try {      // for error handling
				switch ( LA(1)) {
				case HARD_QUOTE:
				case IDENT:
				{
					expression();
					astFactory.addASTChild(currentAST, returnAST);
					functionParameter_AST = (AST)currentAST.root;
					break;
				}
				case NUM_DOUBLE:
				{
					AST tmp17_AST = null;
					tmp17_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp17_AST);
					match(NUM_DOUBLE);
					functionParameter_AST = (AST)currentAST.root;
					break;
				}
				case NUM_FLOAT:
				{
					AST tmp18_AST = null;
					tmp18_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp18_AST);
					match(NUM_FLOAT);
					functionParameter_AST = (AST)currentAST.root;
					break;
				}
				case NUM_INT:
				{
					AST tmp19_AST = null;
					tmp19_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp19_AST);
					match(NUM_INT);
					functionParameter_AST = (AST)currentAST.root;
					break;
				}
				case NUM_LONG:
				{
					AST tmp20_AST = null;
					tmp20_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp20_AST);
					match(NUM_LONG);
					functionParameter_AST = (AST)currentAST.root;
					break;
				}
				case QUOTED_STRING:
				{
					AST tmp21_AST = null;
					tmp21_AST = astFactory.create(LT(1));
					astFactory.addASTChild(currentAST, tmp21_AST);
					match(QUOTED_STRING);
					if ( inputState.guessing==0 ) {
						functionParameter_AST = (AST)currentAST.root;
						
						functionParameter_AST = quotedString( functionParameter_AST );
						
						currentAST.root = functionParameter_AST;
						currentAST.child = functionParameter_AST!=null &&functionParameter_AST.getFirstChild()!=null ?
							functionParameter_AST.getFirstChild() : functionParameter_AST;
						currentAST.advanceChildToEnd();
					}
					functionParameter_AST = (AST)currentAST.root;
					break;
				}
				default:
				{
					throw new NoViableAltException(LT(1), getFilename());
				}
				}
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_8);
				} else {
				  throw ex;
				}
			}
			returnAST = functionParameter_AST;
		} finally { // debugging
			traceOut("functionParameter");
		}
	}
	
/**
 * The collation name wrt {@link #collationSpecification}.  Namely, the character-set.
 */
	public final void collationName() throws RecognitionException, TokenStreamException {
		
		traceIn("collationName");
		try { // debugging
			returnAST = null;
			ASTPair currentAST = new ASTPair();
			AST collationName_AST = null;
			trace("collationSpecification");
			
			try {      // for error handling
				AST tmp22_AST = null;
				tmp22_AST = astFactory.create(LT(1));
				astFactory.addASTChild(currentAST, tmp22_AST);
				match(IDENT);
				collationName_AST = (AST)currentAST.root;
			}
			catch (RecognitionException ex) {
				if (inputState.guessing==0) {
					reportError(ex);
					recover(ex,_tokenSet_3);
				} else {
				  throw ex;
				}
			}
			returnAST = collationName_AST;
		} finally { // debugging
			traceOut("collationName");
		}
	}
	
	
	public static final String[] _tokenNames = {
		"<0>",
		"EOF",
		"<2>",
		"NULL_TREE_LOOKAHEAD",
		"ORDER_BY",
		"SORT_SPEC",
		"ORDER_SPEC",
		"SORT_KEY",
		"EXPR_LIST",
		"DOT",
		"IDENT_LIST",
		"COLUMN_REF",
		"\"collate\"",
		"\"asc\"",
		"\"desc\"",
		"COMMA",
		"HARD_QUOTE",
		"IDENT",
		"OPEN_PAREN",
		"CLOSE_PAREN",
		"NUM_DOUBLE",
		"NUM_FLOAT",
		"NUM_INT",
		"NUM_LONG",
		"QUOTED_STRING",
		"\"ascending\"",
		"\"descending\"",
		"ID_START_LETTER",
		"ID_LETTER",
		"ESCqs",
		"HEX_DIGIT",
		"EXPONENT",
		"FLOAT_SUFFIX",
		"WS"
	};
	
	protected void buildTokenTypeASTClassMap() {
		tokenTypeToASTClassMap=null;
	};
	
	private static final long[] mk_tokenSet_0() {
		long[] data = { 2L, 0L};
		return data;
	}
	public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
	private static final long[] mk_tokenSet_1() {
		long[] data = { 32770L, 0L};
		return data;
	}
	public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
	private static final long[] mk_tokenSet_2() {
		long[] data = { 100724738L, 0L};
		return data;
	}
	public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2());
	private static final long[] mk_tokenSet_3() {
		long[] data = { 100720642L, 0L};
		return data;
	}
	public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3());
	private static final long[] mk_tokenSet_4() {
		long[] data = { 32702464L, 0L};
		return data;
	}
	public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4());
	private static final long[] mk_tokenSet_5() {
		long[] data = { 101249026L, 0L};
		return data;
	}
	public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5());
	private static final long[] mk_tokenSet_6() {
		long[] data = { 262144L, 0L};
		return data;
	}
	public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6());
	private static final long[] mk_tokenSet_7() {
		long[] data = { 524288L, 0L};
		return data;
	}
	public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7());
	private static final long[] mk_tokenSet_8() {
		long[] data = { 557056L, 0L};
		return data;
	}
	public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8());
	
	}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy