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

org.firebirdsql.jdbc.parser.JaybirdSqlParser Maven / Gradle / Ivy

There is a newer version: 4.0.10.java8
Show newest version
/*
 * Firebird Open Source JavaEE Connector - JDBC Driver
 *
 * Distributable under LGPL license.
 * You may obtain a copy of the License at http://www.gnu.org/copyleft/lgpl.html
 *
 * 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
 * LGPL License for more details.
 *
 * This file was created by members of the firebird development team.
 * All individual contributions remain the Copyright (C) of those
 * individuals.  Contributors to this file are either listed here or
 * can be obtained from a source control history command.
 *
 * All rights reserved.
 */

// Generated from D:/Development/project/Jaybird/jaybird_3_0/src/main/org/firebirdsql/jdbc/parser\JaybirdSql.g4 by ANTLR 4.7
package org.firebirdsql.jdbc.parser;

import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.ATN;
import org.antlr.v4.runtime.atn.ATNDeserializer;
import org.antlr.v4.runtime.atn.ParserATNSimulator;
import org.antlr.v4.runtime.atn.PredictionContextCache;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.tree.ParseTreeListener;
import org.antlr.v4.runtime.tree.TerminalNode;

import java.util.ArrayList;
import java.util.List;

@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class JaybirdSqlParser extends Parser {
	static { RuntimeMetaData.checkVersion("4.7", RuntimeMetaData.VERSION); }

	protected static final DFA[] _decisionToDFA;
	protected static final PredictionContextCache _sharedContextCache =
		new PredictionContextCache();
	public static final int
		T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9, 
		T__9=10, T__10=11, ALL=12, AND=13, AS=14, AVG=15, BOTH=16, CAST=17, CHARACTER=18, 
		COUNT=19, COLLATE=20, DEFAULT=21, DELETE=22, DISTINCT=23, DB_KEY=24, EXTRACT=25, 
		EXECUTE=26, FOR=27, FROM=28, GEN_ID=29, INSERT=30, INTO=31, LEADING=32, 
		MATCHING=33, MINIMUM=34, MAXIMUM=35, NULL=36, NEXT=37, OR=38, PROCEDURE=39, 
		RETURNING=40, SEGMENT=41, SELECT=42, SET=43, SUBSTRING=44, SUB_TYPE=45, 
		SUM=46, TRIM=47, TRAILING=48, UNKNOWN=49, UPDATE=50, VALUE=51, VALUES=52, 
		KW_BLOB=53, KW_BIGINT=54, KW_BOOLEAN=55, KW_CHAR=56, KW_DATE=57, KW_DECIMAL=58, 
		KW_DOUBLE=59, KW_PRECISION=60, KW_FLOAT=61, KW_INTEGER=62, KW_INT=63, 
		KW_NCHAR=64, KW_NUMERIC=65, KW_NVARCHAR=66, KW_SMALLINT=67, KW_TIME=68, 
		KW_TIMESTAMP=69, KW_VARCHAR=70, KW_SIZE=71, LEFT_PAREN=72, RIGHT_PAREN=73, 
		COMMA=74, INTEGER=75, NUMERIC=76, REAL=77, STRING=78, BINARY_STRING=79, 
		TRUTH_VALUE=80, GENERIC_ID=81, QUOTED_ID=82, SL_COMMENT=83, COMMENT=84, 
		WS=85;
	public static final int
		RULE_statement = 0, RULE_deleteStatement = 1, RULE_updateStatement = 2, 
		RULE_assignments = 3, RULE_assignment = 4, RULE_updateOrInsertStatement = 5, 
		RULE_matchingClause = 6, RULE_insertStatement = 7, RULE_insertColumns = 8, 
		RULE_insertValues = 9, RULE_returningClause = 10, RULE_defaultValuesClause = 11, 
		RULE_simpleIdentifier = 12, RULE_fullIdentifier = 13, RULE_tableName = 14, 
		RULE_columnList = 15, RULE_columnName = 16, RULE_valueList = 17, RULE_value = 18, 
		RULE_parameter = 19, RULE_nullValue = 20, RULE_simpleValue = 21, RULE_nextValueExpression = 22, 
		RULE_castExpression = 23, RULE_dataTypeDescriptor = 24, RULE_nonArrayType = 25, 
		RULE_simpleType = 26, RULE_charType = 27, RULE_nonCharSetCharType = 28, 
		RULE_charSetCharType = 29, RULE_nonCharType = 30, RULE_blobType = 31, 
		RULE_blobSubtype = 32, RULE_blobSegSize = 33, RULE_charSetClause = 34, 
		RULE_arrayType = 35, RULE_arraySpec = 36, RULE_arrayRange = 37, RULE_arrayElement = 38, 
		RULE_function = 39, RULE_substringFunction = 40, RULE_trimFunction = 41, 
		RULE_extractFunction = 42, RULE_trimSpecification = 43, RULE_selectClause = 44;
	public static final String[] ruleNames = {
		"statement", "deleteStatement", "updateStatement", "assignments", "assignment", 
		"updateOrInsertStatement", "matchingClause", "insertStatement", "insertColumns", 
		"insertValues", "returningClause", "defaultValuesClause", "simpleIdentifier", 
		"fullIdentifier", "tableName", "columnList", "columnName", "valueList", 
		"value", "parameter", "nullValue", "simpleValue", "nextValueExpression", 
		"castExpression", "dataTypeDescriptor", "nonArrayType", "simpleType", 
		"charType", "nonCharSetCharType", "charSetCharType", "nonCharType", "blobType", 
		"blobSubtype", "blobSegSize", "charSetClause", "arrayType", "arraySpec", 
		"arrayRange", "arrayElement", "function", "substringFunction", "trimFunction", 
		"extractFunction", "trimSpecification", "selectClause"
	};

	private static final String[] _LITERAL_NAMES = {
		null, "'='", "'.'", "'+'", "'-'", "'*'", "'/'", "'||'", "'?'", "'['", 
		"']'", "':'", null, null, null, null, null, null, null, null, null, null, 
		null, null, null, null, null, null, null, null, null, null, null, null, 
		null, null, null, null, null, null, null, null, null, null, null, null, 
		null, null, null, null, null, null, null, null, null, null, null, null, 
		null, null, null, null, null, null, null, null, null, null, null, null, 
		null, null, "'('", "')'", "','"
	};
	private static final String[] _SYMBOLIC_NAMES = {
		null, null, null, null, null, null, null, null, null, null, null, null, 
		"ALL", "AND", "AS", "AVG", "BOTH", "CAST", "CHARACTER", "COUNT", "COLLATE", 
		"DEFAULT", "DELETE", "DISTINCT", "DB_KEY", "EXTRACT", "EXECUTE", "FOR", 
		"FROM", "GEN_ID", "INSERT", "INTO", "LEADING", "MATCHING", "MINIMUM", 
		"MAXIMUM", "NULL", "NEXT", "OR", "PROCEDURE", "RETURNING", "SEGMENT", 
		"SELECT", "SET", "SUBSTRING", "SUB_TYPE", "SUM", "TRIM", "TRAILING", "UNKNOWN", 
		"UPDATE", "VALUE", "VALUES", "KW_BLOB", "KW_BIGINT", "KW_BOOLEAN", "KW_CHAR", 
		"KW_DATE", "KW_DECIMAL", "KW_DOUBLE", "KW_PRECISION", "KW_FLOAT", "KW_INTEGER", 
		"KW_INT", "KW_NCHAR", "KW_NUMERIC", "KW_NVARCHAR", "KW_SMALLINT", "KW_TIME", 
		"KW_TIMESTAMP", "KW_VARCHAR", "KW_SIZE", "LEFT_PAREN", "RIGHT_PAREN", 
		"COMMA", "INTEGER", "NUMERIC", "REAL", "STRING", "BINARY_STRING", "TRUTH_VALUE", 
		"GENERIC_ID", "QUOTED_ID", "SL_COMMENT", "COMMENT", "WS"
	};
	public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);

	/**
	 * @deprecated Use {@link #VOCABULARY} instead.
	 */
	@Deprecated
	public static final String[] tokenNames;
	static {
		tokenNames = new String[_SYMBOLIC_NAMES.length];
		for (int i = 0; i < tokenNames.length; i++) {
			tokenNames[i] = VOCABULARY.getLiteralName(i);
			if (tokenNames[i] == null) {
				tokenNames[i] = VOCABULARY.getSymbolicName(i);
			}

			if (tokenNames[i] == null) {
				tokenNames[i] = "";
			}
		}
	}

	@Override
	@Deprecated
	public String[] getTokenNames() {
		return tokenNames;
	}

	@Override

	public Vocabulary getVocabulary() {
		return VOCABULARY;
	}

	@Override
	public String getGrammarFileName() { return "JaybirdSql.g4"; }

	@Override
	public String[] getRuleNames() { return ruleNames; }

	@Override
	public String getSerializedATN() { return _serializedATN; }

	@Override
	public ATN getATN() { return _ATN; }


	private boolean _inReturning;
	protected boolean _defaultValues;
	protected JaybirdStatementModel statementModel = new JaybirdStatementModel();

	protected ArrayList _errorMessages = new ArrayList();

	public JaybirdStatementModel getStatementModel() {
	    return statementModel;
	}

	public java.util.Collection getErrorMessages() {
	    return _errorMessages;
	}

	public String getColumn(int index) {
	    return (String)statementModel.getColumns().get(index);
	}

	public String getValue(int index) {
	    return (String)statementModel.getValues().get(index);
	}

	public String getTableName() {
	    return statementModel.getTableName();
	}

	public void emitErrorMessage(String msg) {
	    _errorMessages.add(msg);
	}

	public JaybirdSqlParser(TokenStream input) {
		super(input);
		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
	}
	public static class StatementContext extends ParserRuleContext {
		public InsertStatementContext insertStatement() {
			return getRuleContext(InsertStatementContext.class,0);
		}
		public DeleteStatementContext deleteStatement() {
			return getRuleContext(DeleteStatementContext.class,0);
		}
		public UpdateStatementContext updateStatement() {
			return getRuleContext(UpdateStatementContext.class,0);
		}
		public UpdateOrInsertStatementContext updateOrInsertStatement() {
			return getRuleContext(UpdateOrInsertStatementContext.class,0);
		}
		public StatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_statement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitStatement(this);
		}
	}

	public final StatementContext statement() throws RecognitionException {
		StatementContext _localctx = new StatementContext(_ctx, getState());
		enterRule(_localctx, 0, RULE_statement);
		try {
			setState(94);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(90);
				insertStatement();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(91);
				deleteStatement();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(92);
				updateStatement();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(93);
				updateOrInsertStatement();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DeleteStatementContext extends ParserRuleContext {
		public TerminalNode DELETE() { return getToken(JaybirdSqlParser.DELETE, 0); }
		public TerminalNode FROM() { return getToken(JaybirdSqlParser.FROM, 0); }
		public TableNameContext tableName() {
			return getRuleContext(TableNameContext.class,0);
		}
		public ReturningClauseContext returningClause() {
			return getRuleContext(ReturningClauseContext.class,0);
		}
		public DeleteStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_deleteStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterDeleteStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitDeleteStatement(this);
		}
	}

	public final DeleteStatementContext deleteStatement() throws RecognitionException {
		DeleteStatementContext _localctx = new DeleteStatementContext(_ctx, getState());
		enterRule(_localctx, 2, RULE_deleteStatement);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(96);
			match(DELETE);
			setState(97);
			match(FROM);
			setState(98);
			tableName();
			setState(102);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,1,_ctx);
			while ( _alt!=1 && _alt!= ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1+1 ) {
					{
					{
					setState(99);
					matchWildcard();
					}
					} 
				}
				setState(104);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,1,_ctx);
			}
			setState(106);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==RETURNING) {
				{
				setState(105);
				returningClause();
				}
			}


			                statementModel.setStatementType(JaybirdStatementModel.DELETE_TYPE);
			            
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class UpdateStatementContext extends ParserRuleContext {
		public TerminalNode UPDATE() { return getToken(JaybirdSqlParser.UPDATE, 0); }
		public TableNameContext tableName() {
			return getRuleContext(TableNameContext.class,0);
		}
		public TerminalNode SET() { return getToken(JaybirdSqlParser.SET, 0); }
		public AssignmentsContext assignments() {
			return getRuleContext(AssignmentsContext.class,0);
		}
		public ReturningClauseContext returningClause() {
			return getRuleContext(ReturningClauseContext.class,0);
		}
		public UpdateStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_updateStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterUpdateStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitUpdateStatement(this);
		}
	}

	public final UpdateStatementContext updateStatement() throws RecognitionException {
		UpdateStatementContext _localctx = new UpdateStatementContext(_ctx, getState());
		enterRule(_localctx, 4, RULE_updateStatement);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(110);
			match(UPDATE);
			setState(111);
			tableName();
			setState(112);
			match(SET);
			setState(113);
			assignments();
			setState(117);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,3,_ctx);
			while ( _alt!=1 && _alt!= ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1+1 ) {
					{
					{
					setState(114);
					matchWildcard();
					}
					} 
				}
				setState(119);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,3,_ctx);
			}
			setState(121);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==RETURNING) {
				{
				setState(120);
				returningClause();
				}
			}


			                statementModel.setStatementType(JaybirdStatementModel.UPDATE_TYPE);
			            
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AssignmentsContext extends ParserRuleContext {
		public List assignment() {
			return getRuleContexts(AssignmentContext.class);
		}
		public AssignmentContext assignment(int i) {
			return getRuleContext(AssignmentContext.class,i);
		}
		public AssignmentsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_assignments; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterAssignments(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitAssignments(this);
		}
	}

	public final AssignmentsContext assignments() throws RecognitionException {
		AssignmentsContext _localctx = new AssignmentsContext(_ctx, getState());
		enterRule(_localctx, 6, RULE_assignments);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(125);
			assignment();
			setState(130);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,5,_ctx);
			while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(126);
					match(COMMA);
					setState(127);
					assignment();
					}
					} 
				}
				setState(132);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,5,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class AssignmentContext extends ParserRuleContext {
		public ColumnNameContext columnName() {
			return getRuleContext(ColumnNameContext.class,0);
		}
		public ValueContext value() {
			return getRuleContext(ValueContext.class,0);
		}
		public AssignmentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_assignment; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterAssignment(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitAssignment(this);
		}
	}

	public final AssignmentContext assignment() throws RecognitionException {
		AssignmentContext _localctx = new AssignmentContext(_ctx, getState());
		enterRule(_localctx, 8, RULE_assignment);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(133);
			columnName();
			setState(134);
			match(T__0);
			setState(135);
			value(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class UpdateOrInsertStatementContext extends ParserRuleContext {
		public TerminalNode UPDATE() { return getToken(JaybirdSqlParser.UPDATE, 0); }
		public TerminalNode OR() { return getToken(JaybirdSqlParser.OR, 0); }
		public TerminalNode INSERT() { return getToken(JaybirdSqlParser.INSERT, 0); }
		public TerminalNode INTO() { return getToken(JaybirdSqlParser.INTO, 0); }
		public TableNameContext tableName() {
			return getRuleContext(TableNameContext.class,0);
		}
		public InsertValuesContext insertValues() {
			return getRuleContext(InsertValuesContext.class,0);
		}
		public InsertColumnsContext insertColumns() {
			return getRuleContext(InsertColumnsContext.class,0);
		}
		public MatchingClauseContext matchingClause() {
			return getRuleContext(MatchingClauseContext.class,0);
		}
		public ReturningClauseContext returningClause() {
			return getRuleContext(ReturningClauseContext.class,0);
		}
		public UpdateOrInsertStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_updateOrInsertStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterUpdateOrInsertStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitUpdateOrInsertStatement(this);
		}
	}

	public final UpdateOrInsertStatementContext updateOrInsertStatement() throws RecognitionException {
		UpdateOrInsertStatementContext _localctx = new UpdateOrInsertStatementContext(_ctx, getState());
		enterRule(_localctx, 10, RULE_updateOrInsertStatement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(137);
			match(UPDATE);
			setState(138);
			match(OR);
			setState(139);
			match(INSERT);
			setState(140);
			match(INTO);
			setState(141);
			tableName();
			setState(143);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==LEFT_PAREN) {
				{
				setState(142);
				insertColumns();
				}
			}

			setState(145);
			insertValues();
			setState(147);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==MATCHING) {
				{
				setState(146);
				matchingClause();
				}
			}

			setState(150);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==RETURNING) {
				{
				setState(149);
				returningClause();
				}
			}


			                statementModel.setStatementType(JaybirdStatementModel.UPDATE_OR_INSERT_TYPE);
			            
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class MatchingClauseContext extends ParserRuleContext {
		public TerminalNode MATCHING() { return getToken(JaybirdSqlParser.MATCHING, 0); }
		public ColumnListContext columnList() {
			return getRuleContext(ColumnListContext.class,0);
		}
		public MatchingClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_matchingClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterMatchingClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitMatchingClause(this);
		}
	}

	public final MatchingClauseContext matchingClause() throws RecognitionException {
		MatchingClauseContext _localctx = new MatchingClauseContext(_ctx, getState());
		enterRule(_localctx, 12, RULE_matchingClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(154);
			match(MATCHING);
			setState(155);
			match(LEFT_PAREN);
			setState(156);
			columnList();
			setState(157);
			match(RIGHT_PAREN);

			                _inReturning = false;
			            
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class InsertStatementContext extends ParserRuleContext {
		public TerminalNode INSERT() { return getToken(JaybirdSqlParser.INSERT, 0); }
		public TerminalNode INTO() { return getToken(JaybirdSqlParser.INTO, 0); }
		public TableNameContext tableName() {
			return getRuleContext(TableNameContext.class,0);
		}
		public InsertValuesContext insertValues() {
			return getRuleContext(InsertValuesContext.class,0);
		}
		public SelectClauseContext selectClause() {
			return getRuleContext(SelectClauseContext.class,0);
		}
		public DefaultValuesClauseContext defaultValuesClause() {
			return getRuleContext(DefaultValuesClauseContext.class,0);
		}
		public InsertColumnsContext insertColumns() {
			return getRuleContext(InsertColumnsContext.class,0);
		}
		public ReturningClauseContext returningClause() {
			return getRuleContext(ReturningClauseContext.class,0);
		}
		public InsertStatementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_insertStatement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterInsertStatement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitInsertStatement(this);
		}
	}

	public final InsertStatementContext insertStatement() throws RecognitionException {
		InsertStatementContext _localctx = new InsertStatementContext(_ctx, getState());
		enterRule(_localctx, 14, RULE_insertStatement);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(160);
			match(INSERT);
			setState(161);
			match(INTO);
			setState(162);
			tableName();
			setState(164);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==LEFT_PAREN) {
				{
				setState(163);
				insertColumns();
				}
			}

			setState(175);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case VALUES:
				{
				setState(166);
				insertValues();
				}
				break;
			case SELECT:
				{
				setState(167);
				selectClause();
				setState(171);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,10,_ctx);
				while ( _alt!=1 && _alt!= ATN.INVALID_ALT_NUMBER ) {
					if ( _alt==1+1 ) {
						{
						{
						setState(168);
						matchWildcard();
						}
						} 
					}
					setState(173);
					_errHandler.sync(this);
					_alt = getInterpreter().adaptivePredict(_input,10,_ctx);
				}
				}
				break;
			case DEFAULT:
				{
				setState(174);
				defaultValuesClause();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			setState(178);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==RETURNING) {
				{
				setState(177);
				returningClause();
				}
			}


			                statementModel.setStatementType(JaybirdStatementModel.INSERT_TYPE);
			            
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class InsertColumnsContext extends ParserRuleContext {
		public ColumnListContext columnList() {
			return getRuleContext(ColumnListContext.class,0);
		}
		public InsertColumnsContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_insertColumns; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterInsertColumns(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitInsertColumns(this);
		}
	}

	public final InsertColumnsContext insertColumns() throws RecognitionException {
		InsertColumnsContext _localctx = new InsertColumnsContext(_ctx, getState());
		enterRule(_localctx, 16, RULE_insertColumns);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(182);
			match(LEFT_PAREN);
			setState(183);
			columnList();
			setState(184);
			match(RIGHT_PAREN);

			                _inReturning = false;
			            
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class InsertValuesContext extends ParserRuleContext {
		public TerminalNode VALUES() { return getToken(JaybirdSqlParser.VALUES, 0); }
		public ValueListContext valueList() {
			return getRuleContext(ValueListContext.class,0);
		}
		public InsertValuesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_insertValues; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterInsertValues(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitInsertValues(this);
		}
	}

	public final InsertValuesContext insertValues() throws RecognitionException {
		InsertValuesContext _localctx = new InsertValuesContext(_ctx, getState());
		enterRule(_localctx, 18, RULE_insertValues);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(187);
			match(VALUES);
			setState(188);
			match(LEFT_PAREN);
			setState(189);
			valueList();
			setState(190);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ReturningClauseContext extends ParserRuleContext {
		public TerminalNode RETURNING() { return getToken(JaybirdSqlParser.RETURNING, 0); }
		public ColumnListContext columnList() {
			return getRuleContext(ColumnListContext.class,0);
		}
		public ReturningClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_returningClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterReturningClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitReturningClause(this);
		}
	}

	public final ReturningClauseContext returningClause() throws RecognitionException {
		ReturningClauseContext _localctx = new ReturningClauseContext(_ctx, getState());
		enterRule(_localctx, 20, RULE_returningClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(192);
			match(RETURNING);
			_inReturning = true;
			setState(194);
			columnList();
			_inReturning = true;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DefaultValuesClauseContext extends ParserRuleContext {
		public TerminalNode DEFAULT() { return getToken(JaybirdSqlParser.DEFAULT, 0); }
		public TerminalNode VALUES() { return getToken(JaybirdSqlParser.VALUES, 0); }
		public DefaultValuesClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_defaultValuesClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterDefaultValuesClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitDefaultValuesClause(this);
		}
	}

	public final DefaultValuesClauseContext defaultValuesClause() throws RecognitionException {
		DefaultValuesClauseContext _localctx = new DefaultValuesClauseContext(_ctx, getState());
		enterRule(_localctx, 22, RULE_defaultValuesClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(197);
			match(DEFAULT);
			setState(198);
			match(VALUES);

			                statementModel.setDefaultValues(true);
			            
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SimpleIdentifierContext extends ParserRuleContext {
		public TerminalNode GENERIC_ID() { return getToken(JaybirdSqlParser.GENERIC_ID, 0); }
		public TerminalNode QUOTED_ID() { return getToken(JaybirdSqlParser.QUOTED_ID, 0); }
		public SimpleIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_simpleIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterSimpleIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitSimpleIdentifier(this);
		}
	}

	public final SimpleIdentifierContext simpleIdentifier() throws RecognitionException {
		SimpleIdentifierContext _localctx = new SimpleIdentifierContext(_ctx, getState());
		enterRule(_localctx, 24, RULE_simpleIdentifier);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(201);
			_la = _input.LA(1);
			if ( !(_la==GENERIC_ID || _la==QUOTED_ID) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FullIdentifierContext extends ParserRuleContext {
		public List simpleIdentifier() {
			return getRuleContexts(SimpleIdentifierContext.class);
		}
		public SimpleIdentifierContext simpleIdentifier(int i) {
			return getRuleContext(SimpleIdentifierContext.class,i);
		}
		public FullIdentifierContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_fullIdentifier; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterFullIdentifier(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitFullIdentifier(this);
		}
	}

	public final FullIdentifierContext fullIdentifier() throws RecognitionException {
		FullIdentifierContext _localctx = new FullIdentifierContext(_ctx, getState());
		enterRule(_localctx, 26, RULE_fullIdentifier);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(203);
			simpleIdentifier();
			setState(204);
			match(T__1);
			setState(205);
			simpleIdentifier();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TableNameContext extends ParserRuleContext {
		public SimpleIdentifierContext t;
		public SimpleIdentifierContext simpleIdentifier() {
			return getRuleContext(SimpleIdentifierContext.class,0);
		}
		public TableNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tableName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterTableName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitTableName(this);
		}
	}

	public final TableNameContext tableName() throws RecognitionException {
		TableNameContext _localctx = new TableNameContext(_ctx, getState());
		enterRule(_localctx, 28, RULE_tableName);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(207);
			((TableNameContext)_localctx).t = simpleIdentifier();

			                statementModel.setTableName((((TableNameContext)_localctx).t!=null?_input.getText(((TableNameContext)_localctx).t.start,((TableNameContext)_localctx).t.stop):null));
			            
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ColumnListContext extends ParserRuleContext {
		public List columnName() {
			return getRuleContexts(ColumnNameContext.class);
		}
		public ColumnNameContext columnName(int i) {
			return getRuleContext(ColumnNameContext.class,i);
		}
		public ColumnListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_columnList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterColumnList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitColumnList(this);
		}
	}

	public final ColumnListContext columnList() throws RecognitionException {
		ColumnListContext _localctx = new ColumnListContext(_ctx, getState());
		enterRule(_localctx, 30, RULE_columnList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(210);
			columnName();
			setState(215);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(211);
				match(COMMA);
				setState(212);
				columnName();
				}
				}
				setState(217);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ColumnNameContext extends ParserRuleContext {
		public SimpleIdentifierContext si;
		public FullIdentifierContext fi;
		public SimpleIdentifierContext simpleIdentifier() {
			return getRuleContext(SimpleIdentifierContext.class,0);
		}
		public FullIdentifierContext fullIdentifier() {
			return getRuleContext(FullIdentifierContext.class,0);
		}
		public ColumnNameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_columnName; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterColumnName(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitColumnName(this);
		}
	}

	public final ColumnNameContext columnName() throws RecognitionException {
		ColumnNameContext _localctx = new ColumnNameContext(_ctx, getState());
		enterRule(_localctx, 32, RULE_columnName);
		try {
			setState(224);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(218);
				((ColumnNameContext)_localctx).si = simpleIdentifier();

				                if (_inReturning)
				                    statementModel.addReturningColumn((((ColumnNameContext)_localctx).si!=null?_input.getText(((ColumnNameContext)_localctx).si.start,((ColumnNameContext)_localctx).si.stop):null));
				                else
				                    statementModel.addColumn((((ColumnNameContext)_localctx).si!=null?_input.getText(((ColumnNameContext)_localctx).si.start,((ColumnNameContext)_localctx).si.stop):null));
				            
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(221);
				((ColumnNameContext)_localctx).fi = fullIdentifier();

				                if (_inReturning)
				                    statementModel.addReturningColumn((((ColumnNameContext)_localctx).fi!=null?_input.getText(((ColumnNameContext)_localctx).fi.start,((ColumnNameContext)_localctx).fi.stop):null));
				                else
				                    statementModel.addColumn((((ColumnNameContext)_localctx).fi!=null?_input.getText(((ColumnNameContext)_localctx).fi.start,((ColumnNameContext)_localctx).fi.stop):null));
				            
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ValueListContext extends ParserRuleContext {
		public List value() {
			return getRuleContexts(ValueContext.class);
		}
		public ValueContext value(int i) {
			return getRuleContext(ValueContext.class,i);
		}
		public ValueListContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_valueList; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterValueList(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitValueList(this);
		}
	}

	public final ValueListContext valueList() throws RecognitionException {
		ValueListContext _localctx = new ValueListContext(_ctx, getState());
		enterRule(_localctx, 34, RULE_valueList);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(226);
			value(0);
			setState(231);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(227);
				match(COMMA);
				setState(228);
				value(0);
				}
				}
				setState(233);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ValueContext extends ParserRuleContext {
		public SimpleValueContext simpleValue() {
			return getRuleContext(SimpleValueContext.class,0);
		}
		public TerminalNode LEFT_PAREN() { return getToken(JaybirdSqlParser.LEFT_PAREN, 0); }
		public List value() {
			return getRuleContexts(ValueContext.class);
		}
		public ValueContext value(int i) {
			return getRuleContext(ValueContext.class,i);
		}
		public TerminalNode RIGHT_PAREN() { return getToken(JaybirdSqlParser.RIGHT_PAREN, 0); }
		public ParameterContext parameter() {
			return getRuleContext(ParameterContext.class,0);
		}
		public NullValueContext nullValue() {
			return getRuleContext(NullValueContext.class,0);
		}
		public FunctionContext function() {
			return getRuleContext(FunctionContext.class,0);
		}
		public NextValueExpressionContext nextValueExpression() {
			return getRuleContext(NextValueExpressionContext.class,0);
		}
		public CastExpressionContext castExpression() {
			return getRuleContext(CastExpressionContext.class,0);
		}
		public ArrayElementContext arrayElement() {
			return getRuleContext(ArrayElementContext.class,0);
		}
		public TerminalNode DB_KEY() { return getToken(JaybirdSqlParser.DB_KEY, 0); }
		public SimpleIdentifierContext simpleIdentifier() {
			return getRuleContext(SimpleIdentifierContext.class,0);
		}
		public TerminalNode COLLATE() { return getToken(JaybirdSqlParser.COLLATE, 0); }
		public ValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_value; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterValue(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitValue(this);
		}
	}

	public final ValueContext value() throws RecognitionException {
		return value(0);
	}

	private ValueContext value(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		ValueContext _localctx = new ValueContext(_ctx, _parentState);
		ValueContext _prevctx = _localctx;
		int _startState = 36;
		enterRecursionRule(_localctx, 36, RULE_value, _p);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(256);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) {
			case 1:
				{
				setState(235);
				simpleValue();
				}
				break;
			case 2:
				{
				setState(236);
				match(T__2);
				setState(237);
				simpleValue();
				}
				break;
			case 3:
				{
				setState(238);
				match(T__3);
				setState(239);
				simpleValue();
				}
				break;
			case 4:
				{
				setState(240);
				match(LEFT_PAREN);
				setState(241);
				value(0);
				setState(242);
				match(RIGHT_PAREN);
				}
				break;
			case 5:
				{
				setState(244);
				parameter();
				}
				break;
			case 6:
				{
				setState(245);
				nullValue();
				}
				break;
			case 7:
				{
				setState(246);
				function();
				}
				break;
			case 8:
				{
				setState(247);
				nextValueExpression();
				}
				break;
			case 9:
				{
				setState(248);
				castExpression();
				}
				break;
			case 10:
				{
				setState(249);
				arrayElement();
				}
				break;
			case 11:
				{
				setState(250);
				match(DB_KEY);
				}
				break;
			case 12:
				{
				setState(251);
				simpleIdentifier();
				setState(252);
				match(T__1);
				setState(253);
				match(DB_KEY);
				}
				break;
			case 13:
				{
				setState(255);
				simpleIdentifier();
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(278);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,18,_ctx);
			while ( _alt!=2 && _alt!= ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(276);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) {
					case 1:
						{
						_localctx = new ValueContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_value);
						setState(258);
						if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
						setState(259);
						match(T__2);
						setState(260);
						value(19);
						}
						break;
					case 2:
						{
						_localctx = new ValueContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_value);
						setState(261);
						if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
						setState(262);
						match(T__3);
						setState(263);
						value(18);
						}
						break;
					case 3:
						{
						_localctx = new ValueContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_value);
						setState(264);
						if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)");
						setState(265);
						match(T__4);
						setState(266);
						value(17);
						}
						break;
					case 4:
						{
						_localctx = new ValueContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_value);
						setState(267);
						if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
						setState(268);
						match(T__5);
						setState(269);
						value(16);
						}
						break;
					case 5:
						{
						_localctx = new ValueContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_value);
						setState(270);
						if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
						setState(271);
						match(T__6);
						setState(272);
						value(15);
						}
						break;
					case 6:
						{
						_localctx = new ValueContext(_parentctx, _parentState);
						pushNewRecursionContext(_localctx, _startState, RULE_value);
						setState(273);
						if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
						setState(274);
						match(COLLATE);
						setState(275);
						simpleIdentifier();
						}
						break;
					}
					} 
				}
				setState(280);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,18,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class ParameterContext extends ParserRuleContext {
		public ParameterContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_parameter; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterParameter(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitParameter(this);
		}
	}

	public final ParameterContext parameter() throws RecognitionException {
		ParameterContext _localctx = new ParameterContext(_ctx, getState());
		enterRule(_localctx, 38, RULE_parameter);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(281);
			match(T__7);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NullValueContext extends ParserRuleContext {
		public TerminalNode NULL() { return getToken(JaybirdSqlParser.NULL, 0); }
		public TerminalNode UNKNOWN() { return getToken(JaybirdSqlParser.UNKNOWN, 0); }
		public NullValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nullValue; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterNullValue(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitNullValue(this);
		}
	}

	public final NullValueContext nullValue() throws RecognitionException {
		NullValueContext _localctx = new NullValueContext(_ctx, getState());
		enterRule(_localctx, 40, RULE_nullValue);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(283);
			_la = _input.LA(1);
			if ( !(_la==NULL || _la==UNKNOWN) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SimpleValueContext extends ParserRuleContext {
		public TerminalNode TRUTH_VALUE() { return getToken(JaybirdSqlParser.TRUTH_VALUE, 0); }
		public TerminalNode STRING() { return getToken(JaybirdSqlParser.STRING, 0); }
		public TerminalNode BINARY_STRING() { return getToken(JaybirdSqlParser.BINARY_STRING, 0); }
		public TerminalNode INTEGER() { return getToken(JaybirdSqlParser.INTEGER, 0); }
		public TerminalNode NUMERIC() { return getToken(JaybirdSqlParser.NUMERIC, 0); }
		public TerminalNode REAL() { return getToken(JaybirdSqlParser.REAL, 0); }
		public SimpleValueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_simpleValue; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterSimpleValue(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitSimpleValue(this);
		}
	}

	public final SimpleValueContext simpleValue() throws RecognitionException {
		SimpleValueContext _localctx = new SimpleValueContext(_ctx, getState());
		enterRule(_localctx, 42, RULE_simpleValue);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(285);
			_la = _input.LA(1);
			if ( !(((((_la - 75)) & ~0x3f) == 0 && ((1L << (_la - 75)) & ((1L << (INTEGER - 75)) | (1L << (NUMERIC - 75)) | (1L << (REAL - 75)) | (1L << (STRING - 75)) | (1L << (BINARY_STRING - 75)) | (1L << (TRUTH_VALUE - 75)))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NextValueExpressionContext extends ParserRuleContext {
		public TerminalNode NEXT() { return getToken(JaybirdSqlParser.NEXT, 0); }
		public TerminalNode VALUE() { return getToken(JaybirdSqlParser.VALUE, 0); }
		public TerminalNode FOR() { return getToken(JaybirdSqlParser.FOR, 0); }
		public SimpleIdentifierContext simpleIdentifier() {
			return getRuleContext(SimpleIdentifierContext.class,0);
		}
		public TerminalNode GEN_ID() { return getToken(JaybirdSqlParser.GEN_ID, 0); }
		public TerminalNode INTEGER() { return getToken(JaybirdSqlParser.INTEGER, 0); }
		public NextValueExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nextValueExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterNextValueExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitNextValueExpression(this);
		}
	}

	public final NextValueExpressionContext nextValueExpression() throws RecognitionException {
		NextValueExpressionContext _localctx = new NextValueExpressionContext(_ctx, getState());
		enterRule(_localctx, 44, RULE_nextValueExpression);
		try {
			setState(298);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case NEXT:
				enterOuterAlt(_localctx, 1);
				{
				setState(287);
				match(NEXT);
				setState(288);
				match(VALUE);
				setState(289);
				match(FOR);
				setState(290);
				simpleIdentifier();
				}
				break;
			case GEN_ID:
				enterOuterAlt(_localctx, 2);
				{
				setState(291);
				match(GEN_ID);
				setState(292);
				match(LEFT_PAREN);
				setState(293);
				simpleIdentifier();
				setState(294);
				match(COMMA);
				setState(295);
				match(INTEGER);
				setState(296);
				match(RIGHT_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CastExpressionContext extends ParserRuleContext {
		public TerminalNode CAST() { return getToken(JaybirdSqlParser.CAST, 0); }
		public ValueContext value() {
			return getRuleContext(ValueContext.class,0);
		}
		public TerminalNode AS() { return getToken(JaybirdSqlParser.AS, 0); }
		public DataTypeDescriptorContext dataTypeDescriptor() {
			return getRuleContext(DataTypeDescriptorContext.class,0);
		}
		public CastExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_castExpression; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterCastExpression(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitCastExpression(this);
		}
	}

	public final CastExpressionContext castExpression() throws RecognitionException {
		CastExpressionContext _localctx = new CastExpressionContext(_ctx, getState());
		enterRule(_localctx, 46, RULE_castExpression);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(300);
			match(CAST);
			setState(301);
			match(LEFT_PAREN);
			setState(302);
			value(0);
			setState(303);
			match(AS);
			setState(304);
			dataTypeDescriptor();
			setState(305);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DataTypeDescriptorContext extends ParserRuleContext {
		public NonArrayTypeContext nonArrayType() {
			return getRuleContext(NonArrayTypeContext.class,0);
		}
		public ArrayTypeContext arrayType() {
			return getRuleContext(ArrayTypeContext.class,0);
		}
		public DataTypeDescriptorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dataTypeDescriptor; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterDataTypeDescriptor(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitDataTypeDescriptor(this);
		}
	}

	public final DataTypeDescriptorContext dataTypeDescriptor() throws RecognitionException {
		DataTypeDescriptorContext _localctx = new DataTypeDescriptorContext(_ctx, getState());
		enterRule(_localctx, 48, RULE_dataTypeDescriptor);
		try {
			setState(309);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(307);
				nonArrayType();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(308);
				arrayType();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NonArrayTypeContext extends ParserRuleContext {
		public SimpleTypeContext simpleType() {
			return getRuleContext(SimpleTypeContext.class,0);
		}
		public BlobTypeContext blobType() {
			return getRuleContext(BlobTypeContext.class,0);
		}
		public NonArrayTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nonArrayType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterNonArrayType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitNonArrayType(this);
		}
	}

	public final NonArrayTypeContext nonArrayType() throws RecognitionException {
		NonArrayTypeContext _localctx = new NonArrayTypeContext(_ctx, getState());
		enterRule(_localctx, 50, RULE_nonArrayType);
		try {
			setState(313);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case KW_BIGINT:
			case KW_BOOLEAN:
			case KW_CHAR:
			case KW_DATE:
			case KW_DECIMAL:
			case KW_DOUBLE:
			case KW_FLOAT:
			case KW_INTEGER:
			case KW_INT:
			case KW_NCHAR:
			case KW_NUMERIC:
			case KW_NVARCHAR:
			case KW_SMALLINT:
			case KW_TIME:
			case KW_TIMESTAMP:
			case KW_VARCHAR:
				enterOuterAlt(_localctx, 1);
				{
				setState(311);
				simpleType();
				}
				break;
			case KW_BLOB:
				enterOuterAlt(_localctx, 2);
				{
				setState(312);
				blobType();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SimpleTypeContext extends ParserRuleContext {
		public NonCharTypeContext nonCharType() {
			return getRuleContext(NonCharTypeContext.class,0);
		}
		public CharTypeContext charType() {
			return getRuleContext(CharTypeContext.class,0);
		}
		public SimpleTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_simpleType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterSimpleType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitSimpleType(this);
		}
	}

	public final SimpleTypeContext simpleType() throws RecognitionException {
		SimpleTypeContext _localctx = new SimpleTypeContext(_ctx, getState());
		enterRule(_localctx, 52, RULE_simpleType);
		try {
			setState(317);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case KW_BIGINT:
			case KW_BOOLEAN:
			case KW_DATE:
			case KW_DECIMAL:
			case KW_DOUBLE:
			case KW_FLOAT:
			case KW_INTEGER:
			case KW_INT:
			case KW_NUMERIC:
			case KW_SMALLINT:
			case KW_TIME:
			case KW_TIMESTAMP:
				enterOuterAlt(_localctx, 1);
				{
				setState(315);
				nonCharType();
				}
				break;
			case KW_CHAR:
			case KW_NCHAR:
			case KW_NVARCHAR:
			case KW_VARCHAR:
				enterOuterAlt(_localctx, 2);
				{
				setState(316);
				charType();
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CharTypeContext extends ParserRuleContext {
		public NonCharSetCharTypeContext nonCharSetCharType() {
			return getRuleContext(NonCharSetCharTypeContext.class,0);
		}
		public CharSetCharTypeContext charSetCharType() {
			return getRuleContext(CharSetCharTypeContext.class,0);
		}
		public CharTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_charType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterCharType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitCharType(this);
		}
	}

	public final CharTypeContext charType() throws RecognitionException {
		CharTypeContext _localctx = new CharTypeContext(_ctx, getState());
		enterRule(_localctx, 54, RULE_charType);
		try {
			setState(321);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(319);
				nonCharSetCharType();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(320);
				charSetCharType();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NonCharSetCharTypeContext extends ParserRuleContext {
		public TerminalNode KW_CHAR() { return getToken(JaybirdSqlParser.KW_CHAR, 0); }
		public TerminalNode KW_NCHAR() { return getToken(JaybirdSqlParser.KW_NCHAR, 0); }
		public TerminalNode INTEGER() { return getToken(JaybirdSqlParser.INTEGER, 0); }
		public TerminalNode KW_VARCHAR() { return getToken(JaybirdSqlParser.KW_VARCHAR, 0); }
		public TerminalNode KW_NVARCHAR() { return getToken(JaybirdSqlParser.KW_NVARCHAR, 0); }
		public NonCharSetCharTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nonCharSetCharType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterNonCharSetCharType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitNonCharSetCharType(this);
		}
	}

	public final NonCharSetCharTypeContext nonCharSetCharType() throws RecognitionException {
		NonCharSetCharTypeContext _localctx = new NonCharSetCharTypeContext(_ctx, getState());
		enterRule(_localctx, 56, RULE_nonCharSetCharType);
		int _la;
		try {
			setState(333);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case KW_CHAR:
			case KW_NCHAR:
				enterOuterAlt(_localctx, 1);
				{
				setState(323);
				_la = _input.LA(1);
				if ( !(_la==KW_CHAR || _la==KW_NCHAR) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(327);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LEFT_PAREN) {
					{
					setState(324);
					match(LEFT_PAREN);
					setState(325);
					match(INTEGER);
					setState(326);
					match(RIGHT_PAREN);
					}
				}

				}
				break;
			case KW_NVARCHAR:
			case KW_VARCHAR:
				enterOuterAlt(_localctx, 2);
				{
				setState(329);
				_la = _input.LA(1);
				if ( !(_la==KW_NVARCHAR || _la==KW_VARCHAR) ) {
				_errHandler.recoverInline(this);
				}
				else {
					if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
					_errHandler.reportMatch(this);
					consume();
				}
				setState(330);
				match(LEFT_PAREN);
				setState(331);
				match(INTEGER);
				setState(332);
				match(RIGHT_PAREN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CharSetCharTypeContext extends ParserRuleContext {
		public NonCharSetCharTypeContext nonCharSetCharType() {
			return getRuleContext(NonCharSetCharTypeContext.class,0);
		}
		public CharSetClauseContext charSetClause() {
			return getRuleContext(CharSetClauseContext.class,0);
		}
		public CharSetCharTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_charSetCharType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterCharSetCharType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitCharSetCharType(this);
		}
	}

	public final CharSetCharTypeContext charSetCharType() throws RecognitionException {
		CharSetCharTypeContext _localctx = new CharSetCharTypeContext(_ctx, getState());
		enterRule(_localctx, 58, RULE_charSetCharType);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(335);
			nonCharSetCharType();
			setState(336);
			charSetClause();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NonCharTypeContext extends ParserRuleContext {
		public TerminalNode KW_BIGINT() { return getToken(JaybirdSqlParser.KW_BIGINT, 0); }
		public TerminalNode KW_DATE() { return getToken(JaybirdSqlParser.KW_DATE, 0); }
		public TerminalNode KW_DECIMAL() { return getToken(JaybirdSqlParser.KW_DECIMAL, 0); }
		public List INTEGER() { return getTokens(JaybirdSqlParser.INTEGER); }
		public TerminalNode INTEGER(int i) {
			return getToken(JaybirdSqlParser.INTEGER, i);
		}
		public TerminalNode KW_DOUBLE() { return getToken(JaybirdSqlParser.KW_DOUBLE, 0); }
		public TerminalNode KW_PRECISION() { return getToken(JaybirdSqlParser.KW_PRECISION, 0); }
		public TerminalNode KW_FLOAT() { return getToken(JaybirdSqlParser.KW_FLOAT, 0); }
		public TerminalNode KW_INTEGER() { return getToken(JaybirdSqlParser.KW_INTEGER, 0); }
		public TerminalNode KW_INT() { return getToken(JaybirdSqlParser.KW_INT, 0); }
		public TerminalNode KW_NUMERIC() { return getToken(JaybirdSqlParser.KW_NUMERIC, 0); }
		public TerminalNode KW_SMALLINT() { return getToken(JaybirdSqlParser.KW_SMALLINT, 0); }
		public TerminalNode KW_TIME() { return getToken(JaybirdSqlParser.KW_TIME, 0); }
		public TerminalNode KW_TIMESTAMP() { return getToken(JaybirdSqlParser.KW_TIMESTAMP, 0); }
		public TerminalNode KW_BOOLEAN() { return getToken(JaybirdSqlParser.KW_BOOLEAN, 0); }
		public NonCharTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nonCharType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterNonCharType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitNonCharType(this);
		}
	}

	public final NonCharTypeContext nonCharType() throws RecognitionException {
		NonCharTypeContext _localctx = new NonCharTypeContext(_ctx, getState());
		enterRule(_localctx, 60, RULE_nonCharType);
		int _la;
		try {
			setState(369);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case KW_BIGINT:
				enterOuterAlt(_localctx, 1);
				{
				setState(338);
				match(KW_BIGINT);
				}
				break;
			case KW_DATE:
				enterOuterAlt(_localctx, 2);
				{
				setState(339);
				match(KW_DATE);
				}
				break;
			case KW_DECIMAL:
				enterOuterAlt(_localctx, 3);
				{
				setState(340);
				match(KW_DECIMAL);
				setState(348);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LEFT_PAREN) {
					{
					setState(341);
					match(LEFT_PAREN);
					setState(342);
					match(INTEGER);
					setState(345);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==COMMA) {
						{
						setState(343);
						match(COMMA);
						setState(344);
						match(INTEGER);
						}
					}

					setState(347);
					match(RIGHT_PAREN);
					}
				}

				}
				break;
			case KW_DOUBLE:
				enterOuterAlt(_localctx, 4);
				{
				setState(350);
				match(KW_DOUBLE);
				setState(351);
				match(KW_PRECISION);
				}
				break;
			case KW_FLOAT:
				enterOuterAlt(_localctx, 5);
				{
				setState(352);
				match(KW_FLOAT);
				}
				break;
			case KW_INTEGER:
				enterOuterAlt(_localctx, 6);
				{
				setState(353);
				match(KW_INTEGER);
				}
				break;
			case KW_INT:
				enterOuterAlt(_localctx, 7);
				{
				setState(354);
				match(KW_INT);
				}
				break;
			case KW_NUMERIC:
				enterOuterAlt(_localctx, 8);
				{
				setState(355);
				match(KW_NUMERIC);
				setState(363);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==LEFT_PAREN) {
					{
					setState(356);
					match(LEFT_PAREN);
					setState(357);
					match(INTEGER);
					setState(360);
					_errHandler.sync(this);
					_la = _input.LA(1);
					if (_la==COMMA) {
						{
						setState(358);
						match(COMMA);
						setState(359);
						match(INTEGER);
						}
					}

					setState(362);
					match(RIGHT_PAREN);
					}
				}

				}
				break;
			case KW_SMALLINT:
				enterOuterAlt(_localctx, 9);
				{
				setState(365);
				match(KW_SMALLINT);
				}
				break;
			case KW_TIME:
				enterOuterAlt(_localctx, 10);
				{
				setState(366);
				match(KW_TIME);
				}
				break;
			case KW_TIMESTAMP:
				enterOuterAlt(_localctx, 11);
				{
				setState(367);
				match(KW_TIMESTAMP);
				}
				break;
			case KW_BOOLEAN:
				enterOuterAlt(_localctx, 12);
				{
				setState(368);
				match(KW_BOOLEAN);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BlobTypeContext extends ParserRuleContext {
		public TerminalNode KW_BLOB() { return getToken(JaybirdSqlParser.KW_BLOB, 0); }
		public BlobSubtypeContext blobSubtype() {
			return getRuleContext(BlobSubtypeContext.class,0);
		}
		public BlobSegSizeContext blobSegSize() {
			return getRuleContext(BlobSegSizeContext.class,0);
		}
		public CharSetClauseContext charSetClause() {
			return getRuleContext(CharSetClauseContext.class,0);
		}
		public List INTEGER() { return getTokens(JaybirdSqlParser.INTEGER); }
		public TerminalNode INTEGER(int i) {
			return getToken(JaybirdSqlParser.INTEGER, i);
		}
		public BlobTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_blobType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterBlobType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitBlobType(this);
		}
	}

	public final BlobTypeContext blobType() throws RecognitionException {
		BlobTypeContext _localctx = new BlobTypeContext(_ctx, getState());
		enterRule(_localctx, 62, RULE_blobType);
		int _la;
		try {
			setState(389);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(371);
				match(KW_BLOB);
				setState(373);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==SUB_TYPE) {
					{
					setState(372);
					blobSubtype();
					}
				}

				setState(376);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==SEGMENT) {
					{
					setState(375);
					blobSegSize();
					}
				}

				setState(379);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==CHARACTER) {
					{
					setState(378);
					charSetClause();
					}
				}

				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(381);
				match(KW_BLOB);
				setState(382);
				match(LEFT_PAREN);
				setState(383);
				match(INTEGER);
				setState(386);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(384);
					match(COMMA);
					setState(385);
					match(INTEGER);
					}
				}

				setState(388);
				match(RIGHT_PAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BlobSubtypeContext extends ParserRuleContext {
		public TerminalNode SUB_TYPE() { return getToken(JaybirdSqlParser.SUB_TYPE, 0); }
		public TerminalNode INTEGER() { return getToken(JaybirdSqlParser.INTEGER, 0); }
		public TerminalNode GENERIC_ID() { return getToken(JaybirdSqlParser.GENERIC_ID, 0); }
		public BlobSubtypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_blobSubtype; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterBlobSubtype(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitBlobSubtype(this);
		}
	}

	public final BlobSubtypeContext blobSubtype() throws RecognitionException {
		BlobSubtypeContext _localctx = new BlobSubtypeContext(_ctx, getState());
		enterRule(_localctx, 64, RULE_blobSubtype);
		try {
			setState(395);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(391);
				match(SUB_TYPE);
				setState(392);
				match(INTEGER);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(393);
				match(SUB_TYPE);
				setState(394);
				match(GENERIC_ID);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class BlobSegSizeContext extends ParserRuleContext {
		public TerminalNode SEGMENT() { return getToken(JaybirdSqlParser.SEGMENT, 0); }
		public TerminalNode KW_SIZE() { return getToken(JaybirdSqlParser.KW_SIZE, 0); }
		public TerminalNode INTEGER() { return getToken(JaybirdSqlParser.INTEGER, 0); }
		public BlobSegSizeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_blobSegSize; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterBlobSegSize(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitBlobSegSize(this);
		}
	}

	public final BlobSegSizeContext blobSegSize() throws RecognitionException {
		BlobSegSizeContext _localctx = new BlobSegSizeContext(_ctx, getState());
		enterRule(_localctx, 66, RULE_blobSegSize);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(397);
			match(SEGMENT);
			setState(398);
			match(KW_SIZE);
			setState(399);
			match(INTEGER);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class CharSetClauseContext extends ParserRuleContext {
		public TerminalNode CHARACTER() { return getToken(JaybirdSqlParser.CHARACTER, 0); }
		public TerminalNode SET() { return getToken(JaybirdSqlParser.SET, 0); }
		public TerminalNode GENERIC_ID() { return getToken(JaybirdSqlParser.GENERIC_ID, 0); }
		public CharSetClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_charSetClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterCharSetClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitCharSetClause(this);
		}
	}

	public final CharSetClauseContext charSetClause() throws RecognitionException {
		CharSetClauseContext _localctx = new CharSetClauseContext(_ctx, getState());
		enterRule(_localctx, 68, RULE_charSetClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(401);
			match(CHARACTER);
			setState(402);
			match(SET);
			setState(403);
			match(GENERIC_ID);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArrayTypeContext extends ParserRuleContext {
		public NonCharSetCharTypeContext nonCharSetCharType() {
			return getRuleContext(NonCharSetCharTypeContext.class,0);
		}
		public ArraySpecContext arraySpec() {
			return getRuleContext(ArraySpecContext.class,0);
		}
		public CharSetClauseContext charSetClause() {
			return getRuleContext(CharSetClauseContext.class,0);
		}
		public NonCharTypeContext nonCharType() {
			return getRuleContext(NonCharTypeContext.class,0);
		}
		public ArrayTypeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_arrayType; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterArrayType(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitArrayType(this);
		}
	}

	public final ArrayTypeContext arrayType() throws RecognitionException {
		ArrayTypeContext _localctx = new ArrayTypeContext(_ctx, getState());
		enterRule(_localctx, 70, RULE_arrayType);
		int _la;
		try {
			setState(417);
			_errHandler.sync(this);
			switch (_input.LA(1)) {
			case KW_CHAR:
			case KW_NCHAR:
			case KW_NVARCHAR:
			case KW_VARCHAR:
				enterOuterAlt(_localctx, 1);
				{
				setState(405);
				nonCharSetCharType();
				setState(406);
				match(T__8);
				setState(407);
				arraySpec();
				setState(408);
				match(T__9);
				setState(410);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==CHARACTER) {
					{
					setState(409);
					charSetClause();
					}
				}

				}
				break;
			case KW_BIGINT:
			case KW_BOOLEAN:
			case KW_DATE:
			case KW_DECIMAL:
			case KW_DOUBLE:
			case KW_FLOAT:
			case KW_INTEGER:
			case KW_INT:
			case KW_NUMERIC:
			case KW_SMALLINT:
			case KW_TIME:
			case KW_TIMESTAMP:
				enterOuterAlt(_localctx, 2);
				{
				setState(412);
				nonCharType();
				setState(413);
				match(T__8);
				setState(414);
				arraySpec();
				setState(415);
				match(T__9);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArraySpecContext extends ParserRuleContext {
		public List arrayRange() {
			return getRuleContexts(ArrayRangeContext.class);
		}
		public ArrayRangeContext arrayRange(int i) {
			return getRuleContext(ArrayRangeContext.class,i);
		}
		public ArraySpecContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_arraySpec; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterArraySpec(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitArraySpec(this);
		}
	}

	public final ArraySpecContext arraySpec() throws RecognitionException {
		ArraySpecContext _localctx = new ArraySpecContext(_ctx, getState());
		enterRule(_localctx, 72, RULE_arraySpec);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(419);
			arrayRange();
			setState(422);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==COMMA) {
				{
				setState(420);
				match(COMMA);
				setState(421);
				arrayRange();
				}
			}

			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArrayRangeContext extends ParserRuleContext {
		public List INTEGER() { return getTokens(JaybirdSqlParser.INTEGER); }
		public TerminalNode INTEGER(int i) {
			return getToken(JaybirdSqlParser.INTEGER, i);
		}
		public ArrayRangeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_arrayRange; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterArrayRange(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitArrayRange(this);
		}
	}

	public final ArrayRangeContext arrayRange() throws RecognitionException {
		ArrayRangeContext _localctx = new ArrayRangeContext(_ctx, getState());
		enterRule(_localctx, 74, RULE_arrayRange);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(424);
			match(INTEGER);
			{
			setState(425);
			match(T__10);
			setState(426);
			match(INTEGER);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ArrayElementContext extends ParserRuleContext {
		public SimpleIdentifierContext simpleIdentifier() {
			return getRuleContext(SimpleIdentifierContext.class,0);
		}
		public ValueListContext valueList() {
			return getRuleContext(ValueListContext.class,0);
		}
		public ArrayElementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_arrayElement; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterArrayElement(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitArrayElement(this);
		}
	}

	public final ArrayElementContext arrayElement() throws RecognitionException {
		ArrayElementContext _localctx = new ArrayElementContext(_ctx, getState());
		enterRule(_localctx, 76, RULE_arrayElement);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(428);
			simpleIdentifier();
			setState(429);
			match(T__8);
			setState(430);
			valueList();
			setState(431);
			match(T__9);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class FunctionContext extends ParserRuleContext {
		public SimpleIdentifierContext simpleIdentifier() {
			return getRuleContext(SimpleIdentifierContext.class,0);
		}
		public ValueListContext valueList() {
			return getRuleContext(ValueListContext.class,0);
		}
		public SubstringFunctionContext substringFunction() {
			return getRuleContext(SubstringFunctionContext.class,0);
		}
		public TrimFunctionContext trimFunction() {
			return getRuleContext(TrimFunctionContext.class,0);
		}
		public ExtractFunctionContext extractFunction() {
			return getRuleContext(ExtractFunctionContext.class,0);
		}
		public TerminalNode SUM() { return getToken(JaybirdSqlParser.SUM, 0); }
		public ValueContext value() {
			return getRuleContext(ValueContext.class,0);
		}
		public TerminalNode ALL() { return getToken(JaybirdSqlParser.ALL, 0); }
		public TerminalNode DISTINCT() { return getToken(JaybirdSqlParser.DISTINCT, 0); }
		public TerminalNode COUNT() { return getToken(JaybirdSqlParser.COUNT, 0); }
		public TerminalNode AVG() { return getToken(JaybirdSqlParser.AVG, 0); }
		public TerminalNode MINIMUM() { return getToken(JaybirdSqlParser.MINIMUM, 0); }
		public TerminalNode MAXIMUM() { return getToken(JaybirdSqlParser.MAXIMUM, 0); }
		public FunctionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_function; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterFunction(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitFunction(this);
		}
	}

	public final FunctionContext function() throws RecognitionException {
		FunctionContext _localctx = new FunctionContext(_ctx, getState());
		enterRule(_localctx, 78, RULE_function);
		int _la;
		try {
			setState(485);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(433);
				simpleIdentifier();
				setState(434);
				match(LEFT_PAREN);
				setState(435);
				valueList();
				setState(436);
				match(RIGHT_PAREN);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(438);
				simpleIdentifier();
				setState(439);
				match(LEFT_PAREN);
				setState(440);
				match(RIGHT_PAREN);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(442);
				substringFunction();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(443);
				trimFunction();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(444);
				extractFunction();
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(445);
				match(SUM);
				setState(446);
				match(LEFT_PAREN);
				setState(448);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ALL || _la==DISTINCT) {
					{
					setState(447);
					_la = _input.LA(1);
					if ( !(_la==ALL || _la==DISTINCT) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(450);
				value(0);
				setState(451);
				match(RIGHT_PAREN);
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(453);
				match(COUNT);
				setState(454);
				match(LEFT_PAREN);
				setState(456);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ALL || _la==DISTINCT) {
					{
					setState(455);
					_la = _input.LA(1);
					if ( !(_la==ALL || _la==DISTINCT) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(458);
				value(0);
				setState(459);
				match(RIGHT_PAREN);
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(461);
				match(AVG);
				setState(462);
				match(LEFT_PAREN);
				setState(464);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ALL || _la==DISTINCT) {
					{
					setState(463);
					_la = _input.LA(1);
					if ( !(_la==ALL || _la==DISTINCT) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(466);
				value(0);
				setState(467);
				match(RIGHT_PAREN);
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(469);
				match(MINIMUM);
				setState(470);
				match(LEFT_PAREN);
				setState(472);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ALL || _la==DISTINCT) {
					{
					setState(471);
					_la = _input.LA(1);
					if ( !(_la==ALL || _la==DISTINCT) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(474);
				value(0);
				setState(475);
				match(RIGHT_PAREN);
				}
				break;
			case 10:
				enterOuterAlt(_localctx, 10);
				{
				setState(477);
				match(MAXIMUM);
				setState(478);
				match(LEFT_PAREN);
				setState(480);
				_errHandler.sync(this);
				_la = _input.LA(1);
				if (_la==ALL || _la==DISTINCT) {
					{
					setState(479);
					_la = _input.LA(1);
					if ( !(_la==ALL || _la==DISTINCT) ) {
					_errHandler.recoverInline(this);
					}
					else {
						if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
						_errHandler.reportMatch(this);
						consume();
					}
					}
				}

				setState(482);
				value(0);
				setState(483);
				match(RIGHT_PAREN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SubstringFunctionContext extends ParserRuleContext {
		public TerminalNode SUBSTRING() { return getToken(JaybirdSqlParser.SUBSTRING, 0); }
		public List value() {
			return getRuleContexts(ValueContext.class);
		}
		public ValueContext value(int i) {
			return getRuleContext(ValueContext.class,i);
		}
		public TerminalNode FROM() { return getToken(JaybirdSqlParser.FROM, 0); }
		public TerminalNode FOR() { return getToken(JaybirdSqlParser.FOR, 0); }
		public TerminalNode INTEGER() { return getToken(JaybirdSqlParser.INTEGER, 0); }
		public SubstringFunctionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_substringFunction; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterSubstringFunction(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitSubstringFunction(this);
		}
	}

	public final SubstringFunctionContext substringFunction() throws RecognitionException {
		SubstringFunctionContext _localctx = new SubstringFunctionContext(_ctx, getState());
		enterRule(_localctx, 80, RULE_substringFunction);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(487);
			match(SUBSTRING);
			setState(488);
			match(LEFT_PAREN);
			setState(489);
			value(0);
			setState(490);
			match(FROM);
			setState(491);
			value(0);
			setState(494);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==FOR) {
				{
				setState(492);
				match(FOR);
				setState(493);
				match(INTEGER);
				}
			}

			setState(496);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TrimFunctionContext extends ParserRuleContext {
		public TerminalNode TRIM() { return getToken(JaybirdSqlParser.TRIM, 0); }
		public List value() {
			return getRuleContexts(ValueContext.class);
		}
		public ValueContext value(int i) {
			return getRuleContext(ValueContext.class,i);
		}
		public TrimSpecificationContext trimSpecification() {
			return getRuleContext(TrimSpecificationContext.class,0);
		}
		public TerminalNode FROM() { return getToken(JaybirdSqlParser.FROM, 0); }
		public TrimFunctionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_trimFunction; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterTrimFunction(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitTrimFunction(this);
		}
	}

	public final TrimFunctionContext trimFunction() throws RecognitionException {
		TrimFunctionContext _localctx = new TrimFunctionContext(_ctx, getState());
		enterRule(_localctx, 82, RULE_trimFunction);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(498);
			match(TRIM);
			setState(499);
			match(LEFT_PAREN);
			setState(501);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOTH) | (1L << LEADING) | (1L << TRAILING))) != 0)) {
				{
				setState(500);
				trimSpecification();
				}
			}

			setState(503);
			value(0);
			setState(506);
			_errHandler.sync(this);
			_la = _input.LA(1);
			if (_la==FROM) {
				{
				setState(504);
				match(FROM);
				setState(505);
				value(0);
				}
			}

			setState(508);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ExtractFunctionContext extends ParserRuleContext {
		public TerminalNode EXTRACT() { return getToken(JaybirdSqlParser.EXTRACT, 0); }
		public List value() {
			return getRuleContexts(ValueContext.class);
		}
		public ValueContext value(int i) {
			return getRuleContext(ValueContext.class,i);
		}
		public TerminalNode FROM() { return getToken(JaybirdSqlParser.FROM, 0); }
		public ExtractFunctionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_extractFunction; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterExtractFunction(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitExtractFunction(this);
		}
	}

	public final ExtractFunctionContext extractFunction() throws RecognitionException {
		ExtractFunctionContext _localctx = new ExtractFunctionContext(_ctx, getState());
		enterRule(_localctx, 84, RULE_extractFunction);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(510);
			match(EXTRACT);
			setState(511);
			match(LEFT_PAREN);
			setState(512);
			value(0);
			setState(513);
			match(FROM);
			setState(514);
			value(0);
			setState(515);
			match(RIGHT_PAREN);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class TrimSpecificationContext extends ParserRuleContext {
		public TerminalNode BOTH() { return getToken(JaybirdSqlParser.BOTH, 0); }
		public TerminalNode TRAILING() { return getToken(JaybirdSqlParser.TRAILING, 0); }
		public TerminalNode LEADING() { return getToken(JaybirdSqlParser.LEADING, 0); }
		public TrimSpecificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_trimSpecification; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterTrimSpecification(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitTrimSpecification(this);
		}
	}

	public final TrimSpecificationContext trimSpecification() throws RecognitionException {
		TrimSpecificationContext _localctx = new TrimSpecificationContext(_ctx, getState());
		enterRule(_localctx, 86, RULE_trimSpecification);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(517);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << BOTH) | (1L << LEADING) | (1L << TRAILING))) != 0)) ) {
			_errHandler.recoverInline(this);
			}
			else {
				if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
				_errHandler.reportMatch(this);
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class SelectClauseContext extends ParserRuleContext {
		public TerminalNode SELECT() { return getToken(JaybirdSqlParser.SELECT, 0); }
		public SelectClauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_selectClause; }
		@Override
		public void enterRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).enterSelectClause(this);
		}
		@Override
		public void exitRule(ParseTreeListener listener) {
			if ( listener instanceof JaybirdSqlListener ) ((JaybirdSqlListener)listener).exitSelectClause(this);
		}
	}

	public final SelectClauseContext selectClause() throws RecognitionException {
		SelectClauseContext _localctx = new SelectClauseContext(_ctx, getState());
		enterRule(_localctx, 88, RULE_selectClause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(519);
			match(SELECT);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
		switch (ruleIndex) {
		case 18:
			return value_sempred((ValueContext)_localctx, predIndex);
		}
		return true;
	}
	private boolean value_sempred(ValueContext _localctx, int predIndex) {
		switch (predIndex) {
		case 0:
			return precpred(_ctx, 18);
		case 1:
			return precpred(_ctx, 17);
		case 2:
			return precpred(_ctx, 16);
		case 3:
			return precpred(_ctx, 15);
		case 4:
			return precpred(_ctx, 14);
		case 5:
			return precpred(_ctx, 10);
		}
		return true;
	}

	public static final String _serializedATN =
		"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3W\u020c\4\2\t\2\4"+
		"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
		"\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
		"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
		"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
		"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
		",\t,\4-\t-\4.\t.\3\2\3\2\3\2\3\2\5\2a\n\2\3\3\3\3\3\3\3\3\7\3g\n\3\f\3"+
		"\16\3j\13\3\3\3\5\3m\n\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\7\4v\n\4\f\4\16\4"+
		"y\13\4\3\4\5\4|\n\4\3\4\3\4\3\5\3\5\3\5\7\5\u0083\n\5\f\5\16\5\u0086\13"+
		"\5\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\5\7\u0092\n\7\3\7\3\7\5\7\u0096"+
		"\n\7\3\7\5\7\u0099\n\7\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t"+
		"\5\t\u00a7\n\t\3\t\3\t\3\t\7\t\u00ac\n\t\f\t\16\t\u00af\13\t\3\t\5\t\u00b2"+
		"\n\t\3\t\5\t\u00b5\n\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13"+
		"\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\17\3\17"+
		"\3\20\3\20\3\20\3\21\3\21\3\21\7\21\u00d8\n\21\f\21\16\21\u00db\13\21"+
		"\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u00e3\n\22\3\23\3\23\3\23\7\23\u00e8"+
		"\n\23\f\23\16\23\u00eb\13\23\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3"+
		"\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5"+
		"\24\u0103\n\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24"+
		"\3\24\3\24\3\24\3\24\3\24\3\24\3\24\7\24\u0117\n\24\f\24\16\24\u011a\13"+
		"\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3"+
		"\30\3\30\3\30\3\30\5\30\u012d\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31"+
		"\3\32\3\32\5\32\u0138\n\32\3\33\3\33\5\33\u013c\n\33\3\34\3\34\5\34\u0140"+
		"\n\34\3\35\3\35\5\35\u0144\n\35\3\36\3\36\3\36\3\36\5\36\u014a\n\36\3"+
		"\36\3\36\3\36\3\36\5\36\u0150\n\36\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3"+
		" \5 \u015c\n \3 \5 \u015f\n \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \5 \u016b\n"+
		" \3 \5 \u016e\n \3 \3 \3 \3 \5 \u0174\n \3!\3!\5!\u0178\n!\3!\5!\u017b"+
		"\n!\3!\5!\u017e\n!\3!\3!\3!\3!\3!\5!\u0185\n!\3!\5!\u0188\n!\3\"\3\"\3"+
		"\"\3\"\5\"\u018e\n\"\3#\3#\3#\3#\3$\3$\3$\3$\3%\3%\3%\3%\3%\5%\u019d\n"+
		"%\3%\3%\3%\3%\3%\5%\u01a4\n%\3&\3&\3&\5&\u01a9\n&\3\'\3\'\3\'\3\'\3(\3"+
		"(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\3)\5)\u01c3\n)\3"+
		")\3)\3)\3)\3)\3)\5)\u01cb\n)\3)\3)\3)\3)\3)\3)\5)\u01d3\n)\3)\3)\3)\3"+
		")\3)\3)\5)\u01db\n)\3)\3)\3)\3)\3)\3)\5)\u01e3\n)\3)\3)\3)\5)\u01e8\n"+
		")\3*\3*\3*\3*\3*\3*\3*\5*\u01f1\n*\3*\3*\3+\3+\3+\5+\u01f8\n+\3+\3+\3"+
		"+\5+\u01fd\n+\3+\3+\3,\3,\3,\3,\3,\3,\3,\3-\3-\3.\3.\3.\5hw\u00ad\3&/"+
		"\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFH"+
		"JLNPRTVXZ\2\t\3\2ST\4\2&&\63\63\3\2MR\4\2::BB\4\2DDHH\4\2\16\16\31\31"+
		"\5\2\22\22\"\"\62\62\2\u0233\2`\3\2\2\2\4b\3\2\2\2\6p\3\2\2\2\b\177\3"+
		"\2\2\2\n\u0087\3\2\2\2\f\u008b\3\2\2\2\16\u009c\3\2\2\2\20\u00a2\3\2\2"+
		"\2\22\u00b8\3\2\2\2\24\u00bd\3\2\2\2\26\u00c2\3\2\2\2\30\u00c7\3\2\2\2"+
		"\32\u00cb\3\2\2\2\34\u00cd\3\2\2\2\36\u00d1\3\2\2\2 \u00d4\3\2\2\2\"\u00e2"+
		"\3\2\2\2$\u00e4\3\2\2\2&\u0102\3\2\2\2(\u011b\3\2\2\2*\u011d\3\2\2\2,"+
		"\u011f\3\2\2\2.\u012c\3\2\2\2\60\u012e\3\2\2\2\62\u0137\3\2\2\2\64\u013b"+
		"\3\2\2\2\66\u013f\3\2\2\28\u0143\3\2\2\2:\u014f\3\2\2\2<\u0151\3\2\2\2"+
		">\u0173\3\2\2\2@\u0187\3\2\2\2B\u018d\3\2\2\2D\u018f\3\2\2\2F\u0193\3"+
		"\2\2\2H\u01a3\3\2\2\2J\u01a5\3\2\2\2L\u01aa\3\2\2\2N\u01ae\3\2\2\2P\u01e7"+
		"\3\2\2\2R\u01e9\3\2\2\2T\u01f4\3\2\2\2V\u0200\3\2\2\2X\u0207\3\2\2\2Z"+
		"\u0209\3\2\2\2\\a\5\20\t\2]a\5\4\3\2^a\5\6\4\2_a\5\f\7\2`\\\3\2\2\2`]"+
		"\3\2\2\2`^\3\2\2\2`_\3\2\2\2a\3\3\2\2\2bc\7\30\2\2cd\7\36\2\2dh\5\36\20"+
		"\2eg\13\2\2\2fe\3\2\2\2gj\3\2\2\2hi\3\2\2\2hf\3\2\2\2il\3\2\2\2jh\3\2"+
		"\2\2km\5\26\f\2lk\3\2\2\2lm\3\2\2\2mn\3\2\2\2no\b\3\1\2o\5\3\2\2\2pq\7"+
		"\64\2\2qr\5\36\20\2rs\7-\2\2sw\5\b\5\2tv\13\2\2\2ut\3\2\2\2vy\3\2\2\2"+
		"wx\3\2\2\2wu\3\2\2\2x{\3\2\2\2yw\3\2\2\2z|\5\26\f\2{z\3\2\2\2{|\3\2\2"+
		"\2|}\3\2\2\2}~\b\4\1\2~\7\3\2\2\2\177\u0084\5\n\6\2\u0080\u0081\7L\2\2"+
		"\u0081\u0083\5\n\6\2\u0082\u0080\3\2\2\2\u0083\u0086\3\2\2\2\u0084\u0082"+
		"\3\2\2\2\u0084\u0085\3\2\2\2\u0085\t\3\2\2\2\u0086\u0084\3\2\2\2\u0087"+
		"\u0088\5\"\22\2\u0088\u0089\7\3\2\2\u0089\u008a\5&\24\2\u008a\13\3\2\2"+
		"\2\u008b\u008c\7\64\2\2\u008c\u008d\7(\2\2\u008d\u008e\7 \2\2\u008e\u008f"+
		"\7!\2\2\u008f\u0091\5\36\20\2\u0090\u0092\5\22\n\2\u0091\u0090\3\2\2\2"+
		"\u0091\u0092\3\2\2\2\u0092\u0093\3\2\2\2\u0093\u0095\5\24\13\2\u0094\u0096"+
		"\5\16\b\2\u0095\u0094\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0098\3\2\2\2"+
		"\u0097\u0099\5\26\f\2\u0098\u0097\3\2\2\2\u0098\u0099\3\2\2\2\u0099\u009a"+
		"\3\2\2\2\u009a\u009b\b\7\1\2\u009b\r\3\2\2\2\u009c\u009d\7#\2\2\u009d"+
		"\u009e\7J\2\2\u009e\u009f\5 \21\2\u009f\u00a0\7K\2\2\u00a0\u00a1\b\b\1"+
		"\2\u00a1\17\3\2\2\2\u00a2\u00a3\7 \2\2\u00a3\u00a4\7!\2\2\u00a4\u00a6"+
		"\5\36\20\2\u00a5\u00a7\5\22\n\2\u00a6\u00a5\3\2\2\2\u00a6\u00a7\3\2\2"+
		"\2\u00a7\u00b1\3\2\2\2\u00a8\u00b2\5\24\13\2\u00a9\u00ad\5Z.\2\u00aa\u00ac"+
		"\13\2\2\2\u00ab\u00aa\3\2\2\2\u00ac\u00af\3\2\2\2\u00ad\u00ae\3\2\2\2"+
		"\u00ad\u00ab\3\2\2\2\u00ae\u00b2\3\2\2\2\u00af\u00ad\3\2\2\2\u00b0\u00b2"+
		"\5\30\r\2\u00b1\u00a8\3\2\2\2\u00b1\u00a9\3\2\2\2\u00b1\u00b0\3\2\2\2"+
		"\u00b2\u00b4\3\2\2\2\u00b3\u00b5\5\26\f\2\u00b4\u00b3\3\2\2\2\u00b4\u00b5"+
		"\3\2\2\2\u00b5\u00b6\3\2\2\2\u00b6\u00b7\b\t\1\2\u00b7\21\3\2\2\2\u00b8"+
		"\u00b9\7J\2\2\u00b9\u00ba\5 \21\2\u00ba\u00bb\7K\2\2\u00bb\u00bc\b\n\1"+
		"\2\u00bc\23\3\2\2\2\u00bd\u00be\7\66\2\2\u00be\u00bf\7J\2\2\u00bf\u00c0"+
		"\5$\23\2\u00c0\u00c1\7K\2\2\u00c1\25\3\2\2\2\u00c2\u00c3\7*\2\2\u00c3"+
		"\u00c4\b\f\1\2\u00c4\u00c5\5 \21\2\u00c5\u00c6\b\f\1\2\u00c6\27\3\2\2"+
		"\2\u00c7\u00c8\7\27\2\2\u00c8\u00c9\7\66\2\2\u00c9\u00ca\b\r\1\2\u00ca"+
		"\31\3\2\2\2\u00cb\u00cc\t\2\2\2\u00cc\33\3\2\2\2\u00cd\u00ce\5\32\16\2"+
		"\u00ce\u00cf\7\4\2\2\u00cf\u00d0\5\32\16\2\u00d0\35\3\2\2\2\u00d1\u00d2"+
		"\5\32\16\2\u00d2\u00d3\b\20\1\2\u00d3\37\3\2\2\2\u00d4\u00d9\5\"\22\2"+
		"\u00d5\u00d6\7L\2\2\u00d6\u00d8\5\"\22\2\u00d7\u00d5\3\2\2\2\u00d8\u00db"+
		"\3\2\2\2\u00d9\u00d7\3\2\2\2\u00d9\u00da\3\2\2\2\u00da!\3\2\2\2\u00db"+
		"\u00d9\3\2\2\2\u00dc\u00dd\5\32\16\2\u00dd\u00de\b\22\1\2\u00de\u00e3"+
		"\3\2\2\2\u00df\u00e0\5\34\17\2\u00e0\u00e1\b\22\1\2\u00e1\u00e3\3\2\2"+
		"\2\u00e2\u00dc\3\2\2\2\u00e2\u00df\3\2\2\2\u00e3#\3\2\2\2\u00e4\u00e9"+
		"\5&\24\2\u00e5\u00e6\7L\2\2\u00e6\u00e8\5&\24\2\u00e7\u00e5\3\2\2\2\u00e8"+
		"\u00eb\3\2\2\2\u00e9\u00e7\3\2\2\2\u00e9\u00ea\3\2\2\2\u00ea%\3\2\2\2"+
		"\u00eb\u00e9\3\2\2\2\u00ec\u00ed\b\24\1\2\u00ed\u0103\5,\27\2\u00ee\u00ef"+
		"\7\5\2\2\u00ef\u0103\5,\27\2\u00f0\u00f1\7\6\2\2\u00f1\u0103\5,\27\2\u00f2"+
		"\u00f3\7J\2\2\u00f3\u00f4\5&\24\2\u00f4\u00f5\7K\2\2\u00f5\u0103\3\2\2"+
		"\2\u00f6\u0103\5(\25\2\u00f7\u0103\5*\26\2\u00f8\u0103\5P)\2\u00f9\u0103"+
		"\5.\30\2\u00fa\u0103\5\60\31\2\u00fb\u0103\5N(\2\u00fc\u0103\7\32\2\2"+
		"\u00fd\u00fe\5\32\16\2\u00fe\u00ff\7\4\2\2\u00ff\u0100\7\32\2\2\u0100"+
		"\u0103\3\2\2\2\u0101\u0103\5\32\16\2\u0102\u00ec\3\2\2\2\u0102\u00ee\3"+
		"\2\2\2\u0102\u00f0\3\2\2\2\u0102\u00f2\3\2\2\2\u0102\u00f6\3\2\2\2\u0102"+
		"\u00f7\3\2\2\2\u0102\u00f8\3\2\2\2\u0102\u00f9\3\2\2\2\u0102\u00fa\3\2"+
		"\2\2\u0102\u00fb\3\2\2\2\u0102\u00fc\3\2\2\2\u0102\u00fd\3\2\2\2\u0102"+
		"\u0101\3\2\2\2\u0103\u0118\3\2\2\2\u0104\u0105\f\24\2\2\u0105\u0106\7"+
		"\5\2\2\u0106\u0117\5&\24\25\u0107\u0108\f\23\2\2\u0108\u0109\7\6\2\2\u0109"+
		"\u0117\5&\24\24\u010a\u010b\f\22\2\2\u010b\u010c\7\7\2\2\u010c\u0117\5"+
		"&\24\23\u010d\u010e\f\21\2\2\u010e\u010f\7\b\2\2\u010f\u0117\5&\24\22"+
		"\u0110\u0111\f\20\2\2\u0111\u0112\7\t\2\2\u0112\u0117\5&\24\21\u0113\u0114"+
		"\f\f\2\2\u0114\u0115\7\26\2\2\u0115\u0117\5\32\16\2\u0116\u0104\3\2\2"+
		"\2\u0116\u0107\3\2\2\2\u0116\u010a\3\2\2\2\u0116\u010d\3\2\2\2\u0116\u0110"+
		"\3\2\2\2\u0116\u0113\3\2\2\2\u0117\u011a\3\2\2\2\u0118\u0116\3\2\2\2\u0118"+
		"\u0119\3\2\2\2\u0119\'\3\2\2\2\u011a\u0118\3\2\2\2\u011b\u011c\7\n\2\2"+
		"\u011c)\3\2\2\2\u011d\u011e\t\3\2\2\u011e+\3\2\2\2\u011f\u0120\t\4\2\2"+
		"\u0120-\3\2\2\2\u0121\u0122\7\'\2\2\u0122\u0123\7\65\2\2\u0123\u0124\7"+
		"\35\2\2\u0124\u012d\5\32\16\2\u0125\u0126\7\37\2\2\u0126\u0127\7J\2\2"+
		"\u0127\u0128\5\32\16\2\u0128\u0129\7L\2\2\u0129\u012a\7M\2\2\u012a\u012b"+
		"\7K\2\2\u012b\u012d\3\2\2\2\u012c\u0121\3\2\2\2\u012c\u0125\3\2\2\2\u012d"+
		"/\3\2\2\2\u012e\u012f\7\23\2\2\u012f\u0130\7J\2\2\u0130\u0131\5&\24\2"+
		"\u0131\u0132\7\20\2\2\u0132\u0133\5\62\32\2\u0133\u0134\7K\2\2\u0134\61"+
		"\3\2\2\2\u0135\u0138\5\64\33\2\u0136\u0138\5H%\2\u0137\u0135\3\2\2\2\u0137"+
		"\u0136\3\2\2\2\u0138\63\3\2\2\2\u0139\u013c\5\66\34\2\u013a\u013c\5@!"+
		"\2\u013b\u0139\3\2\2\2\u013b\u013a\3\2\2\2\u013c\65\3\2\2\2\u013d\u0140"+
		"\5> \2\u013e\u0140\58\35\2\u013f\u013d\3\2\2\2\u013f\u013e\3\2\2\2\u0140"+
		"\67\3\2\2\2\u0141\u0144\5:\36\2\u0142\u0144\5<\37\2\u0143\u0141\3\2\2"+
		"\2\u0143\u0142\3\2\2\2\u01449\3\2\2\2\u0145\u0149\t\5\2\2\u0146\u0147"+
		"\7J\2\2\u0147\u0148\7M\2\2\u0148\u014a\7K\2\2\u0149\u0146\3\2\2\2\u0149"+
		"\u014a\3\2\2\2\u014a\u0150\3\2\2\2\u014b\u014c\t\6\2\2\u014c\u014d\7J"+
		"\2\2\u014d\u014e\7M\2\2\u014e\u0150\7K\2\2\u014f\u0145\3\2\2\2\u014f\u014b"+
		"\3\2\2\2\u0150;\3\2\2\2\u0151\u0152\5:\36\2\u0152\u0153\5F$\2\u0153=\3"+
		"\2\2\2\u0154\u0174\78\2\2\u0155\u0174\7;\2\2\u0156\u015e\7<\2\2\u0157"+
		"\u0158\7J\2\2\u0158\u015b\7M\2\2\u0159\u015a\7L\2\2\u015a\u015c\7M\2\2"+
		"\u015b\u0159\3\2\2\2\u015b\u015c\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015f"+
		"\7K\2\2\u015e\u0157\3\2\2\2\u015e\u015f\3\2\2\2\u015f\u0174\3\2\2\2\u0160"+
		"\u0161\7=\2\2\u0161\u0174\7>\2\2\u0162\u0174\7?\2\2\u0163\u0174\7@\2\2"+
		"\u0164\u0174\7A\2\2\u0165\u016d\7C\2\2\u0166\u0167\7J\2\2\u0167\u016a"+
		"\7M\2\2\u0168\u0169\7L\2\2\u0169\u016b\7M\2\2\u016a\u0168\3\2\2\2\u016a"+
		"\u016b\3\2\2\2\u016b\u016c\3\2\2\2\u016c\u016e\7K\2\2\u016d\u0166\3\2"+
		"\2\2\u016d\u016e\3\2\2\2\u016e\u0174\3\2\2\2\u016f\u0174\7E\2\2\u0170"+
		"\u0174\7F\2\2\u0171\u0174\7G\2\2\u0172\u0174\79\2\2\u0173\u0154\3\2\2"+
		"\2\u0173\u0155\3\2\2\2\u0173\u0156\3\2\2\2\u0173\u0160\3\2\2\2\u0173\u0162"+
		"\3\2\2\2\u0173\u0163\3\2\2\2\u0173\u0164\3\2\2\2\u0173\u0165\3\2\2\2\u0173"+
		"\u016f\3\2\2\2\u0173\u0170\3\2\2\2\u0173\u0171\3\2\2\2\u0173\u0172\3\2"+
		"\2\2\u0174?\3\2\2\2\u0175\u0177\7\67\2\2\u0176\u0178\5B\"\2\u0177\u0176"+
		"\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u017a\3\2\2\2\u0179\u017b\5D#\2\u017a"+
		"\u0179\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u017d\3\2\2\2\u017c\u017e\5F"+
		"$\2\u017d\u017c\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u0188\3\2\2\2\u017f"+
		"\u0180\7\67\2\2\u0180\u0181\7J\2\2\u0181\u0184\7M\2\2\u0182\u0183\7L\2"+
		"\2\u0183\u0185\7M\2\2\u0184\u0182\3\2\2\2\u0184\u0185\3\2\2\2\u0185\u0186"+
		"\3\2\2\2\u0186\u0188\7K\2\2\u0187\u0175\3\2\2\2\u0187\u017f\3\2\2\2\u0188"+
		"A\3\2\2\2\u0189\u018a\7/\2\2\u018a\u018e\7M\2\2\u018b\u018c\7/\2\2\u018c"+
		"\u018e\7S\2\2\u018d\u0189\3\2\2\2\u018d\u018b\3\2\2\2\u018eC\3\2\2\2\u018f"+
		"\u0190\7+\2\2\u0190\u0191\7I\2\2\u0191\u0192\7M\2\2\u0192E\3\2\2\2\u0193"+
		"\u0194\7\24\2\2\u0194\u0195\7-\2\2\u0195\u0196\7S\2\2\u0196G\3\2\2\2\u0197"+
		"\u0198\5:\36\2\u0198\u0199\7\13\2\2\u0199\u019a\5J&\2\u019a\u019c\7\f"+
		"\2\2\u019b\u019d\5F$\2\u019c\u019b\3\2\2\2\u019c\u019d\3\2\2\2\u019d\u01a4"+
		"\3\2\2\2\u019e\u019f\5> \2\u019f\u01a0\7\13\2\2\u01a0\u01a1\5J&\2\u01a1"+
		"\u01a2\7\f\2\2\u01a2\u01a4\3\2\2\2\u01a3\u0197\3\2\2\2\u01a3\u019e\3\2"+
		"\2\2\u01a4I\3\2\2\2\u01a5\u01a8\5L\'\2\u01a6\u01a7\7L\2\2\u01a7\u01a9"+
		"\5L\'\2\u01a8\u01a6\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9K\3\2\2\2\u01aa\u01ab"+
		"\7M\2\2\u01ab\u01ac\7\r\2\2\u01ac\u01ad\7M\2\2\u01adM\3\2\2\2\u01ae\u01af"+
		"\5\32\16\2\u01af\u01b0\7\13\2\2\u01b0\u01b1\5$\23\2\u01b1\u01b2\7\f\2"+
		"\2\u01b2O\3\2\2\2\u01b3\u01b4\5\32\16\2\u01b4\u01b5\7J\2\2\u01b5\u01b6"+
		"\5$\23\2\u01b6\u01b7\7K\2\2\u01b7\u01e8\3\2\2\2\u01b8\u01b9\5\32\16\2"+
		"\u01b9\u01ba\7J\2\2\u01ba\u01bb\7K\2\2\u01bb\u01e8\3\2\2\2\u01bc\u01e8"+
		"\5R*\2\u01bd\u01e8\5T+\2\u01be\u01e8\5V,\2\u01bf\u01c0\7\60\2\2\u01c0"+
		"\u01c2\7J\2\2\u01c1\u01c3\t\7\2\2\u01c2\u01c1\3\2\2\2\u01c2\u01c3\3\2"+
		"\2\2\u01c3\u01c4\3\2\2\2\u01c4\u01c5\5&\24\2\u01c5\u01c6\7K\2\2\u01c6"+
		"\u01e8\3\2\2\2\u01c7\u01c8\7\25\2\2\u01c8\u01ca\7J\2\2\u01c9\u01cb\t\7"+
		"\2\2\u01ca\u01c9\3\2\2\2\u01ca\u01cb\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc"+
		"\u01cd\5&\24\2\u01cd\u01ce\7K\2\2\u01ce\u01e8\3\2\2\2\u01cf\u01d0\7\21"+
		"\2\2\u01d0\u01d2\7J\2\2\u01d1\u01d3\t\7\2\2\u01d2\u01d1\3\2\2\2\u01d2"+
		"\u01d3\3\2\2\2\u01d3\u01d4\3\2\2\2\u01d4\u01d5\5&\24\2\u01d5\u01d6\7K"+
		"\2\2\u01d6\u01e8\3\2\2\2\u01d7\u01d8\7$\2\2\u01d8\u01da\7J\2\2\u01d9\u01db"+
		"\t\7\2\2\u01da\u01d9\3\2\2\2\u01da\u01db\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc"+
		"\u01dd\5&\24\2\u01dd\u01de\7K\2\2\u01de\u01e8\3\2\2\2\u01df\u01e0\7%\2"+
		"\2\u01e0\u01e2\7J\2\2\u01e1\u01e3\t\7\2\2\u01e2\u01e1\3\2\2\2\u01e2\u01e3"+
		"\3\2\2\2\u01e3\u01e4\3\2\2\2\u01e4\u01e5\5&\24\2\u01e5\u01e6\7K\2\2\u01e6"+
		"\u01e8\3\2\2\2\u01e7\u01b3\3\2\2\2\u01e7\u01b8\3\2\2\2\u01e7\u01bc\3\2"+
		"\2\2\u01e7\u01bd\3\2\2\2\u01e7\u01be\3\2\2\2\u01e7\u01bf\3\2\2\2\u01e7"+
		"\u01c7\3\2\2\2\u01e7\u01cf\3\2\2\2\u01e7\u01d7\3\2\2\2\u01e7\u01df\3\2"+
		"\2\2\u01e8Q\3\2\2\2\u01e9\u01ea\7.\2\2\u01ea\u01eb\7J\2\2\u01eb\u01ec"+
		"\5&\24\2\u01ec\u01ed\7\36\2\2\u01ed\u01f0\5&\24\2\u01ee\u01ef\7\35\2\2"+
		"\u01ef\u01f1\7M\2\2\u01f0\u01ee\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1\u01f2"+
		"\3\2\2\2\u01f2\u01f3\7K\2\2\u01f3S\3\2\2\2\u01f4\u01f5\7\61\2\2\u01f5"+
		"\u01f7\7J\2\2\u01f6\u01f8\5X-\2\u01f7\u01f6\3\2\2\2\u01f7\u01f8\3\2\2"+
		"\2\u01f8\u01f9\3\2\2\2\u01f9\u01fc\5&\24\2\u01fa\u01fb\7\36\2\2\u01fb"+
		"\u01fd\5&\24\2\u01fc\u01fa\3\2\2\2\u01fc\u01fd\3\2\2\2\u01fd\u01fe\3\2"+
		"\2\2\u01fe\u01ff\7K\2\2\u01ffU\3\2\2\2\u0200\u0201\7\33\2\2\u0201\u0202"+
		"\7J\2\2\u0202\u0203\5&\24\2\u0203\u0204\7\36\2\2\u0204\u0205\5&\24\2\u0205"+
		"\u0206\7K\2\2\u0206W\3\2\2\2\u0207\u0208\t\b\2\2\u0208Y\3\2\2\2\u0209"+
		"\u020a\7,\2\2\u020a[\3\2\2\2\63`hlw{\u0084\u0091\u0095\u0098\u00a6\u00ad"+
		"\u00b1\u00b4\u00d9\u00e2\u00e9\u0102\u0116\u0118\u012c\u0137\u013b\u013f"+
		"\u0143\u0149\u014f\u015b\u015e\u016a\u016d\u0173\u0177\u017a\u017d\u0184"+
		"\u0187\u018d\u019c\u01a3\u01a8\u01c2\u01ca\u01d2\u01da\u01e2\u01e7\u01f0"+
		"\u01f7\u01fc";
	public static final ATN _ATN =
		new ATNDeserializer().deserialize(_serializedATN.toCharArray());
	static {
		_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
		for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
			_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy