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

org.verdictdb.parser.VerdictSQLParser Maven / Gradle / Ivy

The newest version!
// Generated from org/verdictdb/parser/VerdictSQLParser.g4 by ANTLR 4.5.3
package org.verdictdb.parser;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.*;
import org.antlr.v4.runtime.tree.*;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;

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

	protected static final DFA[] _decisionToDFA;
	protected static final PredictionContextCache _sharedContextCache =
		new PredictionContextCache();
	public static final int
		SIZE=1, COLUMNS=2, SHOW=3, UNIFORM=4, FASTCONVERGE=5, SCRAMBLE=6, SCRAMBLES=7, 
		STREAM=8, GET=9, ADD=10, ALL=11, ALTER=12, AND=13, ANY=14, APPROX_DISTINCT=15, 
		AS=16, ASC=17, ASCII=18, AUTHORIZATION=19, BACKUP=20, BEGIN=21, BETWEEN=22, 
		BLOCKSIZE=23, BREAK=24, BROWSE=25, BULK=26, BY=27, CASCADE=28, CASE=29, 
		CHANGETABLE=30, CHANGES=31, CHECK=32, CHECKPOINT=33, CLOSE=34, CLUSTERED=35, 
		COALESCE=36, COLLATE=37, COLUMN=38, COMMIT=39, COMPUTE=40, CONSTRAINT=41, 
		CONTAINS=42, CONTAINSTABLE=43, CONTINUE=44, CONV=45, CONVERT=46, CREATE=47, 
		CROSS=48, CURRENT=49, CURRENT_DATE=50, CURRENT_TIME=51, CURRENT_TIMESTAMP=52, 
		CURRENT_USER=53, CURSOR=54, DATABASE=55, DATABASES=56, DBCC=57, DEALLOCATE=58, 
		DECLARE=59, DELETE=60, DENY=61, DESC=62, DESCRIBE=63, DISK=64, DISTINCT=65, 
		DISTRIBUTED=66, DOUBLE=67, DROP=68, DUMP=69, ELSE=70, END=71, ERRLVL=72, 
		ESCAPE=73, EXCEPT=74, EXEC=75, EXECUTE=76, EXISTS=77, EXIT=78, EXTERNAL=79, 
		FALSE=80, FETCH=81, FILE=82, FILLFACTOR=83, FOR=84, FORCESEEK=85, FOREIGN=86, 
		FREETEXT=87, FREETEXTTABLE=88, FROM=89, FULL=90, FUNCTION=91, GOTO=92, 
		GRANT=93, GROUP=94, HASH=95, HASHCOLUMN=96, HAVING=97, IDENTITY=98, IDENTITYCOL=99, 
		IDENTITY_INSERT=100, IF=101, IN=102, INDEX=103, INNER=104, INSERT=105, 
		INT4LARGER=106, INTERSECT=107, INTO=108, IS=109, JOIN=110, KEY=111, KILL=112, 
		LEFT=113, LIKE=114, LIMIT=115, LINENO=116, LOAD=117, MERGE=118, MID=119, 
		NATIONAL=120, NOCHECK=121, NONCLUSTERED=122, NOT=123, NULL=124, NULLIF=125, 
		NULLS=126, OF=127, OFF=128, OFFSETS=129, ON=130, OPEN=131, OPENDATASOURCE=132, 
		OPENQUERY=133, OPENROWSET=134, OPENXML=135, OPTION=136, OR=137, ORDER=138, 
		OUTER=139, OVER=140, PERCENT=141, PIVOT=142, PLAN=143, PRECISION=144, 
		PRIMARY=145, PRINT=146, PROC=147, PROCEDURE=148, RAISERROR=149, RATIO=150, 
		RAWTOHEX=151, READ=152, READTEXT=153, RECONFIGURE=154, REFERENCES=155, 
		REPLICATION=156, RESTORE=157, RESTRICT=158, RETURN=159, REVERT=160, REVOKE=161, 
		RIGHT=162, RLIKE=163, ROLLBACK=164, ROWCOUNT=165, ROWGUIDCOL=166, RPAD=167, 
		RULE=168, SAVE=169, SCHEMA=170, SCHEMAS=171, SECURITYAUDIT=172, SELECT=173, 
		SEMANTICKEYPHRASETABLE=174, SEMANTICSIMILARITYDETAILSTABLE=175, SEMANTICSIMILARITYTABLE=176, 
		SEMI=177, SESSION_USER=178, SET=179, SETUSER=180, SHUTDOWN=181, SOME=182, 
		SUBSTR=183, SUBSTRING=184, STATISTICS=185, SYSTEM_USER=186, TABLE=187, 
		TABLES=188, TABLESAMPLE=189, TEXTSIZE=190, THEN=191, TO=192, TOP=193, 
		TRAN=194, TRANSACTION=195, TRIGGER=196, TRUE=197, TRUNCATE=198, TRY_CONVERT=199, 
		TSEQUAL=200, UNION=201, UNIQUE=202, UNPIVOT=203, UPDATE=204, UPDATETEXT=205, 
		USE=206, USER=207, VALUES=208, VARYING=209, VIEW=210, WAITFOR=211, WHEN=212, 
		WHERE=213, WHILE=214, WITH=215, WITHIN=216, WITHOUT=217, WRITETEXT=218, 
		ZONE=219, ABBREV=220, ABSOLUTE=221, ABS=222, ACOS=223, ADDDATE=224, ADDTIME=225, 
		AES_DECRYPT=226, AES_ENCRYPT=227, AGE=228, APPLY=229, AREA=230, ARRAY_AGG=231, 
		ARRAY_APPEND=232, ARRAY_CAT=233, ARRAY_DIMS=234, ARRAY_LENGTH=235, ARRAY_LOWER=236, 
		ARRAY_NDIMS=237, ARRAY_POSITION=238, ARRAY_POSITIONS=239, ARRAY_PREPEND=240, 
		ARRAY_REMOVE=241, ARRAY_REPLACE=242, ARRAY_TO_JSON=243, ARRAY_TO_STRING=244, 
		ARRAY_TO_TSVECTOR=245, ARRAY_UPPER=246, ASIN=247, ATAN=248, ATAN2=249, 
		AUTO=250, AVG=251, BASE64=252, BIGINT=253, BIN=254, BINARY_CHECKSUM=255, 
		BIT=256, BIT_LENGTH=257, BOOL_AND=258, BOOL_OR=259, BOX=260, BOUND_BOX=261, 
		BROADCAST=262, BTRIM=263, BROUND=264, CALLER=265, CARDINALITY=266, CAST=267, 
		CATCH=268, CBRT=269, CEIL=270, CEILING=271, CENTER=272, CHAR=273, CHAR_LENGTH=274, 
		CHARACTER_LENGTH=275, CHECKSUM=276, CHECKSUM_AGG=277, CHR=278, CIRCLE=279, 
		CLOCK_TIMESTAMP=280, COMMITTED=281, CONCAT=282, CONCAT_WS=283, CONFIG=284, 
		CONVERT_FROM=285, CONVERT_TO=286, COOKIE=287, COS=288, CORR=289, COVAR_POP=290, 
		COVAR_SAMP=291, COT=292, COUNT=293, COUNT_BIG=294, CRC32=295, CURDATE=296, 
		CURRVAL=297, CURTIME=298, DATE=299, DATEADD=300, DATE_ADD=301, DATE_FORMAT=302, 
		DATE_PART=303, DATE_SUB=304, DATE_TRUNC=305, DATEDIFF=306, DATENAME=307, 
		DATEPART=308, DATETIME=309, DATETIME2=310, DATETIMEOFFSET=311, DAY=312, 
		DAYNAME=313, DAYOFMONTH=314, DAYOFWEEK=315, DAYOFYEAR=316, DAYS=317, DECODE=318, 
		DEGREES=319, DELAY=320, DELETED=321, DENSE_RANK=322, DIAMETER=323, DISABLE=324, 
		DIV=325, DYNAMIC=326, NATURAL_CONSTANT=327, ENCODE=328, ENCRYPTION=329, 
		ENUM_FIRST=330, ENUM_LAST=331, ENUM_RANGE=332, ESCAPED_BY=333, EXACT=334, 
		EXP=335, EXPLODE=336, EXTRACT=337, EVERY=338, FACTORIAL=339, FAMILY=340, 
		FAST=341, FAST_FORWARD=342, FIELD=343, FIELDS_SEPARATED_BY=344, FIND_IN_SET=345, 
		FIRST=346, FLOOR=347, FOLLOWING=348, FORMAT=349, FORMAT_NUMBER=350, FORWARD_ONLY=351, 
		FNV_HASH=352, FROM_DAYS=353, FROM_UNIXTIME=354, FULLSCAN=355, GEOGRAPHY=356, 
		GEOMETRY=357, GET_BIT=358, GET_BYTE=359, GET_CURRENT_TS_CONFIG=360, GET_JSON_OBJECT=361, 
		GLOBAL=362, GO=363, GREATEST=364, GROUPING=365, GROUPING_ID=366, HEIGHT=367, 
		HEX=368, HIERARCHYID=369, HOST=370, HOSTMASK=371, HOUR=372, IFNULL=373, 
		IMAGE=374, INT=375, INITCAP=376, INSENSITIVE=377, INSERTED=378, INSTR=379, 
		INTERVAL=380, IN_FILE=381, INET_SAME_FAMILY=382, INET_MERGE=383, ISCLOSED=384, 
		ISEMPTY=385, ISFINITE=386, ISNULL=387, ISOLATION=388, ISOPEN=389, JSON_AGG=390, 
		JSON_ARRAY_LENGTH=391, JSON_ARRAY_ELEMENTS=392, JSON_ARRAY_ELEMENTS_TEXT=393, 
		JSON_BUILD_ARRAY=394, JSON_BUILD_OBJECT=395, JSON_EACH=396, JSON_EACH_TEXT=397, 
		JSON_EXTRACT_PATH=398, JSON_EXTRACT_PATH_TEXT=399, JSON_OBJECT=400, JSON_OBJECT_KEYS=401, 
		JSON_OBJECT_AGG=402, JSON_POPULATE_RECORD=403, JSON_POPULATE_RECORDSET=404, 
		JSON_STRIP_NULLS=405, JSON_TO_RECORD=406, JSON_TO_RECORDSET=407, JSON_TYPEOF=408, 
		JSONB_AGG=409, JSONB_OBJECT_AGG=410, JSONB_SET=411, JSONB_INSERT=412, 
		JSONB_PRETTY=413, JUSTIFY_DAYS=414, JUSTIFY_HOURS=415, JUSTIFY_INTERVALS=416, 
		KEEPFIXED=417, KEYSET=418, LAST=419, LASTVAL=420, LAST_DAY=421, LAST_INSERT_ID=422, 
		LATERAL=423, LCASE=424, LEAST=425, LENGTH=426, LEVEL=427, LINE=428, LN=429, 
		LOCAL=430, LOCALTIME=431, LOCALTIMESTAMP=432, LOCATE=433, LOCATION=434, 
		LOCK_ESCALATION=435, LOG=436, LOG2=437, LOG10=438, LOGIN=439, LOOP=440, 
		LOWER=441, LOWER_INC=442, LOWER_INF=443, LPAD=444, LTRIM=445, LSEG=446, 
		MACADDR8_SET7BIT=447, MAKEDATE=448, MAKETIME=449, MAKE_DATE=450, MAKE_TIME=451, 
		MAKE_TIMESTAMP=452, MAKE_TIMESTAMPTZ=453, MARK=454, MASKLEN=455, MAX=456, 
		MD5=457, METHOD=458, MICROSECOND=459, MIN=460, MIN_ACTIVE_ROWVERSION=461, 
		MINUTE=462, MOD=463, MODIFY=464, MONEY=465, MONTH=466, MONTHNAME=467, 
		MONTHS=468, NEGATIVE=469, NEXT=470, NETMASK=471, NETWORK=472, NAME=473, 
		NCHAR=474, NDV=475, NEXTVAL=476, NOCOUNT=477, NOEXPAND=478, NORECOMPUTE=479, 
		NOW=480, NPOINTS=481, NTEXT=482, NTILE=483, NUMBER=484, NUMNODE=485, NUMERIC=486, 
		NVARCHAR=487, NVL=488, OCTET_LENGTH=489, OFFSET=490, ONLY=491, OPTIMISTIC=492, 
		OPTIMIZE=493, OUT=494, OUTPUT=495, OVERLAY=496, OWNER=497, PARTITION=498, 
		PATH=499, PCLOSE=500, PERCENTILE=501, PERIOD_ADD=502, PERIOD_DIFF=503, 
		PG_CLIENT_ENCODING=504, PLAINTO_TSQUERY=505, PHRASETO_TSQUERY=506, PI=507, 
		PLACING=508, PMOD=509, POINT=510, POLYGON=511, POPEN=512, POSITION=513, 
		POSITIVE=514, POW=515, POWER=516, PRECEDING=517, PRIOR=518, QUARTER=519, 
		QUERYTREE=520, QUOTED_BY=521, QUOTE_IDENT=522, QUOTE_LITERAL=523, QUOTE_NULLABLE=524, 
		RADIANS=525, RADIUS=526, RAND=527, RANDOM=528, RANGE=529, RANGE_MERGE=530, 
		RANK=531, READONLY=532, READ_ONLY=533, RECOMMENDED=534, RECOMPILE=535, 
		REFRESH=536, REGR_AVGX=537, REGR_AVGY=538, REGR_COUNT=539, REGR_INTERCEPT=540, 
		REGR_R2=541, REGR_SLOPE=542, REGR_SXX=543, REGR_SXY=544, REGR_SYY=545, 
		RELATIVE=546, REGEXP_MATCHES=547, REGEXP_REPLACE=548, REGEXP_SPLIT_TO_ARRAY=549, 
		REGEXP_SPLIT_TO_TABLE=550, REMOTE=551, REPEAT=552, REPEATABLE=553, REPLACE=554, 
		REVERSE=555, ROLLUP=556, ROOT=557, ROUND=558, ROW=559, ROW_TO_JSON=560, 
		ROWGUID=561, ROWS=562, ROW_NUMBER=563, RTRIM=564, SAMPLE=565, SCALE=566, 
		SCHEMABINDING=567, SCROLL=568, SCROLL_LOCKS=569, SECOND=570, SEC_TO_TIME=571, 
		SELF=572, SERIALIZABLE=573, SETSEED=574, SETWEIGHT=575, SETVAL=576, SET_BIT=577, 
		SET_BYTE=578, SET_MASKLEN=579, SHA1=580, SHA2=581, SHIFTLEFT=582, SHIFTRIGHT=583, 
		SHIFTRIGHTUNSIGNED=584, SIGN=585, SIN=586, SMALLDATETIME=587, SMALLINT=588, 
		SMALLMONEY=589, SNAPSHOT=590, SPACE_FUNCTION=591, SPATIAL_WINDOW_MAX_CELLS=592, 
		SPLIT=593, SPLIT_PART=594, SQL_VARIANT=595, STATEMENT_TIMESTAMP=596, STATIC=597, 
		STATS_STREAM=598, STDEV=599, STDDEV=600, STDEVP=601, STDDEV_SAMP=602, 
		STORED_AS_PARQUET=603, STRCMP=604, STRING_AGG=605, STRING_TO_ARRAY=606, 
		STRPOS=607, STR_TO_DATE=608, SUBDATE=609, SUBSTRING_INDEX=610, SUM=611, 
		SQRT=612, STDDEV_POP=613, STRIP=614, STRTOL=615, SYSDATE=616, TAN=617, 
		TEXT=618, THROW=619, TIES=620, TIME=621, TIMEDIFF=622, TIMEOFDAY=623, 
		TIMESTAMP=624, TIME_FORMAT=625, TIME_TO_SEC=626, TINYINT=627, TO_ASCII=628, 
		TO_CHAR=629, TO_DATE=630, TO_DAYS=631, TO_HEX=632, TO_JSON=633, TO_JSONB=634, 
		TO_NUMBER=635, TO_TIMESTAMP=636, TO_TSQUERY=637, TO_TSVECTOR=638, TRANSACTION_TIMESTAMP=639, 
		TRANSLATE=640, TRIM=641, TRUNC=642, TRY=643, TS_DELETE=644, TS_FILTER=645, 
		TS_HEADLINE=646, TS_RANK=647, TS_RANK_CD=648, TS_REWRITE=649, TSQUERY_PHRASE=650, 
		TSVECTOR_TO_ARRAY=651, TSVECTOR_UPDATE_TRIGGER=652, TSVECTOR_UPDATE_TRIGGER_COLUMN=653, 
		TYPE=654, TYPE_WARNING=655, UCASE=656, UNBOUNDED=657, UNCOMMITTED=658, 
		UNHEX=659, UNIQUEIDENTIFIER=660, UNIVERSE=661, UNIX_TIMESTAMP=662, UNKNOWN=663, 
		UNNEST=664, UPPER=665, UPPER_INC=666, UPPER_INF=667, USING=668, VAR=669, 
		VARBINARY=670, VARCHAR=671, VARIANCE=672, VAR_POP=673, VAR_SAMP=674, VARP=675, 
		VERSION=676, VIEW_METADATA=677, WEEKOFYEAR=678, WEEK=679, WEEKDAY=680, 
		WIDTH=681, WIDTH_BUCKET=682, WORK=683, XML=684, XMLAGG=685, XMLCOMMENT=686, 
		XMLCONCAT=687, XMLELEMENT=688, XMLFOREST=689, XMLNAMESPACES=690, XMLPI=691, 
		XMLROOT=692, XML_ISWELL_FORMAT=693, XPATH=694, XPATH_EXISTS=695, YEAR=696, 
		YEARS=697, YEARWEEK=698, ST_ASBINARY=699, ST_ASTEXT=700, ST_GEOMETRYFROMTEXT=701, 
		ST_GEOMFROMBINARY=702, ST_LINEFROMTEXT=703, ST_LINESTRING=704, ST_MULTIPOINT=705, 
		ST_POINT=706, ST_POLYGON=707, ST_CONTAINS=708, ST_CROSSES=709, ST_DISJOINT=710, 
		ST_EQUALS=711, ST_INTERSECTS=712, ST_OVERLAPS=713, ST_RELATE=714, ST_TOUCHES=715, 
		ST_WITHIN=716, GEOMETRY_UNION=717, ST_BOUNDARY=718, ST_BUFFER=719, ST_DIFFERENCE=720, 
		ST_ENVELOPE=721, ST_ENVELOPEASPTS=722, ST_EXTERIORRING=723, ST_INTERSECTION=724, 
		ST_SYMDIFFERENCE=725, ST_UNION=726, ST_AREA=727, ST_CENTROID=728, ST_CONVEXHULL=729, 
		ST_COORDDIM=730, ST_DIMENSION=731, ST_DISTANCE=732, ST_GEOMETRYN=733, 
		ST_INTERIORRINGN=734, ST_GEOMETRYTYPE=735, ST_ISCLOSED=736, ST_ISEMPTY=737, 
		ST_ISSIMPLE=738, ST_ISRING=739, ST_ISVALID=740, ST_LENGTH=741, ST_POINTN=742, 
		ST_XMAX=743, ST_YMAX=744, ST_XMIN=745, ST_YMIN=746, ST_STARTPOINT=747, 
		SIMPLIFY_GEOMETRY=748, ST_ENDPOINT=749, ST_X=750, ST_Y=751, ST_INTERIORRINGS=752, 
		ST_NUMGEOMETRIES=753, ST_GEOMETRIES=754, ST_NUMPOINTS=755, ST_NUMINTERIORRING=756, 
		LINE_LOCATE_POINT=757, GEOMETRY_INVALID_REASON=758, GREAT_CIRCLE_DISTANCE=759, 
		CONVEX_HULL_AGG=760, GEOMETRY_UNION_AGG=761, BING_TILE=762, BING_TILE_AT=763, 
		BING_TILES_AROUND=764, BING_TILE_COORDINATES=765, BING_TILE_POLYGON=766, 
		BING_TILE_QUADKEY=767, BING_TILE_ZOOM_LEVEL=768, GEOMETRY_TO_BING_TILES=769, 
		DOLLAR_ACTION=770, SPACE=771, COMMENT=772, LINE_COMMENT=773, DOUBLE_QUOTE_ID=774, 
		BACKTICK_ID=775, SQUARE_BRACKET_ID=776, LOCAL_ID=777, DECIMAL=778, ID=779, 
		STRING=780, BINARY=781, FLOAT=782, REAL=783, EQUAL=784, GREATER=785, LESS=786, 
		EXCLAMATION=787, PLUS_ASSIGN=788, MINUS_ASSIGN=789, MULT_ASSIGN=790, DIV_ASSIGN=791, 
		MOD_ASSIGN=792, AND_ASSIGN=793, XOR_ASSIGN=794, OR_ASSIGN=795, DOT=796, 
		UNDERLINE=797, AT=798, SHARP=799, DOLLAR=800, LR_BRACKET=801, RR_BRACKET=802, 
		COMMA=803, SEMICOLON=804, COLON=805, STAR=806, DIVIDE=807, MODULE=808, 
		PLUS=809, MINUS=810, BIT_NOT=811, BIT_OR=812, BIT_AND=813, BIT_XOR=814, 
		BIT_CONCAT=815, BIT_LSHIFT=816, BIT_RSHIFT=817;
	public static final int
		RULE_verdict_statement = 0, RULE_create_scramble_statement = 1, RULE_scrambling_method_name = 2, 
		RULE_drop_scramble_statement = 3, RULE_drop_all_scrambles_statement = 4, 
		RULE_show_scrambles_statement = 5, RULE_config_statement = 6, RULE_other_statement = 7, 
		RULE_create_database = 8, RULE_drop_database = 9, RULE_config_set_statement = 10, 
		RULE_config_get_statement = 11, RULE_config_key = 12, RULE_config_value = 13, 
		RULE_tsql_file = 14, RULE_sql_clause = 15, RULE_ddl_clause = 16, RULE_select_statement = 17, 
		RULE_stream_select_statement = 18, RULE_output_clause = 19, RULE_output_dml_list_elem = 20, 
		RULE_output_column_name = 21, RULE_create_table = 22, RULE_create_table_as_select = 23, 
		RULE_create_view = 24, RULE_alter_table = 25, RULE_alter_database = 26, 
		RULE_drop_table = 27, RULE_drop_view = 28, RULE_set_statment = 29, RULE_use_statement = 30, 
		RULE_show_tables_statement = 31, RULE_show_databases_statement = 32, RULE_describe_table_statement = 33, 
		RULE_refresh_statement = 34, RULE_show_config_statement = 35, RULE_table_type_definition = 36, 
		RULE_column_def_table_constraint = 37, RULE_column_definition = 38, RULE_column_constraint = 39, 
		RULE_table_constraint = 40, RULE_set_special = 41, RULE_expression = 42, 
		RULE_interval = 43, RULE_date = 44, RULE_constant_expression = 45, RULE_subquery = 46, 
		RULE_dml_table_source = 47, RULE_with_expression = 48, RULE_common_table_expression = 49, 
		RULE_update_elem = 50, RULE_search_condition_list = 51, RULE_search_condition = 52, 
		RULE_search_condition_or = 53, RULE_search_condition_not = 54, RULE_predicate = 55, 
		RULE_query_expression = 56, RULE_union = 57, RULE_query_specification = 58, 
		RULE_top_clause = 59, RULE_limit_clause = 60, RULE_order_by_clause = 61, 
		RULE_for_clause = 62, RULE_xml_common_directives = 63, RULE_order_by_expression = 64, 
		RULE_group_by_item = 65, RULE_option_clause = 66, RULE_option = 67, RULE_optimize_for_arg = 68, 
		RULE_select_list = 69, RULE_select_list_elem = 70, RULE_partition_by_clause = 71, 
		RULE_table_source = 72, RULE_table_source_item_joined = 73, RULE_table_source_item = 74, 
		RULE_change_table = 75, RULE_join_part = 76, RULE_table_name_with_hint = 77, 
		RULE_rowset_function = 78, RULE_bulk_option = 79, RULE_derived_table = 80, 
		RULE_function_call = 81, RULE_datepart = 82, RULE_as_table_alias = 83, 
		RULE_table_alias = 84, RULE_index_column_name = 85, RULE_index_value = 86, 
		RULE_column_alias_list = 87, RULE_column_alias = 88, RULE_table_value_constructor = 89, 
		RULE_expression_list = 90, RULE_case_expr = 91, RULE_ranking_windowed_function = 92, 
		RULE_expression_function = 93, RULE_extract_time_function = 94, RULE_extract_unit = 95, 
		RULE_time_unit = 96, RULE_overlay_string_function = 97, RULE_substring_string_function = 98, 
		RULE_nary_function = 99, RULE_ternary_function = 100, RULE_binary_function = 101, 
		RULE_unary_function = 102, RULE_timestamp_function = 103, RULE_dateadd_function = 104, 
		RULE_unary_predicate_function = 105, RULE_binary_predicate_function = 106, 
		RULE_noparam_function = 107, RULE_lateral_view_function = 108, RULE_aggregate_windowed_function = 109, 
		RULE_all_distinct_expression = 110, RULE_cast_as_expression = 111, RULE_over_clause = 112, 
		RULE_row_or_range_clause = 113, RULE_window_frame_extent = 114, RULE_window_frame_bound = 115, 
		RULE_window_frame_preceding = 116, RULE_window_frame_following = 117, 
		RULE_full_table_name = 118, RULE_table_name = 119, RULE_view_name = 120, 
		RULE_func_proc_name = 121, RULE_ddl_object = 122, RULE_full_column_name = 123, 
		RULE_column_name_list = 124, RULE_column_name = 125, RULE_cursor_name = 126, 
		RULE_on_off = 127, RULE_clustered = 128, RULE_null_notnull = 129, RULE_true_orfalse = 130, 
		RULE_scalar_function_name = 131, RULE_data_type = 132, RULE_default_value = 133, 
		RULE_constant = 134, RULE_number = 135, RULE_sign = 136, RULE_id = 137, 
		RULE_simple_id = 138, RULE_comparison_operator = 139, RULE_assignment_operator = 140;
	public static final String[] ruleNames = {
		"verdict_statement", "create_scramble_statement", "scrambling_method_name", 
		"drop_scramble_statement", "drop_all_scrambles_statement", "show_scrambles_statement", 
		"config_statement", "other_statement", "create_database", "drop_database", 
		"config_set_statement", "config_get_statement", "config_key", "config_value", 
		"tsql_file", "sql_clause", "ddl_clause", "select_statement", "stream_select_statement", 
		"output_clause", "output_dml_list_elem", "output_column_name", "create_table", 
		"create_table_as_select", "create_view", "alter_table", "alter_database", 
		"drop_table", "drop_view", "set_statment", "use_statement", "show_tables_statement", 
		"show_databases_statement", "describe_table_statement", "refresh_statement", 
		"show_config_statement", "table_type_definition", "column_def_table_constraint", 
		"column_definition", "column_constraint", "table_constraint", "set_special", 
		"expression", "interval", "date", "constant_expression", "subquery", "dml_table_source", 
		"with_expression", "common_table_expression", "update_elem", "search_condition_list", 
		"search_condition", "search_condition_or", "search_condition_not", "predicate", 
		"query_expression", "union", "query_specification", "top_clause", "limit_clause", 
		"order_by_clause", "for_clause", "xml_common_directives", "order_by_expression", 
		"group_by_item", "option_clause", "option", "optimize_for_arg", "select_list", 
		"select_list_elem", "partition_by_clause", "table_source", "table_source_item_joined", 
		"table_source_item", "change_table", "join_part", "table_name_with_hint", 
		"rowset_function", "bulk_option", "derived_table", "function_call", "datepart", 
		"as_table_alias", "table_alias", "index_column_name", "index_value", "column_alias_list", 
		"column_alias", "table_value_constructor", "expression_list", "case_expr", 
		"ranking_windowed_function", "expression_function", "extract_time_function", 
		"extract_unit", "time_unit", "overlay_string_function", "substring_string_function", 
		"nary_function", "ternary_function", "binary_function", "unary_function", 
		"timestamp_function", "dateadd_function", "unary_predicate_function", 
		"binary_predicate_function", "noparam_function", "lateral_view_function", 
		"aggregate_windowed_function", "all_distinct_expression", "cast_as_expression", 
		"over_clause", "row_or_range_clause", "window_frame_extent", "window_frame_bound", 
		"window_frame_preceding", "window_frame_following", "full_table_name", 
		"table_name", "view_name", "func_proc_name", "ddl_object", "full_column_name", 
		"column_name_list", "column_name", "cursor_name", "on_off", "clustered", 
		"null_notnull", "true_orfalse", "scalar_function_name", "data_type", "default_value", 
		"constant", "number", "sign", "id", "simple_id", "comparison_operator", 
		"assignment_operator"
	};

	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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 
		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, "SIZE", "COLUMNS", "SHOW", "UNIFORM", "FASTCONVERGE", "SCRAMBLE", 
		"SCRAMBLES", "STREAM", "GET", "ADD", "ALL", "ALTER", "AND", "ANY", "APPROX_DISTINCT", 
		"AS", "ASC", "ASCII", "AUTHORIZATION", "BACKUP", "BEGIN", "BETWEEN", "BLOCKSIZE", 
		"BREAK", "BROWSE", "BULK", "BY", "CASCADE", "CASE", "CHANGETABLE", "CHANGES", 
		"CHECK", "CHECKPOINT", "CLOSE", "CLUSTERED", "COALESCE", "COLLATE", "COLUMN", 
		"COMMIT", "COMPUTE", "CONSTRAINT", "CONTAINS", "CONTAINSTABLE", "CONTINUE", 
		"CONV", "CONVERT", "CREATE", "CROSS", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", 
		"CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR", "DATABASE", "DATABASES", 
		"DBCC", "DEALLOCATE", "DECLARE", "DELETE", "DENY", "DESC", "DESCRIBE", 
		"DISK", "DISTINCT", "DISTRIBUTED", "DOUBLE", "DROP", "DUMP", "ELSE", "END", 
		"ERRLVL", "ESCAPE", "EXCEPT", "EXEC", "EXECUTE", "EXISTS", "EXIT", "EXTERNAL", 
		"FALSE", "FETCH", "FILE", "FILLFACTOR", "FOR", "FORCESEEK", "FOREIGN", 
		"FREETEXT", "FREETEXTTABLE", "FROM", "FULL", "FUNCTION", "GOTO", "GRANT", 
		"GROUP", "HASH", "HASHCOLUMN", "HAVING", "IDENTITY", "IDENTITYCOL", "IDENTITY_INSERT", 
		"IF", "IN", "INDEX", "INNER", "INSERT", "INT4LARGER", "INTERSECT", "INTO", 
		"IS", "JOIN", "KEY", "KILL", "LEFT", "LIKE", "LIMIT", "LINENO", "LOAD", 
		"MERGE", "MID", "NATIONAL", "NOCHECK", "NONCLUSTERED", "NOT", "NULL", 
		"NULLIF", "NULLS", "OF", "OFF", "OFFSETS", "ON", "OPEN", "OPENDATASOURCE", 
		"OPENQUERY", "OPENROWSET", "OPENXML", "OPTION", "OR", "ORDER", "OUTER", 
		"OVER", "PERCENT", "PIVOT", "PLAN", "PRECISION", "PRIMARY", "PRINT", "PROC", 
		"PROCEDURE", "RAISERROR", "RATIO", "RAWTOHEX", "READ", "READTEXT", "RECONFIGURE", 
		"REFERENCES", "REPLICATION", "RESTORE", "RESTRICT", "RETURN", "REVERT", 
		"REVOKE", "RIGHT", "RLIKE", "ROLLBACK", "ROWCOUNT", "ROWGUIDCOL", "RPAD", 
		"RULE", "SAVE", "SCHEMA", "SCHEMAS", "SECURITYAUDIT", "SELECT", "SEMANTICKEYPHRASETABLE", 
		"SEMANTICSIMILARITYDETAILSTABLE", "SEMANTICSIMILARITYTABLE", "SEMI", "SESSION_USER", 
		"SET", "SETUSER", "SHUTDOWN", "SOME", "SUBSTR", "SUBSTRING", "STATISTICS", 
		"SYSTEM_USER", "TABLE", "TABLES", "TABLESAMPLE", "TEXTSIZE", "THEN", "TO", 
		"TOP", "TRAN", "TRANSACTION", "TRIGGER", "TRUE", "TRUNCATE", "TRY_CONVERT", 
		"TSEQUAL", "UNION", "UNIQUE", "UNPIVOT", "UPDATE", "UPDATETEXT", "USE", 
		"USER", "VALUES", "VARYING", "VIEW", "WAITFOR", "WHEN", "WHERE", "WHILE", 
		"WITH", "WITHIN", "WITHOUT", "WRITETEXT", "ZONE", "ABBREV", "ABSOLUTE", 
		"ABS", "ACOS", "ADDDATE", "ADDTIME", "AES_DECRYPT", "AES_ENCRYPT", "AGE", 
		"APPLY", "AREA", "ARRAY_AGG", "ARRAY_APPEND", "ARRAY_CAT", "ARRAY_DIMS", 
		"ARRAY_LENGTH", "ARRAY_LOWER", "ARRAY_NDIMS", "ARRAY_POSITION", "ARRAY_POSITIONS", 
		"ARRAY_PREPEND", "ARRAY_REMOVE", "ARRAY_REPLACE", "ARRAY_TO_JSON", "ARRAY_TO_STRING", 
		"ARRAY_TO_TSVECTOR", "ARRAY_UPPER", "ASIN", "ATAN", "ATAN2", "AUTO", "AVG", 
		"BASE64", "BIGINT", "BIN", "BINARY_CHECKSUM", "BIT", "BIT_LENGTH", "BOOL_AND", 
		"BOOL_OR", "BOX", "BOUND_BOX", "BROADCAST", "BTRIM", "BROUND", "CALLER", 
		"CARDINALITY", "CAST", "CATCH", "CBRT", "CEIL", "CEILING", "CENTER", "CHAR", 
		"CHAR_LENGTH", "CHARACTER_LENGTH", "CHECKSUM", "CHECKSUM_AGG", "CHR", 
		"CIRCLE", "CLOCK_TIMESTAMP", "COMMITTED", "CONCAT", "CONCAT_WS", "CONFIG", 
		"CONVERT_FROM", "CONVERT_TO", "COOKIE", "COS", "CORR", "COVAR_POP", "COVAR_SAMP", 
		"COT", "COUNT", "COUNT_BIG", "CRC32", "CURDATE", "CURRVAL", "CURTIME", 
		"DATE", "DATEADD", "DATE_ADD", "DATE_FORMAT", "DATE_PART", "DATE_SUB", 
		"DATE_TRUNC", "DATEDIFF", "DATENAME", "DATEPART", "DATETIME", "DATETIME2", 
		"DATETIMEOFFSET", "DAY", "DAYNAME", "DAYOFMONTH", "DAYOFWEEK", "DAYOFYEAR", 
		"DAYS", "DECODE", "DEGREES", "DELAY", "DELETED", "DENSE_RANK", "DIAMETER", 
		"DISABLE", "DIV", "DYNAMIC", "NATURAL_CONSTANT", "ENCODE", "ENCRYPTION", 
		"ENUM_FIRST", "ENUM_LAST", "ENUM_RANGE", "ESCAPED_BY", "EXACT", "EXP", 
		"EXPLODE", "EXTRACT", "EVERY", "FACTORIAL", "FAMILY", "FAST", "FAST_FORWARD", 
		"FIELD", "FIELDS_SEPARATED_BY", "FIND_IN_SET", "FIRST", "FLOOR", "FOLLOWING", 
		"FORMAT", "FORMAT_NUMBER", "FORWARD_ONLY", "FNV_HASH", "FROM_DAYS", "FROM_UNIXTIME", 
		"FULLSCAN", "GEOGRAPHY", "GEOMETRY", "GET_BIT", "GET_BYTE", "GET_CURRENT_TS_CONFIG", 
		"GET_JSON_OBJECT", "GLOBAL", "GO", "GREATEST", "GROUPING", "GROUPING_ID", 
		"HEIGHT", "HEX", "HIERARCHYID", "HOST", "HOSTMASK", "HOUR", "IFNULL", 
		"IMAGE", "INT", "INITCAP", "INSENSITIVE", "INSERTED", "INSTR", "INTERVAL", 
		"IN_FILE", "INET_SAME_FAMILY", "INET_MERGE", "ISCLOSED", "ISEMPTY", "ISFINITE", 
		"ISNULL", "ISOLATION", "ISOPEN", "JSON_AGG", "JSON_ARRAY_LENGTH", "JSON_ARRAY_ELEMENTS", 
		"JSON_ARRAY_ELEMENTS_TEXT", "JSON_BUILD_ARRAY", "JSON_BUILD_OBJECT", "JSON_EACH", 
		"JSON_EACH_TEXT", "JSON_EXTRACT_PATH", "JSON_EXTRACT_PATH_TEXT", "JSON_OBJECT", 
		"JSON_OBJECT_KEYS", "JSON_OBJECT_AGG", "JSON_POPULATE_RECORD", "JSON_POPULATE_RECORDSET", 
		"JSON_STRIP_NULLS", "JSON_TO_RECORD", "JSON_TO_RECORDSET", "JSON_TYPEOF", 
		"JSONB_AGG", "JSONB_OBJECT_AGG", "JSONB_SET", "JSONB_INSERT", "JSONB_PRETTY", 
		"JUSTIFY_DAYS", "JUSTIFY_HOURS", "JUSTIFY_INTERVALS", "KEEPFIXED", "KEYSET", 
		"LAST", "LASTVAL", "LAST_DAY", "LAST_INSERT_ID", "LATERAL", "LCASE", "LEAST", 
		"LENGTH", "LEVEL", "LINE", "LN", "LOCAL", "LOCALTIME", "LOCALTIMESTAMP", 
		"LOCATE", "LOCATION", "LOCK_ESCALATION", "LOG", "LOG2", "LOG10", "LOGIN", 
		"LOOP", "LOWER", "LOWER_INC", "LOWER_INF", "LPAD", "LTRIM", "LSEG", "MACADDR8_SET7BIT", 
		"MAKEDATE", "MAKETIME", "MAKE_DATE", "MAKE_TIME", "MAKE_TIMESTAMP", "MAKE_TIMESTAMPTZ", 
		"MARK", "MASKLEN", "MAX", "MD5", "METHOD", "MICROSECOND", "MIN", "MIN_ACTIVE_ROWVERSION", 
		"MINUTE", "MOD", "MODIFY", "MONEY", "MONTH", "MONTHNAME", "MONTHS", "NEGATIVE", 
		"NEXT", "NETMASK", "NETWORK", "NAME", "NCHAR", "NDV", "NEXTVAL", "NOCOUNT", 
		"NOEXPAND", "NORECOMPUTE", "NOW", "NPOINTS", "NTEXT", "NTILE", "NUMBER", 
		"NUMNODE", "NUMERIC", "NVARCHAR", "NVL", "OCTET_LENGTH", "OFFSET", "ONLY", 
		"OPTIMISTIC", "OPTIMIZE", "OUT", "OUTPUT", "OVERLAY", "OWNER", "PARTITION", 
		"PATH", "PCLOSE", "PERCENTILE", "PERIOD_ADD", "PERIOD_DIFF", "PG_CLIENT_ENCODING", 
		"PLAINTO_TSQUERY", "PHRASETO_TSQUERY", "PI", "PLACING", "PMOD", "POINT", 
		"POLYGON", "POPEN", "POSITION", "POSITIVE", "POW", "POWER", "PRECEDING", 
		"PRIOR", "QUARTER", "QUERYTREE", "QUOTED_BY", "QUOTE_IDENT", "QUOTE_LITERAL", 
		"QUOTE_NULLABLE", "RADIANS", "RADIUS", "RAND", "RANDOM", "RANGE", "RANGE_MERGE", 
		"RANK", "READONLY", "READ_ONLY", "RECOMMENDED", "RECOMPILE", "REFRESH", 
		"REGR_AVGX", "REGR_AVGY", "REGR_COUNT", "REGR_INTERCEPT", "REGR_R2", "REGR_SLOPE", 
		"REGR_SXX", "REGR_SXY", "REGR_SYY", "RELATIVE", "REGEXP_MATCHES", "REGEXP_REPLACE", 
		"REGEXP_SPLIT_TO_ARRAY", "REGEXP_SPLIT_TO_TABLE", "REMOTE", "REPEAT", 
		"REPEATABLE", "REPLACE", "REVERSE", "ROLLUP", "ROOT", "ROUND", "ROW", 
		"ROW_TO_JSON", "ROWGUID", "ROWS", "ROW_NUMBER", "RTRIM", "SAMPLE", "SCALE", 
		"SCHEMABINDING", "SCROLL", "SCROLL_LOCKS", "SECOND", "SEC_TO_TIME", "SELF", 
		"SERIALIZABLE", "SETSEED", "SETWEIGHT", "SETVAL", "SET_BIT", "SET_BYTE", 
		"SET_MASKLEN", "SHA1", "SHA2", "SHIFTLEFT", "SHIFTRIGHT", "SHIFTRIGHTUNSIGNED", 
		"SIGN", "SIN", "SMALLDATETIME", "SMALLINT", "SMALLMONEY", "SNAPSHOT", 
		"SPACE_FUNCTION", "SPATIAL_WINDOW_MAX_CELLS", "SPLIT", "SPLIT_PART", "SQL_VARIANT", 
		"STATEMENT_TIMESTAMP", "STATIC", "STATS_STREAM", "STDEV", "STDDEV", "STDEVP", 
		"STDDEV_SAMP", "STORED_AS_PARQUET", "STRCMP", "STRING_AGG", "STRING_TO_ARRAY", 
		"STRPOS", "STR_TO_DATE", "SUBDATE", "SUBSTRING_INDEX", "SUM", "SQRT", 
		"STDDEV_POP", "STRIP", "STRTOL", "SYSDATE", "TAN", "TEXT", "THROW", "TIES", 
		"TIME", "TIMEDIFF", "TIMEOFDAY", "TIMESTAMP", "TIME_FORMAT", "TIME_TO_SEC", 
		"TINYINT", "TO_ASCII", "TO_CHAR", "TO_DATE", "TO_DAYS", "TO_HEX", "TO_JSON", 
		"TO_JSONB", "TO_NUMBER", "TO_TIMESTAMP", "TO_TSQUERY", "TO_TSVECTOR", 
		"TRANSACTION_TIMESTAMP", "TRANSLATE", "TRIM", "TRUNC", "TRY", "TS_DELETE", 
		"TS_FILTER", "TS_HEADLINE", "TS_RANK", "TS_RANK_CD", "TS_REWRITE", "TSQUERY_PHRASE", 
		"TSVECTOR_TO_ARRAY", "TSVECTOR_UPDATE_TRIGGER", "TSVECTOR_UPDATE_TRIGGER_COLUMN", 
		"TYPE", "TYPE_WARNING", "UCASE", "UNBOUNDED", "UNCOMMITTED", "UNHEX", 
		"UNIQUEIDENTIFIER", "UNIVERSE", "UNIX_TIMESTAMP", "UNKNOWN", "UNNEST", 
		"UPPER", "UPPER_INC", "UPPER_INF", "USING", "VAR", "VARBINARY", "VARCHAR", 
		"VARIANCE", "VAR_POP", "VAR_SAMP", "VARP", "VERSION", "VIEW_METADATA", 
		"WEEKOFYEAR", "WEEK", "WEEKDAY", "WIDTH", "WIDTH_BUCKET", "WORK", "XML", 
		"XMLAGG", "XMLCOMMENT", "XMLCONCAT", "XMLELEMENT", "XMLFOREST", "XMLNAMESPACES", 
		"XMLPI", "XMLROOT", "XML_ISWELL_FORMAT", "XPATH", "XPATH_EXISTS", "YEAR", 
		"YEARS", "YEARWEEK", "ST_ASBINARY", "ST_ASTEXT", "ST_GEOMETRYFROMTEXT", 
		"ST_GEOMFROMBINARY", "ST_LINEFROMTEXT", "ST_LINESTRING", "ST_MULTIPOINT", 
		"ST_POINT", "ST_POLYGON", "ST_CONTAINS", "ST_CROSSES", "ST_DISJOINT", 
		"ST_EQUALS", "ST_INTERSECTS", "ST_OVERLAPS", "ST_RELATE", "ST_TOUCHES", 
		"ST_WITHIN", "GEOMETRY_UNION", "ST_BOUNDARY", "ST_BUFFER", "ST_DIFFERENCE", 
		"ST_ENVELOPE", "ST_ENVELOPEASPTS", "ST_EXTERIORRING", "ST_INTERSECTION", 
		"ST_SYMDIFFERENCE", "ST_UNION", "ST_AREA", "ST_CENTROID", "ST_CONVEXHULL", 
		"ST_COORDDIM", "ST_DIMENSION", "ST_DISTANCE", "ST_GEOMETRYN", "ST_INTERIORRINGN", 
		"ST_GEOMETRYTYPE", "ST_ISCLOSED", "ST_ISEMPTY", "ST_ISSIMPLE", "ST_ISRING", 
		"ST_ISVALID", "ST_LENGTH", "ST_POINTN", "ST_XMAX", "ST_YMAX", "ST_XMIN", 
		"ST_YMIN", "ST_STARTPOINT", "SIMPLIFY_GEOMETRY", "ST_ENDPOINT", "ST_X", 
		"ST_Y", "ST_INTERIORRINGS", "ST_NUMGEOMETRIES", "ST_GEOMETRIES", "ST_NUMPOINTS", 
		"ST_NUMINTERIORRING", "LINE_LOCATE_POINT", "GEOMETRY_INVALID_REASON", 
		"GREAT_CIRCLE_DISTANCE", "CONVEX_HULL_AGG", "GEOMETRY_UNION_AGG", "BING_TILE", 
		"BING_TILE_AT", "BING_TILES_AROUND", "BING_TILE_COORDINATES", "BING_TILE_POLYGON", 
		"BING_TILE_QUADKEY", "BING_TILE_ZOOM_LEVEL", "GEOMETRY_TO_BING_TILES", 
		"DOLLAR_ACTION", "SPACE", "COMMENT", "LINE_COMMENT", "DOUBLE_QUOTE_ID", 
		"BACKTICK_ID", "SQUARE_BRACKET_ID", "LOCAL_ID", "DECIMAL", "ID", "STRING", 
		"BINARY", "FLOAT", "REAL", "EQUAL", "GREATER", "LESS", "EXCLAMATION", 
		"PLUS_ASSIGN", "MINUS_ASSIGN", "MULT_ASSIGN", "DIV_ASSIGN", "MOD_ASSIGN", 
		"AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "DOT", "UNDERLINE", "AT", "SHARP", 
		"DOLLAR", "LR_BRACKET", "RR_BRACKET", "COMMA", "SEMICOLON", "COLON", "STAR", 
		"DIVIDE", "MODULE", "PLUS", "MINUS", "BIT_NOT", "BIT_OR", "BIT_AND", "BIT_XOR", 
		"BIT_CONCAT", "BIT_LSHIFT", "BIT_RSHIFT"
	};
	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 "VerdictSQLParser.g4"; }

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

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

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

	public VerdictSQLParser(TokenStream input) {
		super(input);
		_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
	}
	public static class Verdict_statementContext extends ParserRuleContext {
		public Select_statementContext select_statement() {
			return getRuleContext(Select_statementContext.class,0);
		}
		public Stream_select_statementContext stream_select_statement() {
			return getRuleContext(Stream_select_statementContext.class,0);
		}
		public Create_scramble_statementContext create_scramble_statement() {
			return getRuleContext(Create_scramble_statementContext.class,0);
		}
		public Drop_scramble_statementContext drop_scramble_statement() {
			return getRuleContext(Drop_scramble_statementContext.class,0);
		}
		public Drop_all_scrambles_statementContext drop_all_scrambles_statement() {
			return getRuleContext(Drop_all_scrambles_statementContext.class,0);
		}
		public Show_scrambles_statementContext show_scrambles_statement() {
			return getRuleContext(Show_scrambles_statementContext.class,0);
		}
		public Config_statementContext config_statement() {
			return getRuleContext(Config_statementContext.class,0);
		}
		public Other_statementContext other_statement() {
			return getRuleContext(Other_statementContext.class,0);
		}
		public Create_tableContext create_table() {
			return getRuleContext(Create_tableContext.class,0);
		}
		public Create_table_as_selectContext create_table_as_select() {
			return getRuleContext(Create_table_as_selectContext.class,0);
		}
		public Create_viewContext create_view() {
			return getRuleContext(Create_viewContext.class,0);
		}
		public Drop_tableContext drop_table() {
			return getRuleContext(Drop_tableContext.class,0);
		}
		public Drop_viewContext drop_view() {
			return getRuleContext(Drop_viewContext.class,0);
		}
		public Verdict_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_verdict_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitVerdict_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Verdict_statementContext verdict_statement() throws RecognitionException {
		Verdict_statementContext _localctx = new Verdict_statementContext(_ctx, getState());
		enterRule(_localctx, 0, RULE_verdict_statement);
		try {
			setState(295);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(282);
				select_statement();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(283);
				stream_select_statement();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(284);
				create_scramble_statement();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(285);
				drop_scramble_statement();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(286);
				drop_all_scrambles_statement();
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(287);
				show_scrambles_statement();
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(288);
				config_statement();
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(289);
				other_statement();
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(290);
				create_table();
				}
				break;
			case 10:
				enterOuterAlt(_localctx, 10);
				{
				setState(291);
				create_table_as_select();
				}
				break;
			case 11:
				enterOuterAlt(_localctx, 11);
				{
				setState(292);
				create_view();
				}
				break;
			case 12:
				enterOuterAlt(_localctx, 12);
				{
				setState(293);
				drop_table();
				}
				break;
			case 13:
				enterOuterAlt(_localctx, 13);
				{
				setState(294);
				drop_view();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Create_scramble_statementContext extends ParserRuleContext {
		public Table_nameContext scrambled_table;
		public Table_nameContext original_table;
		public Scrambling_method_nameContext method;
		public Column_nameContext hash_column;
		public Token percent;
		public Token blocksize;
		public TerminalNode CREATE() { return getToken(VerdictSQLParser.CREATE, 0); }
		public TerminalNode SCRAMBLE() { return getToken(VerdictSQLParser.SCRAMBLE, 0); }
		public TerminalNode FROM() { return getToken(VerdictSQLParser.FROM, 0); }
		public List table_name() {
			return getRuleContexts(Table_nameContext.class);
		}
		public Table_nameContext table_name(int i) {
			return getRuleContext(Table_nameContext.class,i);
		}
		public TerminalNode IF() { return getToken(VerdictSQLParser.IF, 0); }
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public TerminalNode EXISTS() { return getToken(VerdictSQLParser.EXISTS, 0); }
		public TerminalNode METHOD() { return getToken(VerdictSQLParser.METHOD, 0); }
		public TerminalNode BLOCKSIZE() { return getToken(VerdictSQLParser.BLOCKSIZE, 0); }
		public Scrambling_method_nameContext scrambling_method_name() {
			return getRuleContext(Scrambling_method_nameContext.class,0);
		}
		public TerminalNode HASHCOLUMN() { return getToken(VerdictSQLParser.HASHCOLUMN, 0); }
		public TerminalNode ON() { return getToken(VerdictSQLParser.ON, 0); }
		public Column_nameContext column_name() {
			return getRuleContext(Column_nameContext.class,0);
		}
		public TerminalNode SIZE() { return getToken(VerdictSQLParser.SIZE, 0); }
		public TerminalNode RATIO() { return getToken(VerdictSQLParser.RATIO, 0); }
		public TerminalNode FLOAT() { return getToken(VerdictSQLParser.FLOAT, 0); }
		public TerminalNode DECIMAL() { return getToken(VerdictSQLParser.DECIMAL, 0); }
		public Create_scramble_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_create_scramble_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCreate_scramble_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Create_scramble_statementContext create_scramble_statement() throws RecognitionException {
		Create_scramble_statementContext _localctx = new Create_scramble_statementContext(_ctx, getState());
		enterRule(_localctx, 2, RULE_create_scramble_statement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(297);
			match(CREATE);
			setState(298);
			match(SCRAMBLE);
			setState(302);
			_la = _input.LA(1);
			if (_la==IF) {
				{
				setState(299);
				match(IF);
				setState(300);
				match(NOT);
				setState(301);
				match(EXISTS);
				}
			}

			setState(304);
			((Create_scramble_statementContext)_localctx).scrambled_table = table_name();
			setState(305);
			match(FROM);
			setState(306);
			((Create_scramble_statementContext)_localctx).original_table = table_name();
			setState(309);
			_la = _input.LA(1);
			if (_la==METHOD) {
				{
				setState(307);
				match(METHOD);
				setState(308);
				((Create_scramble_statementContext)_localctx).method = scrambling_method_name();
				}
			}

			setState(313);
			_la = _input.LA(1);
			if (_la==HASHCOLUMN || _la==ON) {
				{
				setState(311);
				_la = _input.LA(1);
				if ( !(_la==HASHCOLUMN || _la==ON) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(312);
				((Create_scramble_statementContext)_localctx).hash_column = column_name();
				}
			}

			setState(317);
			_la = _input.LA(1);
			if (_la==SIZE || _la==RATIO) {
				{
				setState(315);
				_la = _input.LA(1);
				if ( !(_la==SIZE || _la==RATIO) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(316);
				((Create_scramble_statementContext)_localctx).percent = match(FLOAT);
				}
			}

			setState(321);
			_la = _input.LA(1);
			if (_la==BLOCKSIZE) {
				{
				setState(319);
				match(BLOCKSIZE);
				setState(320);
				((Create_scramble_statementContext)_localctx).blocksize = match(DECIMAL);
				}
			}

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

	public static class Scrambling_method_nameContext extends ParserRuleContext {
		public Config_valueContext config_value() {
			return getRuleContext(Config_valueContext.class,0);
		}
		public TerminalNode HASH() { return getToken(VerdictSQLParser.HASH, 0); }
		public TerminalNode UNIFORM() { return getToken(VerdictSQLParser.UNIFORM, 0); }
		public Scrambling_method_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_scrambling_method_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitScrambling_method_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Scrambling_method_nameContext scrambling_method_name() throws RecognitionException {
		Scrambling_method_nameContext _localctx = new Scrambling_method_nameContext(_ctx, getState());
		enterRule(_localctx, 4, RULE_scrambling_method_name);
		try {
			setState(326);
			switch (_input.LA(1)) {
			case DOUBLE_QUOTE_ID:
			case ID:
			case STRING:
				enterOuterAlt(_localctx, 1);
				{
				setState(323);
				config_value();
				}
				break;
			case HASH:
				enterOuterAlt(_localctx, 2);
				{
				setState(324);
				match(HASH);
				}
				break;
			case UNIFORM:
				enterOuterAlt(_localctx, 3);
				{
				setState(325);
				match(UNIFORM);
				}
				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 Drop_scramble_statementContext extends ParserRuleContext {
		public Table_nameContext scrambled_table;
		public Table_nameContext original_table;
		public TerminalNode DROP() { return getToken(VerdictSQLParser.DROP, 0); }
		public TerminalNode SCRAMBLE() { return getToken(VerdictSQLParser.SCRAMBLE, 0); }
		public List table_name() {
			return getRuleContexts(Table_nameContext.class);
		}
		public Table_nameContext table_name(int i) {
			return getRuleContext(Table_nameContext.class,i);
		}
		public TerminalNode ON() { return getToken(VerdictSQLParser.ON, 0); }
		public Drop_scramble_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_drop_scramble_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDrop_scramble_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Drop_scramble_statementContext drop_scramble_statement() throws RecognitionException {
		Drop_scramble_statementContext _localctx = new Drop_scramble_statementContext(_ctx, getState());
		enterRule(_localctx, 6, RULE_drop_scramble_statement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(328);
			match(DROP);
			setState(329);
			match(SCRAMBLE);
			setState(330);
			((Drop_scramble_statementContext)_localctx).scrambled_table = table_name();
			setState(333);
			_la = _input.LA(1);
			if (_la==ON) {
				{
				setState(331);
				match(ON);
				setState(332);
				((Drop_scramble_statementContext)_localctx).original_table = table_name();
				}
			}

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

	public static class Drop_all_scrambles_statementContext extends ParserRuleContext {
		public Table_nameContext original_table;
		public TerminalNode DROP() { return getToken(VerdictSQLParser.DROP, 0); }
		public TerminalNode ALL() { return getToken(VerdictSQLParser.ALL, 0); }
		public TerminalNode SCRAMBLE() { return getToken(VerdictSQLParser.SCRAMBLE, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public Drop_all_scrambles_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_drop_all_scrambles_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDrop_all_scrambles_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Drop_all_scrambles_statementContext drop_all_scrambles_statement() throws RecognitionException {
		Drop_all_scrambles_statementContext _localctx = new Drop_all_scrambles_statementContext(_ctx, getState());
		enterRule(_localctx, 8, RULE_drop_all_scrambles_statement);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(335);
			match(DROP);
			setState(336);
			match(ALL);
			setState(337);
			match(SCRAMBLE);
			setState(338);
			((Drop_all_scrambles_statementContext)_localctx).original_table = table_name();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Show_scrambles_statementContext extends ParserRuleContext {
		public TerminalNode SHOW() { return getToken(VerdictSQLParser.SHOW, 0); }
		public TerminalNode SCRAMBLES() { return getToken(VerdictSQLParser.SCRAMBLES, 0); }
		public Show_scrambles_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_show_scrambles_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitShow_scrambles_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Show_scrambles_statementContext show_scrambles_statement() throws RecognitionException {
		Show_scrambles_statementContext _localctx = new Show_scrambles_statementContext(_ctx, getState());
		enterRule(_localctx, 10, RULE_show_scrambles_statement);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(340);
			match(SHOW);
			setState(341);
			match(SCRAMBLES);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Config_statementContext extends ParserRuleContext {
		public Config_set_statementContext config_set_statement() {
			return getRuleContext(Config_set_statementContext.class,0);
		}
		public Config_get_statementContext config_get_statement() {
			return getRuleContext(Config_get_statementContext.class,0);
		}
		public Config_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_config_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitConfig_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Config_statementContext config_statement() throws RecognitionException {
		Config_statementContext _localctx = new Config_statementContext(_ctx, getState());
		enterRule(_localctx, 12, RULE_config_statement);
		try {
			setState(345);
			switch (_input.LA(1)) {
			case SET:
				enterOuterAlt(_localctx, 1);
				{
				setState(343);
				config_set_statement();
				}
				break;
			case GET:
				enterOuterAlt(_localctx, 2);
				{
				setState(344);
				config_get_statement();
				}
				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 Other_statementContext extends ParserRuleContext {
		public Use_statementContext use_statement() {
			return getRuleContext(Use_statementContext.class,0);
		}
		public Show_tables_statementContext show_tables_statement() {
			return getRuleContext(Show_tables_statementContext.class,0);
		}
		public Show_databases_statementContext show_databases_statement() {
			return getRuleContext(Show_databases_statementContext.class,0);
		}
		public Describe_table_statementContext describe_table_statement() {
			return getRuleContext(Describe_table_statementContext.class,0);
		}
		public Refresh_statementContext refresh_statement() {
			return getRuleContext(Refresh_statementContext.class,0);
		}
		public Show_config_statementContext show_config_statement() {
			return getRuleContext(Show_config_statementContext.class,0);
		}
		public Create_databaseContext create_database() {
			return getRuleContext(Create_databaseContext.class,0);
		}
		public Drop_databaseContext drop_database() {
			return getRuleContext(Drop_databaseContext.class,0);
		}
		public Other_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_other_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOther_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Other_statementContext other_statement() throws RecognitionException {
		Other_statementContext _localctx = new Other_statementContext(_ctx, getState());
		enterRule(_localctx, 14, RULE_other_statement);
		try {
			setState(355);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(347);
				use_statement();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(348);
				show_tables_statement();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(349);
				show_databases_statement();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(350);
				describe_table_statement();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(351);
				refresh_statement();
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(352);
				show_config_statement();
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(353);
				create_database();
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(354);
				drop_database();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Create_databaseContext extends ParserRuleContext {
		public IdContext database;
		public TerminalNode CREATE() { return getToken(VerdictSQLParser.CREATE, 0); }
		public TerminalNode DATABASE() { return getToken(VerdictSQLParser.DATABASE, 0); }
		public TerminalNode SCHEMA() { return getToken(VerdictSQLParser.SCHEMA, 0); }
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Create_databaseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_create_database; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCreate_database(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Create_databaseContext create_database() throws RecognitionException {
		Create_databaseContext _localctx = new Create_databaseContext(_ctx, getState());
		enterRule(_localctx, 16, RULE_create_database);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(357);
			match(CREATE);
			setState(358);
			_la = _input.LA(1);
			if ( !(_la==DATABASE || _la==SCHEMA) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			{
			setState(359);
			((Create_databaseContext)_localctx).database = id();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Drop_databaseContext extends ParserRuleContext {
		public IdContext database;
		public TerminalNode DROP() { return getToken(VerdictSQLParser.DROP, 0); }
		public TerminalNode DATABASE() { return getToken(VerdictSQLParser.DATABASE, 0); }
		public TerminalNode SCHEMA() { return getToken(VerdictSQLParser.SCHEMA, 0); }
		public TerminalNode IF() { return getToken(VerdictSQLParser.IF, 0); }
		public TerminalNode EXISTS() { return getToken(VerdictSQLParser.EXISTS, 0); }
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Drop_databaseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_drop_database; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDrop_database(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Drop_databaseContext drop_database() throws RecognitionException {
		Drop_databaseContext _localctx = new Drop_databaseContext(_ctx, getState());
		enterRule(_localctx, 18, RULE_drop_database);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(361);
			match(DROP);
			setState(362);
			_la = _input.LA(1);
			if ( !(_la==DATABASE || _la==SCHEMA) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			setState(365);
			_la = _input.LA(1);
			if (_la==IF) {
				{
				setState(363);
				match(IF);
				setState(364);
				match(EXISTS);
				}
			}

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

	public static class Config_set_statementContext extends ParserRuleContext {
		public Config_keyContext key;
		public Config_valueContext value;
		public TerminalNode SET() { return getToken(VerdictSQLParser.SET, 0); }
		public Config_keyContext config_key() {
			return getRuleContext(Config_keyContext.class,0);
		}
		public Config_valueContext config_value() {
			return getRuleContext(Config_valueContext.class,0);
		}
		public Config_set_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_config_set_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitConfig_set_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Config_set_statementContext config_set_statement() throws RecognitionException {
		Config_set_statementContext _localctx = new Config_set_statementContext(_ctx, getState());
		enterRule(_localctx, 20, RULE_config_set_statement);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(369);
			match(SET);
			setState(370);
			((Config_set_statementContext)_localctx).key = config_key();
			setState(371);
			match(EQUAL);
			setState(372);
			((Config_set_statementContext)_localctx).value = config_value();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Config_get_statementContext extends ParserRuleContext {
		public Config_keyContext key;
		public TerminalNode GET() { return getToken(VerdictSQLParser.GET, 0); }
		public Config_keyContext config_key() {
			return getRuleContext(Config_keyContext.class,0);
		}
		public Config_get_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_config_get_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitConfig_get_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Config_get_statementContext config_get_statement() throws RecognitionException {
		Config_get_statementContext _localctx = new Config_get_statementContext(_ctx, getState());
		enterRule(_localctx, 22, RULE_config_get_statement);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(374);
			match(GET);
			setState(375);
			((Config_get_statementContext)_localctx).key = config_key();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Config_keyContext extends ParserRuleContext {
		public TerminalNode ID() { return getToken(VerdictSQLParser.ID, 0); }
		public Config_keyContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_config_key; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitConfig_key(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Config_keyContext config_key() throws RecognitionException {
		Config_keyContext _localctx = new Config_keyContext(_ctx, getState());
		enterRule(_localctx, 24, RULE_config_key);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(377);
			match(ID);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Config_valueContext extends ParserRuleContext {
		public TerminalNode DOUBLE_QUOTE_ID() { return getToken(VerdictSQLParser.DOUBLE_QUOTE_ID, 0); }
		public TerminalNode STRING() { return getToken(VerdictSQLParser.STRING, 0); }
		public List ID() { return getTokens(VerdictSQLParser.ID); }
		public TerminalNode ID(int i) {
			return getToken(VerdictSQLParser.ID, i);
		}
		public Config_valueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_config_value; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitConfig_value(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Config_valueContext config_value() throws RecognitionException {
		Config_valueContext _localctx = new Config_valueContext(_ctx, getState());
		enterRule(_localctx, 26, RULE_config_value);
		int _la;
		try {
			setState(389);
			switch (_input.LA(1)) {
			case DOUBLE_QUOTE_ID:
				enterOuterAlt(_localctx, 1);
				{
				setState(379);
				match(DOUBLE_QUOTE_ID);
				}
				break;
			case STRING:
				enterOuterAlt(_localctx, 2);
				{
				setState(380);
				match(STRING);
				}
				break;
			case ID:
				enterOuterAlt(_localctx, 3);
				{
				setState(381);
				match(ID);
				setState(386);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(382);
					match(COMMA);
					setState(383);
					match(ID);
					}
					}
					setState(388);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				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 Tsql_fileContext extends ParserRuleContext {
		public TerminalNode EOF() { return getToken(VerdictSQLParser.EOF, 0); }
		public List sql_clause() {
			return getRuleContexts(Sql_clauseContext.class);
		}
		public Sql_clauseContext sql_clause(int i) {
			return getRuleContext(Sql_clauseContext.class,i);
		}
		public Tsql_fileContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_tsql_file; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTsql_file(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Tsql_fileContext tsql_file() throws RecognitionException {
		Tsql_fileContext _localctx = new Tsql_fileContext(_ctx, getState());
		enterRule(_localctx, 28, RULE_tsql_file);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(394);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SHOW) | (1L << ALTER) | (1L << CREATE) | (1L << DESCRIBE))) != 0) || _la==DROP || _la==USE || _la==REFRESH) {
				{
				{
				setState(391);
				sql_clause();
				}
				}
				setState(396);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(397);
			match(EOF);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Sql_clauseContext extends ParserRuleContext {
		public Ddl_clauseContext ddl_clause() {
			return getRuleContext(Ddl_clauseContext.class,0);
		}
		public Other_statementContext other_statement() {
			return getRuleContext(Other_statementContext.class,0);
		}
		public Sql_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_sql_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSql_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Sql_clauseContext sql_clause() throws RecognitionException {
		Sql_clauseContext _localctx = new Sql_clauseContext(_ctx, getState());
		enterRule(_localctx, 30, RULE_sql_clause);
		try {
			setState(401);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(399);
				ddl_clause();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(400);
				other_statement();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Ddl_clauseContext extends ParserRuleContext {
		public Create_tableContext create_table() {
			return getRuleContext(Create_tableContext.class,0);
		}
		public Create_viewContext create_view() {
			return getRuleContext(Create_viewContext.class,0);
		}
		public Alter_tableContext alter_table() {
			return getRuleContext(Alter_tableContext.class,0);
		}
		public Alter_databaseContext alter_database() {
			return getRuleContext(Alter_databaseContext.class,0);
		}
		public Drop_tableContext drop_table() {
			return getRuleContext(Drop_tableContext.class,0);
		}
		public Drop_viewContext drop_view() {
			return getRuleContext(Drop_viewContext.class,0);
		}
		public Ddl_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_ddl_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDdl_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Ddl_clauseContext ddl_clause() throws RecognitionException {
		Ddl_clauseContext _localctx = new Ddl_clauseContext(_ctx, getState());
		enterRule(_localctx, 32, RULE_ddl_clause);
		try {
			setState(409);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,15,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(403);
				create_table();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(404);
				create_view();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(405);
				alter_table();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(406);
				alter_database();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(407);
				drop_table();
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(408);
				drop_view();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Select_statementContext extends ParserRuleContext {
		public Query_expressionContext query_expression() {
			return getRuleContext(Query_expressionContext.class,0);
		}
		public With_expressionContext with_expression() {
			return getRuleContext(With_expressionContext.class,0);
		}
		public TerminalNode EXACT() { return getToken(VerdictSQLParser.EXACT, 0); }
		public Order_by_clauseContext order_by_clause() {
			return getRuleContext(Order_by_clauseContext.class,0);
		}
		public Limit_clauseContext limit_clause() {
			return getRuleContext(Limit_clauseContext.class,0);
		}
		public Select_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_select_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSelect_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Select_statementContext select_statement() throws RecognitionException {
		Select_statementContext _localctx = new Select_statementContext(_ctx, getState());
		enterRule(_localctx, 34, RULE_select_statement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(412);
			_la = _input.LA(1);
			if (_la==WITH) {
				{
				setState(411);
				with_expression();
				}
			}

			setState(415);
			_la = _input.LA(1);
			if (_la==EXACT) {
				{
				setState(414);
				match(EXACT);
				}
			}

			setState(417);
			query_expression();
			setState(419);
			_la = _input.LA(1);
			if (_la==ORDER) {
				{
				setState(418);
				order_by_clause();
				}
			}

			setState(422);
			_la = _input.LA(1);
			if (_la==LIMIT) {
				{
				setState(421);
				limit_clause();
				}
			}

			setState(425);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,20,_ctx) ) {
			case 1:
				{
				setState(424);
				match(SEMICOLON);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Stream_select_statementContext extends ParserRuleContext {
		public TerminalNode STREAM() { return getToken(VerdictSQLParser.STREAM, 0); }
		public Select_statementContext select_statement() {
			return getRuleContext(Select_statementContext.class,0);
		}
		public Stream_select_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_stream_select_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitStream_select_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Stream_select_statementContext stream_select_statement() throws RecognitionException {
		Stream_select_statementContext _localctx = new Stream_select_statementContext(_ctx, getState());
		enterRule(_localctx, 36, RULE_stream_select_statement);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(427);
			match(STREAM);
			setState(428);
			select_statement();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Output_clauseContext extends ParserRuleContext {
		public TerminalNode OUTPUT() { return getToken(VerdictSQLParser.OUTPUT, 0); }
		public List output_dml_list_elem() {
			return getRuleContexts(Output_dml_list_elemContext.class);
		}
		public Output_dml_list_elemContext output_dml_list_elem(int i) {
			return getRuleContext(Output_dml_list_elemContext.class,i);
		}
		public TerminalNode INTO() { return getToken(VerdictSQLParser.INTO, 0); }
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public Column_name_listContext column_name_list() {
			return getRuleContext(Column_name_listContext.class,0);
		}
		public Output_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_output_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOutput_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Output_clauseContext output_clause() throws RecognitionException {
		Output_clauseContext _localctx = new Output_clauseContext(_ctx, getState());
		enterRule(_localctx, 38, RULE_output_clause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(430);
			match(OUTPUT);
			setState(431);
			output_dml_list_elem();
			setState(436);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(432);
				match(COMMA);
				setState(433);
				output_dml_list_elem();
				}
				}
				setState(438);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(450);
			_la = _input.LA(1);
			if (_la==INTO) {
				{
				setState(439);
				match(INTO);
				setState(442);
				switch (_input.LA(1)) {
				case LOCAL_ID:
					{
					setState(440);
					match(LOCAL_ID);
					}
					break;
				case DISTINCT:
				case LEFT:
				case RIGHT:
				case AGE:
				case AREA:
				case CENTER:
				case CIRCLE:
				case COUNT:
				case DATE:
				case DAY:
				case DAYNAME:
				case DAYOFMONTH:
				case DAYOFWEEK:
				case DAYOFYEAR:
				case DEGREES:
				case DIAMETER:
				case HEIGHT:
				case HOUR:
				case LENGTH:
				case MAKEDATE:
				case MICROSECOND:
				case MINUTE:
				case MOD:
				case MONTH:
				case MONTHNAME:
				case POWER:
				case SCALE:
				case SECOND:
				case TEXT:
				case TIME:
				case TIMESTAMP:
				case VARIANCE:
				case WEEKOFYEAR:
				case DOUBLE_QUOTE_ID:
				case BACKTICK_ID:
				case SQUARE_BRACKET_ID:
				case ID:
					{
					setState(441);
					table_name();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(448);
				_la = _input.LA(1);
				if (_la==LR_BRACKET) {
					{
					setState(444);
					match(LR_BRACKET);
					setState(445);
					column_name_list();
					setState(446);
					match(RR_BRACKET);
					}
				}

				}
			}

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

	public static class Output_dml_list_elemContext extends ParserRuleContext {
		public Output_column_nameContext output_column_name() {
			return getRuleContext(Output_column_nameContext.class,0);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Column_aliasContext column_alias() {
			return getRuleContext(Column_aliasContext.class,0);
		}
		public TerminalNode AS() { return getToken(VerdictSQLParser.AS, 0); }
		public Output_dml_list_elemContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_output_dml_list_elem; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOutput_dml_list_elem(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Output_dml_list_elemContext output_dml_list_elem() throws RecognitionException {
		Output_dml_list_elemContext _localctx = new Output_dml_list_elemContext(_ctx, getState());
		enterRule(_localctx, 40, RULE_output_dml_list_elem);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(454);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) {
			case 1:
				{
				setState(452);
				output_column_name();
				}
				break;
			case 2:
				{
				setState(453);
				expression(0);
				}
				break;
			}
			setState(460);
			_la = _input.LA(1);
			if (_la==AS || _la==DISTINCT || _la==LEFT || _la==RIGHT || ((((_la - 228)) & ~0x3f) == 0 && ((1L << (_la - 228)) & ((1L << (AGE - 228)) | (1L << (AREA - 228)) | (1L << (CENTER - 228)) | (1L << (CIRCLE - 228)))) != 0) || ((((_la - 293)) & ~0x3f) == 0 && ((1L << (_la - 293)) & ((1L << (COUNT - 293)) | (1L << (DATE - 293)) | (1L << (DAY - 293)) | (1L << (DAYNAME - 293)) | (1L << (DAYOFMONTH - 293)) | (1L << (DAYOFWEEK - 293)) | (1L << (DAYOFYEAR - 293)) | (1L << (DEGREES - 293)) | (1L << (DIAMETER - 293)))) != 0) || ((((_la - 367)) & ~0x3f) == 0 && ((1L << (_la - 367)) & ((1L << (HEIGHT - 367)) | (1L << (HOUR - 367)) | (1L << (LENGTH - 367)))) != 0) || ((((_la - 448)) & ~0x3f) == 0 && ((1L << (_la - 448)) & ((1L << (MAKEDATE - 448)) | (1L << (MICROSECOND - 448)) | (1L << (MINUTE - 448)) | (1L << (MOD - 448)) | (1L << (MONTH - 448)) | (1L << (MONTHNAME - 448)))) != 0) || ((((_la - 516)) & ~0x3f) == 0 && ((1L << (_la - 516)) & ((1L << (POWER - 516)) | (1L << (SCALE - 516)) | (1L << (SECOND - 516)))) != 0) || ((((_la - 618)) & ~0x3f) == 0 && ((1L << (_la - 618)) & ((1L << (TEXT - 618)) | (1L << (TIME - 618)) | (1L << (TIMESTAMP - 618)) | (1L << (VARIANCE - 618)) | (1L << (WEEKOFYEAR - 618)))) != 0) || ((((_la - 774)) & ~0x3f) == 0 && ((1L << (_la - 774)) & ((1L << (DOUBLE_QUOTE_ID - 774)) | (1L << (BACKTICK_ID - 774)) | (1L << (SQUARE_BRACKET_ID - 774)) | (1L << (ID - 774)) | (1L << (STRING - 774)))) != 0)) {
				{
				setState(457);
				_la = _input.LA(1);
				if (_la==AS) {
					{
					setState(456);
					match(AS);
					}
				}

				setState(459);
				column_alias();
				}
			}

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

	public static class Output_column_nameContext extends ParserRuleContext {
		public TerminalNode DELETED() { return getToken(VerdictSQLParser.DELETED, 0); }
		public TerminalNode INSERTED() { return getToken(VerdictSQLParser.INSERTED, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public Column_nameContext column_name() {
			return getRuleContext(Column_nameContext.class,0);
		}
		public TerminalNode DOLLAR_ACTION() { return getToken(VerdictSQLParser.DOLLAR_ACTION, 0); }
		public Output_column_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_output_column_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOutput_column_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Output_column_nameContext output_column_name() throws RecognitionException {
		Output_column_nameContext _localctx = new Output_column_nameContext(_ctx, getState());
		enterRule(_localctx, 42, RULE_output_column_name);
		try {
			setState(473);
			switch (_input.LA(1)) {
			case DISTINCT:
			case LEFT:
			case RIGHT:
			case AGE:
			case AREA:
			case CENTER:
			case CIRCLE:
			case COUNT:
			case DATE:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DELETED:
			case DIAMETER:
			case HEIGHT:
			case HOUR:
			case INSERTED:
			case LENGTH:
			case MAKEDATE:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONTH:
			case MONTHNAME:
			case POWER:
			case SCALE:
			case SECOND:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case VARIANCE:
			case WEEKOFYEAR:
			case DOUBLE_QUOTE_ID:
			case BACKTICK_ID:
			case SQUARE_BRACKET_ID:
			case ID:
				enterOuterAlt(_localctx, 1);
				{
				setState(465);
				switch (_input.LA(1)) {
				case DELETED:
					{
					setState(462);
					match(DELETED);
					}
					break;
				case INSERTED:
					{
					setState(463);
					match(INSERTED);
					}
					break;
				case DISTINCT:
				case LEFT:
				case RIGHT:
				case AGE:
				case AREA:
				case CENTER:
				case CIRCLE:
				case COUNT:
				case DATE:
				case DAY:
				case DAYNAME:
				case DAYOFMONTH:
				case DAYOFWEEK:
				case DAYOFYEAR:
				case DEGREES:
				case DIAMETER:
				case HEIGHT:
				case HOUR:
				case LENGTH:
				case MAKEDATE:
				case MICROSECOND:
				case MINUTE:
				case MOD:
				case MONTH:
				case MONTHNAME:
				case POWER:
				case SCALE:
				case SECOND:
				case TEXT:
				case TIME:
				case TIMESTAMP:
				case VARIANCE:
				case WEEKOFYEAR:
				case DOUBLE_QUOTE_ID:
				case BACKTICK_ID:
				case SQUARE_BRACKET_ID:
				case ID:
					{
					setState(464);
					table_name();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(467);
				match(DOT);
				setState(470);
				switch (_input.LA(1)) {
				case STAR:
					{
					setState(468);
					match(STAR);
					}
					break;
				case DISTINCT:
				case LEFT:
				case RIGHT:
				case AGE:
				case AREA:
				case CENTER:
				case CIRCLE:
				case COUNT:
				case DATE:
				case DAY:
				case DAYNAME:
				case DAYOFMONTH:
				case DAYOFWEEK:
				case DAYOFYEAR:
				case DEGREES:
				case DIAMETER:
				case HEIGHT:
				case HOUR:
				case LENGTH:
				case MAKEDATE:
				case MICROSECOND:
				case MINUTE:
				case MOD:
				case MONTH:
				case MONTHNAME:
				case POWER:
				case SCALE:
				case SECOND:
				case TEXT:
				case TIME:
				case TIMESTAMP:
				case VARIANCE:
				case WEEKOFYEAR:
				case DOUBLE_QUOTE_ID:
				case BACKTICK_ID:
				case SQUARE_BRACKET_ID:
				case ID:
					{
					setState(469);
					column_name();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case DOLLAR_ACTION:
				enterOuterAlt(_localctx, 2);
				{
				setState(472);
				match(DOLLAR_ACTION);
				}
				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 Create_tableContext extends ParserRuleContext {
		public TerminalNode CREATE() { return getToken(VerdictSQLParser.CREATE, 0); }
		public TerminalNode TABLE() { return getToken(VerdictSQLParser.TABLE, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public List column_def_table_constraint() {
			return getRuleContexts(Column_def_table_constraintContext.class);
		}
		public Column_def_table_constraintContext column_def_table_constraint(int i) {
			return getRuleContext(Column_def_table_constraintContext.class,i);
		}
		public Create_tableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_create_table; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCreate_table(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Create_tableContext create_table() throws RecognitionException {
		Create_tableContext _localctx = new Create_tableContext(_ctx, getState());
		enterRule(_localctx, 44, RULE_create_table);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(475);
			match(CREATE);
			setState(476);
			match(TABLE);
			setState(477);
			table_name();
			setState(478);
			match(LR_BRACKET);
			setState(479);
			column_def_table_constraint();
			setState(486);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,32,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(481);
					_la = _input.LA(1);
					if (_la==COMMA) {
						{
						setState(480);
						match(COMMA);
						}
					}

					setState(483);
					column_def_table_constraint();
					}
					} 
				}
				setState(488);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,32,_ctx);
			}
			setState(490);
			_la = _input.LA(1);
			if (_la==COMMA) {
				{
				setState(489);
				match(COMMA);
				}
			}

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

	public static class Create_table_as_selectContext extends ParserRuleContext {
		public TerminalNode CREATE() { return getToken(VerdictSQLParser.CREATE, 0); }
		public TerminalNode TABLE() { return getToken(VerdictSQLParser.TABLE, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public TerminalNode AS() { return getToken(VerdictSQLParser.AS, 0); }
		public Select_statementContext select_statement() {
			return getRuleContext(Select_statementContext.class,0);
		}
		public TerminalNode IF() { return getToken(VerdictSQLParser.IF, 0); }
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public TerminalNode EXISTS() { return getToken(VerdictSQLParser.EXISTS, 0); }
		public TerminalNode STORED_AS_PARQUET() { return getToken(VerdictSQLParser.STORED_AS_PARQUET, 0); }
		public Create_table_as_selectContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_create_table_as_select; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCreate_table_as_select(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Create_table_as_selectContext create_table_as_select() throws RecognitionException {
		Create_table_as_selectContext _localctx = new Create_table_as_selectContext(_ctx, getState());
		enterRule(_localctx, 46, RULE_create_table_as_select);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(494);
			match(CREATE);
			setState(495);
			match(TABLE);
			setState(499);
			_la = _input.LA(1);
			if (_la==IF) {
				{
				setState(496);
				match(IF);
				setState(497);
				match(NOT);
				setState(498);
				match(EXISTS);
				}
			}

			setState(501);
			table_name();
			setState(503);
			_la = _input.LA(1);
			if (_la==STORED_AS_PARQUET) {
				{
				setState(502);
				match(STORED_AS_PARQUET);
				}
			}

			setState(505);
			match(AS);
			setState(506);
			select_statement();
			setState(508);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(507);
				match(SEMICOLON);
				}
			}

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

	public static class Create_viewContext extends ParserRuleContext {
		public TerminalNode CREATE() { return getToken(VerdictSQLParser.CREATE, 0); }
		public TerminalNode VIEW() { return getToken(VerdictSQLParser.VIEW, 0); }
		public View_nameContext view_name() {
			return getRuleContext(View_nameContext.class,0);
		}
		public TerminalNode AS() { return getToken(VerdictSQLParser.AS, 0); }
		public Select_statementContext select_statement() {
			return getRuleContext(Select_statementContext.class,0);
		}
		public List column_name() {
			return getRuleContexts(Column_nameContext.class);
		}
		public Column_nameContext column_name(int i) {
			return getRuleContext(Column_nameContext.class,i);
		}
		public TerminalNode WITH() { return getToken(VerdictSQLParser.WITH, 0); }
		public TerminalNode CHECK() { return getToken(VerdictSQLParser.CHECK, 0); }
		public TerminalNode OPTION() { return getToken(VerdictSQLParser.OPTION, 0); }
		public Create_viewContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_create_view; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCreate_view(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Create_viewContext create_view() throws RecognitionException {
		Create_viewContext _localctx = new Create_viewContext(_ctx, getState());
		enterRule(_localctx, 48, RULE_create_view);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(510);
			match(CREATE);
			setState(511);
			match(VIEW);
			setState(512);
			view_name();
			setState(524);
			_la = _input.LA(1);
			if (_la==LR_BRACKET) {
				{
				setState(513);
				match(LR_BRACKET);
				setState(514);
				column_name();
				setState(519);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(515);
					match(COMMA);
					setState(516);
					column_name();
					}
					}
					setState(521);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(522);
				match(RR_BRACKET);
				}
			}

			setState(526);
			match(AS);
			setState(527);
			select_statement();
			setState(531);
			_la = _input.LA(1);
			if (_la==WITH) {
				{
				setState(528);
				match(WITH);
				setState(529);
				match(CHECK);
				setState(530);
				match(OPTION);
				}
			}

			setState(534);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(533);
				match(SEMICOLON);
				}
			}

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

	public static class Alter_tableContext extends ParserRuleContext {
		public TerminalNode ALTER() { return getToken(VerdictSQLParser.ALTER, 0); }
		public List TABLE() { return getTokens(VerdictSQLParser.TABLE); }
		public TerminalNode TABLE(int i) {
			return getToken(VerdictSQLParser.TABLE, i);
		}
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public TerminalNode SET() { return getToken(VerdictSQLParser.SET, 0); }
		public TerminalNode LOCK_ESCALATION() { return getToken(VerdictSQLParser.LOCK_ESCALATION, 0); }
		public TerminalNode AUTO() { return getToken(VerdictSQLParser.AUTO, 0); }
		public TerminalNode DISABLE() { return getToken(VerdictSQLParser.DISABLE, 0); }
		public TerminalNode ADD() { return getToken(VerdictSQLParser.ADD, 0); }
		public Column_def_table_constraintContext column_def_table_constraint() {
			return getRuleContext(Column_def_table_constraintContext.class,0);
		}
		public Alter_tableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_alter_table; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitAlter_table(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Alter_tableContext alter_table() throws RecognitionException {
		Alter_tableContext _localctx = new Alter_tableContext(_ctx, getState());
		enterRule(_localctx, 50, RULE_alter_table);
		int _la;
		try {
			setState(556);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(536);
				match(ALTER);
				setState(537);
				match(TABLE);
				setState(538);
				table_name();
				setState(539);
				match(SET);
				setState(540);
				match(LR_BRACKET);
				setState(541);
				match(LOCK_ESCALATION);
				setState(542);
				match(EQUAL);
				setState(543);
				_la = _input.LA(1);
				if ( !(_la==TABLE || _la==AUTO || _la==DISABLE) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(544);
				match(RR_BRACKET);
				setState(546);
				_la = _input.LA(1);
				if (_la==SEMICOLON) {
					{
					setState(545);
					match(SEMICOLON);
					}
				}

				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(548);
				match(ALTER);
				setState(549);
				match(TABLE);
				setState(550);
				table_name();
				setState(551);
				match(ADD);
				setState(552);
				column_def_table_constraint();
				setState(554);
				_la = _input.LA(1);
				if (_la==SEMICOLON) {
					{
					setState(553);
					match(SEMICOLON);
					}
				}

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

	public static class Alter_databaseContext extends ParserRuleContext {
		public IdContext database;
		public IdContext new_name;
		public TerminalNode ALTER() { return getToken(VerdictSQLParser.ALTER, 0); }
		public TerminalNode DATABASE() { return getToken(VerdictSQLParser.DATABASE, 0); }
		public TerminalNode MODIFY() { return getToken(VerdictSQLParser.MODIFY, 0); }
		public TerminalNode NAME() { return getToken(VerdictSQLParser.NAME, 0); }
		public List id() {
			return getRuleContexts(IdContext.class);
		}
		public IdContext id(int i) {
			return getRuleContext(IdContext.class,i);
		}
		public TerminalNode CURRENT() { return getToken(VerdictSQLParser.CURRENT, 0); }
		public Alter_databaseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_alter_database; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitAlter_database(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Alter_databaseContext alter_database() throws RecognitionException {
		Alter_databaseContext _localctx = new Alter_databaseContext(_ctx, getState());
		enterRule(_localctx, 52, RULE_alter_database);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(558);
			match(ALTER);
			setState(559);
			match(DATABASE);
			setState(562);
			switch (_input.LA(1)) {
			case DISTINCT:
			case LEFT:
			case RIGHT:
			case AGE:
			case AREA:
			case CENTER:
			case CIRCLE:
			case COUNT:
			case DATE:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DIAMETER:
			case HEIGHT:
			case HOUR:
			case LENGTH:
			case MAKEDATE:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONTH:
			case MONTHNAME:
			case POWER:
			case SCALE:
			case SECOND:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case VARIANCE:
			case WEEKOFYEAR:
			case DOUBLE_QUOTE_ID:
			case BACKTICK_ID:
			case SQUARE_BRACKET_ID:
			case ID:
				{
				setState(560);
				((Alter_databaseContext)_localctx).database = id();
				}
				break;
			case CURRENT:
				{
				setState(561);
				match(CURRENT);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			setState(564);
			match(MODIFY);
			setState(565);
			match(NAME);
			setState(566);
			match(EQUAL);
			setState(567);
			((Alter_databaseContext)_localctx).new_name = id();
			setState(569);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(568);
				match(SEMICOLON);
				}
			}

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

	public static class Drop_tableContext extends ParserRuleContext {
		public TerminalNode DROP() { return getToken(VerdictSQLParser.DROP, 0); }
		public TerminalNode TABLE() { return getToken(VerdictSQLParser.TABLE, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public TerminalNode IF() { return getToken(VerdictSQLParser.IF, 0); }
		public TerminalNode EXISTS() { return getToken(VerdictSQLParser.EXISTS, 0); }
		public Drop_tableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_drop_table; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDrop_table(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Drop_tableContext drop_table() throws RecognitionException {
		Drop_tableContext _localctx = new Drop_tableContext(_ctx, getState());
		enterRule(_localctx, 54, RULE_drop_table);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(571);
			match(DROP);
			setState(572);
			match(TABLE);
			setState(575);
			_la = _input.LA(1);
			if (_la==IF) {
				{
				setState(573);
				match(IF);
				setState(574);
				match(EXISTS);
				}
			}

			setState(577);
			table_name();
			setState(579);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(578);
				match(SEMICOLON);
				}
			}

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

	public static class Drop_viewContext extends ParserRuleContext {
		public TerminalNode DROP() { return getToken(VerdictSQLParser.DROP, 0); }
		public TerminalNode VIEW() { return getToken(VerdictSQLParser.VIEW, 0); }
		public List view_name() {
			return getRuleContexts(View_nameContext.class);
		}
		public View_nameContext view_name(int i) {
			return getRuleContext(View_nameContext.class,i);
		}
		public TerminalNode IF() { return getToken(VerdictSQLParser.IF, 0); }
		public TerminalNode EXISTS() { return getToken(VerdictSQLParser.EXISTS, 0); }
		public Drop_viewContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_drop_view; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDrop_view(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Drop_viewContext drop_view() throws RecognitionException {
		Drop_viewContext _localctx = new Drop_viewContext(_ctx, getState());
		enterRule(_localctx, 56, RULE_drop_view);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(581);
			match(DROP);
			setState(582);
			match(VIEW);
			setState(585);
			_la = _input.LA(1);
			if (_la==IF) {
				{
				setState(583);
				match(IF);
				setState(584);
				match(EXISTS);
				}
			}

			setState(587);
			view_name();
			setState(592);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(588);
				match(COMMA);
				setState(589);
				view_name();
				}
				}
				setState(594);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(596);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(595);
				match(SEMICOLON);
				}
			}

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

	public static class Set_statmentContext extends ParserRuleContext {
		public IdContext member_name;
		public TerminalNode SET() { return getToken(VerdictSQLParser.SET, 0); }
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Assignment_operatorContext assignment_operator() {
			return getRuleContext(Assignment_operatorContext.class,0);
		}
		public Set_specialContext set_special() {
			return getRuleContext(Set_specialContext.class,0);
		}
		public Set_statmentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_set_statment; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSet_statment(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Set_statmentContext set_statment() throws RecognitionException {
		Set_statmentContext _localctx = new Set_statmentContext(_ctx, getState());
		enterRule(_localctx, 58, RULE_set_statment);
		int _la;
		try {
			setState(617);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(598);
				match(SET);
				setState(599);
				match(LOCAL_ID);
				setState(602);
				_la = _input.LA(1);
				if (_la==DOT) {
					{
					setState(600);
					match(DOT);
					setState(601);
					((Set_statmentContext)_localctx).member_name = id();
					}
				}

				setState(604);
				match(EQUAL);
				setState(605);
				expression(0);
				setState(607);
				_la = _input.LA(1);
				if (_la==SEMICOLON) {
					{
					setState(606);
					match(SEMICOLON);
					}
				}

				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(609);
				match(SET);
				setState(610);
				match(LOCAL_ID);
				setState(611);
				assignment_operator();
				setState(612);
				expression(0);
				setState(614);
				_la = _input.LA(1);
				if (_la==SEMICOLON) {
					{
					setState(613);
					match(SEMICOLON);
					}
				}

				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(616);
				set_special();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Use_statementContext extends ParserRuleContext {
		public IdContext database;
		public TerminalNode USE() { return getToken(VerdictSQLParser.USE, 0); }
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Use_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_use_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitUse_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Use_statementContext use_statement() throws RecognitionException {
		Use_statementContext _localctx = new Use_statementContext(_ctx, getState());
		enterRule(_localctx, 60, RULE_use_statement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(619);
			match(USE);
			setState(620);
			((Use_statementContext)_localctx).database = id();
			setState(622);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(621);
				match(SEMICOLON);
				}
			}

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

	public static class Show_tables_statementContext extends ParserRuleContext {
		public IdContext schema;
		public TerminalNode SHOW() { return getToken(VerdictSQLParser.SHOW, 0); }
		public TerminalNode TABLES() { return getToken(VerdictSQLParser.TABLES, 0); }
		public TerminalNode IN() { return getToken(VerdictSQLParser.IN, 0); }
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Show_tables_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_show_tables_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitShow_tables_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Show_tables_statementContext show_tables_statement() throws RecognitionException {
		Show_tables_statementContext _localctx = new Show_tables_statementContext(_ctx, getState());
		enterRule(_localctx, 62, RULE_show_tables_statement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(624);
			match(SHOW);
			setState(625);
			match(TABLES);
			setState(628);
			_la = _input.LA(1);
			if (_la==IN) {
				{
				setState(626);
				match(IN);
				setState(627);
				((Show_tables_statementContext)_localctx).schema = id();
				}
			}

			setState(631);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(630);
				match(SEMICOLON);
				}
			}

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

	public static class Show_databases_statementContext extends ParserRuleContext {
		public TerminalNode SHOW() { return getToken(VerdictSQLParser.SHOW, 0); }
		public TerminalNode DATABASES() { return getToken(VerdictSQLParser.DATABASES, 0); }
		public TerminalNode SCHEMAS() { return getToken(VerdictSQLParser.SCHEMAS, 0); }
		public Show_databases_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_show_databases_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitShow_databases_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Show_databases_statementContext show_databases_statement() throws RecognitionException {
		Show_databases_statementContext _localctx = new Show_databases_statementContext(_ctx, getState());
		enterRule(_localctx, 64, RULE_show_databases_statement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(633);
			match(SHOW);
			setState(634);
			_la = _input.LA(1);
			if ( !(_la==DATABASES || _la==SCHEMAS) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Describe_table_statementContext extends ParserRuleContext {
		public Table_nameContext table;
		public TerminalNode DESCRIBE() { return getToken(VerdictSQLParser.DESCRIBE, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public Describe_table_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_describe_table_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDescribe_table_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Describe_table_statementContext describe_table_statement() throws RecognitionException {
		Describe_table_statementContext _localctx = new Describe_table_statementContext(_ctx, getState());
		enterRule(_localctx, 66, RULE_describe_table_statement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(636);
			match(DESCRIBE);
			setState(637);
			((Describe_table_statementContext)_localctx).table = table_name();
			setState(639);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(638);
				match(SEMICOLON);
				}
			}

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

	public static class Refresh_statementContext extends ParserRuleContext {
		public IdContext schema;
		public TerminalNode REFRESH() { return getToken(VerdictSQLParser.REFRESH, 0); }
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Refresh_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_refresh_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitRefresh_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Refresh_statementContext refresh_statement() throws RecognitionException {
		Refresh_statementContext _localctx = new Refresh_statementContext(_ctx, getState());
		enterRule(_localctx, 68, RULE_refresh_statement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(641);
			match(REFRESH);
			setState(643);
			_la = _input.LA(1);
			if (_la==DISTINCT || _la==LEFT || _la==RIGHT || ((((_la - 228)) & ~0x3f) == 0 && ((1L << (_la - 228)) & ((1L << (AGE - 228)) | (1L << (AREA - 228)) | (1L << (CENTER - 228)) | (1L << (CIRCLE - 228)))) != 0) || ((((_la - 293)) & ~0x3f) == 0 && ((1L << (_la - 293)) & ((1L << (COUNT - 293)) | (1L << (DATE - 293)) | (1L << (DAY - 293)) | (1L << (DAYNAME - 293)) | (1L << (DAYOFMONTH - 293)) | (1L << (DAYOFWEEK - 293)) | (1L << (DAYOFYEAR - 293)) | (1L << (DEGREES - 293)) | (1L << (DIAMETER - 293)))) != 0) || ((((_la - 367)) & ~0x3f) == 0 && ((1L << (_la - 367)) & ((1L << (HEIGHT - 367)) | (1L << (HOUR - 367)) | (1L << (LENGTH - 367)))) != 0) || ((((_la - 448)) & ~0x3f) == 0 && ((1L << (_la - 448)) & ((1L << (MAKEDATE - 448)) | (1L << (MICROSECOND - 448)) | (1L << (MINUTE - 448)) | (1L << (MOD - 448)) | (1L << (MONTH - 448)) | (1L << (MONTHNAME - 448)))) != 0) || ((((_la - 516)) & ~0x3f) == 0 && ((1L << (_la - 516)) & ((1L << (POWER - 516)) | (1L << (SCALE - 516)) | (1L << (SECOND - 516)))) != 0) || ((((_la - 618)) & ~0x3f) == 0 && ((1L << (_la - 618)) & ((1L << (TEXT - 618)) | (1L << (TIME - 618)) | (1L << (TIMESTAMP - 618)) | (1L << (VARIANCE - 618)) | (1L << (WEEKOFYEAR - 618)))) != 0) || ((((_la - 774)) & ~0x3f) == 0 && ((1L << (_la - 774)) & ((1L << (DOUBLE_QUOTE_ID - 774)) | (1L << (BACKTICK_ID - 774)) | (1L << (SQUARE_BRACKET_ID - 774)) | (1L << (ID - 774)))) != 0)) {
				{
				setState(642);
				((Refresh_statementContext)_localctx).schema = id();
				}
			}

			setState(646);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(645);
				match(SEMICOLON);
				}
			}

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

	public static class Show_config_statementContext extends ParserRuleContext {
		public TerminalNode SHOW() { return getToken(VerdictSQLParser.SHOW, 0); }
		public TerminalNode CONFIG() { return getToken(VerdictSQLParser.CONFIG, 0); }
		public Show_config_statementContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_show_config_statement; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitShow_config_statement(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Show_config_statementContext show_config_statement() throws RecognitionException {
		Show_config_statementContext _localctx = new Show_config_statementContext(_ctx, getState());
		enterRule(_localctx, 70, RULE_show_config_statement);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(648);
			match(SHOW);
			setState(649);
			match(CONFIG);
			setState(651);
			_la = _input.LA(1);
			if (_la==SEMICOLON) {
				{
				setState(650);
				match(SEMICOLON);
				}
			}

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

	public static class Table_type_definitionContext extends ParserRuleContext {
		public TerminalNode TABLE() { return getToken(VerdictSQLParser.TABLE, 0); }
		public List column_def_table_constraint() {
			return getRuleContexts(Column_def_table_constraintContext.class);
		}
		public Column_def_table_constraintContext column_def_table_constraint(int i) {
			return getRuleContext(Column_def_table_constraintContext.class,i);
		}
		public Table_type_definitionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_table_type_definition; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTable_type_definition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Table_type_definitionContext table_type_definition() throws RecognitionException {
		Table_type_definitionContext _localctx = new Table_type_definitionContext(_ctx, getState());
		enterRule(_localctx, 72, RULE_table_type_definition);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(653);
			match(TABLE);
			setState(654);
			match(LR_BRACKET);
			setState(655);
			column_def_table_constraint();
			setState(662);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==CONSTRAINT || _la==DISTINCT || _la==LEFT || _la==RIGHT || ((((_la - 228)) & ~0x3f) == 0 && ((1L << (_la - 228)) & ((1L << (AGE - 228)) | (1L << (AREA - 228)) | (1L << (CENTER - 228)) | (1L << (CIRCLE - 228)))) != 0) || ((((_la - 293)) & ~0x3f) == 0 && ((1L << (_la - 293)) & ((1L << (COUNT - 293)) | (1L << (DATE - 293)) | (1L << (DAY - 293)) | (1L << (DAYNAME - 293)) | (1L << (DAYOFMONTH - 293)) | (1L << (DAYOFWEEK - 293)) | (1L << (DAYOFYEAR - 293)) | (1L << (DEGREES - 293)) | (1L << (DIAMETER - 293)))) != 0) || ((((_la - 367)) & ~0x3f) == 0 && ((1L << (_la - 367)) & ((1L << (HEIGHT - 367)) | (1L << (HOUR - 367)) | (1L << (LENGTH - 367)))) != 0) || ((((_la - 448)) & ~0x3f) == 0 && ((1L << (_la - 448)) & ((1L << (MAKEDATE - 448)) | (1L << (MICROSECOND - 448)) | (1L << (MINUTE - 448)) | (1L << (MOD - 448)) | (1L << (MONTH - 448)) | (1L << (MONTHNAME - 448)))) != 0) || ((((_la - 516)) & ~0x3f) == 0 && ((1L << (_la - 516)) & ((1L << (POWER - 516)) | (1L << (SCALE - 516)) | (1L << (SECOND - 516)))) != 0) || ((((_la - 618)) & ~0x3f) == 0 && ((1L << (_la - 618)) & ((1L << (TEXT - 618)) | (1L << (TIME - 618)) | (1L << (TIMESTAMP - 618)) | (1L << (VARIANCE - 618)) | (1L << (WEEKOFYEAR - 618)))) != 0) || ((((_la - 774)) & ~0x3f) == 0 && ((1L << (_la - 774)) & ((1L << (DOUBLE_QUOTE_ID - 774)) | (1L << (BACKTICK_ID - 774)) | (1L << (SQUARE_BRACKET_ID - 774)) | (1L << (ID - 774)) | (1L << (LR_BRACKET - 774)) | (1L << (COMMA - 774)))) != 0)) {
				{
				{
				setState(657);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(656);
					match(COMMA);
					}
				}

				setState(659);
				column_def_table_constraint();
				}
				}
				setState(664);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(665);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Column_def_table_constraintContext extends ParserRuleContext {
		public Column_definitionContext column_definition() {
			return getRuleContext(Column_definitionContext.class,0);
		}
		public Table_constraintContext table_constraint() {
			return getRuleContext(Table_constraintContext.class,0);
		}
		public Column_def_table_constraintContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_column_def_table_constraint; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitColumn_def_table_constraint(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Column_def_table_constraintContext column_def_table_constraint() throws RecognitionException {
		Column_def_table_constraintContext _localctx = new Column_def_table_constraintContext(_ctx, getState());
		enterRule(_localctx, 74, RULE_column_def_table_constraint);
		try {
			setState(669);
			switch (_input.LA(1)) {
			case DISTINCT:
			case LEFT:
			case RIGHT:
			case AGE:
			case AREA:
			case CENTER:
			case CIRCLE:
			case COUNT:
			case DATE:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DIAMETER:
			case HEIGHT:
			case HOUR:
			case LENGTH:
			case MAKEDATE:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONTH:
			case MONTHNAME:
			case POWER:
			case SCALE:
			case SECOND:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case VARIANCE:
			case WEEKOFYEAR:
			case DOUBLE_QUOTE_ID:
			case BACKTICK_ID:
			case SQUARE_BRACKET_ID:
			case ID:
				enterOuterAlt(_localctx, 1);
				{
				setState(667);
				column_definition();
				}
				break;
			case CONSTRAINT:
			case LR_BRACKET:
				enterOuterAlt(_localctx, 2);
				{
				setState(668);
				table_constraint();
				}
				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 Column_definitionContext extends ParserRuleContext {
		public Column_nameContext column_name() {
			return getRuleContext(Column_nameContext.class,0);
		}
		public Data_typeContext data_type() {
			return getRuleContext(Data_typeContext.class,0);
		}
		public TerminalNode AS() { return getToken(VerdictSQLParser.AS, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Null_notnullContext null_notnull() {
			return getRuleContext(Null_notnullContext.class,0);
		}
		public Column_definitionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_column_definition; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitColumn_definition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Column_definitionContext column_definition() throws RecognitionException {
		Column_definitionContext _localctx = new Column_definitionContext(_ctx, getState());
		enterRule(_localctx, 76, RULE_column_definition);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(671);
			column_name();
			setState(675);
			switch (_input.LA(1)) {
			case DISTINCT:
			case DOUBLE:
			case LEFT:
			case RIGHT:
			case AGE:
			case AREA:
			case BIGINT:
			case BIT:
			case CENTER:
			case CHAR:
			case CIRCLE:
			case COUNT:
			case DATE:
			case DATETIME:
			case DATETIME2:
			case DATETIMEOFFSET:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DIAMETER:
			case GEOGRAPHY:
			case GEOMETRY:
			case HEIGHT:
			case HIERARCHYID:
			case HOUR:
			case IMAGE:
			case INT:
			case LENGTH:
			case MAKEDATE:
			case MAX:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONEY:
			case MONTH:
			case MONTHNAME:
			case NCHAR:
			case NTEXT:
			case NUMERIC:
			case NVARCHAR:
			case POWER:
			case SCALE:
			case SECOND:
			case SMALLDATETIME:
			case SMALLINT:
			case SMALLMONEY:
			case SQL_VARIANT:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case TINYINT:
			case UNIQUEIDENTIFIER:
			case VARBINARY:
			case VARCHAR:
			case VARIANCE:
			case WEEKOFYEAR:
			case XML:
			case DOUBLE_QUOTE_ID:
			case BACKTICK_ID:
			case SQUARE_BRACKET_ID:
			case DECIMAL:
			case ID:
			case BINARY:
			case FLOAT:
			case REAL:
				{
				setState(672);
				data_type();
				}
				break;
			case AS:
				{
				setState(673);
				match(AS);
				setState(674);
				expression(0);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			setState(678);
			_la = _input.LA(1);
			if (_la==NOT || _la==NULL) {
				{
				setState(677);
				null_notnull();
				}
			}

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

	public static class Column_constraintContext extends ParserRuleContext {
		public TerminalNode CONSTRAINT() { return getToken(VerdictSQLParser.CONSTRAINT, 0); }
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Null_notnullContext null_notnull() {
			return getRuleContext(Null_notnullContext.class,0);
		}
		public Column_constraintContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_column_constraint; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitColumn_constraint(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Column_constraintContext column_constraint() throws RecognitionException {
		Column_constraintContext _localctx = new Column_constraintContext(_ctx, getState());
		enterRule(_localctx, 78, RULE_column_constraint);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(682);
			_la = _input.LA(1);
			if (_la==CONSTRAINT) {
				{
				setState(680);
				match(CONSTRAINT);
				setState(681);
				id();
				}
			}

			setState(685);
			_la = _input.LA(1);
			if (_la==NOT || _la==NULL) {
				{
				setState(684);
				null_notnull();
				}
			}

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

	public static class Table_constraintContext extends ParserRuleContext {
		public Column_name_listContext column_name_list() {
			return getRuleContext(Column_name_listContext.class,0);
		}
		public TerminalNode CONSTRAINT() { return getToken(VerdictSQLParser.CONSTRAINT, 0); }
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Table_constraintContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_table_constraint; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTable_constraint(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Table_constraintContext table_constraint() throws RecognitionException {
		Table_constraintContext _localctx = new Table_constraintContext(_ctx, getState());
		enterRule(_localctx, 80, RULE_table_constraint);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(689);
			_la = _input.LA(1);
			if (_la==CONSTRAINT) {
				{
				setState(687);
				match(CONSTRAINT);
				setState(688);
				id();
				}
			}

			setState(691);
			match(LR_BRACKET);
			setState(692);
			column_name_list();
			setState(693);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Set_specialContext extends ParserRuleContext {
		public TerminalNode SET() { return getToken(VerdictSQLParser.SET, 0); }
		public List id() {
			return getRuleContexts(IdContext.class);
		}
		public IdContext id(int i) {
			return getRuleContext(IdContext.class,i);
		}
		public ConstantContext constant() {
			return getRuleContext(ConstantContext.class,0);
		}
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public On_offContext on_off() {
			return getRuleContext(On_offContext.class,0);
		}
		public TerminalNode TRANSACTION() { return getToken(VerdictSQLParser.TRANSACTION, 0); }
		public TerminalNode ISOLATION() { return getToken(VerdictSQLParser.ISOLATION, 0); }
		public TerminalNode LEVEL() { return getToken(VerdictSQLParser.LEVEL, 0); }
		public TerminalNode READ() { return getToken(VerdictSQLParser.READ, 0); }
		public TerminalNode UNCOMMITTED() { return getToken(VerdictSQLParser.UNCOMMITTED, 0); }
		public TerminalNode COMMITTED() { return getToken(VerdictSQLParser.COMMITTED, 0); }
		public TerminalNode REPEATABLE() { return getToken(VerdictSQLParser.REPEATABLE, 0); }
		public TerminalNode SNAPSHOT() { return getToken(VerdictSQLParser.SNAPSHOT, 0); }
		public TerminalNode SERIALIZABLE() { return getToken(VerdictSQLParser.SERIALIZABLE, 0); }
		public TerminalNode IDENTITY_INSERT() { return getToken(VerdictSQLParser.IDENTITY_INSERT, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public Set_specialContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_set_special; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSet_special(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Set_specialContext set_special() throws RecognitionException {
		Set_specialContext _localctx = new Set_specialContext(_ctx, getState());
		enterRule(_localctx, 82, RULE_set_special);
		int _la;
		try {
			setState(730);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(695);
				match(SET);
				setState(696);
				id();
				setState(701);
				switch (_input.LA(1)) {
				case DISTINCT:
				case LEFT:
				case RIGHT:
				case AGE:
				case AREA:
				case CENTER:
				case CIRCLE:
				case COUNT:
				case DATE:
				case DAY:
				case DAYNAME:
				case DAYOFMONTH:
				case DAYOFWEEK:
				case DAYOFYEAR:
				case DEGREES:
				case DIAMETER:
				case HEIGHT:
				case HOUR:
				case LENGTH:
				case MAKEDATE:
				case MICROSECOND:
				case MINUTE:
				case MOD:
				case MONTH:
				case MONTHNAME:
				case POWER:
				case SCALE:
				case SECOND:
				case TEXT:
				case TIME:
				case TIMESTAMP:
				case VARIANCE:
				case WEEKOFYEAR:
				case DOUBLE_QUOTE_ID:
				case BACKTICK_ID:
				case SQUARE_BRACKET_ID:
				case ID:
					{
					setState(697);
					id();
					}
					break;
				case DECIMAL:
				case STRING:
				case BINARY:
				case FLOAT:
				case REAL:
				case DOLLAR:
				case PLUS:
				case MINUS:
					{
					setState(698);
					constant();
					}
					break;
				case LOCAL_ID:
					{
					setState(699);
					match(LOCAL_ID);
					}
					break;
				case OFF:
				case ON:
					{
					setState(700);
					on_off();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(704);
				_la = _input.LA(1);
				if (_la==SEMICOLON) {
					{
					setState(703);
					match(SEMICOLON);
					}
				}

				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(706);
				match(SET);
				setState(707);
				match(TRANSACTION);
				setState(708);
				match(ISOLATION);
				setState(709);
				match(LEVEL);
				setState(718);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) {
				case 1:
					{
					setState(710);
					match(READ);
					setState(711);
					match(UNCOMMITTED);
					}
					break;
				case 2:
					{
					setState(712);
					match(READ);
					setState(713);
					match(COMMITTED);
					}
					break;
				case 3:
					{
					setState(714);
					match(REPEATABLE);
					setState(715);
					match(READ);
					}
					break;
				case 4:
					{
					setState(716);
					match(SNAPSHOT);
					}
					break;
				case 5:
					{
					setState(717);
					match(SERIALIZABLE);
					}
					break;
				}
				setState(721);
				_la = _input.LA(1);
				if (_la==SEMICOLON) {
					{
					setState(720);
					match(SEMICOLON);
					}
				}

				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(723);
				match(SET);
				setState(724);
				match(IDENTITY_INSERT);
				setState(725);
				table_name();
				setState(726);
				on_off();
				setState(728);
				_la = _input.LA(1);
				if (_la==SEMICOLON) {
					{
					setState(727);
					match(SEMICOLON);
					}
				}

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

	public static class ExpressionContext extends ParserRuleContext {
		public ExpressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expression; }
	 
		public ExpressionContext() { }
		public void copyFrom(ExpressionContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class Not_expressionContext extends ExpressionContext {
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Not_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitNot_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Binary_operator_expressionContext extends ExpressionContext {
		public Token op;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public Comparison_operatorContext comparison_operator() {
			return getRuleContext(Comparison_operatorContext.class,0);
		}
		public Binary_operator_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitBinary_operator_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Primitive_expressionContext extends ExpressionContext {
		public TerminalNode NULL() { return getToken(VerdictSQLParser.NULL, 0); }
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public ConstantContext constant() {
			return getRuleContext(ConstantContext.class,0);
		}
		public True_orfalseContext true_orfalse() {
			return getRuleContext(True_orfalseContext.class,0);
		}
		public Primitive_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitPrimitive_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Date_expressionContext extends ExpressionContext {
		public DateContext date() {
			return getRuleContext(DateContext.class,0);
		}
		public Date_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDate_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Bracket_expressionContext extends ExpressionContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Bracket_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitBracket_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Unary_operator_expressionContext extends ExpressionContext {
		public Token op;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Unary_operator_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitUnary_operator_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Interval_expressionContext extends ExpressionContext {
		public IntervalContext interval() {
			return getRuleContext(IntervalContext.class,0);
		}
		public Interval_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitInterval_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Function_call_expressionContext extends ExpressionContext {
		public Function_callContext function_call() {
			return getRuleContext(Function_callContext.class,0);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode COLLATE() { return getToken(VerdictSQLParser.COLLATE, 0); }
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Function_call_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitFunction_call_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Is_null_expressionContext extends ExpressionContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode IS() { return getToken(VerdictSQLParser.IS, 0); }
		public Null_notnullContext null_notnull() {
			return getRuleContext(Null_notnullContext.class,0);
		}
		public Is_null_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitIs_null_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Case_expressionContext extends ExpressionContext {
		public Case_exprContext case_expr() {
			return getRuleContext(Case_exprContext.class,0);
		}
		public Case_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCase_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Column_ref_expressionContext extends ExpressionContext {
		public Full_column_nameContext full_column_name() {
			return getRuleContext(Full_column_nameContext.class,0);
		}
		public Column_ref_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitColumn_ref_expression(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Subquery_expressionContext extends ExpressionContext {
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public Subquery_expressionContext(ExpressionContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSubquery_expression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ExpressionContext expression() throws RecognitionException {
		return expression(0);
	}

	private ExpressionContext expression(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
		ExpressionContext _prevctx = _localctx;
		int _startState = 84;
		enterRecursionRule(_localctx, 84, RULE_expression, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(756);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,76,_ctx) ) {
			case 1:
				{
				_localctx = new Primitive_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(733);
				match(NULL);
				}
				break;
			case 2:
				{
				_localctx = new Primitive_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(734);
				match(LOCAL_ID);
				}
				break;
			case 3:
				{
				_localctx = new Primitive_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(735);
				constant();
				}
				break;
			case 4:
				{
				_localctx = new Primitive_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(736);
				true_orfalse();
				}
				break;
			case 5:
				{
				_localctx = new Case_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(737);
				case_expr();
				}
				break;
			case 6:
				{
				_localctx = new Column_ref_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(738);
				full_column_name();
				}
				break;
			case 7:
				{
				_localctx = new Bracket_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(739);
				match(LR_BRACKET);
				setState(740);
				expression(0);
				setState(741);
				match(RR_BRACKET);
				}
				break;
			case 8:
				{
				_localctx = new Subquery_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(743);
				match(LR_BRACKET);
				setState(744);
				subquery();
				setState(745);
				match(RR_BRACKET);
				}
				break;
			case 9:
				{
				_localctx = new Unary_operator_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(747);
				match(BIT_NOT);
				setState(748);
				expression(11);
				}
				break;
			case 10:
				{
				_localctx = new Unary_operator_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(749);
				((Unary_operator_expressionContext)_localctx).op = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==PLUS || _la==MINUS) ) {
					((Unary_operator_expressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(750);
				expression(9);
				}
				break;
			case 11:
				{
				_localctx = new Not_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(751);
				match(NOT);
				setState(752);
				expression(6);
				}
				break;
			case 12:
				{
				_localctx = new Interval_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(753);
				interval();
				}
				break;
			case 13:
				{
				_localctx = new Date_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(754);
				date();
				}
				break;
			case 14:
				{
				_localctx = new Function_call_expressionContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(755);
				function_call();
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(776);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,78,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					setState(774);
					_errHandler.sync(this);
					switch ( getInterpreter().adaptivePredict(_input,77,_ctx) ) {
					case 1:
						{
						_localctx = new Binary_operator_expressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(758);
						if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
						setState(759);
						((Binary_operator_expressionContext)_localctx).op = _input.LT(1);
						_la = _input.LA(1);
						if ( !(((((_la - 806)) & ~0x3f) == 0 && ((1L << (_la - 806)) & ((1L << (STAR - 806)) | (1L << (DIVIDE - 806)) | (1L << (MODULE - 806)))) != 0)) ) {
							((Binary_operator_expressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
						} else {
							consume();
						}
						setState(760);
						expression(11);
						}
						break;
					case 2:
						{
						_localctx = new Binary_operator_expressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(761);
						if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
						setState(762);
						((Binary_operator_expressionContext)_localctx).op = _input.LT(1);
						_la = _input.LA(1);
						if ( !(((((_la - 799)) & ~0x3f) == 0 && ((1L << (_la - 799)) & ((1L << (SHARP - 799)) | (1L << (PLUS - 799)) | (1L << (MINUS - 799)) | (1L << (BIT_OR - 799)) | (1L << (BIT_AND - 799)) | (1L << (BIT_XOR - 799)) | (1L << (BIT_CONCAT - 799)) | (1L << (BIT_LSHIFT - 799)) | (1L << (BIT_RSHIFT - 799)))) != 0)) ) {
							((Binary_operator_expressionContext)_localctx).op = (Token)_errHandler.recoverInline(this);
						} else {
							consume();
						}
						setState(763);
						expression(9);
						}
						break;
					case 3:
						{
						_localctx = new Binary_operator_expressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(764);
						if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
						setState(765);
						comparison_operator();
						setState(766);
						expression(8);
						}
						break;
					case 4:
						{
						_localctx = new Is_null_expressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(768);
						if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
						setState(769);
						match(IS);
						setState(770);
						null_notnull();
						}
						break;
					case 5:
						{
						_localctx = new Function_call_expressionContext(new ExpressionContext(_parentctx, _parentState));
						pushNewRecursionContext(_localctx, _startState, RULE_expression);
						setState(771);
						if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
						setState(772);
						match(COLLATE);
						setState(773);
						id();
						}
						break;
					}
					} 
				}
				setState(778);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,78,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class IntervalContext extends ParserRuleContext {
		public TerminalNode INTERVAL() { return getToken(VerdictSQLParser.INTERVAL, 0); }
		public Constant_expressionContext constant_expression() {
			return getRuleContext(Constant_expressionContext.class,0);
		}
		public TerminalNode DAY() { return getToken(VerdictSQLParser.DAY, 0); }
		public TerminalNode DAYS() { return getToken(VerdictSQLParser.DAYS, 0); }
		public TerminalNode MONTH() { return getToken(VerdictSQLParser.MONTH, 0); }
		public TerminalNode MONTHS() { return getToken(VerdictSQLParser.MONTHS, 0); }
		public TerminalNode YEAR() { return getToken(VerdictSQLParser.YEAR, 0); }
		public TerminalNode YEARS() { return getToken(VerdictSQLParser.YEARS, 0); }
		public IntervalContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_interval; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitInterval(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IntervalContext interval() throws RecognitionException {
		IntervalContext _localctx = new IntervalContext(_ctx, getState());
		enterRule(_localctx, 86, RULE_interval);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(779);
			match(INTERVAL);
			setState(780);
			constant_expression();
			setState(781);
			_la = _input.LA(1);
			if ( !(_la==DAY || _la==DAYS || _la==MONTH || _la==MONTHS || _la==YEAR || _la==YEARS) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class DateContext extends ParserRuleContext {
		public TerminalNode DATE() { return getToken(VerdictSQLParser.DATE, 0); }
		public Constant_expressionContext constant_expression() {
			return getRuleContext(Constant_expressionContext.class,0);
		}
		public DateContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_date; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDate(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DateContext date() throws RecognitionException {
		DateContext _localctx = new DateContext(_ctx, getState());
		enterRule(_localctx, 88, RULE_date);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(783);
			match(DATE);
			setState(784);
			constant_expression();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Constant_expressionContext extends ParserRuleContext {
		public TerminalNode NULL() { return getToken(VerdictSQLParser.NULL, 0); }
		public ConstantContext constant() {
			return getRuleContext(ConstantContext.class,0);
		}
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public Constant_expressionContext constant_expression() {
			return getRuleContext(Constant_expressionContext.class,0);
		}
		public Constant_expressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_constant_expression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitConstant_expression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Constant_expressionContext constant_expression() throws RecognitionException {
		Constant_expressionContext _localctx = new Constant_expressionContext(_ctx, getState());
		enterRule(_localctx, 90, RULE_constant_expression);
		try {
			setState(793);
			switch (_input.LA(1)) {
			case NULL:
				enterOuterAlt(_localctx, 1);
				{
				setState(786);
				match(NULL);
				}
				break;
			case DECIMAL:
			case STRING:
			case BINARY:
			case FLOAT:
			case REAL:
			case DOLLAR:
			case PLUS:
			case MINUS:
				enterOuterAlt(_localctx, 2);
				{
				setState(787);
				constant();
				}
				break;
			case LOCAL_ID:
				enterOuterAlt(_localctx, 3);
				{
				setState(788);
				match(LOCAL_ID);
				}
				break;
			case LR_BRACKET:
				enterOuterAlt(_localctx, 4);
				{
				setState(789);
				match(LR_BRACKET);
				setState(790);
				constant_expression();
				setState(791);
				match(RR_BRACKET);
				}
				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 SubqueryContext extends ParserRuleContext {
		public Select_statementContext select_statement() {
			return getRuleContext(Select_statementContext.class,0);
		}
		public SubqueryContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_subquery; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSubquery(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SubqueryContext subquery() throws RecognitionException {
		SubqueryContext _localctx = new SubqueryContext(_ctx, getState());
		enterRule(_localctx, 92, RULE_subquery);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(795);
			select_statement();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Dml_table_sourceContext extends ParserRuleContext {
		public Query_specificationContext query_specification() {
			return getRuleContext(Query_specificationContext.class,0);
		}
		public Dml_table_sourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dml_table_source; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDml_table_source(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Dml_table_sourceContext dml_table_source() throws RecognitionException {
		Dml_table_sourceContext _localctx = new Dml_table_sourceContext(_ctx, getState());
		enterRule(_localctx, 94, RULE_dml_table_source);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(797);
			query_specification();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class With_expressionContext extends ParserRuleContext {
		public TerminalNode WITH() { return getToken(VerdictSQLParser.WITH, 0); }
		public List common_table_expression() {
			return getRuleContexts(Common_table_expressionContext.class);
		}
		public Common_table_expressionContext common_table_expression(int i) {
			return getRuleContext(Common_table_expressionContext.class,i);
		}
		public TerminalNode XMLNAMESPACES() { return getToken(VerdictSQLParser.XMLNAMESPACES, 0); }
		public With_expressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_with_expression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitWith_expression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final With_expressionContext with_expression() throws RecognitionException {
		With_expressionContext _localctx = new With_expressionContext(_ctx, getState());
		enterRule(_localctx, 96, RULE_with_expression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(799);
			match(WITH);
			setState(802);
			_la = _input.LA(1);
			if (_la==XMLNAMESPACES) {
				{
				setState(800);
				match(XMLNAMESPACES);
				setState(801);
				match(COMMA);
				}
			}

			setState(804);
			common_table_expression();
			setState(809);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(805);
				match(COMMA);
				setState(806);
				common_table_expression();
				}
				}
				setState(811);
				_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 Common_table_expressionContext extends ParserRuleContext {
		public IdContext expression_name;
		public TerminalNode AS() { return getToken(VerdictSQLParser.AS, 0); }
		public Select_statementContext select_statement() {
			return getRuleContext(Select_statementContext.class,0);
		}
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Column_name_listContext column_name_list() {
			return getRuleContext(Column_name_listContext.class,0);
		}
		public Common_table_expressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_common_table_expression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCommon_table_expression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Common_table_expressionContext common_table_expression() throws RecognitionException {
		Common_table_expressionContext _localctx = new Common_table_expressionContext(_ctx, getState());
		enterRule(_localctx, 98, RULE_common_table_expression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(812);
			((Common_table_expressionContext)_localctx).expression_name = id();
			setState(817);
			_la = _input.LA(1);
			if (_la==LR_BRACKET) {
				{
				setState(813);
				match(LR_BRACKET);
				setState(814);
				column_name_list();
				setState(815);
				match(RR_BRACKET);
				}
			}

			setState(819);
			match(AS);
			setState(820);
			match(LR_BRACKET);
			setState(821);
			select_statement();
			setState(822);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Update_elemContext extends ParserRuleContext {
		public IdContext udt_column_name;
		public IdContext method_name;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Full_column_nameContext full_column_name() {
			return getRuleContext(Full_column_nameContext.class,0);
		}
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public Assignment_operatorContext assignment_operator() {
			return getRuleContext(Assignment_operatorContext.class,0);
		}
		public Expression_listContext expression_list() {
			return getRuleContext(Expression_listContext.class,0);
		}
		public List id() {
			return getRuleContexts(IdContext.class);
		}
		public IdContext id(int i) {
			return getRuleContext(IdContext.class,i);
		}
		public Update_elemContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_update_elem; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitUpdate_elem(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Update_elemContext update_elem() throws RecognitionException {
		Update_elemContext _localctx = new Update_elemContext(_ctx, getState());
		enterRule(_localctx, 100, RULE_update_elem);
		try {
			setState(840);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,85,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(826);
				switch (_input.LA(1)) {
				case DISTINCT:
				case LEFT:
				case RIGHT:
				case AGE:
				case AREA:
				case CENTER:
				case CIRCLE:
				case COUNT:
				case DATE:
				case DAY:
				case DAYNAME:
				case DAYOFMONTH:
				case DAYOFWEEK:
				case DAYOFYEAR:
				case DEGREES:
				case DIAMETER:
				case HEIGHT:
				case HOUR:
				case LENGTH:
				case MAKEDATE:
				case MICROSECOND:
				case MINUTE:
				case MOD:
				case MONTH:
				case MONTHNAME:
				case POWER:
				case SCALE:
				case SECOND:
				case TEXT:
				case TIME:
				case TIMESTAMP:
				case VARIANCE:
				case WEEKOFYEAR:
				case DOUBLE_QUOTE_ID:
				case BACKTICK_ID:
				case SQUARE_BRACKET_ID:
				case ID:
					{
					setState(824);
					full_column_name();
					}
					break;
				case LOCAL_ID:
					{
					setState(825);
					match(LOCAL_ID);
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(830);
				switch (_input.LA(1)) {
				case EQUAL:
					{
					setState(828);
					match(EQUAL);
					}
					break;
				case PLUS_ASSIGN:
				case MINUS_ASSIGN:
				case MULT_ASSIGN:
				case DIV_ASSIGN:
				case MOD_ASSIGN:
				case AND_ASSIGN:
				case XOR_ASSIGN:
				case OR_ASSIGN:
					{
					setState(829);
					assignment_operator();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(832);
				expression(0);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(833);
				((Update_elemContext)_localctx).udt_column_name = id();
				setState(834);
				match(DOT);
				setState(835);
				((Update_elemContext)_localctx).method_name = id();
				setState(836);
				match(LR_BRACKET);
				setState(837);
				expression_list();
				setState(838);
				match(RR_BRACKET);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Search_condition_listContext extends ParserRuleContext {
		public List search_condition() {
			return getRuleContexts(Search_conditionContext.class);
		}
		public Search_conditionContext search_condition(int i) {
			return getRuleContext(Search_conditionContext.class,i);
		}
		public Search_condition_listContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_search_condition_list; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSearch_condition_list(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Search_condition_listContext search_condition_list() throws RecognitionException {
		Search_condition_listContext _localctx = new Search_condition_listContext(_ctx, getState());
		enterRule(_localctx, 102, RULE_search_condition_list);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(842);
			search_condition();
			setState(847);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(843);
				match(COMMA);
				setState(844);
				search_condition();
				}
				}
				setState(849);
				_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 Search_conditionContext extends ParserRuleContext {
		public List search_condition_or() {
			return getRuleContexts(Search_condition_orContext.class);
		}
		public Search_condition_orContext search_condition_or(int i) {
			return getRuleContext(Search_condition_orContext.class,i);
		}
		public List AND() { return getTokens(VerdictSQLParser.AND); }
		public TerminalNode AND(int i) {
			return getToken(VerdictSQLParser.AND, i);
		}
		public Search_conditionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_search_condition; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSearch_condition(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Search_conditionContext search_condition() throws RecognitionException {
		Search_conditionContext _localctx = new Search_conditionContext(_ctx, getState());
		enterRule(_localctx, 104, RULE_search_condition);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(850);
			search_condition_or();
			setState(855);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==AND) {
				{
				{
				setState(851);
				match(AND);
				setState(852);
				search_condition_or();
				}
				}
				setState(857);
				_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 Search_condition_orContext extends ParserRuleContext {
		public List search_condition_not() {
			return getRuleContexts(Search_condition_notContext.class);
		}
		public Search_condition_notContext search_condition_not(int i) {
			return getRuleContext(Search_condition_notContext.class,i);
		}
		public List OR() { return getTokens(VerdictSQLParser.OR); }
		public TerminalNode OR(int i) {
			return getToken(VerdictSQLParser.OR, i);
		}
		public Search_condition_orContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_search_condition_or; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSearch_condition_or(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Search_condition_orContext search_condition_or() throws RecognitionException {
		Search_condition_orContext _localctx = new Search_condition_orContext(_ctx, getState());
		enterRule(_localctx, 106, RULE_search_condition_or);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(858);
			search_condition_not();
			setState(863);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==OR) {
				{
				{
				setState(859);
				match(OR);
				setState(860);
				search_condition_not();
				}
				}
				setState(865);
				_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 Search_condition_notContext extends ParserRuleContext {
		public PredicateContext predicate() {
			return getRuleContext(PredicateContext.class,0);
		}
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public Search_condition_notContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_search_condition_not; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSearch_condition_not(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Search_condition_notContext search_condition_not() throws RecognitionException {
		Search_condition_notContext _localctx = new Search_condition_notContext(_ctx, getState());
		enterRule(_localctx, 108, RULE_search_condition_not);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(867);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,89,_ctx) ) {
			case 1:
				{
				setState(866);
				match(NOT);
				}
				break;
			}
			setState(869);
			predicate(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class PredicateContext extends ParserRuleContext {
		public PredicateContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_predicate; }
	 
		public PredicateContext() { }
		public void copyFrom(PredicateContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class Setcomp_expr_predicateContext extends PredicateContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Comparison_operatorContext comparison_operator() {
			return getRuleContext(Comparison_operatorContext.class,0);
		}
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public TerminalNode ALL() { return getToken(VerdictSQLParser.ALL, 0); }
		public TerminalNode SOME() { return getToken(VerdictSQLParser.SOME, 0); }
		public TerminalNode ANY() { return getToken(VerdictSQLParser.ANY, 0); }
		public Setcomp_expr_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSetcomp_expr_predicate(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Is_predicateContext extends PredicateContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode IS() { return getToken(VerdictSQLParser.IS, 0); }
		public Null_notnullContext null_notnull() {
			return getRuleContext(Null_notnullContext.class,0);
		}
		public Is_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitIs_predicate(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Comp_expr_predicateContext extends PredicateContext {
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public Comparison_operatorContext comparison_operator() {
			return getRuleContext(Comparison_operatorContext.class,0);
		}
		public Comp_expr_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitComp_expr_predicate(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class In_predicateContext extends PredicateContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode IN() { return getToken(VerdictSQLParser.IN, 0); }
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public Expression_listContext expression_list() {
			return getRuleContext(Expression_listContext.class,0);
		}
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public In_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitIn_predicate(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Bracket_predicateContext extends PredicateContext {
		public Search_conditionContext search_condition() {
			return getRuleContext(Search_conditionContext.class,0);
		}
		public Bracket_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitBracket_predicate(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Binary_func_predicateContext extends PredicateContext {
		public Binary_predicate_functionContext binary_predicate_function() {
			return getRuleContext(Binary_predicate_functionContext.class,0);
		}
		public Binary_func_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitBinary_func_predicate(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Exists_predicateContext extends PredicateContext {
		public TerminalNode EXISTS() { return getToken(VerdictSQLParser.EXISTS, 0); }
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public Exists_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitExists_predicate(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Unary_func_predicateContext extends PredicateContext {
		public Unary_predicate_functionContext unary_predicate_function() {
			return getRuleContext(Unary_predicate_functionContext.class,0);
		}
		public Unary_func_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitUnary_func_predicate(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Comp_pred_expr_predicateContext extends PredicateContext {
		public PredicateContext predicate() {
			return getRuleContext(PredicateContext.class,0);
		}
		public Comparison_operatorContext comparison_operator() {
			return getRuleContext(Comparison_operatorContext.class,0);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Comp_pred_expr_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitComp_pred_expr_predicate(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Comp_between_exprContext extends PredicateContext {
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode BETWEEN() { return getToken(VerdictSQLParser.BETWEEN, 0); }
		public TerminalNode AND() { return getToken(VerdictSQLParser.AND, 0); }
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public Comp_between_exprContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitComp_between_expr(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Like_predicateContext extends PredicateContext {
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode LIKE() { return getToken(VerdictSQLParser.LIKE, 0); }
		public TerminalNode RLIKE() { return getToken(VerdictSQLParser.RLIKE, 0); }
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public TerminalNode ESCAPE() { return getToken(VerdictSQLParser.ESCAPE, 0); }
		public Like_predicateContext(PredicateContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitLike_predicate(this);
			else return visitor.visitChildren(this);
		}
	}

	public final PredicateContext predicate() throws RecognitionException {
		return predicate(0);
	}

	private PredicateContext predicate(int _p) throws RecognitionException {
		ParserRuleContext _parentctx = _ctx;
		int _parentState = getState();
		PredicateContext _localctx = new PredicateContext(_ctx, _parentState);
		PredicateContext _prevctx = _localctx;
		int _startState = 110;
		enterRecursionRule(_localctx, 110, RULE_predicate, _p);
		int _la;
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(929);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,95,_ctx) ) {
			case 1:
				{
				_localctx = new Exists_predicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;

				setState(872);
				match(EXISTS);
				setState(873);
				match(LR_BRACKET);
				setState(874);
				subquery();
				setState(875);
				match(RR_BRACKET);
				}
				break;
			case 2:
				{
				_localctx = new Bracket_predicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(877);
				match(LR_BRACKET);
				setState(878);
				search_condition();
				setState(879);
				match(RR_BRACKET);
				}
				break;
			case 3:
				{
				_localctx = new Comp_expr_predicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(881);
				expression(0);
				setState(882);
				comparison_operator();
				setState(883);
				expression(0);
				}
				break;
			case 4:
				{
				_localctx = new Setcomp_expr_predicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(885);
				expression(0);
				setState(886);
				comparison_operator();
				setState(887);
				_la = _input.LA(1);
				if ( !(_la==ALL || _la==ANY || _la==SOME) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(888);
				match(LR_BRACKET);
				setState(889);
				subquery();
				setState(890);
				match(RR_BRACKET);
				}
				break;
			case 5:
				{
				_localctx = new Comp_between_exprContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(892);
				expression(0);
				setState(894);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(893);
					match(NOT);
					}
				}

				setState(896);
				match(BETWEEN);
				setState(897);
				expression(0);
				setState(898);
				match(AND);
				setState(899);
				expression(0);
				}
				break;
			case 6:
				{
				_localctx = new In_predicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(901);
				expression(0);
				setState(903);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(902);
					match(NOT);
					}
				}

				setState(905);
				match(IN);
				setState(906);
				match(LR_BRACKET);
				setState(909);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,92,_ctx) ) {
				case 1:
					{
					setState(907);
					subquery();
					}
					break;
				case 2:
					{
					setState(908);
					expression_list();
					}
					break;
				}
				setState(911);
				match(RR_BRACKET);
				}
				break;
			case 7:
				{
				_localctx = new Like_predicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(913);
				expression(0);
				setState(915);
				_la = _input.LA(1);
				if (_la==NOT) {
					{
					setState(914);
					match(NOT);
					}
				}

				setState(917);
				_la = _input.LA(1);
				if ( !(_la==LIKE || _la==RLIKE) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(918);
				expression(0);
				setState(921);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) {
				case 1:
					{
					setState(919);
					match(ESCAPE);
					setState(920);
					expression(0);
					}
					break;
				}
				}
				break;
			case 8:
				{
				_localctx = new Is_predicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(923);
				expression(0);
				setState(924);
				match(IS);
				setState(925);
				null_notnull();
				}
				break;
			case 9:
				{
				_localctx = new Unary_func_predicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(927);
				unary_predicate_function();
				}
				break;
			case 10:
				{
				_localctx = new Binary_func_predicateContext(_localctx);
				_ctx = _localctx;
				_prevctx = _localctx;
				setState(928);
				binary_predicate_function();
				}
				break;
			}
			_ctx.stop = _input.LT(-1);
			setState(937);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,96,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					if ( _parseListeners!=null ) triggerExitRuleEvent();
					_prevctx = _localctx;
					{
					{
					_localctx = new Comp_pred_expr_predicateContext(new PredicateContext(_parentctx, _parentState));
					pushNewRecursionContext(_localctx, _startState, RULE_predicate);
					setState(931);
					if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
					setState(932);
					comparison_operator();
					setState(933);
					expression(0);
					}
					} 
				}
				setState(939);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,96,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			unrollRecursionContexts(_parentctx);
		}
		return _localctx;
	}

	public static class Query_expressionContext extends ParserRuleContext {
		public Query_specificationContext query_specification() {
			return getRuleContext(Query_specificationContext.class,0);
		}
		public Query_expressionContext query_expression() {
			return getRuleContext(Query_expressionContext.class,0);
		}
		public List union() {
			return getRuleContexts(UnionContext.class);
		}
		public UnionContext union(int i) {
			return getRuleContext(UnionContext.class,i);
		}
		public Query_expressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_query_expression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitQuery_expression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Query_expressionContext query_expression() throws RecognitionException {
		Query_expressionContext _localctx = new Query_expressionContext(_ctx, getState());
		enterRule(_localctx, 112, RULE_query_expression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(945);
			switch (_input.LA(1)) {
			case SELECT:
				{
				setState(940);
				query_specification();
				}
				break;
			case LR_BRACKET:
				{
				setState(941);
				match(LR_BRACKET);
				setState(942);
				query_expression();
				setState(943);
				match(RR_BRACKET);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			setState(950);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==EXCEPT || _la==INTERSECT || _la==UNION) {
				{
				{
				setState(947);
				union();
				}
				}
				setState(952);
				_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 UnionContext extends ParserRuleContext {
		public TerminalNode UNION() { return getToken(VerdictSQLParser.UNION, 0); }
		public TerminalNode EXCEPT() { return getToken(VerdictSQLParser.EXCEPT, 0); }
		public TerminalNode INTERSECT() { return getToken(VerdictSQLParser.INTERSECT, 0); }
		public Query_specificationContext query_specification() {
			return getRuleContext(Query_specificationContext.class,0);
		}
		public TerminalNode ALL() { return getToken(VerdictSQLParser.ALL, 0); }
		public List query_expression() {
			return getRuleContexts(Query_expressionContext.class);
		}
		public Query_expressionContext query_expression(int i) {
			return getRuleContext(Query_expressionContext.class,i);
		}
		public UnionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_union; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitUnion(this);
			else return visitor.visitChildren(this);
		}
	}

	public final UnionContext union() throws RecognitionException {
		UnionContext _localctx = new UnionContext(_ctx, getState());
		enterRule(_localctx, 114, RULE_union);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(959);
			switch (_input.LA(1)) {
			case UNION:
				{
				setState(953);
				match(UNION);
				setState(955);
				_la = _input.LA(1);
				if (_la==ALL) {
					{
					setState(954);
					match(ALL);
					}
				}

				}
				break;
			case EXCEPT:
				{
				setState(957);
				match(EXCEPT);
				}
				break;
			case INTERSECT:
				{
				setState(958);
				match(INTERSECT);
				}
				break;
			default:
				throw new NoViableAltException(this);
			}
			setState(970);
			switch (_input.LA(1)) {
			case SELECT:
				{
				setState(961);
				query_specification();
				}
				break;
			case LR_BRACKET:
				{
				setState(966); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(962);
					match(LR_BRACKET);
					setState(963);
					query_expression();
					setState(964);
					match(RR_BRACKET);
					}
					}
					setState(968); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==LR_BRACKET );
				}
				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 Query_specificationContext extends ParserRuleContext {
		public Table_nameContext into_table;
		public Search_conditionContext where;
		public Search_conditionContext having;
		public TerminalNode SELECT() { return getToken(VerdictSQLParser.SELECT, 0); }
		public Select_listContext select_list() {
			return getRuleContext(Select_listContext.class,0);
		}
		public Top_clauseContext top_clause() {
			return getRuleContext(Top_clauseContext.class,0);
		}
		public TerminalNode INTO() { return getToken(VerdictSQLParser.INTO, 0); }
		public TerminalNode FROM() { return getToken(VerdictSQLParser.FROM, 0); }
		public TerminalNode WHERE() { return getToken(VerdictSQLParser.WHERE, 0); }
		public TerminalNode HAVING() { return getToken(VerdictSQLParser.HAVING, 0); }
		public TerminalNode ALL() { return getToken(VerdictSQLParser.ALL, 0); }
		public TerminalNode DISTINCT() { return getToken(VerdictSQLParser.DISTINCT, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public List search_condition() {
			return getRuleContexts(Search_conditionContext.class);
		}
		public Search_conditionContext search_condition(int i) {
			return getRuleContext(Search_conditionContext.class,i);
		}
		public List table_source() {
			return getRuleContexts(Table_sourceContext.class);
		}
		public Table_sourceContext table_source(int i) {
			return getRuleContext(Table_sourceContext.class,i);
		}
		public TerminalNode GROUP() { return getToken(VerdictSQLParser.GROUP, 0); }
		public TerminalNode BY() { return getToken(VerdictSQLParser.BY, 0); }
		public List group_by_item() {
			return getRuleContexts(Group_by_itemContext.class);
		}
		public Group_by_itemContext group_by_item(int i) {
			return getRuleContext(Group_by_itemContext.class,i);
		}
		public TerminalNode ROLLUP() { return getToken(VerdictSQLParser.ROLLUP, 0); }
		public TerminalNode WITH() { return getToken(VerdictSQLParser.WITH, 0); }
		public Query_specificationContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_query_specification; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitQuery_specification(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Query_specificationContext query_specification() throws RecognitionException {
		Query_specificationContext _localctx = new Query_specificationContext(_ctx, getState());
		enterRule(_localctx, 116, RULE_query_specification);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(972);
			match(SELECT);
			setState(974);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,103,_ctx) ) {
			case 1:
				{
				setState(973);
				_la = _input.LA(1);
				if ( !(_la==ALL || _la==DISTINCT) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				}
				break;
			}
			setState(977);
			_la = _input.LA(1);
			if (_la==TOP) {
				{
				setState(976);
				top_clause();
				}
			}

			setState(979);
			select_list();
			setState(982);
			_la = _input.LA(1);
			if (_la==INTO) {
				{
				setState(980);
				match(INTO);
				setState(981);
				((Query_specificationContext)_localctx).into_table = table_name();
				}
			}

			setState(993);
			_la = _input.LA(1);
			if (_la==FROM) {
				{
				setState(984);
				match(FROM);
				{
				setState(985);
				table_source();
				setState(990);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(986);
					match(COMMA);
					setState(987);
					table_source();
					}
					}
					setState(992);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				}
			}

			setState(997);
			_la = _input.LA(1);
			if (_la==WHERE) {
				{
				setState(995);
				match(WHERE);
				setState(996);
				((Query_specificationContext)_localctx).where = search_condition();
				}
			}

			setState(1027);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,112,_ctx) ) {
			case 1:
				{
				{
				setState(999);
				match(GROUP);
				setState(1000);
				match(BY);
				setState(1001);
				group_by_item();
				setState(1006);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1002);
					match(COMMA);
					setState(1003);
					group_by_item();
					}
					}
					setState(1008);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1011);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) {
				case 1:
					{
					setState(1009);
					match(WITH);
					setState(1010);
					match(ROLLUP);
					}
					break;
				}
				}
				}
				break;
			case 2:
				{
				{
				setState(1013);
				match(GROUP);
				setState(1014);
				match(BY);
				setState(1015);
				match(ROLLUP);
				setState(1016);
				match(LR_BRACKET);
				setState(1017);
				group_by_item();
				setState(1022);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1018);
					match(COMMA);
					setState(1019);
					group_by_item();
					}
					}
					setState(1024);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1025);
				match(RR_BRACKET);
				}
				}
				break;
			}
			setState(1031);
			_la = _input.LA(1);
			if (_la==HAVING) {
				{
				setState(1029);
				match(HAVING);
				setState(1030);
				((Query_specificationContext)_localctx).having = search_condition();
				}
			}

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

	public static class Top_clauseContext extends ParserRuleContext {
		public TerminalNode TOP() { return getToken(VerdictSQLParser.TOP, 0); }
		public NumberContext number() {
			return getRuleContext(NumberContext.class,0);
		}
		public Top_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_top_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTop_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Top_clauseContext top_clause() throws RecognitionException {
		Top_clauseContext _localctx = new Top_clauseContext(_ctx, getState());
		enterRule(_localctx, 118, RULE_top_clause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1033);
			match(TOP);
			setState(1034);
			number();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Limit_clauseContext extends ParserRuleContext {
		public TerminalNode LIMIT() { return getToken(VerdictSQLParser.LIMIT, 0); }
		public NumberContext number() {
			return getRuleContext(NumberContext.class,0);
		}
		public Limit_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_limit_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitLimit_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Limit_clauseContext limit_clause() throws RecognitionException {
		Limit_clauseContext _localctx = new Limit_clauseContext(_ctx, getState());
		enterRule(_localctx, 120, RULE_limit_clause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1036);
			match(LIMIT);
			setState(1037);
			number();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Order_by_clauseContext extends ParserRuleContext {
		public TerminalNode ORDER() { return getToken(VerdictSQLParser.ORDER, 0); }
		public TerminalNode BY() { return getToken(VerdictSQLParser.BY, 0); }
		public List order_by_expression() {
			return getRuleContexts(Order_by_expressionContext.class);
		}
		public Order_by_expressionContext order_by_expression(int i) {
			return getRuleContext(Order_by_expressionContext.class,i);
		}
		public TerminalNode OFFSET() { return getToken(VerdictSQLParser.OFFSET, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public List ROW() { return getTokens(VerdictSQLParser.ROW); }
		public TerminalNode ROW(int i) {
			return getToken(VerdictSQLParser.ROW, i);
		}
		public List ROWS() { return getTokens(VerdictSQLParser.ROWS); }
		public TerminalNode ROWS(int i) {
			return getToken(VerdictSQLParser.ROWS, i);
		}
		public TerminalNode FETCH() { return getToken(VerdictSQLParser.FETCH, 0); }
		public TerminalNode ONLY() { return getToken(VerdictSQLParser.ONLY, 0); }
		public TerminalNode FIRST() { return getToken(VerdictSQLParser.FIRST, 0); }
		public TerminalNode NEXT() { return getToken(VerdictSQLParser.NEXT, 0); }
		public Order_by_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_order_by_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOrder_by_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Order_by_clauseContext order_by_clause() throws RecognitionException {
		Order_by_clauseContext _localctx = new Order_by_clauseContext(_ctx, getState());
		enterRule(_localctx, 122, RULE_order_by_clause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1039);
			match(ORDER);
			setState(1040);
			match(BY);
			setState(1041);
			order_by_expression();
			setState(1046);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1042);
				match(COMMA);
				setState(1043);
				order_by_expression();
				}
				}
				setState(1048);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1060);
			_la = _input.LA(1);
			if (_la==OFFSET) {
				{
				setState(1049);
				match(OFFSET);
				setState(1050);
				expression(0);
				setState(1051);
				_la = _input.LA(1);
				if ( !(_la==ROW || _la==ROWS) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(1058);
				_la = _input.LA(1);
				if (_la==FETCH) {
					{
					setState(1052);
					match(FETCH);
					setState(1053);
					_la = _input.LA(1);
					if ( !(_la==FIRST || _la==NEXT) ) {
					_errHandler.recoverInline(this);
					} else {
						consume();
					}
					setState(1054);
					expression(0);
					setState(1055);
					_la = _input.LA(1);
					if ( !(_la==ROW || _la==ROWS) ) {
					_errHandler.recoverInline(this);
					} else {
						consume();
					}
					setState(1056);
					match(ONLY);
					}
				}

				}
			}

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

	public static class For_clauseContext extends ParserRuleContext {
		public TerminalNode FOR() { return getToken(VerdictSQLParser.FOR, 0); }
		public TerminalNode BROWSE() { return getToken(VerdictSQLParser.BROWSE, 0); }
		public TerminalNode XML() { return getToken(VerdictSQLParser.XML, 0); }
		public TerminalNode AUTO() { return getToken(VerdictSQLParser.AUTO, 0); }
		public Xml_common_directivesContext xml_common_directives() {
			return getRuleContext(Xml_common_directivesContext.class,0);
		}
		public TerminalNode PATH() { return getToken(VerdictSQLParser.PATH, 0); }
		public TerminalNode STRING() { return getToken(VerdictSQLParser.STRING, 0); }
		public For_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_for_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitFor_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final For_clauseContext for_clause() throws RecognitionException {
		For_clauseContext _localctx = new For_clauseContext(_ctx, getState());
		enterRule(_localctx, 124, RULE_for_clause);
		int _la;
		try {
			setState(1081);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,120,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1062);
				match(FOR);
				setState(1063);
				match(BROWSE);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1064);
				match(FOR);
				setState(1065);
				match(XML);
				setState(1066);
				match(AUTO);
				setState(1068);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(1067);
					xml_common_directives();
					}
				}

				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1070);
				match(FOR);
				setState(1071);
				match(XML);
				setState(1072);
				match(PATH);
				setState(1076);
				_la = _input.LA(1);
				if (_la==LR_BRACKET) {
					{
					setState(1073);
					match(LR_BRACKET);
					setState(1074);
					match(STRING);
					setState(1075);
					match(RR_BRACKET);
					}
				}

				setState(1079);
				_la = _input.LA(1);
				if (_la==COMMA) {
					{
					setState(1078);
					xml_common_directives();
					}
				}

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

	public static class Xml_common_directivesContext extends ParserRuleContext {
		public TerminalNode BINARY() { return getToken(VerdictSQLParser.BINARY, 0); }
		public TerminalNode BASE64() { return getToken(VerdictSQLParser.BASE64, 0); }
		public TerminalNode TYPE() { return getToken(VerdictSQLParser.TYPE, 0); }
		public TerminalNode ROOT() { return getToken(VerdictSQLParser.ROOT, 0); }
		public Xml_common_directivesContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_xml_common_directives; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitXml_common_directives(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Xml_common_directivesContext xml_common_directives() throws RecognitionException {
		Xml_common_directivesContext _localctx = new Xml_common_directivesContext(_ctx, getState());
		enterRule(_localctx, 126, RULE_xml_common_directives);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1083);
			match(COMMA);
			setState(1088);
			switch (_input.LA(1)) {
			case BINARY:
				{
				setState(1084);
				match(BINARY);
				setState(1085);
				match(BASE64);
				}
				break;
			case TYPE:
				{
				setState(1086);
				match(TYPE);
				}
				break;
			case ROOT:
				{
				setState(1087);
				match(ROOT);
				}
				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 Order_by_expressionContext extends ParserRuleContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode NULLS() { return getToken(VerdictSQLParser.NULLS, 0); }
		public TerminalNode FIRST() { return getToken(VerdictSQLParser.FIRST, 0); }
		public TerminalNode LAST() { return getToken(VerdictSQLParser.LAST, 0); }
		public TerminalNode ASC() { return getToken(VerdictSQLParser.ASC, 0); }
		public TerminalNode DESC() { return getToken(VerdictSQLParser.DESC, 0); }
		public Order_by_expressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_order_by_expression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOrder_by_expression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Order_by_expressionContext order_by_expression() throws RecognitionException {
		Order_by_expressionContext _localctx = new Order_by_expressionContext(_ctx, getState());
		enterRule(_localctx, 128, RULE_order_by_expression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1090);
			expression(0);
			setState(1092);
			_la = _input.LA(1);
			if (_la==ASC || _la==DESC) {
				{
				setState(1091);
				_la = _input.LA(1);
				if ( !(_la==ASC || _la==DESC) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				}
			}

			setState(1098);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,123,_ctx) ) {
			case 1:
				{
				setState(1094);
				match(NULLS);
				setState(1095);
				match(FIRST);
				}
				break;
			case 2:
				{
				setState(1096);
				match(NULLS);
				setState(1097);
				match(LAST);
				}
				break;
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Group_by_itemContext extends ParserRuleContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Group_by_itemContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_group_by_item; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitGroup_by_item(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Group_by_itemContext group_by_item() throws RecognitionException {
		Group_by_itemContext _localctx = new Group_by_itemContext(_ctx, getState());
		enterRule(_localctx, 130, RULE_group_by_item);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1100);
			expression(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Option_clauseContext extends ParserRuleContext {
		public TerminalNode OPTION() { return getToken(VerdictSQLParser.OPTION, 0); }
		public List option() {
			return getRuleContexts(OptionContext.class);
		}
		public OptionContext option(int i) {
			return getRuleContext(OptionContext.class,i);
		}
		public Option_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_option_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOption_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Option_clauseContext option_clause() throws RecognitionException {
		Option_clauseContext _localctx = new Option_clauseContext(_ctx, getState());
		enterRule(_localctx, 132, RULE_option_clause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1102);
			match(OPTION);
			setState(1103);
			match(LR_BRACKET);
			setState(1104);
			option();
			setState(1109);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1105);
				match(COMMA);
				setState(1106);
				option();
				}
				}
				setState(1111);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1112);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class OptionContext extends ParserRuleContext {
		public Token number_rows;
		public TerminalNode FAST() { return getToken(VerdictSQLParser.FAST, 0); }
		public TerminalNode DECIMAL() { return getToken(VerdictSQLParser.DECIMAL, 0); }
		public TerminalNode GROUP() { return getToken(VerdictSQLParser.GROUP, 0); }
		public TerminalNode HASH() { return getToken(VerdictSQLParser.HASH, 0); }
		public TerminalNode ORDER() { return getToken(VerdictSQLParser.ORDER, 0); }
		public TerminalNode UNION() { return getToken(VerdictSQLParser.UNION, 0); }
		public TerminalNode MERGE() { return getToken(VerdictSQLParser.MERGE, 0); }
		public TerminalNode CONCAT() { return getToken(VerdictSQLParser.CONCAT, 0); }
		public TerminalNode KEEPFIXED() { return getToken(VerdictSQLParser.KEEPFIXED, 0); }
		public TerminalNode PLAN() { return getToken(VerdictSQLParser.PLAN, 0); }
		public TerminalNode OPTIMIZE() { return getToken(VerdictSQLParser.OPTIMIZE, 0); }
		public TerminalNode FOR() { return getToken(VerdictSQLParser.FOR, 0); }
		public List optimize_for_arg() {
			return getRuleContexts(Optimize_for_argContext.class);
		}
		public Optimize_for_argContext optimize_for_arg(int i) {
			return getRuleContext(Optimize_for_argContext.class,i);
		}
		public TerminalNode UNKNOWN() { return getToken(VerdictSQLParser.UNKNOWN, 0); }
		public OptionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_option; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOption(this);
			else return visitor.visitChildren(this);
		}
	}

	public final OptionContext option() throws RecognitionException {
		OptionContext _localctx = new OptionContext(_ctx, getState());
		enterRule(_localctx, 134, RULE_option);
		int _la;
		try {
			setState(1138);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,126,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1114);
				match(FAST);
				setState(1115);
				((OptionContext)_localctx).number_rows = match(DECIMAL);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1116);
				_la = _input.LA(1);
				if ( !(_la==HASH || _la==ORDER) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(1117);
				match(GROUP);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1118);
				_la = _input.LA(1);
				if ( !(_la==HASH || _la==MERGE || _la==CONCAT) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(1119);
				match(UNION);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1120);
				match(KEEPFIXED);
				setState(1121);
				match(PLAN);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1122);
				match(OPTIMIZE);
				setState(1123);
				match(FOR);
				setState(1124);
				match(LR_BRACKET);
				setState(1125);
				optimize_for_arg();
				setState(1130);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1126);
					match(COMMA);
					setState(1127);
					optimize_for_arg();
					}
					}
					setState(1132);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				setState(1133);
				match(RR_BRACKET);
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1135);
				match(OPTIMIZE);
				setState(1136);
				match(FOR);
				setState(1137);
				match(UNKNOWN);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Optimize_for_argContext extends ParserRuleContext {
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public TerminalNode UNKNOWN() { return getToken(VerdictSQLParser.UNKNOWN, 0); }
		public ConstantContext constant() {
			return getRuleContext(ConstantContext.class,0);
		}
		public Optimize_for_argContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_optimize_for_arg; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOptimize_for_arg(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Optimize_for_argContext optimize_for_arg() throws RecognitionException {
		Optimize_for_argContext _localctx = new Optimize_for_argContext(_ctx, getState());
		enterRule(_localctx, 136, RULE_optimize_for_arg);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1140);
			match(LOCAL_ID);
			setState(1144);
			switch (_input.LA(1)) {
			case UNKNOWN:
				{
				setState(1141);
				match(UNKNOWN);
				}
				break;
			case EQUAL:
				{
				setState(1142);
				match(EQUAL);
				setState(1143);
				constant();
				}
				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 Select_listContext extends ParserRuleContext {
		public List select_list_elem() {
			return getRuleContexts(Select_list_elemContext.class);
		}
		public Select_list_elemContext select_list_elem(int i) {
			return getRuleContext(Select_list_elemContext.class,i);
		}
		public Select_listContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_select_list; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSelect_list(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Select_listContext select_list() throws RecognitionException {
		Select_listContext _localctx = new Select_listContext(_ctx, getState());
		enterRule(_localctx, 138, RULE_select_list);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1146);
			select_list_elem();
			setState(1151);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1147);
				match(COMMA);
				setState(1148);
				select_list_elem();
				}
				}
				setState(1153);
				_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 Select_list_elemContext extends ParserRuleContext {
		public TerminalNode STAR() { return getToken(VerdictSQLParser.STAR, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public TerminalNode IDENTITY() { return getToken(VerdictSQLParser.IDENTITY, 0); }
		public TerminalNode ROWGUID() { return getToken(VerdictSQLParser.ROWGUID, 0); }
		public Column_aliasContext column_alias() {
			return getRuleContext(Column_aliasContext.class,0);
		}
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode AS() { return getToken(VerdictSQLParser.AS, 0); }
		public Select_list_elemContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_select_list_elem; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSelect_list_elem(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Select_list_elemContext select_list_elem() throws RecognitionException {
		Select_list_elemContext _localctx = new Select_list_elemContext(_ctx, getState());
		enterRule(_localctx, 140, RULE_select_list_elem);
		int _la;
		try {
			setState(1175);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,133,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1157);
				_la = _input.LA(1);
				if (_la==DISTINCT || _la==LEFT || _la==RIGHT || ((((_la - 228)) & ~0x3f) == 0 && ((1L << (_la - 228)) & ((1L << (AGE - 228)) | (1L << (AREA - 228)) | (1L << (CENTER - 228)) | (1L << (CIRCLE - 228)))) != 0) || ((((_la - 293)) & ~0x3f) == 0 && ((1L << (_la - 293)) & ((1L << (COUNT - 293)) | (1L << (DATE - 293)) | (1L << (DAY - 293)) | (1L << (DAYNAME - 293)) | (1L << (DAYOFMONTH - 293)) | (1L << (DAYOFWEEK - 293)) | (1L << (DAYOFYEAR - 293)) | (1L << (DEGREES - 293)) | (1L << (DIAMETER - 293)))) != 0) || ((((_la - 367)) & ~0x3f) == 0 && ((1L << (_la - 367)) & ((1L << (HEIGHT - 367)) | (1L << (HOUR - 367)) | (1L << (LENGTH - 367)))) != 0) || ((((_la - 448)) & ~0x3f) == 0 && ((1L << (_la - 448)) & ((1L << (MAKEDATE - 448)) | (1L << (MICROSECOND - 448)) | (1L << (MINUTE - 448)) | (1L << (MOD - 448)) | (1L << (MONTH - 448)) | (1L << (MONTHNAME - 448)))) != 0) || ((((_la - 516)) & ~0x3f) == 0 && ((1L << (_la - 516)) & ((1L << (POWER - 516)) | (1L << (SCALE - 516)) | (1L << (SECOND - 516)))) != 0) || ((((_la - 618)) & ~0x3f) == 0 && ((1L << (_la - 618)) & ((1L << (TEXT - 618)) | (1L << (TIME - 618)) | (1L << (TIMESTAMP - 618)) | (1L << (VARIANCE - 618)) | (1L << (WEEKOFYEAR - 618)))) != 0) || ((((_la - 774)) & ~0x3f) == 0 && ((1L << (_la - 774)) & ((1L << (DOUBLE_QUOTE_ID - 774)) | (1L << (BACKTICK_ID - 774)) | (1L << (SQUARE_BRACKET_ID - 774)) | (1L << (ID - 774)))) != 0)) {
					{
					setState(1154);
					table_name();
					setState(1155);
					match(DOT);
					}
				}

				setState(1162);
				switch (_input.LA(1)) {
				case STAR:
					{
					setState(1159);
					match(STAR);
					}
					break;
				case DOLLAR:
					{
					setState(1160);
					match(DOLLAR);
					setState(1161);
					_la = _input.LA(1);
					if ( !(_la==IDENTITY || _la==ROWGUID) ) {
					_errHandler.recoverInline(this);
					} else {
						consume();
					}
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1164);
				column_alias();
				setState(1165);
				match(EQUAL);
				setState(1166);
				expression(0);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1168);
				expression(0);
				setState(1173);
				_la = _input.LA(1);
				if (_la==AS || _la==DISTINCT || _la==LEFT || _la==RIGHT || ((((_la - 228)) & ~0x3f) == 0 && ((1L << (_la - 228)) & ((1L << (AGE - 228)) | (1L << (AREA - 228)) | (1L << (CENTER - 228)) | (1L << (CIRCLE - 228)))) != 0) || ((((_la - 293)) & ~0x3f) == 0 && ((1L << (_la - 293)) & ((1L << (COUNT - 293)) | (1L << (DATE - 293)) | (1L << (DAY - 293)) | (1L << (DAYNAME - 293)) | (1L << (DAYOFMONTH - 293)) | (1L << (DAYOFWEEK - 293)) | (1L << (DAYOFYEAR - 293)) | (1L << (DEGREES - 293)) | (1L << (DIAMETER - 293)))) != 0) || ((((_la - 367)) & ~0x3f) == 0 && ((1L << (_la - 367)) & ((1L << (HEIGHT - 367)) | (1L << (HOUR - 367)) | (1L << (LENGTH - 367)))) != 0) || ((((_la - 448)) & ~0x3f) == 0 && ((1L << (_la - 448)) & ((1L << (MAKEDATE - 448)) | (1L << (MICROSECOND - 448)) | (1L << (MINUTE - 448)) | (1L << (MOD - 448)) | (1L << (MONTH - 448)) | (1L << (MONTHNAME - 448)))) != 0) || ((((_la - 516)) & ~0x3f) == 0 && ((1L << (_la - 516)) & ((1L << (POWER - 516)) | (1L << (SCALE - 516)) | (1L << (SECOND - 516)))) != 0) || ((((_la - 618)) & ~0x3f) == 0 && ((1L << (_la - 618)) & ((1L << (TEXT - 618)) | (1L << (TIME - 618)) | (1L << (TIMESTAMP - 618)) | (1L << (VARIANCE - 618)) | (1L << (WEEKOFYEAR - 618)))) != 0) || ((((_la - 774)) & ~0x3f) == 0 && ((1L << (_la - 774)) & ((1L << (DOUBLE_QUOTE_ID - 774)) | (1L << (BACKTICK_ID - 774)) | (1L << (SQUARE_BRACKET_ID - 774)) | (1L << (ID - 774)) | (1L << (STRING - 774)))) != 0)) {
					{
					setState(1170);
					_la = _input.LA(1);
					if (_la==AS) {
						{
						setState(1169);
						match(AS);
						}
					}

					setState(1172);
					column_alias();
					}
				}

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

	public static class Partition_by_clauseContext extends ParserRuleContext {
		public TerminalNode PARTITION() { return getToken(VerdictSQLParser.PARTITION, 0); }
		public TerminalNode BY() { return getToken(VerdictSQLParser.BY, 0); }
		public Expression_listContext expression_list() {
			return getRuleContext(Expression_listContext.class,0);
		}
		public Partition_by_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_partition_by_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitPartition_by_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Partition_by_clauseContext partition_by_clause() throws RecognitionException {
		Partition_by_clauseContext _localctx = new Partition_by_clauseContext(_ctx, getState());
		enterRule(_localctx, 142, RULE_partition_by_clause);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1177);
			match(PARTITION);
			setState(1178);
			match(BY);
			setState(1179);
			expression_list();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Table_sourceContext extends ParserRuleContext {
		public Table_source_item_joinedContext table_source_item_joined() {
			return getRuleContext(Table_source_item_joinedContext.class,0);
		}
		public Table_sourceContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_table_source; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTable_source(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Table_sourceContext table_source() throws RecognitionException {
		Table_sourceContext _localctx = new Table_sourceContext(_ctx, getState());
		enterRule(_localctx, 144, RULE_table_source);
		try {
			setState(1186);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,134,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1181);
				table_source_item_joined();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1182);
				match(LR_BRACKET);
				setState(1183);
				table_source_item_joined();
				setState(1184);
				match(RR_BRACKET);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Table_source_item_joinedContext extends ParserRuleContext {
		public Table_source_itemContext table_source_item() {
			return getRuleContext(Table_source_itemContext.class,0);
		}
		public List join_part() {
			return getRuleContexts(Join_partContext.class);
		}
		public Join_partContext join_part(int i) {
			return getRuleContext(Join_partContext.class,i);
		}
		public Table_source_item_joinedContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_table_source_item_joined; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTable_source_item_joined(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Table_source_item_joinedContext table_source_item_joined() throws RecognitionException {
		Table_source_item_joinedContext _localctx = new Table_source_item_joinedContext(_ctx, getState());
		enterRule(_localctx, 146, RULE_table_source_item_joined);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1188);
			table_source_item();
			setState(1192);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,135,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1189);
					join_part();
					}
					} 
				}
				setState(1194);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,135,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Table_source_itemContext extends ParserRuleContext {
		public Table_source_itemContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_table_source_item; }
	 
		public Table_source_itemContext() { }
		public void copyFrom(Table_source_itemContext ctx) {
			super.copyFrom(ctx);
		}
	}
	public static class Hinted_table_name_itemContext extends Table_source_itemContext {
		public Table_name_with_hintContext table_name_with_hint() {
			return getRuleContext(Table_name_with_hintContext.class,0);
		}
		public As_table_aliasContext as_table_alias() {
			return getRuleContext(As_table_aliasContext.class,0);
		}
		public Hinted_table_name_itemContext(Table_source_itemContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitHinted_table_name_item(this);
			else return visitor.visitChildren(this);
		}
	}
	public static class Derived_table_source_itemContext extends Table_source_itemContext {
		public Derived_tableContext derived_table() {
			return getRuleContext(Derived_tableContext.class,0);
		}
		public As_table_aliasContext as_table_alias() {
			return getRuleContext(As_table_aliasContext.class,0);
		}
		public Column_alias_listContext column_alias_list() {
			return getRuleContext(Column_alias_listContext.class,0);
		}
		public Derived_table_source_itemContext(Table_source_itemContext ctx) { copyFrom(ctx); }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDerived_table_source_item(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Table_source_itemContext table_source_item() throws RecognitionException {
		Table_source_itemContext _localctx = new Table_source_itemContext(_ctx, getState());
		enterRule(_localctx, 148, RULE_table_source_item);
		int _la;
		try {
			setState(1206);
			switch (_input.LA(1)) {
			case DISTINCT:
			case LEFT:
			case RIGHT:
			case AGE:
			case AREA:
			case CENTER:
			case CIRCLE:
			case COUNT:
			case DATE:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DIAMETER:
			case HEIGHT:
			case HOUR:
			case LENGTH:
			case MAKEDATE:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONTH:
			case MONTHNAME:
			case POWER:
			case SCALE:
			case SECOND:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case VARIANCE:
			case WEEKOFYEAR:
			case DOUBLE_QUOTE_ID:
			case BACKTICK_ID:
			case SQUARE_BRACKET_ID:
			case ID:
				_localctx = new Hinted_table_name_itemContext(_localctx);
				enterOuterAlt(_localctx, 1);
				{
				setState(1195);
				table_name_with_hint();
				setState(1197);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,136,_ctx) ) {
				case 1:
					{
					setState(1196);
					as_table_alias();
					}
					break;
				}
				}
				break;
			case VALUES:
			case LR_BRACKET:
				_localctx = new Derived_table_source_itemContext(_localctx);
				enterOuterAlt(_localctx, 2);
				{
				setState(1199);
				derived_table();
				setState(1204);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,138,_ctx) ) {
				case 1:
					{
					setState(1200);
					as_table_alias();
					setState(1202);
					_la = _input.LA(1);
					if (_la==LR_BRACKET) {
						{
						setState(1201);
						column_alias_list();
						}
					}

					}
					break;
				}
				}
				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 Change_tableContext extends ParserRuleContext {
		public TerminalNode CHANGETABLE() { return getToken(VerdictSQLParser.CHANGETABLE, 0); }
		public TerminalNode CHANGES() { return getToken(VerdictSQLParser.CHANGES, 0); }
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public TerminalNode NULL() { return getToken(VerdictSQLParser.NULL, 0); }
		public TerminalNode DECIMAL() { return getToken(VerdictSQLParser.DECIMAL, 0); }
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public Change_tableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_change_table; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitChange_table(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Change_tableContext change_table() throws RecognitionException {
		Change_tableContext _localctx = new Change_tableContext(_ctx, getState());
		enterRule(_localctx, 150, RULE_change_table);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1208);
			match(CHANGETABLE);
			setState(1209);
			match(LR_BRACKET);
			setState(1210);
			match(CHANGES);
			setState(1211);
			table_name();
			setState(1212);
			match(COMMA);
			setState(1213);
			_la = _input.LA(1);
			if ( !(_la==NULL || _la==LOCAL_ID || _la==DECIMAL) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			setState(1214);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Join_partContext extends ParserRuleContext {
		public Token join_type;
		public Token join_hint;
		public TerminalNode JOIN() { return getToken(VerdictSQLParser.JOIN, 0); }
		public Table_sourceContext table_source() {
			return getRuleContext(Table_sourceContext.class,0);
		}
		public TerminalNode ON() { return getToken(VerdictSQLParser.ON, 0); }
		public Search_conditionContext search_condition() {
			return getRuleContext(Search_conditionContext.class,0);
		}
		public TerminalNode LEFT() { return getToken(VerdictSQLParser.LEFT, 0); }
		public TerminalNode RIGHT() { return getToken(VerdictSQLParser.RIGHT, 0); }
		public TerminalNode FULL() { return getToken(VerdictSQLParser.FULL, 0); }
		public TerminalNode INNER() { return getToken(VerdictSQLParser.INNER, 0); }
		public TerminalNode OUTER() { return getToken(VerdictSQLParser.OUTER, 0); }
		public TerminalNode LOOP() { return getToken(VerdictSQLParser.LOOP, 0); }
		public TerminalNode HASH() { return getToken(VerdictSQLParser.HASH, 0); }
		public TerminalNode MERGE() { return getToken(VerdictSQLParser.MERGE, 0); }
		public TerminalNode REMOTE() { return getToken(VerdictSQLParser.REMOTE, 0); }
		public TerminalNode SEMI() { return getToken(VerdictSQLParser.SEMI, 0); }
		public TerminalNode CROSS() { return getToken(VerdictSQLParser.CROSS, 0); }
		public TerminalNode APPLY() { return getToken(VerdictSQLParser.APPLY, 0); }
		public TerminalNode LATERAL() { return getToken(VerdictSQLParser.LATERAL, 0); }
		public TerminalNode VIEW() { return getToken(VerdictSQLParser.VIEW, 0); }
		public Lateral_view_functionContext lateral_view_function() {
			return getRuleContext(Lateral_view_functionContext.class,0);
		}
		public Table_aliasContext table_alias() {
			return getRuleContext(Table_aliasContext.class,0);
		}
		public Column_aliasContext column_alias() {
			return getRuleContext(Column_aliasContext.class,0);
		}
		public TerminalNode AS() { return getToken(VerdictSQLParser.AS, 0); }
		public Join_partContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_join_part; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitJoin_part(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Join_partContext join_part() throws RecognitionException {
		Join_partContext _localctx = new Join_partContext(_ctx, getState());
		enterRule(_localctx, 152, RULE_join_part);
		int _la;
		try {
			setState(1255);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,148,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1223);
				switch (_input.LA(1)) {
				case HASH:
				case INNER:
				case JOIN:
				case MERGE:
				case SEMI:
				case LOOP:
				case REMOTE:
					{
					setState(1217);
					_la = _input.LA(1);
					if (_la==INNER) {
						{
						setState(1216);
						match(INNER);
						}
					}

					}
					break;
				case FULL:
				case LEFT:
				case RIGHT:
					{
					setState(1219);
					((Join_partContext)_localctx).join_type = _input.LT(1);
					_la = _input.LA(1);
					if ( !(_la==FULL || _la==LEFT || _la==RIGHT) ) {
						((Join_partContext)_localctx).join_type = (Token)_errHandler.recoverInline(this);
					} else {
						consume();
					}
					setState(1221);
					_la = _input.LA(1);
					if (_la==OUTER) {
						{
						setState(1220);
						match(OUTER);
						}
					}

					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(1226);
				_la = _input.LA(1);
				if (_la==HASH || _la==MERGE || _la==SEMI || _la==LOOP || _la==REMOTE) {
					{
					setState(1225);
					((Join_partContext)_localctx).join_hint = _input.LT(1);
					_la = _input.LA(1);
					if ( !(_la==HASH || _la==MERGE || _la==SEMI || _la==LOOP || _la==REMOTE) ) {
						((Join_partContext)_localctx).join_hint = (Token)_errHandler.recoverInline(this);
					} else {
						consume();
					}
					}
				}

				setState(1228);
				match(JOIN);
				setState(1229);
				table_source();
				setState(1232);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,144,_ctx) ) {
				case 1:
					{
					setState(1230);
					match(ON);
					setState(1231);
					search_condition();
					}
					break;
				}
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1234);
				match(CROSS);
				setState(1235);
				match(APPLY);
				setState(1236);
				table_source();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1237);
				match(CROSS);
				setState(1238);
				match(JOIN);
				setState(1239);
				table_source();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1240);
				match(OUTER);
				setState(1241);
				match(APPLY);
				setState(1242);
				table_source();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1243);
				match(LATERAL);
				setState(1244);
				match(VIEW);
				setState(1245);
				lateral_view_function();
				setState(1247);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,145,_ctx) ) {
				case 1:
					{
					setState(1246);
					table_alias();
					}
					break;
				}
				setState(1253);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,147,_ctx) ) {
				case 1:
					{
					setState(1250);
					_la = _input.LA(1);
					if (_la==AS) {
						{
						setState(1249);
						match(AS);
						}
					}

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

	public static class Table_name_with_hintContext extends ParserRuleContext {
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public Table_name_with_hintContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_table_name_with_hint; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTable_name_with_hint(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Table_name_with_hintContext table_name_with_hint() throws RecognitionException {
		Table_name_with_hintContext _localctx = new Table_name_with_hintContext(_ctx, getState());
		enterRule(_localctx, 154, RULE_table_name_with_hint);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1257);
			table_name();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Rowset_functionContext extends ParserRuleContext {
		public Token data_file;
		public TerminalNode OPENROWSET() { return getToken(VerdictSQLParser.OPENROWSET, 0); }
		public TerminalNode BULK() { return getToken(VerdictSQLParser.BULK, 0); }
		public TerminalNode STRING() { return getToken(VerdictSQLParser.STRING, 0); }
		public List bulk_option() {
			return getRuleContexts(Bulk_optionContext.class);
		}
		public Bulk_optionContext bulk_option(int i) {
			return getRuleContext(Bulk_optionContext.class,i);
		}
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Rowset_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_rowset_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitRowset_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Rowset_functionContext rowset_function() throws RecognitionException {
		Rowset_functionContext _localctx = new Rowset_functionContext(_ctx, getState());
		enterRule(_localctx, 156, RULE_rowset_function);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1259);
			match(OPENROWSET);
			setState(1260);
			match(LR_BRACKET);
			setState(1261);
			match(BULK);
			setState(1262);
			((Rowset_functionContext)_localctx).data_file = match(STRING);
			setState(1263);
			match(COMMA);
			setState(1273);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,150,_ctx) ) {
			case 1:
				{
				setState(1264);
				bulk_option();
				setState(1269);
				_errHandler.sync(this);
				_la = _input.LA(1);
				while (_la==COMMA) {
					{
					{
					setState(1265);
					match(COMMA);
					setState(1266);
					bulk_option();
					}
					}
					setState(1271);
					_errHandler.sync(this);
					_la = _input.LA(1);
				}
				}
				break;
			case 2:
				{
				setState(1272);
				id();
				}
				break;
			}
			setState(1275);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Bulk_optionContext extends ParserRuleContext {
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public TerminalNode DECIMAL() { return getToken(VerdictSQLParser.DECIMAL, 0); }
		public TerminalNode STRING() { return getToken(VerdictSQLParser.STRING, 0); }
		public Bulk_optionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_bulk_option; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitBulk_option(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Bulk_optionContext bulk_option() throws RecognitionException {
		Bulk_optionContext _localctx = new Bulk_optionContext(_ctx, getState());
		enterRule(_localctx, 158, RULE_bulk_option);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1277);
			id();
			setState(1278);
			match(EQUAL);
			setState(1279);
			_la = _input.LA(1);
			if ( !(_la==DECIMAL || _la==STRING) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Derived_tableContext extends ParserRuleContext {
		public SubqueryContext subquery() {
			return getRuleContext(SubqueryContext.class,0);
		}
		public Table_value_constructorContext table_value_constructor() {
			return getRuleContext(Table_value_constructorContext.class,0);
		}
		public Derived_tableContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_derived_table; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDerived_table(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Derived_tableContext derived_table() throws RecognitionException {
		Derived_tableContext _localctx = new Derived_tableContext(_ctx, getState());
		enterRule(_localctx, 160, RULE_derived_table);
		try {
			setState(1286);
			switch (_input.LA(1)) {
			case LR_BRACKET:
				enterOuterAlt(_localctx, 1);
				{
				setState(1281);
				match(LR_BRACKET);
				setState(1282);
				subquery();
				setState(1283);
				match(RR_BRACKET);
				}
				break;
			case VALUES:
				enterOuterAlt(_localctx, 2);
				{
				setState(1285);
				table_value_constructor();
				}
				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 Function_callContext extends ParserRuleContext {
		public Ranking_windowed_functionContext ranking_windowed_function() {
			return getRuleContext(Ranking_windowed_functionContext.class,0);
		}
		public Expression_functionContext expression_function() {
			return getRuleContext(Expression_functionContext.class,0);
		}
		public Aggregate_windowed_functionContext aggregate_windowed_function() {
			return getRuleContext(Aggregate_windowed_functionContext.class,0);
		}
		public Function_callContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_function_call; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitFunction_call(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Function_callContext function_call() throws RecognitionException {
		Function_callContext _localctx = new Function_callContext(_ctx, getState());
		enterRule(_localctx, 162, RULE_function_call);
		try {
			setState(1291);
			switch (_input.LA(1)) {
			case DENSE_RANK:
			case NTILE:
			case RANK:
			case ROW_NUMBER:
				enterOuterAlt(_localctx, 1);
				{
				setState(1288);
				ranking_windowed_function();
				}
				break;
			case APPROX_DISTINCT:
			case ASCII:
			case COALESCE:
			case CONV:
			case CONVERT:
			case CURRENT_DATE:
			case CURRENT_TIME:
			case CURRENT_TIMESTAMP:
			case CURRENT_USER:
			case DATABASE:
			case HASH:
			case IF:
			case INT4LARGER:
			case LEFT:
			case MID:
			case NOT:
			case NULLIF:
			case RAWTOHEX:
			case RIGHT:
			case RPAD:
			case SESSION_USER:
			case SUBSTR:
			case SUBSTRING:
			case SYSTEM_USER:
			case TRUNCATE:
			case USER:
			case ABBREV:
			case ABS:
			case ACOS:
			case ADDDATE:
			case ADDTIME:
			case AES_DECRYPT:
			case AES_ENCRYPT:
			case AGE:
			case AREA:
			case ARRAY_AGG:
			case ARRAY_APPEND:
			case ARRAY_CAT:
			case ARRAY_DIMS:
			case ARRAY_LENGTH:
			case ARRAY_LOWER:
			case ARRAY_NDIMS:
			case ARRAY_POSITION:
			case ARRAY_POSITIONS:
			case ARRAY_PREPEND:
			case ARRAY_REMOVE:
			case ARRAY_REPLACE:
			case ARRAY_TO_JSON:
			case ARRAY_TO_STRING:
			case ARRAY_TO_TSVECTOR:
			case ARRAY_UPPER:
			case ASIN:
			case ATAN:
			case ATAN2:
			case BIN:
			case BIT_LENGTH:
			case BOOL_AND:
			case BOOL_OR:
			case BOX:
			case BOUND_BOX:
			case BROADCAST:
			case BTRIM:
			case BROUND:
			case CARDINALITY:
			case CAST:
			case CBRT:
			case CEIL:
			case CEILING:
			case CENTER:
			case CHAR_LENGTH:
			case CHARACTER_LENGTH:
			case CHR:
			case CIRCLE:
			case CLOCK_TIMESTAMP:
			case CONCAT:
			case CONCAT_WS:
			case CONVERT_FROM:
			case CONVERT_TO:
			case COS:
			case CORR:
			case COVAR_POP:
			case COVAR_SAMP:
			case COT:
			case CRC32:
			case CURDATE:
			case CURRVAL:
			case CURTIME:
			case DATE:
			case DATEADD:
			case DATE_ADD:
			case DATE_FORMAT:
			case DATE_PART:
			case DATE_SUB:
			case DATE_TRUNC:
			case DATEDIFF:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DECODE:
			case DEGREES:
			case DIAMETER:
			case DIV:
			case NATURAL_CONSTANT:
			case ENCODE:
			case ENUM_FIRST:
			case ENUM_LAST:
			case ENUM_RANGE:
			case EXP:
			case EXTRACT:
			case EVERY:
			case FACTORIAL:
			case FAMILY:
			case FIELD:
			case FIND_IN_SET:
			case FLOOR:
			case FORMAT:
			case FORMAT_NUMBER:
			case FNV_HASH:
			case FROM_DAYS:
			case FROM_UNIXTIME:
			case GET_BIT:
			case GET_BYTE:
			case GET_CURRENT_TS_CONFIG:
			case GET_JSON_OBJECT:
			case GREATEST:
			case HEIGHT:
			case HEX:
			case HOST:
			case HOSTMASK:
			case HOUR:
			case IFNULL:
			case INITCAP:
			case INSTR:
			case IN_FILE:
			case INET_SAME_FAMILY:
			case INET_MERGE:
			case ISCLOSED:
			case ISEMPTY:
			case ISFINITE:
			case ISNULL:
			case ISOPEN:
			case JSON_AGG:
			case JSON_ARRAY_LENGTH:
			case JSON_ARRAY_ELEMENTS:
			case JSON_ARRAY_ELEMENTS_TEXT:
			case JSON_BUILD_ARRAY:
			case JSON_BUILD_OBJECT:
			case JSON_EACH:
			case JSON_EACH_TEXT:
			case JSON_EXTRACT_PATH:
			case JSON_EXTRACT_PATH_TEXT:
			case JSON_OBJECT:
			case JSON_OBJECT_KEYS:
			case JSON_OBJECT_AGG:
			case JSON_POPULATE_RECORD:
			case JSON_POPULATE_RECORDSET:
			case JSON_STRIP_NULLS:
			case JSON_TO_RECORD:
			case JSON_TO_RECORDSET:
			case JSON_TYPEOF:
			case JSONB_AGG:
			case JSONB_OBJECT_AGG:
			case JSONB_SET:
			case JSONB_INSERT:
			case JSONB_PRETTY:
			case JUSTIFY_DAYS:
			case JUSTIFY_HOURS:
			case JUSTIFY_INTERVALS:
			case LASTVAL:
			case LAST_DAY:
			case LAST_INSERT_ID:
			case LCASE:
			case LEAST:
			case LENGTH:
			case LINE:
			case LN:
			case LOCALTIME:
			case LOCALTIMESTAMP:
			case LOCATE:
			case LOG:
			case LOG2:
			case LOG10:
			case LOWER:
			case LOWER_INC:
			case LOWER_INF:
			case LPAD:
			case LTRIM:
			case LSEG:
			case MACADDR8_SET7BIT:
			case MAKEDATE:
			case MAKETIME:
			case MAKE_DATE:
			case MAKE_TIME:
			case MAKE_TIMESTAMP:
			case MAKE_TIMESTAMPTZ:
			case MASKLEN:
			case MD5:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONTH:
			case MONTHNAME:
			case NEGATIVE:
			case NETMASK:
			case NETWORK:
			case NEXTVAL:
			case NOW:
			case NPOINTS:
			case NUMNODE:
			case NVL:
			case OCTET_LENGTH:
			case OVERLAY:
			case PATH:
			case PCLOSE:
			case PERCENTILE:
			case PERIOD_ADD:
			case PERIOD_DIFF:
			case PG_CLIENT_ENCODING:
			case PLAINTO_TSQUERY:
			case PHRASETO_TSQUERY:
			case PI:
			case PMOD:
			case POINT:
			case POLYGON:
			case POPEN:
			case POSITION:
			case POSITIVE:
			case POW:
			case POWER:
			case QUARTER:
			case QUERYTREE:
			case QUOTE_IDENT:
			case QUOTE_LITERAL:
			case QUOTE_NULLABLE:
			case RADIANS:
			case RADIUS:
			case RAND:
			case RANDOM:
			case RANGE_MERGE:
			case REGR_AVGX:
			case REGR_AVGY:
			case REGR_COUNT:
			case REGR_INTERCEPT:
			case REGR_R2:
			case REGR_SLOPE:
			case REGR_SXX:
			case REGR_SXY:
			case REGR_SYY:
			case REGEXP_MATCHES:
			case REGEXP_REPLACE:
			case REGEXP_SPLIT_TO_ARRAY:
			case REGEXP_SPLIT_TO_TABLE:
			case REPEAT:
			case REPLACE:
			case REVERSE:
			case ROUND:
			case ROW_TO_JSON:
			case RTRIM:
			case SCALE:
			case SECOND:
			case SEC_TO_TIME:
			case SETSEED:
			case SETWEIGHT:
			case SETVAL:
			case SET_BIT:
			case SET_BYTE:
			case SET_MASKLEN:
			case SHA1:
			case SHA2:
			case SHIFTLEFT:
			case SHIFTRIGHT:
			case SHIFTRIGHTUNSIGNED:
			case SIGN:
			case SIN:
			case SPACE_FUNCTION:
			case SPLIT:
			case SPLIT_PART:
			case STATEMENT_TIMESTAMP:
			case STDDEV:
			case STRCMP:
			case STRING_AGG:
			case STRING_TO_ARRAY:
			case STRPOS:
			case STR_TO_DATE:
			case SUBDATE:
			case SUBSTRING_INDEX:
			case SQRT:
			case STDDEV_POP:
			case STRIP:
			case STRTOL:
			case SYSDATE:
			case TAN:
			case TEXT:
			case TIME:
			case TIMEDIFF:
			case TIMEOFDAY:
			case TIMESTAMP:
			case TIME_FORMAT:
			case TIME_TO_SEC:
			case TO_ASCII:
			case TO_CHAR:
			case TO_DATE:
			case TO_DAYS:
			case TO_HEX:
			case TO_JSON:
			case TO_JSONB:
			case TO_NUMBER:
			case TO_TIMESTAMP:
			case TO_TSQUERY:
			case TO_TSVECTOR:
			case TRANSACTION_TIMESTAMP:
			case TRANSLATE:
			case TRIM:
			case TRUNC:
			case TS_DELETE:
			case TS_FILTER:
			case TS_HEADLINE:
			case TS_RANK:
			case TS_RANK_CD:
			case TS_REWRITE:
			case TSQUERY_PHRASE:
			case TSVECTOR_TO_ARRAY:
			case TSVECTOR_UPDATE_TRIGGER:
			case TSVECTOR_UPDATE_TRIGGER_COLUMN:
			case UCASE:
			case UNHEX:
			case UNIX_TIMESTAMP:
			case UNNEST:
			case UPPER:
			case UPPER_INC:
			case UPPER_INF:
			case VARIANCE:
			case VAR_POP:
			case VAR_SAMP:
			case VERSION:
			case WEEKOFYEAR:
			case WEEK:
			case WEEKDAY:
			case WIDTH:
			case WIDTH_BUCKET:
			case XMLAGG:
			case XMLCOMMENT:
			case XMLCONCAT:
			case XMLELEMENT:
			case XMLFOREST:
			case XMLPI:
			case XMLROOT:
			case XML_ISWELL_FORMAT:
			case XPATH:
			case XPATH_EXISTS:
			case YEAR:
			case YEARWEEK:
			case ST_ASBINARY:
			case ST_ASTEXT:
			case ST_GEOMETRYFROMTEXT:
			case ST_GEOMFROMBINARY:
			case ST_LINEFROMTEXT:
			case ST_LINESTRING:
			case ST_MULTIPOINT:
			case ST_POINT:
			case ST_POLYGON:
			case ST_CONTAINS:
			case ST_CROSSES:
			case ST_DISJOINT:
			case ST_EQUALS:
			case ST_INTERSECTS:
			case ST_OVERLAPS:
			case ST_RELATE:
			case ST_TOUCHES:
			case ST_WITHIN:
			case GEOMETRY_UNION:
			case ST_BOUNDARY:
			case ST_BUFFER:
			case ST_DIFFERENCE:
			case ST_ENVELOPE:
			case ST_ENVELOPEASPTS:
			case ST_EXTERIORRING:
			case ST_INTERSECTION:
			case ST_SYMDIFFERENCE:
			case ST_UNION:
			case ST_AREA:
			case ST_CENTROID:
			case ST_CONVEXHULL:
			case ST_DIMENSION:
			case ST_DISTANCE:
			case ST_GEOMETRYN:
			case ST_INTERIORRINGN:
			case ST_GEOMETRYTYPE:
			case ST_ISCLOSED:
			case ST_ISEMPTY:
			case ST_ISSIMPLE:
			case ST_ISRING:
			case ST_ISVALID:
			case ST_LENGTH:
			case ST_POINTN:
			case ST_XMAX:
			case ST_YMAX:
			case ST_XMIN:
			case ST_YMIN:
			case ST_STARTPOINT:
			case SIMPLIFY_GEOMETRY:
			case ST_ENDPOINT:
			case ST_X:
			case ST_Y:
			case ST_INTERIORRINGS:
			case ST_NUMGEOMETRIES:
			case ST_GEOMETRIES:
			case ST_NUMPOINTS:
			case ST_NUMINTERIORRING:
			case LINE_LOCATE_POINT:
			case GEOMETRY_INVALID_REASON:
			case GREAT_CIRCLE_DISTANCE:
			case CONVEX_HULL_AGG:
			case GEOMETRY_UNION_AGG:
			case BING_TILE:
			case BING_TILE_AT:
			case BING_TILES_AROUND:
			case BING_TILE_COORDINATES:
			case BING_TILE_POLYGON:
			case BING_TILE_QUADKEY:
			case BING_TILE_ZOOM_LEVEL:
			case GEOMETRY_TO_BING_TILES:
			case SPACE:
			case BINARY:
			case BIT_OR:
			case BIT_AND:
				enterOuterAlt(_localctx, 2);
				{
				setState(1289);
				expression_function();
				}
				break;
			case AVG:
			case CHECKSUM_AGG:
			case COUNT:
			case COUNT_BIG:
			case GROUPING:
			case GROUPING_ID:
			case MAX:
			case MIN:
			case NDV:
			case STDEV:
			case STDEVP:
			case STDDEV_SAMP:
			case SUM:
			case VAR:
			case VARP:
				enterOuterAlt(_localctx, 3);
				{
				setState(1290);
				aggregate_windowed_function();
				}
				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 DatepartContext extends ParserRuleContext {
		public TerminalNode ID() { return getToken(VerdictSQLParser.ID, 0); }
		public DatepartContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_datepart; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDatepart(this);
			else return visitor.visitChildren(this);
		}
	}

	public final DatepartContext datepart() throws RecognitionException {
		DatepartContext _localctx = new DatepartContext(_ctx, getState());
		enterRule(_localctx, 164, RULE_datepart);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1293);
			match(ID);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class As_table_aliasContext extends ParserRuleContext {
		public Table_aliasContext table_alias() {
			return getRuleContext(Table_aliasContext.class,0);
		}
		public TerminalNode AS() { return getToken(VerdictSQLParser.AS, 0); }
		public As_table_aliasContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_as_table_alias; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitAs_table_alias(this);
			else return visitor.visitChildren(this);
		}
	}

	public final As_table_aliasContext as_table_alias() throws RecognitionException {
		As_table_aliasContext _localctx = new As_table_aliasContext(_ctx, getState());
		enterRule(_localctx, 166, RULE_as_table_alias);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1296);
			_la = _input.LA(1);
			if (_la==AS) {
				{
				setState(1295);
				match(AS);
				}
			}

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

	public static class Table_aliasContext extends ParserRuleContext {
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Table_aliasContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_table_alias; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTable_alias(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Table_aliasContext table_alias() throws RecognitionException {
		Table_aliasContext _localctx = new Table_aliasContext(_ctx, getState());
		enterRule(_localctx, 168, RULE_table_alias);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1300);
			id();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Index_column_nameContext extends ParserRuleContext {
		public TerminalNode ID() { return getToken(VerdictSQLParser.ID, 0); }
		public Index_column_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_index_column_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitIndex_column_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Index_column_nameContext index_column_name() throws RecognitionException {
		Index_column_nameContext _localctx = new Index_column_nameContext(_ctx, getState());
		enterRule(_localctx, 170, RULE_index_column_name);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1302);
			match(ID);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Index_valueContext extends ParserRuleContext {
		public TerminalNode ID() { return getToken(VerdictSQLParser.ID, 0); }
		public TerminalNode DECIMAL() { return getToken(VerdictSQLParser.DECIMAL, 0); }
		public Index_valueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_index_value; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitIndex_value(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Index_valueContext index_value() throws RecognitionException {
		Index_valueContext _localctx = new Index_valueContext(_ctx, getState());
		enterRule(_localctx, 172, RULE_index_value);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1304);
			_la = _input.LA(1);
			if ( !(_la==DECIMAL || _la==ID) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Column_alias_listContext extends ParserRuleContext {
		public List column_alias() {
			return getRuleContexts(Column_aliasContext.class);
		}
		public Column_aliasContext column_alias(int i) {
			return getRuleContext(Column_aliasContext.class,i);
		}
		public Column_alias_listContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_column_alias_list; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitColumn_alias_list(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Column_alias_listContext column_alias_list() throws RecognitionException {
		Column_alias_listContext _localctx = new Column_alias_listContext(_ctx, getState());
		enterRule(_localctx, 174, RULE_column_alias_list);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1306);
			match(LR_BRACKET);
			setState(1307);
			column_alias();
			setState(1312);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1308);
				match(COMMA);
				setState(1309);
				column_alias();
				}
				}
				setState(1314);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1315);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Column_aliasContext extends ParserRuleContext {
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public TerminalNode STRING() { return getToken(VerdictSQLParser.STRING, 0); }
		public Column_aliasContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_column_alias; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitColumn_alias(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Column_aliasContext column_alias() throws RecognitionException {
		Column_aliasContext _localctx = new Column_aliasContext(_ctx, getState());
		enterRule(_localctx, 176, RULE_column_alias);
		try {
			setState(1319);
			switch (_input.LA(1)) {
			case DISTINCT:
			case LEFT:
			case RIGHT:
			case AGE:
			case AREA:
			case CENTER:
			case CIRCLE:
			case COUNT:
			case DATE:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DIAMETER:
			case HEIGHT:
			case HOUR:
			case LENGTH:
			case MAKEDATE:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONTH:
			case MONTHNAME:
			case POWER:
			case SCALE:
			case SECOND:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case VARIANCE:
			case WEEKOFYEAR:
			case DOUBLE_QUOTE_ID:
			case BACKTICK_ID:
			case SQUARE_BRACKET_ID:
			case ID:
				enterOuterAlt(_localctx, 1);
				{
				setState(1317);
				id();
				}
				break;
			case STRING:
				enterOuterAlt(_localctx, 2);
				{
				setState(1318);
				match(STRING);
				}
				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 Table_value_constructorContext extends ParserRuleContext {
		public TerminalNode VALUES() { return getToken(VerdictSQLParser.VALUES, 0); }
		public List expression_list() {
			return getRuleContexts(Expression_listContext.class);
		}
		public Expression_listContext expression_list(int i) {
			return getRuleContext(Expression_listContext.class,i);
		}
		public Table_value_constructorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_table_value_constructor; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTable_value_constructor(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Table_value_constructorContext table_value_constructor() throws RecognitionException {
		Table_value_constructorContext _localctx = new Table_value_constructorContext(_ctx, getState());
		enterRule(_localctx, 178, RULE_table_value_constructor);
		try {
			int _alt;
			enterOuterAlt(_localctx, 1);
			{
			setState(1321);
			match(VALUES);
			setState(1322);
			match(LR_BRACKET);
			setState(1323);
			expression_list();
			setState(1324);
			match(RR_BRACKET);
			setState(1332);
			_errHandler.sync(this);
			_alt = getInterpreter().adaptivePredict(_input,156,_ctx);
			while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
				if ( _alt==1 ) {
					{
					{
					setState(1325);
					match(COMMA);
					setState(1326);
					match(LR_BRACKET);
					setState(1327);
					expression_list();
					setState(1328);
					match(RR_BRACKET);
					}
					} 
				}
				setState(1334);
				_errHandler.sync(this);
				_alt = getInterpreter().adaptivePredict(_input,156,_ctx);
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Expression_listContext extends ParserRuleContext {
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public Expression_listContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expression_list; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitExpression_list(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Expression_listContext expression_list() throws RecognitionException {
		Expression_listContext _localctx = new Expression_listContext(_ctx, getState());
		enterRule(_localctx, 180, RULE_expression_list);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1335);
			expression(0);
			setState(1340);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1336);
				match(COMMA);
				setState(1337);
				expression(0);
				}
				}
				setState(1342);
				_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 Case_exprContext extends ParserRuleContext {
		public TerminalNode CASE() { return getToken(VerdictSQLParser.CASE, 0); }
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode END() { return getToken(VerdictSQLParser.END, 0); }
		public List WHEN() { return getTokens(VerdictSQLParser.WHEN); }
		public TerminalNode WHEN(int i) {
			return getToken(VerdictSQLParser.WHEN, i);
		}
		public List THEN() { return getTokens(VerdictSQLParser.THEN); }
		public TerminalNode THEN(int i) {
			return getToken(VerdictSQLParser.THEN, i);
		}
		public TerminalNode ELSE() { return getToken(VerdictSQLParser.ELSE, 0); }
		public List search_condition() {
			return getRuleContexts(Search_conditionContext.class);
		}
		public Search_conditionContext search_condition(int i) {
			return getRuleContext(Search_conditionContext.class,i);
		}
		public Case_exprContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_case_expr; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCase_expr(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Case_exprContext case_expr() throws RecognitionException {
		Case_exprContext _localctx = new Case_exprContext(_ctx, getState());
		enterRule(_localctx, 182, RULE_case_expr);
		int _la;
		try {
			setState(1376);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,162,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1343);
				match(CASE);
				setState(1344);
				expression(0);
				setState(1350); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(1345);
					match(WHEN);
					setState(1346);
					expression(0);
					setState(1347);
					match(THEN);
					setState(1348);
					expression(0);
					}
					}
					setState(1352); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==WHEN );
				setState(1356);
				_la = _input.LA(1);
				if (_la==ELSE) {
					{
					setState(1354);
					match(ELSE);
					setState(1355);
					expression(0);
					}
				}

				setState(1358);
				match(END);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1360);
				match(CASE);
				setState(1366); 
				_errHandler.sync(this);
				_la = _input.LA(1);
				do {
					{
					{
					setState(1361);
					match(WHEN);
					setState(1362);
					search_condition();
					setState(1363);
					match(THEN);
					setState(1364);
					expression(0);
					}
					}
					setState(1368); 
					_errHandler.sync(this);
					_la = _input.LA(1);
				} while ( _la==WHEN );
				setState(1372);
				_la = _input.LA(1);
				if (_la==ELSE) {
					{
					setState(1370);
					match(ELSE);
					setState(1371);
					expression(0);
					}
				}

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

	public static class Ranking_windowed_functionContext extends ParserRuleContext {
		public TerminalNode RANK() { return getToken(VerdictSQLParser.RANK, 0); }
		public Over_clauseContext over_clause() {
			return getRuleContext(Over_clauseContext.class,0);
		}
		public TerminalNode DENSE_RANK() { return getToken(VerdictSQLParser.DENSE_RANK, 0); }
		public TerminalNode NTILE() { return getToken(VerdictSQLParser.NTILE, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode ROW_NUMBER() { return getToken(VerdictSQLParser.ROW_NUMBER, 0); }
		public Ranking_windowed_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_ranking_windowed_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitRanking_windowed_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Ranking_windowed_functionContext ranking_windowed_function() throws RecognitionException {
		Ranking_windowed_functionContext _localctx = new Ranking_windowed_functionContext(_ctx, getState());
		enterRule(_localctx, 184, RULE_ranking_windowed_function);
		try {
			setState(1396);
			switch (_input.LA(1)) {
			case RANK:
				enterOuterAlt(_localctx, 1);
				{
				setState(1378);
				match(RANK);
				setState(1379);
				match(LR_BRACKET);
				setState(1380);
				match(RR_BRACKET);
				setState(1381);
				over_clause();
				}
				break;
			case DENSE_RANK:
				enterOuterAlt(_localctx, 2);
				{
				setState(1382);
				match(DENSE_RANK);
				setState(1383);
				match(LR_BRACKET);
				setState(1384);
				match(RR_BRACKET);
				setState(1385);
				over_clause();
				}
				break;
			case NTILE:
				enterOuterAlt(_localctx, 3);
				{
				setState(1386);
				match(NTILE);
				setState(1387);
				match(LR_BRACKET);
				setState(1388);
				expression(0);
				setState(1389);
				match(RR_BRACKET);
				setState(1390);
				over_clause();
				}
				break;
			case ROW_NUMBER:
				enterOuterAlt(_localctx, 4);
				{
				setState(1392);
				match(ROW_NUMBER);
				setState(1393);
				match(LR_BRACKET);
				setState(1394);
				match(RR_BRACKET);
				setState(1395);
				over_clause();
				}
				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 Expression_functionContext extends ParserRuleContext {
		public Unary_functionContext unary_function() {
			return getRuleContext(Unary_functionContext.class,0);
		}
		public Noparam_functionContext noparam_function() {
			return getRuleContext(Noparam_functionContext.class,0);
		}
		public Binary_functionContext binary_function() {
			return getRuleContext(Binary_functionContext.class,0);
		}
		public Ternary_functionContext ternary_function() {
			return getRuleContext(Ternary_functionContext.class,0);
		}
		public Nary_functionContext nary_function() {
			return getRuleContext(Nary_functionContext.class,0);
		}
		public Unary_predicate_functionContext unary_predicate_function() {
			return getRuleContext(Unary_predicate_functionContext.class,0);
		}
		public Binary_predicate_functionContext binary_predicate_function() {
			return getRuleContext(Binary_predicate_functionContext.class,0);
		}
		public Timestamp_functionContext timestamp_function() {
			return getRuleContext(Timestamp_functionContext.class,0);
		}
		public Dateadd_functionContext dateadd_function() {
			return getRuleContext(Dateadd_functionContext.class,0);
		}
		public Extract_time_functionContext extract_time_function() {
			return getRuleContext(Extract_time_functionContext.class,0);
		}
		public Overlay_string_functionContext overlay_string_function() {
			return getRuleContext(Overlay_string_functionContext.class,0);
		}
		public Substring_string_functionContext substring_string_function() {
			return getRuleContext(Substring_string_functionContext.class,0);
		}
		public Expression_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_expression_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitExpression_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Expression_functionContext expression_function() throws RecognitionException {
		Expression_functionContext _localctx = new Expression_functionContext(_ctx, getState());
		enterRule(_localctx, 186, RULE_expression_function);
		try {
			setState(1410);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,164,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1398);
				unary_function();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1399);
				noparam_function();
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1400);
				binary_function();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1401);
				ternary_function();
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1402);
				nary_function();
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1403);
				unary_predicate_function();
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(1404);
				binary_predicate_function();
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(1405);
				timestamp_function();
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(1406);
				dateadd_function();
				}
				break;
			case 10:
				enterOuterAlt(_localctx, 10);
				{
				setState(1407);
				extract_time_function();
				}
				break;
			case 11:
				enterOuterAlt(_localctx, 11);
				{
				setState(1408);
				overlay_string_function();
				}
				break;
			case 12:
				enterOuterAlt(_localctx, 12);
				{
				setState(1409);
				substring_string_function();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Extract_time_functionContext extends ParserRuleContext {
		public Token function_name;
		public Extract_unitContext extract_unit() {
			return getRuleContext(Extract_unitContext.class,0);
		}
		public TerminalNode FROM() { return getToken(VerdictSQLParser.FROM, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode EXTRACT() { return getToken(VerdictSQLParser.EXTRACT, 0); }
		public Extract_time_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_extract_time_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitExtract_time_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Extract_time_functionContext extract_time_function() throws RecognitionException {
		Extract_time_functionContext _localctx = new Extract_time_functionContext(_ctx, getState());
		enterRule(_localctx, 188, RULE_extract_time_function);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1412);
			((Extract_time_functionContext)_localctx).function_name = match(EXTRACT);
			setState(1413);
			match(LR_BRACKET);
			setState(1414);
			extract_unit();
			setState(1415);
			match(FROM);
			setState(1416);
			expression(0);
			setState(1417);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Extract_unitContext extends ParserRuleContext {
		public TerminalNode YEAR() { return getToken(VerdictSQLParser.YEAR, 0); }
		public TerminalNode MONTH() { return getToken(VerdictSQLParser.MONTH, 0); }
		public TerminalNode DAY() { return getToken(VerdictSQLParser.DAY, 0); }
		public TerminalNode HOUR() { return getToken(VerdictSQLParser.HOUR, 0); }
		public TerminalNode MINUTE() { return getToken(VerdictSQLParser.MINUTE, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Extract_unitContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_extract_unit; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitExtract_unit(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Extract_unitContext extract_unit() throws RecognitionException {
		Extract_unitContext _localctx = new Extract_unitContext(_ctx, getState());
		enterRule(_localctx, 190, RULE_extract_unit);
		try {
			setState(1425);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,165,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1419);
				match(YEAR);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1420);
				match(MONTH);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1421);
				match(DAY);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1422);
				match(HOUR);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1423);
				match(MINUTE);
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1424);
				expression(0);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Time_unitContext extends ParserRuleContext {
		public TerminalNode YEAR() { return getToken(VerdictSQLParser.YEAR, 0); }
		public TerminalNode MONTH() { return getToken(VerdictSQLParser.MONTH, 0); }
		public TerminalNode DAY() { return getToken(VerdictSQLParser.DAY, 0); }
		public TerminalNode HOUR() { return getToken(VerdictSQLParser.HOUR, 0); }
		public TerminalNode MINUTE() { return getToken(VerdictSQLParser.MINUTE, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public Time_unitContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_time_unit; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTime_unit(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Time_unitContext time_unit() throws RecognitionException {
		Time_unitContext _localctx = new Time_unitContext(_ctx, getState());
		enterRule(_localctx, 192, RULE_time_unit);
		try {
			setState(1433);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,166,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1427);
				match(YEAR);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1428);
				match(MONTH);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1429);
				match(DAY);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1430);
				match(HOUR);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1431);
				match(MINUTE);
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1432);
				expression(0);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Overlay_string_functionContext extends ParserRuleContext {
		public Token function_name;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode PLACING() { return getToken(VerdictSQLParser.PLACING, 0); }
		public TerminalNode FROM() { return getToken(VerdictSQLParser.FROM, 0); }
		public TerminalNode OVERLAY() { return getToken(VerdictSQLParser.OVERLAY, 0); }
		public TerminalNode FOR() { return getToken(VerdictSQLParser.FOR, 0); }
		public Overlay_string_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_overlay_string_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOverlay_string_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Overlay_string_functionContext overlay_string_function() throws RecognitionException {
		Overlay_string_functionContext _localctx = new Overlay_string_functionContext(_ctx, getState());
		enterRule(_localctx, 194, RULE_overlay_string_function);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1435);
			((Overlay_string_functionContext)_localctx).function_name = match(OVERLAY);
			setState(1436);
			match(LR_BRACKET);
			setState(1437);
			expression(0);
			setState(1438);
			match(PLACING);
			setState(1439);
			expression(0);
			setState(1440);
			match(FROM);
			setState(1441);
			expression(0);
			setState(1444);
			_la = _input.LA(1);
			if (_la==FOR) {
				{
				setState(1442);
				match(FOR);
				setState(1443);
				expression(0);
				}
			}

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

	public static class Substring_string_functionContext extends ParserRuleContext {
		public Token function_name;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode FROM() { return getToken(VerdictSQLParser.FROM, 0); }
		public TerminalNode SUBSTRING() { return getToken(VerdictSQLParser.SUBSTRING, 0); }
		public TerminalNode FOR() { return getToken(VerdictSQLParser.FOR, 0); }
		public Substring_string_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_substring_string_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSubstring_string_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Substring_string_functionContext substring_string_function() throws RecognitionException {
		Substring_string_functionContext _localctx = new Substring_string_functionContext(_ctx, getState());
		enterRule(_localctx, 196, RULE_substring_string_function);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1448);
			((Substring_string_functionContext)_localctx).function_name = match(SUBSTRING);
			setState(1449);
			match(LR_BRACKET);
			setState(1450);
			expression(0);
			setState(1451);
			match(FROM);
			setState(1452);
			expression(0);
			setState(1455);
			_la = _input.LA(1);
			if (_la==FOR) {
				{
				setState(1453);
				match(FOR);
				setState(1454);
				expression(0);
				}
			}

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

	public static class Nary_functionContext extends ParserRuleContext {
		public Token function_name;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode CONCAT() { return getToken(VerdictSQLParser.CONCAT, 0); }
		public TerminalNode CONCAT_WS() { return getToken(VerdictSQLParser.CONCAT_WS, 0); }
		public TerminalNode COALESCE() { return getToken(VerdictSQLParser.COALESCE, 0); }
		public TerminalNode FIELD() { return getToken(VerdictSQLParser.FIELD, 0); }
		public TerminalNode GREATEST() { return getToken(VerdictSQLParser.GREATEST, 0); }
		public TerminalNode LEAST() { return getToken(VerdictSQLParser.LEAST, 0); }
		public TerminalNode WIDTH_BUCKET() { return getToken(VerdictSQLParser.WIDTH_BUCKET, 0); }
		public TerminalNode BTRIM() { return getToken(VerdictSQLParser.BTRIM, 0); }
		public TerminalNode FORMAT() { return getToken(VerdictSQLParser.FORMAT, 0); }
		public TerminalNode REGEXP_MATCHES() { return getToken(VerdictSQLParser.REGEXP_MATCHES, 0); }
		public TerminalNode REGEXP_REPLACE() { return getToken(VerdictSQLParser.REGEXP_REPLACE, 0); }
		public TerminalNode REGEXP_SPLIT_TO_ARRAY() { return getToken(VerdictSQLParser.REGEXP_SPLIT_TO_ARRAY, 0); }
		public TerminalNode REGEXP_SPLIT_TO_TABLE() { return getToken(VerdictSQLParser.REGEXP_SPLIT_TO_TABLE, 0); }
		public TerminalNode LTRIM() { return getToken(VerdictSQLParser.LTRIM, 0); }
		public TerminalNode RTRIM() { return getToken(VerdictSQLParser.RTRIM, 0); }
		public TerminalNode TO_ASCII() { return getToken(VerdictSQLParser.TO_ASCII, 0); }
		public TerminalNode MAKE_TIMESTAMP() { return getToken(VerdictSQLParser.MAKE_TIMESTAMP, 0); }
		public TerminalNode MAKE_TIMESTAMPTZ() { return getToken(VerdictSQLParser.MAKE_TIMESTAMPTZ, 0); }
		public TerminalNode TS_HEADLINE() { return getToken(VerdictSQLParser.TS_HEADLINE, 0); }
		public TerminalNode TS_RANK() { return getToken(VerdictSQLParser.TS_RANK, 0); }
		public TerminalNode TS_RANK_CD() { return getToken(VerdictSQLParser.TS_RANK_CD, 0); }
		public List UNNEST() { return getTokens(VerdictSQLParser.UNNEST); }
		public TerminalNode UNNEST(int i) {
			return getToken(VerdictSQLParser.UNNEST, i);
		}
		public TerminalNode XMLCONCAT() { return getToken(VerdictSQLParser.XMLCONCAT, 0); }
		public TerminalNode XMLELEMENT() { return getToken(VerdictSQLParser.XMLELEMENT, 0); }
		public TerminalNode XMLFOREST() { return getToken(VerdictSQLParser.XMLFOREST, 0); }
		public TerminalNode JSON_BUILD_ARRAY() { return getToken(VerdictSQLParser.JSON_BUILD_ARRAY, 0); }
		public TerminalNode JSON_BUILD_OBJECT() { return getToken(VerdictSQLParser.JSON_BUILD_OBJECT, 0); }
		public TerminalNode JSONB_SET() { return getToken(VerdictSQLParser.JSONB_SET, 0); }
		public TerminalNode JSONB_INSERT() { return getToken(VerdictSQLParser.JSONB_INSERT, 0); }
		public TerminalNode GREAT_CIRCLE_DISTANCE() { return getToken(VerdictSQLParser.GREAT_CIRCLE_DISTANCE, 0); }
		public TerminalNode BING_TILES_AROUND() { return getToken(VerdictSQLParser.BING_TILES_AROUND, 0); }
		public Nary_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_nary_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitNary_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Nary_functionContext nary_function() throws RecognitionException {
		Nary_functionContext _localctx = new Nary_functionContext(_ctx, getState());
		enterRule(_localctx, 198, RULE_nary_function);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1459);
			((Nary_functionContext)_localctx).function_name = _input.LT(1);
			_la = _input.LA(1);
			if ( !(_la==COALESCE || ((((_la - 263)) & ~0x3f) == 0 && ((1L << (_la - 263)) & ((1L << (BTRIM - 263)) | (1L << (CONCAT - 263)) | (1L << (CONCAT_WS - 263)))) != 0) || ((((_la - 343)) & ~0x3f) == 0 && ((1L << (_la - 343)) & ((1L << (FIELD - 343)) | (1L << (FORMAT - 343)) | (1L << (GREATEST - 343)) | (1L << (JSON_BUILD_ARRAY - 343)) | (1L << (JSON_BUILD_OBJECT - 343)))) != 0) || ((((_la - 411)) & ~0x3f) == 0 && ((1L << (_la - 411)) & ((1L << (JSONB_SET - 411)) | (1L << (JSONB_INSERT - 411)) | (1L << (LEAST - 411)) | (1L << (LTRIM - 411)) | (1L << (MAKE_TIMESTAMP - 411)) | (1L << (MAKE_TIMESTAMPTZ - 411)))) != 0) || ((((_la - 547)) & ~0x3f) == 0 && ((1L << (_la - 547)) & ((1L << (REGEXP_MATCHES - 547)) | (1L << (REGEXP_REPLACE - 547)) | (1L << (REGEXP_SPLIT_TO_ARRAY - 547)) | (1L << (REGEXP_SPLIT_TO_TABLE - 547)) | (1L << (RTRIM - 547)))) != 0) || ((((_la - 628)) & ~0x3f) == 0 && ((1L << (_la - 628)) & ((1L << (TO_ASCII - 628)) | (1L << (TS_HEADLINE - 628)) | (1L << (TS_RANK - 628)) | (1L << (TS_RANK_CD - 628)) | (1L << (UNNEST - 628)) | (1L << (WIDTH_BUCKET - 628)) | (1L << (XMLCONCAT - 628)) | (1L << (XMLELEMENT - 628)) | (1L << (XMLFOREST - 628)))) != 0) || _la==GREAT_CIRCLE_DISTANCE || _la==BING_TILES_AROUND) ) {
				((Nary_functionContext)_localctx).function_name = (Token)_errHandler.recoverInline(this);
			} else {
				consume();
			}
			setState(1460);
			match(LR_BRACKET);
			setState(1461);
			expression(0);
			setState(1466);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1462);
				match(COMMA);
				setState(1463);
				expression(0);
				}
				}
				setState(1468);
				_errHandler.sync(this);
				_la = _input.LA(1);
			}
			setState(1469);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Ternary_functionContext extends ParserRuleContext {
		public Token function_name;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public List IF() { return getTokens(VerdictSQLParser.IF); }
		public TerminalNode IF(int i) {
			return getToken(VerdictSQLParser.IF, i);
		}
		public TerminalNode CONV() { return getToken(VerdictSQLParser.CONV, 0); }
		public TerminalNode SUBSTR() { return getToken(VerdictSQLParser.SUBSTR, 0); }
		public TerminalNode HASH() { return getToken(VerdictSQLParser.HASH, 0); }
		public TerminalNode RPAD() { return getToken(VerdictSQLParser.RPAD, 0); }
		public TerminalNode SUBSTRING() { return getToken(VerdictSQLParser.SUBSTRING, 0); }
		public TerminalNode LPAD() { return getToken(VerdictSQLParser.LPAD, 0); }
		public TerminalNode MID() { return getToken(VerdictSQLParser.MID, 0); }
		public TerminalNode REPLACE() { return getToken(VerdictSQLParser.REPLACE, 0); }
		public TerminalNode SUBSTRING_INDEX() { return getToken(VerdictSQLParser.SUBSTRING_INDEX, 0); }
		public TerminalNode MAKETIME() { return getToken(VerdictSQLParser.MAKETIME, 0); }
		public TerminalNode CONVERT() { return getToken(VerdictSQLParser.CONVERT, 0); }
		public TerminalNode SPLIT_PART() { return getToken(VerdictSQLParser.SPLIT_PART, 0); }
		public TerminalNode TRANSLATE() { return getToken(VerdictSQLParser.TRANSLATE, 0); }
		public TerminalNode MAKE_DATE() { return getToken(VerdictSQLParser.MAKE_DATE, 0); }
		public TerminalNode MAKE_TIME() { return getToken(VerdictSQLParser.MAKE_TIME, 0); }
		public TerminalNode SETWEIGHT() { return getToken(VerdictSQLParser.SETWEIGHT, 0); }
		public TerminalNode TS_REWRITE() { return getToken(VerdictSQLParser.TS_REWRITE, 0); }
		public TerminalNode TSQUERY_PHRASE() { return getToken(VerdictSQLParser.TSQUERY_PHRASE, 0); }
		public TerminalNode XMLROOT() { return getToken(VerdictSQLParser.XMLROOT, 0); }
		public TerminalNode XPATH() { return getToken(VerdictSQLParser.XPATH, 0); }
		public TerminalNode XPATH_EXISTS() { return getToken(VerdictSQLParser.XPATH_EXISTS, 0); }
		public TerminalNode ARRAY_REPLACE() { return getToken(VerdictSQLParser.ARRAY_REPLACE, 0); }
		public TerminalNode ARRAY_TO_STRING() { return getToken(VerdictSQLParser.ARRAY_TO_STRING, 0); }
		public TerminalNode STRING_TO_ARRAY() { return getToken(VerdictSQLParser.STRING_TO_ARRAY, 0); }
		public TerminalNode LOCATE() { return getToken(VerdictSQLParser.LOCATE, 0); }
		public TerminalNode BING_TILE() { return getToken(VerdictSQLParser.BING_TILE, 0); }
		public TerminalNode BING_TILE_AT() { return getToken(VerdictSQLParser.BING_TILE_AT, 0); }
		public TerminalNode BING_TILES_AROUND() { return getToken(VerdictSQLParser.BING_TILES_AROUND, 0); }
		public Ternary_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_ternary_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTernary_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Ternary_functionContext ternary_function() throws RecognitionException {
		Ternary_functionContext _localctx = new Ternary_functionContext(_ctx, getState());
		enterRule(_localctx, 200, RULE_ternary_function);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1471);
			((Ternary_functionContext)_localctx).function_name = _input.LT(1);
			_la = _input.LA(1);
			if ( !(((((_la - 45)) & ~0x3f) == 0 && ((1L << (_la - 45)) & ((1L << (CONV - 45)) | (1L << (CONVERT - 45)) | (1L << (HASH - 45)) | (1L << (IF - 45)))) != 0) || _la==MID || _la==RPAD || ((((_la - 183)) & ~0x3f) == 0 && ((1L << (_la - 183)) & ((1L << (SUBSTR - 183)) | (1L << (SUBSTRING - 183)) | (1L << (ARRAY_REPLACE - 183)) | (1L << (ARRAY_TO_STRING - 183)))) != 0) || ((((_la - 433)) & ~0x3f) == 0 && ((1L << (_la - 433)) & ((1L << (LOCATE - 433)) | (1L << (LPAD - 433)) | (1L << (MAKETIME - 433)) | (1L << (MAKE_DATE - 433)) | (1L << (MAKE_TIME - 433)))) != 0) || ((((_la - 554)) & ~0x3f) == 0 && ((1L << (_la - 554)) & ((1L << (REPLACE - 554)) | (1L << (SETWEIGHT - 554)) | (1L << (SPLIT_PART - 554)) | (1L << (STRING_TO_ARRAY - 554)) | (1L << (SUBSTRING_INDEX - 554)))) != 0) || ((((_la - 640)) & ~0x3f) == 0 && ((1L << (_la - 640)) & ((1L << (TRANSLATE - 640)) | (1L << (TS_REWRITE - 640)) | (1L << (TSQUERY_PHRASE - 640)) | (1L << (XMLROOT - 640)) | (1L << (XPATH - 640)) | (1L << (XPATH_EXISTS - 640)))) != 0) || ((((_la - 762)) & ~0x3f) == 0 && ((1L << (_la - 762)) & ((1L << (BING_TILE - 762)) | (1L << (BING_TILE_AT - 762)) | (1L << (BING_TILES_AROUND - 762)))) != 0)) ) {
				((Ternary_functionContext)_localctx).function_name = (Token)_errHandler.recoverInline(this);
			} else {
				consume();
			}
			setState(1472);
			match(LR_BRACKET);
			setState(1473);
			expression(0);
			setState(1474);
			match(COMMA);
			setState(1475);
			expression(0);
			setState(1476);
			match(COMMA);
			setState(1477);
			expression(0);
			setState(1478);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Binary_functionContext extends ParserRuleContext {
		public Token function_name;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode ROUND() { return getToken(VerdictSQLParser.ROUND, 0); }
		public TerminalNode MOD() { return getToken(VerdictSQLParser.MOD, 0); }
		public TerminalNode PMOD() { return getToken(VerdictSQLParser.PMOD, 0); }
		public TerminalNode LEFT() { return getToken(VerdictSQLParser.LEFT, 0); }
		public TerminalNode RIGHT() { return getToken(VerdictSQLParser.RIGHT, 0); }
		public TerminalNode STRTOL() { return getToken(VerdictSQLParser.STRTOL, 0); }
		public TerminalNode POW() { return getToken(VerdictSQLParser.POW, 0); }
		public TerminalNode POWER() { return getToken(VerdictSQLParser.POWER, 0); }
		public TerminalNode PERCENTILE() { return getToken(VerdictSQLParser.PERCENTILE, 0); }
		public TerminalNode SPLIT() { return getToken(VerdictSQLParser.SPLIT, 0); }
		public TerminalNode INSTR() { return getToken(VerdictSQLParser.INSTR, 0); }
		public TerminalNode ENCODE() { return getToken(VerdictSQLParser.ENCODE, 0); }
		public TerminalNode DECODE() { return getToken(VerdictSQLParser.DECODE, 0); }
		public TerminalNode SHIFTLEFT() { return getToken(VerdictSQLParser.SHIFTLEFT, 0); }
		public TerminalNode SHIFTRIGHT() { return getToken(VerdictSQLParser.SHIFTRIGHT, 0); }
		public TerminalNode SHIFTRIGHTUNSIGNED() { return getToken(VerdictSQLParser.SHIFTRIGHTUNSIGNED, 0); }
		public TerminalNode NVL() { return getToken(VerdictSQLParser.NVL, 0); }
		public TerminalNode FIND_IN_SET() { return getToken(VerdictSQLParser.FIND_IN_SET, 0); }
		public TerminalNode FORMAT_NUMBER() { return getToken(VerdictSQLParser.FORMAT_NUMBER, 0); }
		public TerminalNode FORMAT() { return getToken(VerdictSQLParser.FORMAT, 0); }
		public TerminalNode GET_JSON_OBJECT() { return getToken(VerdictSQLParser.GET_JSON_OBJECT, 0); }
		public TerminalNode IN_FILE() { return getToken(VerdictSQLParser.IN_FILE, 0); }
		public TerminalNode LOCATE() { return getToken(VerdictSQLParser.LOCATE, 0); }
		public TerminalNode REPEAT() { return getToken(VerdictSQLParser.REPEAT, 0); }
		public TerminalNode AES_ENCRYPT() { return getToken(VerdictSQLParser.AES_ENCRYPT, 0); }
		public TerminalNode AES_DECRYPT() { return getToken(VerdictSQLParser.AES_DECRYPT, 0); }
		public TerminalNode POSITION() { return getToken(VerdictSQLParser.POSITION, 0); }
		public TerminalNode STRCMP() { return getToken(VerdictSQLParser.STRCMP, 0); }
		public TerminalNode TRUNCATE() { return getToken(VerdictSQLParser.TRUNCATE, 0); }
		public TerminalNode ADDDATE() { return getToken(VerdictSQLParser.ADDDATE, 0); }
		public TerminalNode ADDTIME() { return getToken(VerdictSQLParser.ADDTIME, 0); }
		public TerminalNode DATEDIFF() { return getToken(VerdictSQLParser.DATEDIFF, 0); }
		public TerminalNode DATE_ADD() { return getToken(VerdictSQLParser.DATE_ADD, 0); }
		public TerminalNode DATE_FORMAT() { return getToken(VerdictSQLParser.DATE_FORMAT, 0); }
		public TerminalNode DATE_SUB() { return getToken(VerdictSQLParser.DATE_SUB, 0); }
		public TerminalNode MAKEDATE() { return getToken(VerdictSQLParser.MAKEDATE, 0); }
		public TerminalNode PERIOD_ADD() { return getToken(VerdictSQLParser.PERIOD_ADD, 0); }
		public TerminalNode PERIOD_DIFF() { return getToken(VerdictSQLParser.PERIOD_DIFF, 0); }
		public TerminalNode SUBDATE() { return getToken(VerdictSQLParser.SUBDATE, 0); }
		public TerminalNode TIME_FORMAT() { return getToken(VerdictSQLParser.TIME_FORMAT, 0); }
		public TerminalNode TIMEDIFF() { return getToken(VerdictSQLParser.TIMEDIFF, 0); }
		public TerminalNode CONVERT() { return getToken(VerdictSQLParser.CONVERT, 0); }
		public TerminalNode IFNULL() { return getToken(VerdictSQLParser.IFNULL, 0); }
		public TerminalNode NULLIF() { return getToken(VerdictSQLParser.NULLIF, 0); }
		public TerminalNode DIV() { return getToken(VerdictSQLParser.DIV, 0); }
		public TerminalNode LOG() { return getToken(VerdictSQLParser.LOG, 0); }
		public TerminalNode TRUNC() { return getToken(VerdictSQLParser.TRUNC, 0); }
		public TerminalNode CONVERT_FROM() { return getToken(VerdictSQLParser.CONVERT_FROM, 0); }
		public TerminalNode CONVERT_TO() { return getToken(VerdictSQLParser.CONVERT_TO, 0); }
		public TerminalNode LENGTH() { return getToken(VerdictSQLParser.LENGTH, 0); }
		public TerminalNode STRPOS() { return getToken(VerdictSQLParser.STRPOS, 0); }
		public TerminalNode GET_BIT() { return getToken(VerdictSQLParser.GET_BIT, 0); }
		public TerminalNode GET_BYTE() { return getToken(VerdictSQLParser.GET_BYTE, 0); }
		public TerminalNode SET_BIT() { return getToken(VerdictSQLParser.SET_BIT, 0); }
		public TerminalNode SET_BYTE() { return getToken(VerdictSQLParser.SET_BYTE, 0); }
		public TerminalNode TO_CHAR() { return getToken(VerdictSQLParser.TO_CHAR, 0); }
		public TerminalNode TO_NUMBER() { return getToken(VerdictSQLParser.TO_NUMBER, 0); }
		public TerminalNode TO_TIMESTAMP() { return getToken(VerdictSQLParser.TO_TIMESTAMP, 0); }
		public TerminalNode AGE() { return getToken(VerdictSQLParser.AGE, 0); }
		public TerminalNode DATE_PART() { return getToken(VerdictSQLParser.DATE_PART, 0); }
		public TerminalNode DATE_TRUNC() { return getToken(VerdictSQLParser.DATE_TRUNC, 0); }
		public TerminalNode ENUM_RANGE() { return getToken(VerdictSQLParser.ENUM_RANGE, 0); }
		public TerminalNode BOUND_BOX() { return getToken(VerdictSQLParser.BOUND_BOX, 0); }
		public TerminalNode CIRCLE() { return getToken(VerdictSQLParser.CIRCLE, 0); }
		public TerminalNode POINT() { return getToken(VerdictSQLParser.POINT, 0); }
		public TerminalNode SET_MASKLEN() { return getToken(VerdictSQLParser.SET_MASKLEN, 0); }
		public TerminalNode INET_SAME_FAMILY() { return getToken(VerdictSQLParser.INET_SAME_FAMILY, 0); }
		public TerminalNode INET_MERGE() { return getToken(VerdictSQLParser.INET_MERGE, 0); }
		public TerminalNode PLAINTO_TSQUERY() { return getToken(VerdictSQLParser.PLAINTO_TSQUERY, 0); }
		public TerminalNode PHRASETO_TSQUERY() { return getToken(VerdictSQLParser.PHRASETO_TSQUERY, 0); }
		public TerminalNode SETWEIGHT() { return getToken(VerdictSQLParser.SETWEIGHT, 0); }
		public TerminalNode TO_TSQUERY() { return getToken(VerdictSQLParser.TO_TSQUERY, 0); }
		public TerminalNode TO_TSVECTOR() { return getToken(VerdictSQLParser.TO_TSVECTOR, 0); }
		public TerminalNode TS_DELETE() { return getToken(VerdictSQLParser.TS_DELETE, 0); }
		public TerminalNode TS_FILTER() { return getToken(VerdictSQLParser.TS_FILTER, 0); }
		public TerminalNode TS_REWRITE() { return getToken(VerdictSQLParser.TS_REWRITE, 0); }
		public TerminalNode TSQUERY_PHRASE() { return getToken(VerdictSQLParser.TSQUERY_PHRASE, 0); }
		public TerminalNode XMLPI() { return getToken(VerdictSQLParser.XMLPI, 0); }
		public TerminalNode XMLROOT() { return getToken(VerdictSQLParser.XMLROOT, 0); }
		public TerminalNode XPATH() { return getToken(VerdictSQLParser.XPATH, 0); }
		public TerminalNode XPATH_EXISTS() { return getToken(VerdictSQLParser.XPATH_EXISTS, 0); }
		public TerminalNode ARRAY_TO_JSON() { return getToken(VerdictSQLParser.ARRAY_TO_JSON, 0); }
		public TerminalNode ROW_TO_JSON() { return getToken(VerdictSQLParser.ROW_TO_JSON, 0); }
		public TerminalNode JSON_OBJECT() { return getToken(VerdictSQLParser.JSON_OBJECT, 0); }
		public TerminalNode JSON_EXTRACT_PATH() { return getToken(VerdictSQLParser.JSON_EXTRACT_PATH, 0); }
		public TerminalNode JSON_EXTRACT_PATH_TEXT() { return getToken(VerdictSQLParser.JSON_EXTRACT_PATH_TEXT, 0); }
		public TerminalNode JSON_POPULATE_RECORDSET() { return getToken(VerdictSQLParser.JSON_POPULATE_RECORDSET, 0); }
		public TerminalNode JSON_POPULATE_RECORD() { return getToken(VerdictSQLParser.JSON_POPULATE_RECORD, 0); }
		public TerminalNode SETVAL() { return getToken(VerdictSQLParser.SETVAL, 0); }
		public TerminalNode ARRAY_APPEND() { return getToken(VerdictSQLParser.ARRAY_APPEND, 0); }
		public TerminalNode ARRAY_CAT() { return getToken(VerdictSQLParser.ARRAY_CAT, 0); }
		public TerminalNode ARRAY_LENGTH() { return getToken(VerdictSQLParser.ARRAY_LENGTH, 0); }
		public TerminalNode ARRAY_LOWER() { return getToken(VerdictSQLParser.ARRAY_LOWER, 0); }
		public TerminalNode ARRAY_POSITION() { return getToken(VerdictSQLParser.ARRAY_POSITION, 0); }
		public TerminalNode ARRAY_POSITIONS() { return getToken(VerdictSQLParser.ARRAY_POSITIONS, 0); }
		public TerminalNode ARRAY_PREPEND() { return getToken(VerdictSQLParser.ARRAY_PREPEND, 0); }
		public TerminalNode ARRAY_REMOVE() { return getToken(VerdictSQLParser.ARRAY_REMOVE, 0); }
		public TerminalNode ARRAY_TO_STRING() { return getToken(VerdictSQLParser.ARRAY_TO_STRING, 0); }
		public TerminalNode ARRAY_UPPER() { return getToken(VerdictSQLParser.ARRAY_UPPER, 0); }
		public TerminalNode STRING_TO_ARRAY() { return getToken(VerdictSQLParser.STRING_TO_ARRAY, 0); }
		public TerminalNode RANGE_MERGE() { return getToken(VerdictSQLParser.RANGE_MERGE, 0); }
		public TerminalNode CORR() { return getToken(VerdictSQLParser.CORR, 0); }
		public TerminalNode COVAR_POP() { return getToken(VerdictSQLParser.COVAR_POP, 0); }
		public TerminalNode COVAR_SAMP() { return getToken(VerdictSQLParser.COVAR_SAMP, 0); }
		public TerminalNode REGR_AVGX() { return getToken(VerdictSQLParser.REGR_AVGX, 0); }
		public TerminalNode REGR_AVGY() { return getToken(VerdictSQLParser.REGR_AVGY, 0); }
		public TerminalNode REGR_COUNT() { return getToken(VerdictSQLParser.REGR_COUNT, 0); }
		public TerminalNode REGR_INTERCEPT() { return getToken(VerdictSQLParser.REGR_INTERCEPT, 0); }
		public TerminalNode REGR_R2() { return getToken(VerdictSQLParser.REGR_R2, 0); }
		public TerminalNode REGR_SLOPE() { return getToken(VerdictSQLParser.REGR_SLOPE, 0); }
		public TerminalNode REGR_SXX() { return getToken(VerdictSQLParser.REGR_SXX, 0); }
		public TerminalNode REGR_SXY() { return getToken(VerdictSQLParser.REGR_SXY, 0); }
		public TerminalNode REGR_SYY() { return getToken(VerdictSQLParser.REGR_SYY, 0); }
		public TerminalNode SUBSTR() { return getToken(VerdictSQLParser.SUBSTR, 0); }
		public TerminalNode STDDEV_POP() { return getToken(VerdictSQLParser.STDDEV_POP, 0); }
		public TerminalNode VARIANCE() { return getToken(VerdictSQLParser.VARIANCE, 0); }
		public TerminalNode VAR_POP() { return getToken(VerdictSQLParser.VAR_POP, 0); }
		public TerminalNode VAR_SAMP() { return getToken(VerdictSQLParser.VAR_SAMP, 0); }
		public TerminalNode INT4LARGER() { return getToken(VerdictSQLParser.INT4LARGER, 0); }
		public TerminalNode SUBSTRING() { return getToken(VerdictSQLParser.SUBSTRING, 0); }
		public TerminalNode ST_POINT() { return getToken(VerdictSQLParser.ST_POINT, 0); }
		public TerminalNode ST_CONTAINS() { return getToken(VerdictSQLParser.ST_CONTAINS, 0); }
		public TerminalNode ST_CROSSES() { return getToken(VerdictSQLParser.ST_CROSSES, 0); }
		public TerminalNode ST_DISJOINT() { return getToken(VerdictSQLParser.ST_DISJOINT, 0); }
		public TerminalNode ST_EQUALS() { return getToken(VerdictSQLParser.ST_EQUALS, 0); }
		public TerminalNode ST_INTERSECTS() { return getToken(VerdictSQLParser.ST_INTERSECTS, 0); }
		public TerminalNode ST_OVERLAPS() { return getToken(VerdictSQLParser.ST_OVERLAPS, 0); }
		public TerminalNode ST_RELATE() { return getToken(VerdictSQLParser.ST_RELATE, 0); }
		public TerminalNode ST_TOUCHES() { return getToken(VerdictSQLParser.ST_TOUCHES, 0); }
		public TerminalNode ST_WITHIN() { return getToken(VerdictSQLParser.ST_WITHIN, 0); }
		public TerminalNode ST_BUFFER() { return getToken(VerdictSQLParser.ST_BUFFER, 0); }
		public TerminalNode ST_DIFFERENCE() { return getToken(VerdictSQLParser.ST_DIFFERENCE, 0); }
		public TerminalNode ST_INTERSECTION() { return getToken(VerdictSQLParser.ST_INTERSECTION, 0); }
		public TerminalNode ST_SYMDIFFERENCE() { return getToken(VerdictSQLParser.ST_SYMDIFFERENCE, 0); }
		public TerminalNode ST_UNION() { return getToken(VerdictSQLParser.ST_UNION, 0); }
		public TerminalNode ST_DISTANCE() { return getToken(VerdictSQLParser.ST_DISTANCE, 0); }
		public TerminalNode ST_GEOMETRYN() { return getToken(VerdictSQLParser.ST_GEOMETRYN, 0); }
		public TerminalNode ST_INTERIORRINGN() { return getToken(VerdictSQLParser.ST_INTERIORRINGN, 0); }
		public TerminalNode ST_POINTN() { return getToken(VerdictSQLParser.ST_POINTN, 0); }
		public TerminalNode SIMPLIFY_GEOMETRY() { return getToken(VerdictSQLParser.SIMPLIFY_GEOMETRY, 0); }
		public TerminalNode LINE_LOCATE_POINT() { return getToken(VerdictSQLParser.LINE_LOCATE_POINT, 0); }
		public TerminalNode GEOMETRY_TO_BING_TILES() { return getToken(VerdictSQLParser.GEOMETRY_TO_BING_TILES, 0); }
		public Binary_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_binary_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitBinary_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Binary_functionContext binary_function() throws RecognitionException {
		Binary_functionContext _localctx = new Binary_functionContext(_ctx, getState());
		enterRule(_localctx, 202, RULE_binary_function);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1480);
			((Binary_functionContext)_localctx).function_name = _input.LT(1);
			_la = _input.LA(1);
			if ( !(_la==CONVERT || ((((_la - 106)) & ~0x3f) == 0 && ((1L << (_la - 106)) & ((1L << (INT4LARGER - 106)) | (1L << (LEFT - 106)) | (1L << (NULLIF - 106)) | (1L << (RIGHT - 106)))) != 0) || ((((_la - 183)) & ~0x3f) == 0 && ((1L << (_la - 183)) & ((1L << (SUBSTR - 183)) | (1L << (SUBSTRING - 183)) | (1L << (TRUNCATE - 183)) | (1L << (ADDDATE - 183)) | (1L << (ADDTIME - 183)) | (1L << (AES_DECRYPT - 183)) | (1L << (AES_ENCRYPT - 183)) | (1L << (AGE - 183)) | (1L << (ARRAY_APPEND - 183)) | (1L << (ARRAY_CAT - 183)) | (1L << (ARRAY_LENGTH - 183)) | (1L << (ARRAY_LOWER - 183)) | (1L << (ARRAY_POSITION - 183)) | (1L << (ARRAY_POSITIONS - 183)) | (1L << (ARRAY_PREPEND - 183)) | (1L << (ARRAY_REMOVE - 183)) | (1L << (ARRAY_TO_JSON - 183)) | (1L << (ARRAY_TO_STRING - 183)) | (1L << (ARRAY_UPPER - 183)))) != 0) || ((((_la - 261)) & ~0x3f) == 0 && ((1L << (_la - 261)) & ((1L << (BOUND_BOX - 261)) | (1L << (CIRCLE - 261)) | (1L << (CONVERT_FROM - 261)) | (1L << (CONVERT_TO - 261)) | (1L << (CORR - 261)) | (1L << (COVAR_POP - 261)) | (1L << (COVAR_SAMP - 261)) | (1L << (DATE_ADD - 261)) | (1L << (DATE_FORMAT - 261)) | (1L << (DATE_PART - 261)) | (1L << (DATE_SUB - 261)) | (1L << (DATE_TRUNC - 261)) | (1L << (DATEDIFF - 261)) | (1L << (DECODE - 261)))) != 0) || ((((_la - 325)) & ~0x3f) == 0 && ((1L << (_la - 325)) & ((1L << (DIV - 325)) | (1L << (ENCODE - 325)) | (1L << (ENUM_RANGE - 325)) | (1L << (FIND_IN_SET - 325)) | (1L << (FORMAT - 325)) | (1L << (FORMAT_NUMBER - 325)) | (1L << (GET_BIT - 325)) | (1L << (GET_BYTE - 325)) | (1L << (GET_JSON_OBJECT - 325)) | (1L << (IFNULL - 325)) | (1L << (INSTR - 325)) | (1L << (IN_FILE - 325)) | (1L << (INET_SAME_FAMILY - 325)) | (1L << (INET_MERGE - 325)))) != 0) || ((((_la - 398)) & ~0x3f) == 0 && ((1L << (_la - 398)) & ((1L << (JSON_EXTRACT_PATH - 398)) | (1L << (JSON_EXTRACT_PATH_TEXT - 398)) | (1L << (JSON_OBJECT - 398)) | (1L << (JSON_POPULATE_RECORD - 398)) | (1L << (JSON_POPULATE_RECORDSET - 398)) | (1L << (LENGTH - 398)) | (1L << (LOCATE - 398)) | (1L << (LOG - 398)) | (1L << (MAKEDATE - 398)))) != 0) || ((((_la - 463)) & ~0x3f) == 0 && ((1L << (_la - 463)) & ((1L << (MOD - 463)) | (1L << (NVL - 463)) | (1L << (PERCENTILE - 463)) | (1L << (PERIOD_ADD - 463)) | (1L << (PERIOD_DIFF - 463)) | (1L << (PLAINTO_TSQUERY - 463)) | (1L << (PHRASETO_TSQUERY - 463)) | (1L << (PMOD - 463)) | (1L << (POINT - 463)) | (1L << (POSITION - 463)) | (1L << (POW - 463)) | (1L << (POWER - 463)))) != 0) || ((((_la - 530)) & ~0x3f) == 0 && ((1L << (_la - 530)) & ((1L << (RANGE_MERGE - 530)) | (1L << (REGR_AVGX - 530)) | (1L << (REGR_AVGY - 530)) | (1L << (REGR_COUNT - 530)) | (1L << (REGR_INTERCEPT - 530)) | (1L << (REGR_R2 - 530)) | (1L << (REGR_SLOPE - 530)) | (1L << (REGR_SXX - 530)) | (1L << (REGR_SXY - 530)) | (1L << (REGR_SYY - 530)) | (1L << (REPEAT - 530)) | (1L << (ROUND - 530)) | (1L << (ROW_TO_JSON - 530)) | (1L << (SETWEIGHT - 530)) | (1L << (SETVAL - 530)) | (1L << (SET_BIT - 530)) | (1L << (SET_BYTE - 530)) | (1L << (SET_MASKLEN - 530)) | (1L << (SHIFTLEFT - 530)) | (1L << (SHIFTRIGHT - 530)) | (1L << (SHIFTRIGHTUNSIGNED - 530)) | (1L << (SPLIT - 530)))) != 0) || ((((_la - 604)) & ~0x3f) == 0 && ((1L << (_la - 604)) & ((1L << (STRCMP - 604)) | (1L << (STRING_TO_ARRAY - 604)) | (1L << (STRPOS - 604)) | (1L << (SUBDATE - 604)) | (1L << (STDDEV_POP - 604)) | (1L << (STRTOL - 604)) | (1L << (TIMEDIFF - 604)) | (1L << (TIME_FORMAT - 604)) | (1L << (TO_CHAR - 604)) | (1L << (TO_NUMBER - 604)) | (1L << (TO_TIMESTAMP - 604)) | (1L << (TO_TSQUERY - 604)) | (1L << (TO_TSVECTOR - 604)) | (1L << (TRUNC - 604)) | (1L << (TS_DELETE - 604)) | (1L << (TS_FILTER - 604)) | (1L << (TS_REWRITE - 604)) | (1L << (TSQUERY_PHRASE - 604)))) != 0) || ((((_la - 672)) & ~0x3f) == 0 && ((1L << (_la - 672)) & ((1L << (VARIANCE - 672)) | (1L << (VAR_POP - 672)) | (1L << (VAR_SAMP - 672)) | (1L << (XMLPI - 672)) | (1L << (XMLROOT - 672)) | (1L << (XPATH - 672)) | (1L << (XPATH_EXISTS - 672)) | (1L << (ST_POINT - 672)) | (1L << (ST_CONTAINS - 672)) | (1L << (ST_CROSSES - 672)) | (1L << (ST_DISJOINT - 672)) | (1L << (ST_EQUALS - 672)) | (1L << (ST_INTERSECTS - 672)) | (1L << (ST_OVERLAPS - 672)) | (1L << (ST_RELATE - 672)) | (1L << (ST_TOUCHES - 672)) | (1L << (ST_WITHIN - 672)) | (1L << (ST_BUFFER - 672)) | (1L << (ST_DIFFERENCE - 672)) | (1L << (ST_INTERSECTION - 672)) | (1L << (ST_SYMDIFFERENCE - 672)) | (1L << (ST_UNION - 672)) | (1L << (ST_DISTANCE - 672)) | (1L << (ST_GEOMETRYN - 672)) | (1L << (ST_INTERIORRINGN - 672)))) != 0) || ((((_la - 742)) & ~0x3f) == 0 && ((1L << (_la - 742)) & ((1L << (ST_POINTN - 742)) | (1L << (SIMPLIFY_GEOMETRY - 742)) | (1L << (LINE_LOCATE_POINT - 742)) | (1L << (GEOMETRY_TO_BING_TILES - 742)))) != 0)) ) {
				((Binary_functionContext)_localctx).function_name = (Token)_errHandler.recoverInline(this);
			} else {
				consume();
			}
			setState(1481);
			match(LR_BRACKET);
			setState(1482);
			expression(0);
			setState(1483);
			match(COMMA);
			setState(1484);
			expression(0);
			setState(1485);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Unary_functionContext extends ParserRuleContext {
		public Token function_name;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode ISNULL() { return getToken(VerdictSQLParser.ISNULL, 0); }
		public TerminalNode ROUND() { return getToken(VerdictSQLParser.ROUND, 0); }
		public TerminalNode CHAR_LENGTH() { return getToken(VerdictSQLParser.CHAR_LENGTH, 0); }
		public TerminalNode FLOOR() { return getToken(VerdictSQLParser.FLOOR, 0); }
		public TerminalNode CEIL() { return getToken(VerdictSQLParser.CEIL, 0); }
		public TerminalNode CEILING() { return getToken(VerdictSQLParser.CEILING, 0); }
		public TerminalNode EXP() { return getToken(VerdictSQLParser.EXP, 0); }
		public TerminalNode LN() { return getToken(VerdictSQLParser.LN, 0); }
		public TerminalNode LOG() { return getToken(VerdictSQLParser.LOG, 0); }
		public TerminalNode LOG10() { return getToken(VerdictSQLParser.LOG10, 0); }
		public TerminalNode LOG2() { return getToken(VerdictSQLParser.LOG2, 0); }
		public TerminalNode SIN() { return getToken(VerdictSQLParser.SIN, 0); }
		public TerminalNode COS() { return getToken(VerdictSQLParser.COS, 0); }
		public TerminalNode COT() { return getToken(VerdictSQLParser.COT, 0); }
		public TerminalNode TAN() { return getToken(VerdictSQLParser.TAN, 0); }
		public TerminalNode SIGN() { return getToken(VerdictSQLParser.SIGN, 0); }
		public TerminalNode RAND() { return getToken(VerdictSQLParser.RAND, 0); }
		public TerminalNode FNV_HASH() { return getToken(VerdictSQLParser.FNV_HASH, 0); }
		public TerminalNode RAWTOHEX() { return getToken(VerdictSQLParser.RAWTOHEX, 0); }
		public TerminalNode ABS() { return getToken(VerdictSQLParser.ABS, 0); }
		public TerminalNode STDDEV() { return getToken(VerdictSQLParser.STDDEV, 0); }
		public TerminalNode SQRT() { return getToken(VerdictSQLParser.SQRT, 0); }
		public TerminalNode LCASE() { return getToken(VerdictSQLParser.LCASE, 0); }
		public TerminalNode MD5() { return getToken(VerdictSQLParser.MD5, 0); }
		public TerminalNode CRC32() { return getToken(VerdictSQLParser.CRC32, 0); }
		public TerminalNode YEAR() { return getToken(VerdictSQLParser.YEAR, 0); }
		public TerminalNode QUARTER() { return getToken(VerdictSQLParser.QUARTER, 0); }
		public TerminalNode MONTH() { return getToken(VerdictSQLParser.MONTH, 0); }
		public TerminalNode DAY() { return getToken(VerdictSQLParser.DAY, 0); }
		public TerminalNode HOUR() { return getToken(VerdictSQLParser.HOUR, 0); }
		public TerminalNode MINUTE() { return getToken(VerdictSQLParser.MINUTE, 0); }
		public TerminalNode SECOND() { return getToken(VerdictSQLParser.SECOND, 0); }
		public TerminalNode WEEKOFYEAR() { return getToken(VerdictSQLParser.WEEKOFYEAR, 0); }
		public TerminalNode LOWER() { return getToken(VerdictSQLParser.LOWER, 0); }
		public TerminalNode UPPER() { return getToken(VerdictSQLParser.UPPER, 0); }
		public TerminalNode UCASE() { return getToken(VerdictSQLParser.UCASE, 0); }
		public TerminalNode ASCII() { return getToken(VerdictSQLParser.ASCII, 0); }
		public TerminalNode CHARACTER_LENGTH() { return getToken(VerdictSQLParser.CHARACTER_LENGTH, 0); }
		public TerminalNode FACTORIAL() { return getToken(VerdictSQLParser.FACTORIAL, 0); }
		public TerminalNode CBRT() { return getToken(VerdictSQLParser.CBRT, 0); }
		public TerminalNode LENGTH() { return getToken(VerdictSQLParser.LENGTH, 0); }
		public TerminalNode TRIM() { return getToken(VerdictSQLParser.TRIM, 0); }
		public TerminalNode ASIN() { return getToken(VerdictSQLParser.ASIN, 0); }
		public TerminalNode ACOS() { return getToken(VerdictSQLParser.ACOS, 0); }
		public TerminalNode ATAN() { return getToken(VerdictSQLParser.ATAN, 0); }
		public TerminalNode ATAN2() { return getToken(VerdictSQLParser.ATAN2, 0); }
		public TerminalNode DEGREES() { return getToken(VerdictSQLParser.DEGREES, 0); }
		public TerminalNode RADIANS() { return getToken(VerdictSQLParser.RADIANS, 0); }
		public TerminalNode POSITIVE() { return getToken(VerdictSQLParser.POSITIVE, 0); }
		public TerminalNode NEGATIVE() { return getToken(VerdictSQLParser.NEGATIVE, 0); }
		public TerminalNode BROUND() { return getToken(VerdictSQLParser.BROUND, 0); }
		public TerminalNode BIN() { return getToken(VerdictSQLParser.BIN, 0); }
		public TerminalNode HEX() { return getToken(VerdictSQLParser.HEX, 0); }
		public TerminalNode UNHEX() { return getToken(VerdictSQLParser.UNHEX, 0); }
		public TerminalNode FROM_UNIXTIME() { return getToken(VerdictSQLParser.FROM_UNIXTIME, 0); }
		public TerminalNode TO_DATE() { return getToken(VerdictSQLParser.TO_DATE, 0); }
		public List CHR() { return getTokens(VerdictSQLParser.CHR); }
		public TerminalNode CHR(int i) {
			return getToken(VerdictSQLParser.CHR, i);
		}
		public TerminalNode LTRIM() { return getToken(VerdictSQLParser.LTRIM, 0); }
		public TerminalNode RTRIM() { return getToken(VerdictSQLParser.RTRIM, 0); }
		public TerminalNode REVERSE() { return getToken(VerdictSQLParser.REVERSE, 0); }
		public TerminalNode SPACE_FUNCTION() { return getToken(VerdictSQLParser.SPACE_FUNCTION, 0); }
		public TerminalNode SHA1() { return getToken(VerdictSQLParser.SHA1, 0); }
		public TerminalNode SHA2() { return getToken(VerdictSQLParser.SHA2, 0); }
		public TerminalNode SPACE() { return getToken(VerdictSQLParser.SPACE, 0); }
		public TerminalNode DATE() { return getToken(VerdictSQLParser.DATE, 0); }
		public TerminalNode DAYNAME() { return getToken(VerdictSQLParser.DAYNAME, 0); }
		public TerminalNode DAYOFMONTH() { return getToken(VerdictSQLParser.DAYOFMONTH, 0); }
		public TerminalNode DAYOFWEEK() { return getToken(VerdictSQLParser.DAYOFWEEK, 0); }
		public TerminalNode DAYOFYEAR() { return getToken(VerdictSQLParser.DAYOFYEAR, 0); }
		public TerminalNode FROM_DAYS() { return getToken(VerdictSQLParser.FROM_DAYS, 0); }
		public TerminalNode LAST_DAY() { return getToken(VerdictSQLParser.LAST_DAY, 0); }
		public TerminalNode MICROSECOND() { return getToken(VerdictSQLParser.MICROSECOND, 0); }
		public TerminalNode MONTHNAME() { return getToken(VerdictSQLParser.MONTHNAME, 0); }
		public TerminalNode SEC_TO_TIME() { return getToken(VerdictSQLParser.SEC_TO_TIME, 0); }
		public TerminalNode STR_TO_DATE() { return getToken(VerdictSQLParser.STR_TO_DATE, 0); }
		public TerminalNode TIME() { return getToken(VerdictSQLParser.TIME, 0); }
		public TerminalNode TIME_TO_SEC() { return getToken(VerdictSQLParser.TIME_TO_SEC, 0); }
		public TerminalNode TIMESTAMP() { return getToken(VerdictSQLParser.TIMESTAMP, 0); }
		public TerminalNode TO_DAYS() { return getToken(VerdictSQLParser.TO_DAYS, 0); }
		public TerminalNode WEEK() { return getToken(VerdictSQLParser.WEEK, 0); }
		public TerminalNode WEEKDAY() { return getToken(VerdictSQLParser.WEEKDAY, 0); }
		public TerminalNode YEARWEEK() { return getToken(VerdictSQLParser.YEARWEEK, 0); }
		public TerminalNode BINARY() { return getToken(VerdictSQLParser.BINARY, 0); }
		public TerminalNode SCALE() { return getToken(VerdictSQLParser.SCALE, 0); }
		public TerminalNode TRUNC() { return getToken(VerdictSQLParser.TRUNC, 0); }
		public TerminalNode SETSEED() { return getToken(VerdictSQLParser.SETSEED, 0); }
		public TerminalNode BIT_LENGTH() { return getToken(VerdictSQLParser.BIT_LENGTH, 0); }
		public TerminalNode OCTET_LENGTH() { return getToken(VerdictSQLParser.OCTET_LENGTH, 0); }
		public TerminalNode INITCAP() { return getToken(VerdictSQLParser.INITCAP, 0); }
		public TerminalNode QUOTE_IDENT() { return getToken(VerdictSQLParser.QUOTE_IDENT, 0); }
		public TerminalNode QUOTE_LITERAL() { return getToken(VerdictSQLParser.QUOTE_LITERAL, 0); }
		public TerminalNode QUOTE_NULLABLE() { return getToken(VerdictSQLParser.QUOTE_NULLABLE, 0); }
		public TerminalNode TO_HEX() { return getToken(VerdictSQLParser.TO_HEX, 0); }
		public TerminalNode AGE() { return getToken(VerdictSQLParser.AGE, 0); }
		public TerminalNode ISFINITE() { return getToken(VerdictSQLParser.ISFINITE, 0); }
		public TerminalNode JUSTIFY_DAYS() { return getToken(VerdictSQLParser.JUSTIFY_DAYS, 0); }
		public TerminalNode JUSTIFY_HOURS() { return getToken(VerdictSQLParser.JUSTIFY_HOURS, 0); }
		public TerminalNode JUSTIFY_INTERVALS() { return getToken(VerdictSQLParser.JUSTIFY_INTERVALS, 0); }
		public TerminalNode TO_TIMESTAMP() { return getToken(VerdictSQLParser.TO_TIMESTAMP, 0); }
		public TerminalNode ENUM_RANGE() { return getToken(VerdictSQLParser.ENUM_RANGE, 0); }
		public TerminalNode ENUM_FIRST() { return getToken(VerdictSQLParser.ENUM_FIRST, 0); }
		public TerminalNode ENUM_LAST() { return getToken(VerdictSQLParser.ENUM_LAST, 0); }
		public TerminalNode AREA() { return getToken(VerdictSQLParser.AREA, 0); }
		public TerminalNode CENTER() { return getToken(VerdictSQLParser.CENTER, 0); }
		public TerminalNode DIAMETER() { return getToken(VerdictSQLParser.DIAMETER, 0); }
		public TerminalNode HEIGHT() { return getToken(VerdictSQLParser.HEIGHT, 0); }
		public TerminalNode ISCLOSED() { return getToken(VerdictSQLParser.ISCLOSED, 0); }
		public TerminalNode ISOPEN() { return getToken(VerdictSQLParser.ISOPEN, 0); }
		public TerminalNode NPOINTS() { return getToken(VerdictSQLParser.NPOINTS, 0); }
		public TerminalNode PCLOSE() { return getToken(VerdictSQLParser.PCLOSE, 0); }
		public TerminalNode POPEN() { return getToken(VerdictSQLParser.POPEN, 0); }
		public TerminalNode RADIUS() { return getToken(VerdictSQLParser.RADIUS, 0); }
		public TerminalNode WIDTH() { return getToken(VerdictSQLParser.WIDTH, 0); }
		public TerminalNode BOX() { return getToken(VerdictSQLParser.BOX, 0); }
		public TerminalNode CIRCLE() { return getToken(VerdictSQLParser.CIRCLE, 0); }
		public TerminalNode LINE() { return getToken(VerdictSQLParser.LINE, 0); }
		public TerminalNode LSEG() { return getToken(VerdictSQLParser.LSEG, 0); }
		public TerminalNode PATH() { return getToken(VerdictSQLParser.PATH, 0); }
		public TerminalNode POINT() { return getToken(VerdictSQLParser.POINT, 0); }
		public TerminalNode POLYGON() { return getToken(VerdictSQLParser.POLYGON, 0); }
		public TerminalNode ABBREV() { return getToken(VerdictSQLParser.ABBREV, 0); }
		public TerminalNode BROADCAST() { return getToken(VerdictSQLParser.BROADCAST, 0); }
		public TerminalNode FAMILY() { return getToken(VerdictSQLParser.FAMILY, 0); }
		public TerminalNode HOST() { return getToken(VerdictSQLParser.HOST, 0); }
		public TerminalNode HOSTMASK() { return getToken(VerdictSQLParser.HOSTMASK, 0); }
		public TerminalNode MASKLEN() { return getToken(VerdictSQLParser.MASKLEN, 0); }
		public TerminalNode NETMASK() { return getToken(VerdictSQLParser.NETMASK, 0); }
		public TerminalNode NETWORK() { return getToken(VerdictSQLParser.NETWORK, 0); }
		public TerminalNode TEXT() { return getToken(VerdictSQLParser.TEXT, 0); }
		public TerminalNode MACADDR8_SET7BIT() { return getToken(VerdictSQLParser.MACADDR8_SET7BIT, 0); }
		public TerminalNode ARRAY_TO_TSVECTOR() { return getToken(VerdictSQLParser.ARRAY_TO_TSVECTOR, 0); }
		public TerminalNode NUMNODE() { return getToken(VerdictSQLParser.NUMNODE, 0); }
		public TerminalNode PLAINTO_TSQUERY() { return getToken(VerdictSQLParser.PLAINTO_TSQUERY, 0); }
		public TerminalNode PHRASETO_TSQUERY() { return getToken(VerdictSQLParser.PHRASETO_TSQUERY, 0); }
		public TerminalNode QUERYTREE() { return getToken(VerdictSQLParser.QUERYTREE, 0); }
		public TerminalNode STRIP() { return getToken(VerdictSQLParser.STRIP, 0); }
		public TerminalNode TO_TSQUERY() { return getToken(VerdictSQLParser.TO_TSQUERY, 0); }
		public TerminalNode TO_TSVECTOR() { return getToken(VerdictSQLParser.TO_TSVECTOR, 0); }
		public TerminalNode TSVECTOR_TO_ARRAY() { return getToken(VerdictSQLParser.TSVECTOR_TO_ARRAY, 0); }
		public TerminalNode XMLCOMMENT() { return getToken(VerdictSQLParser.XMLCOMMENT, 0); }
		public TerminalNode XMLPI() { return getToken(VerdictSQLParser.XMLPI, 0); }
		public TerminalNode XMLAGG() { return getToken(VerdictSQLParser.XMLAGG, 0); }
		public TerminalNode XML_ISWELL_FORMAT() { return getToken(VerdictSQLParser.XML_ISWELL_FORMAT, 0); }
		public TerminalNode TO_JSON() { return getToken(VerdictSQLParser.TO_JSON, 0); }
		public TerminalNode TO_JSONB() { return getToken(VerdictSQLParser.TO_JSONB, 0); }
		public TerminalNode ARRAY_TO_JSON() { return getToken(VerdictSQLParser.ARRAY_TO_JSON, 0); }
		public TerminalNode ROW_TO_JSON() { return getToken(VerdictSQLParser.ROW_TO_JSON, 0); }
		public TerminalNode JSON_OBJECT() { return getToken(VerdictSQLParser.JSON_OBJECT, 0); }
		public TerminalNode JSON_ARRAY_LENGTH() { return getToken(VerdictSQLParser.JSON_ARRAY_LENGTH, 0); }
		public TerminalNode JSON_EACH() { return getToken(VerdictSQLParser.JSON_EACH, 0); }
		public TerminalNode JSON_EACH_TEXT() { return getToken(VerdictSQLParser.JSON_EACH_TEXT, 0); }
		public TerminalNode JSON_OBJECT_KEYS() { return getToken(VerdictSQLParser.JSON_OBJECT_KEYS, 0); }
		public TerminalNode JSON_ARRAY_ELEMENTS() { return getToken(VerdictSQLParser.JSON_ARRAY_ELEMENTS, 0); }
		public TerminalNode JSON_ARRAY_ELEMENTS_TEXT() { return getToken(VerdictSQLParser.JSON_ARRAY_ELEMENTS_TEXT, 0); }
		public TerminalNode JSON_TYPEOF() { return getToken(VerdictSQLParser.JSON_TYPEOF, 0); }
		public TerminalNode JSON_TO_RECORD() { return getToken(VerdictSQLParser.JSON_TO_RECORD, 0); }
		public TerminalNode JSON_TO_RECORDSET() { return getToken(VerdictSQLParser.JSON_TO_RECORDSET, 0); }
		public TerminalNode JSON_STRIP_NULLS() { return getToken(VerdictSQLParser.JSON_STRIP_NULLS, 0); }
		public TerminalNode JSONB_PRETTY() { return getToken(VerdictSQLParser.JSONB_PRETTY, 0); }
		public TerminalNode CURRVAL() { return getToken(VerdictSQLParser.CURRVAL, 0); }
		public TerminalNode NEXTVAL() { return getToken(VerdictSQLParser.NEXTVAL, 0); }
		public TerminalNode ARRAY_NDIMS() { return getToken(VerdictSQLParser.ARRAY_NDIMS, 0); }
		public TerminalNode ARRAY_DIMS() { return getToken(VerdictSQLParser.ARRAY_DIMS, 0); }
		public TerminalNode CARDINALITY() { return getToken(VerdictSQLParser.CARDINALITY, 0); }
		public TerminalNode ISEMPTY() { return getToken(VerdictSQLParser.ISEMPTY, 0); }
		public TerminalNode LOWER_INC() { return getToken(VerdictSQLParser.LOWER_INC, 0); }
		public TerminalNode UPPER_INC() { return getToken(VerdictSQLParser.UPPER_INC, 0); }
		public TerminalNode LOWER_INF() { return getToken(VerdictSQLParser.LOWER_INF, 0); }
		public TerminalNode UPPER_INF() { return getToken(VerdictSQLParser.UPPER_INF, 0); }
		public TerminalNode ARRAY_AGG() { return getToken(VerdictSQLParser.ARRAY_AGG, 0); }
		public TerminalNode BIT_AND() { return getToken(VerdictSQLParser.BIT_AND, 0); }
		public TerminalNode BIT_OR() { return getToken(VerdictSQLParser.BIT_OR, 0); }
		public TerminalNode BOOL_AND() { return getToken(VerdictSQLParser.BOOL_AND, 0); }
		public TerminalNode BOOL_OR() { return getToken(VerdictSQLParser.BOOL_OR, 0); }
		public TerminalNode EVERY() { return getToken(VerdictSQLParser.EVERY, 0); }
		public TerminalNode JSON_AGG() { return getToken(VerdictSQLParser.JSON_AGG, 0); }
		public TerminalNode JSONB_AGG() { return getToken(VerdictSQLParser.JSONB_AGG, 0); }
		public TerminalNode JSON_OBJECT_AGG() { return getToken(VerdictSQLParser.JSON_OBJECT_AGG, 0); }
		public TerminalNode JSONB_OBJECT_AGG() { return getToken(VerdictSQLParser.JSONB_OBJECT_AGG, 0); }
		public TerminalNode STRING_AGG() { return getToken(VerdictSQLParser.STRING_AGG, 0); }
		public TerminalNode ST_ASBINARY() { return getToken(VerdictSQLParser.ST_ASBINARY, 0); }
		public TerminalNode ST_ASTEXT() { return getToken(VerdictSQLParser.ST_ASTEXT, 0); }
		public TerminalNode ST_GEOMETRYFROMTEXT() { return getToken(VerdictSQLParser.ST_GEOMETRYFROMTEXT, 0); }
		public TerminalNode ST_GEOMFROMBINARY() { return getToken(VerdictSQLParser.ST_GEOMFROMBINARY, 0); }
		public TerminalNode ST_LINEFROMTEXT() { return getToken(VerdictSQLParser.ST_LINEFROMTEXT, 0); }
		public TerminalNode ST_LINESTRING() { return getToken(VerdictSQLParser.ST_LINESTRING, 0); }
		public TerminalNode ST_MULTIPOINT() { return getToken(VerdictSQLParser.ST_MULTIPOINT, 0); }
		public TerminalNode ST_POLYGON() { return getToken(VerdictSQLParser.ST_POLYGON, 0); }
		public TerminalNode GEOMETRY_UNION() { return getToken(VerdictSQLParser.GEOMETRY_UNION, 0); }
		public TerminalNode ST_BOUNDARY() { return getToken(VerdictSQLParser.ST_BOUNDARY, 0); }
		public TerminalNode ST_ENVELOPE() { return getToken(VerdictSQLParser.ST_ENVELOPE, 0); }
		public TerminalNode ST_ENVELOPEASPTS() { return getToken(VerdictSQLParser.ST_ENVELOPEASPTS, 0); }
		public TerminalNode ST_EXTERIORRING() { return getToken(VerdictSQLParser.ST_EXTERIORRING, 0); }
		public TerminalNode ST_AREA() { return getToken(VerdictSQLParser.ST_AREA, 0); }
		public TerminalNode ST_CENTROID() { return getToken(VerdictSQLParser.ST_CENTROID, 0); }
		public TerminalNode ST_CONVEXHULL() { return getToken(VerdictSQLParser.ST_CONVEXHULL, 0); }
		public TerminalNode ST_DIMENSION() { return getToken(VerdictSQLParser.ST_DIMENSION, 0); }
		public TerminalNode ST_GEOMETRYTYPE() { return getToken(VerdictSQLParser.ST_GEOMETRYTYPE, 0); }
		public TerminalNode ST_ISCLOSED() { return getToken(VerdictSQLParser.ST_ISCLOSED, 0); }
		public TerminalNode ST_ISEMPTY() { return getToken(VerdictSQLParser.ST_ISEMPTY, 0); }
		public TerminalNode ST_ISSIMPLE() { return getToken(VerdictSQLParser.ST_ISSIMPLE, 0); }
		public TerminalNode ST_ISRING() { return getToken(VerdictSQLParser.ST_ISRING, 0); }
		public TerminalNode ST_ISVALID() { return getToken(VerdictSQLParser.ST_ISVALID, 0); }
		public TerminalNode ST_LENGTH() { return getToken(VerdictSQLParser.ST_LENGTH, 0); }
		public TerminalNode ST_XMAX() { return getToken(VerdictSQLParser.ST_XMAX, 0); }
		public TerminalNode ST_YMAX() { return getToken(VerdictSQLParser.ST_YMAX, 0); }
		public TerminalNode ST_XMIN() { return getToken(VerdictSQLParser.ST_XMIN, 0); }
		public TerminalNode ST_YMIN() { return getToken(VerdictSQLParser.ST_YMIN, 0); }
		public TerminalNode ST_STARTPOINT() { return getToken(VerdictSQLParser.ST_STARTPOINT, 0); }
		public TerminalNode ST_ENDPOINT() { return getToken(VerdictSQLParser.ST_ENDPOINT, 0); }
		public TerminalNode ST_X() { return getToken(VerdictSQLParser.ST_X, 0); }
		public TerminalNode ST_Y() { return getToken(VerdictSQLParser.ST_Y, 0); }
		public TerminalNode ST_INTERIORRINGS() { return getToken(VerdictSQLParser.ST_INTERIORRINGS, 0); }
		public TerminalNode ST_NUMGEOMETRIES() { return getToken(VerdictSQLParser.ST_NUMGEOMETRIES, 0); }
		public TerminalNode ST_GEOMETRIES() { return getToken(VerdictSQLParser.ST_GEOMETRIES, 0); }
		public TerminalNode ST_NUMPOINTS() { return getToken(VerdictSQLParser.ST_NUMPOINTS, 0); }
		public TerminalNode ST_NUMINTERIORRING() { return getToken(VerdictSQLParser.ST_NUMINTERIORRING, 0); }
		public TerminalNode GEOMETRY_INVALID_REASON() { return getToken(VerdictSQLParser.GEOMETRY_INVALID_REASON, 0); }
		public TerminalNode CONVEX_HULL_AGG() { return getToken(VerdictSQLParser.CONVEX_HULL_AGG, 0); }
		public TerminalNode GEOMETRY_UNION_AGG() { return getToken(VerdictSQLParser.GEOMETRY_UNION_AGG, 0); }
		public TerminalNode BING_TILE() { return getToken(VerdictSQLParser.BING_TILE, 0); }
		public TerminalNode BING_TILE_COORDINATES() { return getToken(VerdictSQLParser.BING_TILE_COORDINATES, 0); }
		public TerminalNode BING_TILE_POLYGON() { return getToken(VerdictSQLParser.BING_TILE_POLYGON, 0); }
		public TerminalNode BING_TILE_QUADKEY() { return getToken(VerdictSQLParser.BING_TILE_QUADKEY, 0); }
		public TerminalNode BING_TILE_ZOOM_LEVEL() { return getToken(VerdictSQLParser.BING_TILE_ZOOM_LEVEL, 0); }
		public TerminalNode APPROX_DISTINCT() { return getToken(VerdictSQLParser.APPROX_DISTINCT, 0); }
		public Cast_as_expressionContext cast_as_expression() {
			return getRuleContext(Cast_as_expressionContext.class,0);
		}
		public TerminalNode CAST() { return getToken(VerdictSQLParser.CAST, 0); }
		public Unary_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_unary_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitUnary_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Unary_functionContext unary_function() throws RecognitionException {
		Unary_functionContext _localctx = new Unary_functionContext(_ctx, getState());
		enterRule(_localctx, 204, RULE_unary_function);
		int _la;
		try {
			setState(1497);
			switch (_input.LA(1)) {
			case APPROX_DISTINCT:
			case ASCII:
			case RAWTOHEX:
			case ABBREV:
			case ABS:
			case ACOS:
			case AGE:
			case AREA:
			case ARRAY_AGG:
			case ARRAY_DIMS:
			case ARRAY_NDIMS:
			case ARRAY_TO_JSON:
			case ARRAY_TO_TSVECTOR:
			case ASIN:
			case ATAN:
			case ATAN2:
			case BIN:
			case BIT_LENGTH:
			case BOOL_AND:
			case BOOL_OR:
			case BOX:
			case BROADCAST:
			case BROUND:
			case CARDINALITY:
			case CBRT:
			case CEIL:
			case CEILING:
			case CENTER:
			case CHAR_LENGTH:
			case CHARACTER_LENGTH:
			case CHR:
			case CIRCLE:
			case COS:
			case COT:
			case CRC32:
			case CURRVAL:
			case DATE:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DIAMETER:
			case ENUM_FIRST:
			case ENUM_LAST:
			case ENUM_RANGE:
			case EXP:
			case EVERY:
			case FACTORIAL:
			case FAMILY:
			case FLOOR:
			case FNV_HASH:
			case FROM_DAYS:
			case FROM_UNIXTIME:
			case HEIGHT:
			case HEX:
			case HOST:
			case HOSTMASK:
			case HOUR:
			case INITCAP:
			case ISCLOSED:
			case ISEMPTY:
			case ISFINITE:
			case ISNULL:
			case ISOPEN:
			case JSON_AGG:
			case JSON_ARRAY_LENGTH:
			case JSON_ARRAY_ELEMENTS:
			case JSON_ARRAY_ELEMENTS_TEXT:
			case JSON_EACH:
			case JSON_EACH_TEXT:
			case JSON_OBJECT:
			case JSON_OBJECT_KEYS:
			case JSON_OBJECT_AGG:
			case JSON_STRIP_NULLS:
			case JSON_TO_RECORD:
			case JSON_TO_RECORDSET:
			case JSON_TYPEOF:
			case JSONB_AGG:
			case JSONB_OBJECT_AGG:
			case JSONB_PRETTY:
			case JUSTIFY_DAYS:
			case JUSTIFY_HOURS:
			case JUSTIFY_INTERVALS:
			case LAST_DAY:
			case LCASE:
			case LENGTH:
			case LINE:
			case LN:
			case LOG:
			case LOG2:
			case LOG10:
			case LOWER:
			case LOWER_INC:
			case LOWER_INF:
			case LTRIM:
			case LSEG:
			case MACADDR8_SET7BIT:
			case MASKLEN:
			case MD5:
			case MICROSECOND:
			case MINUTE:
			case MONTH:
			case MONTHNAME:
			case NEGATIVE:
			case NETMASK:
			case NETWORK:
			case NEXTVAL:
			case NPOINTS:
			case NUMNODE:
			case OCTET_LENGTH:
			case PATH:
			case PCLOSE:
			case PLAINTO_TSQUERY:
			case PHRASETO_TSQUERY:
			case POINT:
			case POLYGON:
			case POPEN:
			case POSITIVE:
			case QUARTER:
			case QUERYTREE:
			case QUOTE_IDENT:
			case QUOTE_LITERAL:
			case QUOTE_NULLABLE:
			case RADIANS:
			case RADIUS:
			case RAND:
			case REVERSE:
			case ROUND:
			case ROW_TO_JSON:
			case RTRIM:
			case SCALE:
			case SECOND:
			case SEC_TO_TIME:
			case SETSEED:
			case SHA1:
			case SHA2:
			case SIGN:
			case SIN:
			case SPACE_FUNCTION:
			case STDDEV:
			case STRING_AGG:
			case STR_TO_DATE:
			case SQRT:
			case STRIP:
			case TAN:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case TIME_TO_SEC:
			case TO_DATE:
			case TO_DAYS:
			case TO_HEX:
			case TO_JSON:
			case TO_JSONB:
			case TO_TIMESTAMP:
			case TO_TSQUERY:
			case TO_TSVECTOR:
			case TRIM:
			case TRUNC:
			case TSVECTOR_TO_ARRAY:
			case UCASE:
			case UNHEX:
			case UPPER:
			case UPPER_INC:
			case UPPER_INF:
			case WEEKOFYEAR:
			case WEEK:
			case WEEKDAY:
			case WIDTH:
			case XMLAGG:
			case XMLCOMMENT:
			case XMLPI:
			case XML_ISWELL_FORMAT:
			case YEAR:
			case YEARWEEK:
			case ST_ASBINARY:
			case ST_ASTEXT:
			case ST_GEOMETRYFROMTEXT:
			case ST_GEOMFROMBINARY:
			case ST_LINEFROMTEXT:
			case ST_LINESTRING:
			case ST_MULTIPOINT:
			case ST_POLYGON:
			case GEOMETRY_UNION:
			case ST_BOUNDARY:
			case ST_ENVELOPE:
			case ST_ENVELOPEASPTS:
			case ST_EXTERIORRING:
			case ST_AREA:
			case ST_CENTROID:
			case ST_CONVEXHULL:
			case ST_DIMENSION:
			case ST_GEOMETRYTYPE:
			case ST_ISCLOSED:
			case ST_ISEMPTY:
			case ST_ISSIMPLE:
			case ST_ISRING:
			case ST_ISVALID:
			case ST_LENGTH:
			case ST_XMAX:
			case ST_YMAX:
			case ST_XMIN:
			case ST_YMIN:
			case ST_STARTPOINT:
			case ST_ENDPOINT:
			case ST_X:
			case ST_Y:
			case ST_INTERIORRINGS:
			case ST_NUMGEOMETRIES:
			case ST_GEOMETRIES:
			case ST_NUMPOINTS:
			case ST_NUMINTERIORRING:
			case GEOMETRY_INVALID_REASON:
			case CONVEX_HULL_AGG:
			case GEOMETRY_UNION_AGG:
			case BING_TILE:
			case BING_TILE_COORDINATES:
			case BING_TILE_POLYGON:
			case BING_TILE_QUADKEY:
			case BING_TILE_ZOOM_LEVEL:
			case SPACE:
			case BINARY:
			case BIT_OR:
			case BIT_AND:
				enterOuterAlt(_localctx, 1);
				{
				setState(1487);
				((Unary_functionContext)_localctx).function_name = _input.LT(1);
				_la = _input.LA(1);
				if ( !(_la==APPROX_DISTINCT || _la==ASCII || _la==RAWTOHEX || ((((_la - 220)) & ~0x3f) == 0 && ((1L << (_la - 220)) & ((1L << (ABBREV - 220)) | (1L << (ABS - 220)) | (1L << (ACOS - 220)) | (1L << (AGE - 220)) | (1L << (AREA - 220)) | (1L << (ARRAY_AGG - 220)) | (1L << (ARRAY_DIMS - 220)) | (1L << (ARRAY_NDIMS - 220)) | (1L << (ARRAY_TO_JSON - 220)) | (1L << (ARRAY_TO_TSVECTOR - 220)) | (1L << (ASIN - 220)) | (1L << (ATAN - 220)) | (1L << (ATAN2 - 220)) | (1L << (BIN - 220)) | (1L << (BIT_LENGTH - 220)) | (1L << (BOOL_AND - 220)) | (1L << (BOOL_OR - 220)) | (1L << (BOX - 220)) | (1L << (BROADCAST - 220)) | (1L << (BROUND - 220)) | (1L << (CARDINALITY - 220)) | (1L << (CBRT - 220)) | (1L << (CEIL - 220)) | (1L << (CEILING - 220)) | (1L << (CENTER - 220)) | (1L << (CHAR_LENGTH - 220)) | (1L << (CHARACTER_LENGTH - 220)) | (1L << (CHR - 220)) | (1L << (CIRCLE - 220)))) != 0) || ((((_la - 288)) & ~0x3f) == 0 && ((1L << (_la - 288)) & ((1L << (COS - 288)) | (1L << (COT - 288)) | (1L << (CRC32 - 288)) | (1L << (CURRVAL - 288)) | (1L << (DATE - 288)) | (1L << (DAY - 288)) | (1L << (DAYNAME - 288)) | (1L << (DAYOFMONTH - 288)) | (1L << (DAYOFWEEK - 288)) | (1L << (DAYOFYEAR - 288)) | (1L << (DEGREES - 288)) | (1L << (DIAMETER - 288)) | (1L << (ENUM_FIRST - 288)) | (1L << (ENUM_LAST - 288)) | (1L << (ENUM_RANGE - 288)) | (1L << (EXP - 288)) | (1L << (EVERY - 288)) | (1L << (FACTORIAL - 288)) | (1L << (FAMILY - 288)) | (1L << (FLOOR - 288)))) != 0) || ((((_la - 352)) & ~0x3f) == 0 && ((1L << (_la - 352)) & ((1L << (FNV_HASH - 352)) | (1L << (FROM_DAYS - 352)) | (1L << (FROM_UNIXTIME - 352)) | (1L << (HEIGHT - 352)) | (1L << (HEX - 352)) | (1L << (HOST - 352)) | (1L << (HOSTMASK - 352)) | (1L << (HOUR - 352)) | (1L << (INITCAP - 352)) | (1L << (ISCLOSED - 352)) | (1L << (ISEMPTY - 352)) | (1L << (ISFINITE - 352)) | (1L << (ISNULL - 352)) | (1L << (ISOPEN - 352)) | (1L << (JSON_AGG - 352)) | (1L << (JSON_ARRAY_LENGTH - 352)) | (1L << (JSON_ARRAY_ELEMENTS - 352)) | (1L << (JSON_ARRAY_ELEMENTS_TEXT - 352)) | (1L << (JSON_EACH - 352)) | (1L << (JSON_EACH_TEXT - 352)) | (1L << (JSON_OBJECT - 352)) | (1L << (JSON_OBJECT_KEYS - 352)) | (1L << (JSON_OBJECT_AGG - 352)) | (1L << (JSON_STRIP_NULLS - 352)) | (1L << (JSON_TO_RECORD - 352)) | (1L << (JSON_TO_RECORDSET - 352)) | (1L << (JSON_TYPEOF - 352)) | (1L << (JSONB_AGG - 352)) | (1L << (JSONB_OBJECT_AGG - 352)) | (1L << (JSONB_PRETTY - 352)) | (1L << (JUSTIFY_DAYS - 352)) | (1L << (JUSTIFY_HOURS - 352)))) != 0) || ((((_la - 416)) & ~0x3f) == 0 && ((1L << (_la - 416)) & ((1L << (JUSTIFY_INTERVALS - 416)) | (1L << (LAST_DAY - 416)) | (1L << (LCASE - 416)) | (1L << (LENGTH - 416)) | (1L << (LINE - 416)) | (1L << (LN - 416)) | (1L << (LOG - 416)) | (1L << (LOG2 - 416)) | (1L << (LOG10 - 416)) | (1L << (LOWER - 416)) | (1L << (LOWER_INC - 416)) | (1L << (LOWER_INF - 416)) | (1L << (LTRIM - 416)) | (1L << (LSEG - 416)) | (1L << (MACADDR8_SET7BIT - 416)) | (1L << (MASKLEN - 416)) | (1L << (MD5 - 416)) | (1L << (MICROSECOND - 416)) | (1L << (MINUTE - 416)) | (1L << (MONTH - 416)) | (1L << (MONTHNAME - 416)) | (1L << (NEGATIVE - 416)) | (1L << (NETMASK - 416)) | (1L << (NETWORK - 416)) | (1L << (NEXTVAL - 416)))) != 0) || ((((_la - 481)) & ~0x3f) == 0 && ((1L << (_la - 481)) & ((1L << (NPOINTS - 481)) | (1L << (NUMNODE - 481)) | (1L << (OCTET_LENGTH - 481)) | (1L << (PATH - 481)) | (1L << (PCLOSE - 481)) | (1L << (PLAINTO_TSQUERY - 481)) | (1L << (PHRASETO_TSQUERY - 481)) | (1L << (POINT - 481)) | (1L << (POLYGON - 481)) | (1L << (POPEN - 481)) | (1L << (POSITIVE - 481)) | (1L << (QUARTER - 481)) | (1L << (QUERYTREE - 481)) | (1L << (QUOTE_IDENT - 481)) | (1L << (QUOTE_LITERAL - 481)) | (1L << (QUOTE_NULLABLE - 481)) | (1L << (RADIANS - 481)) | (1L << (RADIUS - 481)) | (1L << (RAND - 481)))) != 0) || ((((_la - 555)) & ~0x3f) == 0 && ((1L << (_la - 555)) & ((1L << (REVERSE - 555)) | (1L << (ROUND - 555)) | (1L << (ROW_TO_JSON - 555)) | (1L << (RTRIM - 555)) | (1L << (SCALE - 555)) | (1L << (SECOND - 555)) | (1L << (SEC_TO_TIME - 555)) | (1L << (SETSEED - 555)) | (1L << (SHA1 - 555)) | (1L << (SHA2 - 555)) | (1L << (SIGN - 555)) | (1L << (SIN - 555)) | (1L << (SPACE_FUNCTION - 555)) | (1L << (STDDEV - 555)) | (1L << (STRING_AGG - 555)) | (1L << (STR_TO_DATE - 555)) | (1L << (SQRT - 555)) | (1L << (STRIP - 555)) | (1L << (TAN - 555)) | (1L << (TEXT - 555)))) != 0) || ((((_la - 621)) & ~0x3f) == 0 && ((1L << (_la - 621)) & ((1L << (TIME - 621)) | (1L << (TIMESTAMP - 621)) | (1L << (TIME_TO_SEC - 621)) | (1L << (TO_DATE - 621)) | (1L << (TO_DAYS - 621)) | (1L << (TO_HEX - 621)) | (1L << (TO_JSON - 621)) | (1L << (TO_JSONB - 621)) | (1L << (TO_TIMESTAMP - 621)) | (1L << (TO_TSQUERY - 621)) | (1L << (TO_TSVECTOR - 621)) | (1L << (TRIM - 621)) | (1L << (TRUNC - 621)) | (1L << (TSVECTOR_TO_ARRAY - 621)) | (1L << (UCASE - 621)) | (1L << (UNHEX - 621)) | (1L << (UPPER - 621)) | (1L << (UPPER_INC - 621)) | (1L << (UPPER_INF - 621)) | (1L << (WEEKOFYEAR - 621)) | (1L << (WEEK - 621)) | (1L << (WEEKDAY - 621)) | (1L << (WIDTH - 621)))) != 0) || ((((_la - 685)) & ~0x3f) == 0 && ((1L << (_la - 685)) & ((1L << (XMLAGG - 685)) | (1L << (XMLCOMMENT - 685)) | (1L << (XMLPI - 685)) | (1L << (XML_ISWELL_FORMAT - 685)) | (1L << (YEAR - 685)) | (1L << (YEARWEEK - 685)) | (1L << (ST_ASBINARY - 685)) | (1L << (ST_ASTEXT - 685)) | (1L << (ST_GEOMETRYFROMTEXT - 685)) | (1L << (ST_GEOMFROMBINARY - 685)) | (1L << (ST_LINEFROMTEXT - 685)) | (1L << (ST_LINESTRING - 685)) | (1L << (ST_MULTIPOINT - 685)) | (1L << (ST_POLYGON - 685)) | (1L << (GEOMETRY_UNION - 685)) | (1L << (ST_BOUNDARY - 685)) | (1L << (ST_ENVELOPE - 685)) | (1L << (ST_ENVELOPEASPTS - 685)) | (1L << (ST_EXTERIORRING - 685)) | (1L << (ST_AREA - 685)) | (1L << (ST_CENTROID - 685)) | (1L << (ST_CONVEXHULL - 685)) | (1L << (ST_DIMENSION - 685)) | (1L << (ST_GEOMETRYTYPE - 685)) | (1L << (ST_ISCLOSED - 685)) | (1L << (ST_ISEMPTY - 685)) | (1L << (ST_ISSIMPLE - 685)) | (1L << (ST_ISRING - 685)) | (1L << (ST_ISVALID - 685)) | (1L << (ST_LENGTH - 685)) | (1L << (ST_XMAX - 685)) | (1L << (ST_YMAX - 685)) | (1L << (ST_XMIN - 685)) | (1L << (ST_YMIN - 685)) | (1L << (ST_STARTPOINT - 685)))) != 0) || ((((_la - 749)) & ~0x3f) == 0 && ((1L << (_la - 749)) & ((1L << (ST_ENDPOINT - 749)) | (1L << (ST_X - 749)) | (1L << (ST_Y - 749)) | (1L << (ST_INTERIORRINGS - 749)) | (1L << (ST_NUMGEOMETRIES - 749)) | (1L << (ST_GEOMETRIES - 749)) | (1L << (ST_NUMPOINTS - 749)) | (1L << (ST_NUMINTERIORRING - 749)) | (1L << (GEOMETRY_INVALID_REASON - 749)) | (1L << (CONVEX_HULL_AGG - 749)) | (1L << (GEOMETRY_UNION_AGG - 749)) | (1L << (BING_TILE - 749)) | (1L << (BING_TILE_COORDINATES - 749)) | (1L << (BING_TILE_POLYGON - 749)) | (1L << (BING_TILE_QUADKEY - 749)) | (1L << (BING_TILE_ZOOM_LEVEL - 749)) | (1L << (SPACE - 749)) | (1L << (BINARY - 749)) | (1L << (BIT_OR - 749)))) != 0) || _la==BIT_AND) ) {
					((Unary_functionContext)_localctx).function_name = (Token)_errHandler.recoverInline(this);
				} else {
					consume();
				}
				setState(1488);
				match(LR_BRACKET);
				setState(1489);
				expression(0);
				setState(1490);
				match(RR_BRACKET);
				}
				break;
			case CAST:
				enterOuterAlt(_localctx, 2);
				{
				setState(1492);
				((Unary_functionContext)_localctx).function_name = match(CAST);
				setState(1493);
				match(LR_BRACKET);
				setState(1494);
				cast_as_expression();
				setState(1495);
				match(RR_BRACKET);
				}
				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 Timestamp_functionContext extends ParserRuleContext {
		public Token function_name;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode TIMESTAMP() { return getToken(VerdictSQLParser.TIMESTAMP, 0); }
		public Timestamp_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_timestamp_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTimestamp_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Timestamp_functionContext timestamp_function() throws RecognitionException {
		Timestamp_functionContext _localctx = new Timestamp_functionContext(_ctx, getState());
		enterRule(_localctx, 206, RULE_timestamp_function);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1499);
			((Timestamp_functionContext)_localctx).function_name = match(TIMESTAMP);
			setState(1500);
			expression(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Dateadd_functionContext extends ParserRuleContext {
		public Token function_name;
		public Time_unitContext time_unit() {
			return getRuleContext(Time_unitContext.class,0);
		}
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode DATEADD() { return getToken(VerdictSQLParser.DATEADD, 0); }
		public Dateadd_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_dateadd_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDateadd_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Dateadd_functionContext dateadd_function() throws RecognitionException {
		Dateadd_functionContext _localctx = new Dateadd_functionContext(_ctx, getState());
		enterRule(_localctx, 208, RULE_dateadd_function);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1502);
			((Dateadd_functionContext)_localctx).function_name = match(DATEADD);
			setState(1503);
			match(LR_BRACKET);
			setState(1504);
			time_unit();
			setState(1505);
			match(COMMA);
			setState(1506);
			expression(0);
			setState(1507);
			match(COMMA);
			setState(1508);
			expression(0);
			setState(1509);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Unary_predicate_functionContext extends ParserRuleContext {
		public Token function_name;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode ISNULL() { return getToken(VerdictSQLParser.ISNULL, 0); }
		public TerminalNode ST_ISCLOSED() { return getToken(VerdictSQLParser.ST_ISCLOSED, 0); }
		public TerminalNode ST_ISEMPTY() { return getToken(VerdictSQLParser.ST_ISEMPTY, 0); }
		public TerminalNode ST_ISRING() { return getToken(VerdictSQLParser.ST_ISRING, 0); }
		public TerminalNode ST_ISVALID() { return getToken(VerdictSQLParser.ST_ISVALID, 0); }
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public Unary_predicate_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_unary_predicate_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitUnary_predicate_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Unary_predicate_functionContext unary_predicate_function() throws RecognitionException {
		Unary_predicate_functionContext _localctx = new Unary_predicate_functionContext(_ctx, getState());
		enterRule(_localctx, 210, RULE_unary_predicate_function);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1512);
			_la = _input.LA(1);
			if (_la==NOT) {
				{
				setState(1511);
				match(NOT);
				}
			}

			setState(1514);
			((Unary_predicate_functionContext)_localctx).function_name = _input.LT(1);
			_la = _input.LA(1);
			if ( !(_la==ISNULL || ((((_la - 736)) & ~0x3f) == 0 && ((1L << (_la - 736)) & ((1L << (ST_ISCLOSED - 736)) | (1L << (ST_ISEMPTY - 736)) | (1L << (ST_ISRING - 736)) | (1L << (ST_ISVALID - 736)))) != 0)) ) {
				((Unary_predicate_functionContext)_localctx).function_name = (Token)_errHandler.recoverInline(this);
			} else {
				consume();
			}
			setState(1515);
			match(LR_BRACKET);
			setState(1516);
			expression(0);
			setState(1517);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Binary_predicate_functionContext extends ParserRuleContext {
		public Token function_name;
		public List expression() {
			return getRuleContexts(ExpressionContext.class);
		}
		public ExpressionContext expression(int i) {
			return getRuleContext(ExpressionContext.class,i);
		}
		public TerminalNode ST_CONTAINS() { return getToken(VerdictSQLParser.ST_CONTAINS, 0); }
		public TerminalNode ST_CROSSES() { return getToken(VerdictSQLParser.ST_CROSSES, 0); }
		public TerminalNode ST_DISJOINT() { return getToken(VerdictSQLParser.ST_DISJOINT, 0); }
		public TerminalNode ST_EQUALS() { return getToken(VerdictSQLParser.ST_EQUALS, 0); }
		public TerminalNode ST_INTERSECTS() { return getToken(VerdictSQLParser.ST_INTERSECTS, 0); }
		public TerminalNode ST_OVERLAPS() { return getToken(VerdictSQLParser.ST_OVERLAPS, 0); }
		public TerminalNode ST_RELATE() { return getToken(VerdictSQLParser.ST_RELATE, 0); }
		public TerminalNode ST_TOUCHES() { return getToken(VerdictSQLParser.ST_TOUCHES, 0); }
		public TerminalNode ST_WITHIN() { return getToken(VerdictSQLParser.ST_WITHIN, 0); }
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public Binary_predicate_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_binary_predicate_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitBinary_predicate_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Binary_predicate_functionContext binary_predicate_function() throws RecognitionException {
		Binary_predicate_functionContext _localctx = new Binary_predicate_functionContext(_ctx, getState());
		enterRule(_localctx, 212, RULE_binary_predicate_function);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1520);
			_la = _input.LA(1);
			if (_la==NOT) {
				{
				setState(1519);
				match(NOT);
				}
			}

			setState(1522);
			((Binary_predicate_functionContext)_localctx).function_name = _input.LT(1);
			_la = _input.LA(1);
			if ( !(((((_la - 708)) & ~0x3f) == 0 && ((1L << (_la - 708)) & ((1L << (ST_CONTAINS - 708)) | (1L << (ST_CROSSES - 708)) | (1L << (ST_DISJOINT - 708)) | (1L << (ST_EQUALS - 708)) | (1L << (ST_INTERSECTS - 708)) | (1L << (ST_OVERLAPS - 708)) | (1L << (ST_RELATE - 708)) | (1L << (ST_TOUCHES - 708)) | (1L << (ST_WITHIN - 708)))) != 0)) ) {
				((Binary_predicate_functionContext)_localctx).function_name = (Token)_errHandler.recoverInline(this);
			} else {
				consume();
			}
			setState(1523);
			match(LR_BRACKET);
			setState(1524);
			expression(0);
			setState(1525);
			match(COMMA);
			setState(1526);
			expression(0);
			setState(1527);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Noparam_functionContext extends ParserRuleContext {
		public Token function_name;
		public TerminalNode UNIX_TIMESTAMP() { return getToken(VerdictSQLParser.UNIX_TIMESTAMP, 0); }
		public TerminalNode CURRENT_TIMESTAMP() { return getToken(VerdictSQLParser.CURRENT_TIMESTAMP, 0); }
		public TerminalNode CURRENT_DATE() { return getToken(VerdictSQLParser.CURRENT_DATE, 0); }
		public TerminalNode CURRENT_TIME() { return getToken(VerdictSQLParser.CURRENT_TIME, 0); }
		public TerminalNode RANDOM() { return getToken(VerdictSQLParser.RANDOM, 0); }
		public TerminalNode RAND() { return getToken(VerdictSQLParser.RAND, 0); }
		public TerminalNode NATURAL_CONSTANT() { return getToken(VerdictSQLParser.NATURAL_CONSTANT, 0); }
		public TerminalNode PI() { return getToken(VerdictSQLParser.PI, 0); }
		public TerminalNode CURDATE() { return getToken(VerdictSQLParser.CURDATE, 0); }
		public TerminalNode CURTIME() { return getToken(VerdictSQLParser.CURTIME, 0); }
		public TerminalNode LOCALTIME() { return getToken(VerdictSQLParser.LOCALTIME, 0); }
		public TerminalNode LOCALTIMESTAMP() { return getToken(VerdictSQLParser.LOCALTIMESTAMP, 0); }
		public TerminalNode NOW() { return getToken(VerdictSQLParser.NOW, 0); }
		public TerminalNode SYSDATE() { return getToken(VerdictSQLParser.SYSDATE, 0); }
		public TerminalNode CURRENT_USER() { return getToken(VerdictSQLParser.CURRENT_USER, 0); }
		public TerminalNode DATABASE() { return getToken(VerdictSQLParser.DATABASE, 0); }
		public TerminalNode LAST_INSERT_ID() { return getToken(VerdictSQLParser.LAST_INSERT_ID, 0); }
		public TerminalNode SESSION_USER() { return getToken(VerdictSQLParser.SESSION_USER, 0); }
		public TerminalNode SYSTEM_USER() { return getToken(VerdictSQLParser.SYSTEM_USER, 0); }
		public TerminalNode USER() { return getToken(VerdictSQLParser.USER, 0); }
		public TerminalNode VERSION() { return getToken(VerdictSQLParser.VERSION, 0); }
		public TerminalNode PG_CLIENT_ENCODING() { return getToken(VerdictSQLParser.PG_CLIENT_ENCODING, 0); }
		public TerminalNode CLOCK_TIMESTAMP() { return getToken(VerdictSQLParser.CLOCK_TIMESTAMP, 0); }
		public TerminalNode STATEMENT_TIMESTAMP() { return getToken(VerdictSQLParser.STATEMENT_TIMESTAMP, 0); }
		public TerminalNode TIMEOFDAY() { return getToken(VerdictSQLParser.TIMEOFDAY, 0); }
		public TerminalNode TRANSACTION_TIMESTAMP() { return getToken(VerdictSQLParser.TRANSACTION_TIMESTAMP, 0); }
		public TerminalNode GET_CURRENT_TS_CONFIG() { return getToken(VerdictSQLParser.GET_CURRENT_TS_CONFIG, 0); }
		public TerminalNode TSVECTOR_UPDATE_TRIGGER() { return getToken(VerdictSQLParser.TSVECTOR_UPDATE_TRIGGER, 0); }
		public TerminalNode TSVECTOR_UPDATE_TRIGGER_COLUMN() { return getToken(VerdictSQLParser.TSVECTOR_UPDATE_TRIGGER_COLUMN, 0); }
		public TerminalNode LASTVAL() { return getToken(VerdictSQLParser.LASTVAL, 0); }
		public Noparam_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_noparam_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitNoparam_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Noparam_functionContext noparam_function() throws RecognitionException {
		Noparam_functionContext _localctx = new Noparam_functionContext(_ctx, getState());
		enterRule(_localctx, 214, RULE_noparam_function);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1529);
			((Noparam_functionContext)_localctx).function_name = _input.LT(1);
			_la = _input.LA(1);
			if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURRENT_DATE) | (1L << CURRENT_TIME) | (1L << CURRENT_TIMESTAMP) | (1L << CURRENT_USER) | (1L << DATABASE))) != 0) || ((((_la - 178)) & ~0x3f) == 0 && ((1L << (_la - 178)) & ((1L << (SESSION_USER - 178)) | (1L << (SYSTEM_USER - 178)) | (1L << (USER - 178)))) != 0) || ((((_la - 280)) & ~0x3f) == 0 && ((1L << (_la - 280)) & ((1L << (CLOCK_TIMESTAMP - 280)) | (1L << (CURDATE - 280)) | (1L << (CURTIME - 280)) | (1L << (NATURAL_CONSTANT - 280)))) != 0) || ((((_la - 360)) & ~0x3f) == 0 && ((1L << (_la - 360)) & ((1L << (GET_CURRENT_TS_CONFIG - 360)) | (1L << (LASTVAL - 360)) | (1L << (LAST_INSERT_ID - 360)))) != 0) || ((((_la - 431)) & ~0x3f) == 0 && ((1L << (_la - 431)) & ((1L << (LOCALTIME - 431)) | (1L << (LOCALTIMESTAMP - 431)) | (1L << (NOW - 431)))) != 0) || ((((_la - 504)) & ~0x3f) == 0 && ((1L << (_la - 504)) & ((1L << (PG_CLIENT_ENCODING - 504)) | (1L << (PI - 504)) | (1L << (RAND - 504)) | (1L << (RANDOM - 504)))) != 0) || ((((_la - 596)) & ~0x3f) == 0 && ((1L << (_la - 596)) & ((1L << (STATEMENT_TIMESTAMP - 596)) | (1L << (SYSDATE - 596)) | (1L << (TIMEOFDAY - 596)) | (1L << (TRANSACTION_TIMESTAMP - 596)) | (1L << (TSVECTOR_UPDATE_TRIGGER - 596)) | (1L << (TSVECTOR_UPDATE_TRIGGER_COLUMN - 596)))) != 0) || _la==UNIX_TIMESTAMP || _la==VERSION) ) {
				((Noparam_functionContext)_localctx).function_name = (Token)_errHandler.recoverInline(this);
			} else {
				consume();
			}
			setState(1530);
			match(LR_BRACKET);
			setState(1531);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Lateral_view_functionContext extends ParserRuleContext {
		public Token function_name;
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode EXPLODE() { return getToken(VerdictSQLParser.EXPLODE, 0); }
		public Lateral_view_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_lateral_view_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitLateral_view_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Lateral_view_functionContext lateral_view_function() throws RecognitionException {
		Lateral_view_functionContext _localctx = new Lateral_view_functionContext(_ctx, getState());
		enterRule(_localctx, 216, RULE_lateral_view_function);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1533);
			((Lateral_view_functionContext)_localctx).function_name = match(EXPLODE);
			setState(1534);
			match(LR_BRACKET);
			setState(1535);
			expression(0);
			setState(1536);
			match(RR_BRACKET);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Aggregate_windowed_functionContext extends ParserRuleContext {
		public TerminalNode AVG() { return getToken(VerdictSQLParser.AVG, 0); }
		public All_distinct_expressionContext all_distinct_expression() {
			return getRuleContext(All_distinct_expressionContext.class,0);
		}
		public Over_clauseContext over_clause() {
			return getRuleContext(Over_clauseContext.class,0);
		}
		public TerminalNode CHECKSUM_AGG() { return getToken(VerdictSQLParser.CHECKSUM_AGG, 0); }
		public TerminalNode GROUPING() { return getToken(VerdictSQLParser.GROUPING, 0); }
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode GROUPING_ID() { return getToken(VerdictSQLParser.GROUPING_ID, 0); }
		public Expression_listContext expression_list() {
			return getRuleContext(Expression_listContext.class,0);
		}
		public TerminalNode MAX() { return getToken(VerdictSQLParser.MAX, 0); }
		public TerminalNode MIN() { return getToken(VerdictSQLParser.MIN, 0); }
		public TerminalNode SUM() { return getToken(VerdictSQLParser.SUM, 0); }
		public TerminalNode STDEV() { return getToken(VerdictSQLParser.STDEV, 0); }
		public TerminalNode STDEVP() { return getToken(VerdictSQLParser.STDEVP, 0); }
		public TerminalNode STDDEV_SAMP() { return getToken(VerdictSQLParser.STDDEV_SAMP, 0); }
		public TerminalNode VAR() { return getToken(VerdictSQLParser.VAR, 0); }
		public TerminalNode VARP() { return getToken(VerdictSQLParser.VARP, 0); }
		public TerminalNode COUNT() { return getToken(VerdictSQLParser.COUNT, 0); }
		public TerminalNode NDV() { return getToken(VerdictSQLParser.NDV, 0); }
		public TerminalNode COUNT_BIG() { return getToken(VerdictSQLParser.COUNT_BIG, 0); }
		public Aggregate_windowed_functionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_aggregate_windowed_function; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitAggregate_windowed_function(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Aggregate_windowed_functionContext aggregate_windowed_function() throws RecognitionException {
		Aggregate_windowed_functionContext _localctx = new Aggregate_windowed_functionContext(_ctx, getState());
		enterRule(_localctx, 218, RULE_aggregate_windowed_function);
		try {
			setState(1643);
			switch (_input.LA(1)) {
			case AVG:
				enterOuterAlt(_localctx, 1);
				{
				setState(1538);
				match(AVG);
				setState(1539);
				match(LR_BRACKET);
				setState(1540);
				all_distinct_expression();
				setState(1541);
				match(RR_BRACKET);
				setState(1543);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,173,_ctx) ) {
				case 1:
					{
					setState(1542);
					over_clause();
					}
					break;
				}
				}
				break;
			case CHECKSUM_AGG:
				enterOuterAlt(_localctx, 2);
				{
				setState(1545);
				match(CHECKSUM_AGG);
				setState(1546);
				match(LR_BRACKET);
				setState(1547);
				all_distinct_expression();
				setState(1548);
				match(RR_BRACKET);
				}
				break;
			case GROUPING:
				enterOuterAlt(_localctx, 3);
				{
				setState(1550);
				match(GROUPING);
				setState(1551);
				match(LR_BRACKET);
				setState(1552);
				expression(0);
				setState(1553);
				match(RR_BRACKET);
				}
				break;
			case GROUPING_ID:
				enterOuterAlt(_localctx, 4);
				{
				setState(1555);
				match(GROUPING_ID);
				setState(1556);
				match(LR_BRACKET);
				setState(1557);
				expression_list();
				setState(1558);
				match(RR_BRACKET);
				}
				break;
			case MAX:
				enterOuterAlt(_localctx, 5);
				{
				setState(1560);
				match(MAX);
				setState(1561);
				match(LR_BRACKET);
				setState(1562);
				all_distinct_expression();
				setState(1563);
				match(RR_BRACKET);
				setState(1565);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,174,_ctx) ) {
				case 1:
					{
					setState(1564);
					over_clause();
					}
					break;
				}
				}
				break;
			case MIN:
				enterOuterAlt(_localctx, 6);
				{
				setState(1567);
				match(MIN);
				setState(1568);
				match(LR_BRACKET);
				setState(1569);
				all_distinct_expression();
				setState(1570);
				match(RR_BRACKET);
				setState(1572);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,175,_ctx) ) {
				case 1:
					{
					setState(1571);
					over_clause();
					}
					break;
				}
				}
				break;
			case SUM:
				enterOuterAlt(_localctx, 7);
				{
				setState(1574);
				match(SUM);
				setState(1575);
				match(LR_BRACKET);
				setState(1576);
				all_distinct_expression();
				setState(1577);
				match(RR_BRACKET);
				setState(1579);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,176,_ctx) ) {
				case 1:
					{
					setState(1578);
					over_clause();
					}
					break;
				}
				}
				break;
			case STDEV:
				enterOuterAlt(_localctx, 8);
				{
				setState(1581);
				match(STDEV);
				setState(1582);
				match(LR_BRACKET);
				setState(1583);
				all_distinct_expression();
				setState(1584);
				match(RR_BRACKET);
				setState(1586);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,177,_ctx) ) {
				case 1:
					{
					setState(1585);
					over_clause();
					}
					break;
				}
				}
				break;
			case STDEVP:
				enterOuterAlt(_localctx, 9);
				{
				setState(1588);
				match(STDEVP);
				setState(1589);
				match(LR_BRACKET);
				setState(1590);
				all_distinct_expression();
				setState(1591);
				match(RR_BRACKET);
				setState(1593);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,178,_ctx) ) {
				case 1:
					{
					setState(1592);
					over_clause();
					}
					break;
				}
				}
				break;
			case STDDEV_SAMP:
				enterOuterAlt(_localctx, 10);
				{
				setState(1595);
				match(STDDEV_SAMP);
				setState(1596);
				match(LR_BRACKET);
				setState(1597);
				all_distinct_expression();
				setState(1598);
				match(RR_BRACKET);
				setState(1600);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,179,_ctx) ) {
				case 1:
					{
					setState(1599);
					over_clause();
					}
					break;
				}
				}
				break;
			case VAR:
				enterOuterAlt(_localctx, 11);
				{
				setState(1602);
				match(VAR);
				setState(1603);
				match(LR_BRACKET);
				setState(1604);
				all_distinct_expression();
				setState(1605);
				match(RR_BRACKET);
				setState(1607);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,180,_ctx) ) {
				case 1:
					{
					setState(1606);
					over_clause();
					}
					break;
				}
				}
				break;
			case VARP:
				enterOuterAlt(_localctx, 12);
				{
				setState(1609);
				match(VARP);
				setState(1610);
				match(LR_BRACKET);
				setState(1611);
				all_distinct_expression();
				setState(1612);
				match(RR_BRACKET);
				setState(1614);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,181,_ctx) ) {
				case 1:
					{
					setState(1613);
					over_clause();
					}
					break;
				}
				}
				break;
			case COUNT:
				enterOuterAlt(_localctx, 13);
				{
				setState(1616);
				match(COUNT);
				setState(1617);
				match(LR_BRACKET);
				setState(1620);
				switch (_input.LA(1)) {
				case STAR:
					{
					setState(1618);
					match(STAR);
					}
					break;
				case ALL:
				case APPROX_DISTINCT:
				case ASCII:
				case CASE:
				case COALESCE:
				case CONV:
				case CONVERT:
				case CURRENT_DATE:
				case CURRENT_TIME:
				case CURRENT_TIMESTAMP:
				case CURRENT_USER:
				case DATABASE:
				case DISTINCT:
				case FALSE:
				case HASH:
				case IF:
				case INT4LARGER:
				case LEFT:
				case MID:
				case NOT:
				case NULL:
				case NULLIF:
				case RAWTOHEX:
				case RIGHT:
				case RPAD:
				case SESSION_USER:
				case SUBSTR:
				case SUBSTRING:
				case SYSTEM_USER:
				case TRUE:
				case TRUNCATE:
				case USER:
				case ABBREV:
				case ABS:
				case ACOS:
				case ADDDATE:
				case ADDTIME:
				case AES_DECRYPT:
				case AES_ENCRYPT:
				case AGE:
				case AREA:
				case ARRAY_AGG:
				case ARRAY_APPEND:
				case ARRAY_CAT:
				case ARRAY_DIMS:
				case ARRAY_LENGTH:
				case ARRAY_LOWER:
				case ARRAY_NDIMS:
				case ARRAY_POSITION:
				case ARRAY_POSITIONS:
				case ARRAY_PREPEND:
				case ARRAY_REMOVE:
				case ARRAY_REPLACE:
				case ARRAY_TO_JSON:
				case ARRAY_TO_STRING:
				case ARRAY_TO_TSVECTOR:
				case ARRAY_UPPER:
				case ASIN:
				case ATAN:
				case ATAN2:
				case AVG:
				case BIN:
				case BIT_LENGTH:
				case BOOL_AND:
				case BOOL_OR:
				case BOX:
				case BOUND_BOX:
				case BROADCAST:
				case BTRIM:
				case BROUND:
				case CARDINALITY:
				case CAST:
				case CBRT:
				case CEIL:
				case CEILING:
				case CENTER:
				case CHAR_LENGTH:
				case CHARACTER_LENGTH:
				case CHECKSUM_AGG:
				case CHR:
				case CIRCLE:
				case CLOCK_TIMESTAMP:
				case CONCAT:
				case CONCAT_WS:
				case CONVERT_FROM:
				case CONVERT_TO:
				case COS:
				case CORR:
				case COVAR_POP:
				case COVAR_SAMP:
				case COT:
				case COUNT:
				case COUNT_BIG:
				case CRC32:
				case CURDATE:
				case CURRVAL:
				case CURTIME:
				case DATE:
				case DATEADD:
				case DATE_ADD:
				case DATE_FORMAT:
				case DATE_PART:
				case DATE_SUB:
				case DATE_TRUNC:
				case DATEDIFF:
				case DAY:
				case DAYNAME:
				case DAYOFMONTH:
				case DAYOFWEEK:
				case DAYOFYEAR:
				case DECODE:
				case DEGREES:
				case DENSE_RANK:
				case DIAMETER:
				case DIV:
				case NATURAL_CONSTANT:
				case ENCODE:
				case ENUM_FIRST:
				case ENUM_LAST:
				case ENUM_RANGE:
				case EXP:
				case EXTRACT:
				case EVERY:
				case FACTORIAL:
				case FAMILY:
				case FIELD:
				case FIND_IN_SET:
				case FLOOR:
				case FORMAT:
				case FORMAT_NUMBER:
				case FNV_HASH:
				case FROM_DAYS:
				case FROM_UNIXTIME:
				case GET_BIT:
				case GET_BYTE:
				case GET_CURRENT_TS_CONFIG:
				case GET_JSON_OBJECT:
				case GREATEST:
				case GROUPING:
				case GROUPING_ID:
				case HEIGHT:
				case HEX:
				case HOST:
				case HOSTMASK:
				case HOUR:
				case IFNULL:
				case INITCAP:
				case INSTR:
				case INTERVAL:
				case IN_FILE:
				case INET_SAME_FAMILY:
				case INET_MERGE:
				case ISCLOSED:
				case ISEMPTY:
				case ISFINITE:
				case ISNULL:
				case ISOPEN:
				case JSON_AGG:
				case JSON_ARRAY_LENGTH:
				case JSON_ARRAY_ELEMENTS:
				case JSON_ARRAY_ELEMENTS_TEXT:
				case JSON_BUILD_ARRAY:
				case JSON_BUILD_OBJECT:
				case JSON_EACH:
				case JSON_EACH_TEXT:
				case JSON_EXTRACT_PATH:
				case JSON_EXTRACT_PATH_TEXT:
				case JSON_OBJECT:
				case JSON_OBJECT_KEYS:
				case JSON_OBJECT_AGG:
				case JSON_POPULATE_RECORD:
				case JSON_POPULATE_RECORDSET:
				case JSON_STRIP_NULLS:
				case JSON_TO_RECORD:
				case JSON_TO_RECORDSET:
				case JSON_TYPEOF:
				case JSONB_AGG:
				case JSONB_OBJECT_AGG:
				case JSONB_SET:
				case JSONB_INSERT:
				case JSONB_PRETTY:
				case JUSTIFY_DAYS:
				case JUSTIFY_HOURS:
				case JUSTIFY_INTERVALS:
				case LASTVAL:
				case LAST_DAY:
				case LAST_INSERT_ID:
				case LCASE:
				case LEAST:
				case LENGTH:
				case LINE:
				case LN:
				case LOCALTIME:
				case LOCALTIMESTAMP:
				case LOCATE:
				case LOG:
				case LOG2:
				case LOG10:
				case LOWER:
				case LOWER_INC:
				case LOWER_INF:
				case LPAD:
				case LTRIM:
				case LSEG:
				case MACADDR8_SET7BIT:
				case MAKEDATE:
				case MAKETIME:
				case MAKE_DATE:
				case MAKE_TIME:
				case MAKE_TIMESTAMP:
				case MAKE_TIMESTAMPTZ:
				case MASKLEN:
				case MAX:
				case MD5:
				case MICROSECOND:
				case MIN:
				case MINUTE:
				case MOD:
				case MONTH:
				case MONTHNAME:
				case NEGATIVE:
				case NETMASK:
				case NETWORK:
				case NDV:
				case NEXTVAL:
				case NOW:
				case NPOINTS:
				case NTILE:
				case NUMNODE:
				case NVL:
				case OCTET_LENGTH:
				case OVERLAY:
				case PATH:
				case PCLOSE:
				case PERCENTILE:
				case PERIOD_ADD:
				case PERIOD_DIFF:
				case PG_CLIENT_ENCODING:
				case PLAINTO_TSQUERY:
				case PHRASETO_TSQUERY:
				case PI:
				case PMOD:
				case POINT:
				case POLYGON:
				case POPEN:
				case POSITION:
				case POSITIVE:
				case POW:
				case POWER:
				case QUARTER:
				case QUERYTREE:
				case QUOTE_IDENT:
				case QUOTE_LITERAL:
				case QUOTE_NULLABLE:
				case RADIANS:
				case RADIUS:
				case RAND:
				case RANDOM:
				case RANGE_MERGE:
				case RANK:
				case REGR_AVGX:
				case REGR_AVGY:
				case REGR_COUNT:
				case REGR_INTERCEPT:
				case REGR_R2:
				case REGR_SLOPE:
				case REGR_SXX:
				case REGR_SXY:
				case REGR_SYY:
				case REGEXP_MATCHES:
				case REGEXP_REPLACE:
				case REGEXP_SPLIT_TO_ARRAY:
				case REGEXP_SPLIT_TO_TABLE:
				case REPEAT:
				case REPLACE:
				case REVERSE:
				case ROUND:
				case ROW_TO_JSON:
				case ROW_NUMBER:
				case RTRIM:
				case SCALE:
				case SECOND:
				case SEC_TO_TIME:
				case SETSEED:
				case SETWEIGHT:
				case SETVAL:
				case SET_BIT:
				case SET_BYTE:
				case SET_MASKLEN:
				case SHA1:
				case SHA2:
				case SHIFTLEFT:
				case SHIFTRIGHT:
				case SHIFTRIGHTUNSIGNED:
				case SIGN:
				case SIN:
				case SPACE_FUNCTION:
				case SPLIT:
				case SPLIT_PART:
				case STATEMENT_TIMESTAMP:
				case STDEV:
				case STDDEV:
				case STDEVP:
				case STDDEV_SAMP:
				case STRCMP:
				case STRING_AGG:
				case STRING_TO_ARRAY:
				case STRPOS:
				case STR_TO_DATE:
				case SUBDATE:
				case SUBSTRING_INDEX:
				case SUM:
				case SQRT:
				case STDDEV_POP:
				case STRIP:
				case STRTOL:
				case SYSDATE:
				case TAN:
				case TEXT:
				case TIME:
				case TIMEDIFF:
				case TIMEOFDAY:
				case TIMESTAMP:
				case TIME_FORMAT:
				case TIME_TO_SEC:
				case TO_ASCII:
				case TO_CHAR:
				case TO_DATE:
				case TO_DAYS:
				case TO_HEX:
				case TO_JSON:
				case TO_JSONB:
				case TO_NUMBER:
				case TO_TIMESTAMP:
				case TO_TSQUERY:
				case TO_TSVECTOR:
				case TRANSACTION_TIMESTAMP:
				case TRANSLATE:
				case TRIM:
				case TRUNC:
				case TS_DELETE:
				case TS_FILTER:
				case TS_HEADLINE:
				case TS_RANK:
				case TS_RANK_CD:
				case TS_REWRITE:
				case TSQUERY_PHRASE:
				case TSVECTOR_TO_ARRAY:
				case TSVECTOR_UPDATE_TRIGGER:
				case TSVECTOR_UPDATE_TRIGGER_COLUMN:
				case UCASE:
				case UNHEX:
				case UNIX_TIMESTAMP:
				case UNNEST:
				case UPPER:
				case UPPER_INC:
				case UPPER_INF:
				case VAR:
				case VARIANCE:
				case VAR_POP:
				case VAR_SAMP:
				case VARP:
				case VERSION:
				case WEEKOFYEAR:
				case WEEK:
				case WEEKDAY:
				case WIDTH:
				case WIDTH_BUCKET:
				case XMLAGG:
				case XMLCOMMENT:
				case XMLCONCAT:
				case XMLELEMENT:
				case XMLFOREST:
				case XMLPI:
				case XMLROOT:
				case XML_ISWELL_FORMAT:
				case XPATH:
				case XPATH_EXISTS:
				case YEAR:
				case YEARWEEK:
				case ST_ASBINARY:
				case ST_ASTEXT:
				case ST_GEOMETRYFROMTEXT:
				case ST_GEOMFROMBINARY:
				case ST_LINEFROMTEXT:
				case ST_LINESTRING:
				case ST_MULTIPOINT:
				case ST_POINT:
				case ST_POLYGON:
				case ST_CONTAINS:
				case ST_CROSSES:
				case ST_DISJOINT:
				case ST_EQUALS:
				case ST_INTERSECTS:
				case ST_OVERLAPS:
				case ST_RELATE:
				case ST_TOUCHES:
				case ST_WITHIN:
				case GEOMETRY_UNION:
				case ST_BOUNDARY:
				case ST_BUFFER:
				case ST_DIFFERENCE:
				case ST_ENVELOPE:
				case ST_ENVELOPEASPTS:
				case ST_EXTERIORRING:
				case ST_INTERSECTION:
				case ST_SYMDIFFERENCE:
				case ST_UNION:
				case ST_AREA:
				case ST_CENTROID:
				case ST_CONVEXHULL:
				case ST_DIMENSION:
				case ST_DISTANCE:
				case ST_GEOMETRYN:
				case ST_INTERIORRINGN:
				case ST_GEOMETRYTYPE:
				case ST_ISCLOSED:
				case ST_ISEMPTY:
				case ST_ISSIMPLE:
				case ST_ISRING:
				case ST_ISVALID:
				case ST_LENGTH:
				case ST_POINTN:
				case ST_XMAX:
				case ST_YMAX:
				case ST_XMIN:
				case ST_YMIN:
				case ST_STARTPOINT:
				case SIMPLIFY_GEOMETRY:
				case ST_ENDPOINT:
				case ST_X:
				case ST_Y:
				case ST_INTERIORRINGS:
				case ST_NUMGEOMETRIES:
				case ST_GEOMETRIES:
				case ST_NUMPOINTS:
				case ST_NUMINTERIORRING:
				case LINE_LOCATE_POINT:
				case GEOMETRY_INVALID_REASON:
				case GREAT_CIRCLE_DISTANCE:
				case CONVEX_HULL_AGG:
				case GEOMETRY_UNION_AGG:
				case BING_TILE:
				case BING_TILE_AT:
				case BING_TILES_AROUND:
				case BING_TILE_COORDINATES:
				case BING_TILE_POLYGON:
				case BING_TILE_QUADKEY:
				case BING_TILE_ZOOM_LEVEL:
				case GEOMETRY_TO_BING_TILES:
				case SPACE:
				case DOUBLE_QUOTE_ID:
				case BACKTICK_ID:
				case SQUARE_BRACKET_ID:
				case LOCAL_ID:
				case DECIMAL:
				case ID:
				case STRING:
				case BINARY:
				case FLOAT:
				case REAL:
				case DOLLAR:
				case LR_BRACKET:
				case PLUS:
				case MINUS:
				case BIT_NOT:
				case BIT_OR:
				case BIT_AND:
					{
					setState(1619);
					all_distinct_expression();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(1622);
				match(RR_BRACKET);
				setState(1624);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,183,_ctx) ) {
				case 1:
					{
					setState(1623);
					over_clause();
					}
					break;
				}
				}
				break;
			case NDV:
				enterOuterAlt(_localctx, 14);
				{
				setState(1626);
				match(NDV);
				setState(1627);
				match(LR_BRACKET);
				setState(1628);
				all_distinct_expression();
				setState(1629);
				match(RR_BRACKET);
				setState(1631);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,184,_ctx) ) {
				case 1:
					{
					setState(1630);
					over_clause();
					}
					break;
				}
				}
				break;
			case COUNT_BIG:
				enterOuterAlt(_localctx, 15);
				{
				setState(1633);
				match(COUNT_BIG);
				setState(1634);
				match(LR_BRACKET);
				setState(1637);
				switch (_input.LA(1)) {
				case STAR:
					{
					setState(1635);
					match(STAR);
					}
					break;
				case ALL:
				case APPROX_DISTINCT:
				case ASCII:
				case CASE:
				case COALESCE:
				case CONV:
				case CONVERT:
				case CURRENT_DATE:
				case CURRENT_TIME:
				case CURRENT_TIMESTAMP:
				case CURRENT_USER:
				case DATABASE:
				case DISTINCT:
				case FALSE:
				case HASH:
				case IF:
				case INT4LARGER:
				case LEFT:
				case MID:
				case NOT:
				case NULL:
				case NULLIF:
				case RAWTOHEX:
				case RIGHT:
				case RPAD:
				case SESSION_USER:
				case SUBSTR:
				case SUBSTRING:
				case SYSTEM_USER:
				case TRUE:
				case TRUNCATE:
				case USER:
				case ABBREV:
				case ABS:
				case ACOS:
				case ADDDATE:
				case ADDTIME:
				case AES_DECRYPT:
				case AES_ENCRYPT:
				case AGE:
				case AREA:
				case ARRAY_AGG:
				case ARRAY_APPEND:
				case ARRAY_CAT:
				case ARRAY_DIMS:
				case ARRAY_LENGTH:
				case ARRAY_LOWER:
				case ARRAY_NDIMS:
				case ARRAY_POSITION:
				case ARRAY_POSITIONS:
				case ARRAY_PREPEND:
				case ARRAY_REMOVE:
				case ARRAY_REPLACE:
				case ARRAY_TO_JSON:
				case ARRAY_TO_STRING:
				case ARRAY_TO_TSVECTOR:
				case ARRAY_UPPER:
				case ASIN:
				case ATAN:
				case ATAN2:
				case AVG:
				case BIN:
				case BIT_LENGTH:
				case BOOL_AND:
				case BOOL_OR:
				case BOX:
				case BOUND_BOX:
				case BROADCAST:
				case BTRIM:
				case BROUND:
				case CARDINALITY:
				case CAST:
				case CBRT:
				case CEIL:
				case CEILING:
				case CENTER:
				case CHAR_LENGTH:
				case CHARACTER_LENGTH:
				case CHECKSUM_AGG:
				case CHR:
				case CIRCLE:
				case CLOCK_TIMESTAMP:
				case CONCAT:
				case CONCAT_WS:
				case CONVERT_FROM:
				case CONVERT_TO:
				case COS:
				case CORR:
				case COVAR_POP:
				case COVAR_SAMP:
				case COT:
				case COUNT:
				case COUNT_BIG:
				case CRC32:
				case CURDATE:
				case CURRVAL:
				case CURTIME:
				case DATE:
				case DATEADD:
				case DATE_ADD:
				case DATE_FORMAT:
				case DATE_PART:
				case DATE_SUB:
				case DATE_TRUNC:
				case DATEDIFF:
				case DAY:
				case DAYNAME:
				case DAYOFMONTH:
				case DAYOFWEEK:
				case DAYOFYEAR:
				case DECODE:
				case DEGREES:
				case DENSE_RANK:
				case DIAMETER:
				case DIV:
				case NATURAL_CONSTANT:
				case ENCODE:
				case ENUM_FIRST:
				case ENUM_LAST:
				case ENUM_RANGE:
				case EXP:
				case EXTRACT:
				case EVERY:
				case FACTORIAL:
				case FAMILY:
				case FIELD:
				case FIND_IN_SET:
				case FLOOR:
				case FORMAT:
				case FORMAT_NUMBER:
				case FNV_HASH:
				case FROM_DAYS:
				case FROM_UNIXTIME:
				case GET_BIT:
				case GET_BYTE:
				case GET_CURRENT_TS_CONFIG:
				case GET_JSON_OBJECT:
				case GREATEST:
				case GROUPING:
				case GROUPING_ID:
				case HEIGHT:
				case HEX:
				case HOST:
				case HOSTMASK:
				case HOUR:
				case IFNULL:
				case INITCAP:
				case INSTR:
				case INTERVAL:
				case IN_FILE:
				case INET_SAME_FAMILY:
				case INET_MERGE:
				case ISCLOSED:
				case ISEMPTY:
				case ISFINITE:
				case ISNULL:
				case ISOPEN:
				case JSON_AGG:
				case JSON_ARRAY_LENGTH:
				case JSON_ARRAY_ELEMENTS:
				case JSON_ARRAY_ELEMENTS_TEXT:
				case JSON_BUILD_ARRAY:
				case JSON_BUILD_OBJECT:
				case JSON_EACH:
				case JSON_EACH_TEXT:
				case JSON_EXTRACT_PATH:
				case JSON_EXTRACT_PATH_TEXT:
				case JSON_OBJECT:
				case JSON_OBJECT_KEYS:
				case JSON_OBJECT_AGG:
				case JSON_POPULATE_RECORD:
				case JSON_POPULATE_RECORDSET:
				case JSON_STRIP_NULLS:
				case JSON_TO_RECORD:
				case JSON_TO_RECORDSET:
				case JSON_TYPEOF:
				case JSONB_AGG:
				case JSONB_OBJECT_AGG:
				case JSONB_SET:
				case JSONB_INSERT:
				case JSONB_PRETTY:
				case JUSTIFY_DAYS:
				case JUSTIFY_HOURS:
				case JUSTIFY_INTERVALS:
				case LASTVAL:
				case LAST_DAY:
				case LAST_INSERT_ID:
				case LCASE:
				case LEAST:
				case LENGTH:
				case LINE:
				case LN:
				case LOCALTIME:
				case LOCALTIMESTAMP:
				case LOCATE:
				case LOG:
				case LOG2:
				case LOG10:
				case LOWER:
				case LOWER_INC:
				case LOWER_INF:
				case LPAD:
				case LTRIM:
				case LSEG:
				case MACADDR8_SET7BIT:
				case MAKEDATE:
				case MAKETIME:
				case MAKE_DATE:
				case MAKE_TIME:
				case MAKE_TIMESTAMP:
				case MAKE_TIMESTAMPTZ:
				case MASKLEN:
				case MAX:
				case MD5:
				case MICROSECOND:
				case MIN:
				case MINUTE:
				case MOD:
				case MONTH:
				case MONTHNAME:
				case NEGATIVE:
				case NETMASK:
				case NETWORK:
				case NDV:
				case NEXTVAL:
				case NOW:
				case NPOINTS:
				case NTILE:
				case NUMNODE:
				case NVL:
				case OCTET_LENGTH:
				case OVERLAY:
				case PATH:
				case PCLOSE:
				case PERCENTILE:
				case PERIOD_ADD:
				case PERIOD_DIFF:
				case PG_CLIENT_ENCODING:
				case PLAINTO_TSQUERY:
				case PHRASETO_TSQUERY:
				case PI:
				case PMOD:
				case POINT:
				case POLYGON:
				case POPEN:
				case POSITION:
				case POSITIVE:
				case POW:
				case POWER:
				case QUARTER:
				case QUERYTREE:
				case QUOTE_IDENT:
				case QUOTE_LITERAL:
				case QUOTE_NULLABLE:
				case RADIANS:
				case RADIUS:
				case RAND:
				case RANDOM:
				case RANGE_MERGE:
				case RANK:
				case REGR_AVGX:
				case REGR_AVGY:
				case REGR_COUNT:
				case REGR_INTERCEPT:
				case REGR_R2:
				case REGR_SLOPE:
				case REGR_SXX:
				case REGR_SXY:
				case REGR_SYY:
				case REGEXP_MATCHES:
				case REGEXP_REPLACE:
				case REGEXP_SPLIT_TO_ARRAY:
				case REGEXP_SPLIT_TO_TABLE:
				case REPEAT:
				case REPLACE:
				case REVERSE:
				case ROUND:
				case ROW_TO_JSON:
				case ROW_NUMBER:
				case RTRIM:
				case SCALE:
				case SECOND:
				case SEC_TO_TIME:
				case SETSEED:
				case SETWEIGHT:
				case SETVAL:
				case SET_BIT:
				case SET_BYTE:
				case SET_MASKLEN:
				case SHA1:
				case SHA2:
				case SHIFTLEFT:
				case SHIFTRIGHT:
				case SHIFTRIGHTUNSIGNED:
				case SIGN:
				case SIN:
				case SPACE_FUNCTION:
				case SPLIT:
				case SPLIT_PART:
				case STATEMENT_TIMESTAMP:
				case STDEV:
				case STDDEV:
				case STDEVP:
				case STDDEV_SAMP:
				case STRCMP:
				case STRING_AGG:
				case STRING_TO_ARRAY:
				case STRPOS:
				case STR_TO_DATE:
				case SUBDATE:
				case SUBSTRING_INDEX:
				case SUM:
				case SQRT:
				case STDDEV_POP:
				case STRIP:
				case STRTOL:
				case SYSDATE:
				case TAN:
				case TEXT:
				case TIME:
				case TIMEDIFF:
				case TIMEOFDAY:
				case TIMESTAMP:
				case TIME_FORMAT:
				case TIME_TO_SEC:
				case TO_ASCII:
				case TO_CHAR:
				case TO_DATE:
				case TO_DAYS:
				case TO_HEX:
				case TO_JSON:
				case TO_JSONB:
				case TO_NUMBER:
				case TO_TIMESTAMP:
				case TO_TSQUERY:
				case TO_TSVECTOR:
				case TRANSACTION_TIMESTAMP:
				case TRANSLATE:
				case TRIM:
				case TRUNC:
				case TS_DELETE:
				case TS_FILTER:
				case TS_HEADLINE:
				case TS_RANK:
				case TS_RANK_CD:
				case TS_REWRITE:
				case TSQUERY_PHRASE:
				case TSVECTOR_TO_ARRAY:
				case TSVECTOR_UPDATE_TRIGGER:
				case TSVECTOR_UPDATE_TRIGGER_COLUMN:
				case UCASE:
				case UNHEX:
				case UNIX_TIMESTAMP:
				case UNNEST:
				case UPPER:
				case UPPER_INC:
				case UPPER_INF:
				case VAR:
				case VARIANCE:
				case VAR_POP:
				case VAR_SAMP:
				case VARP:
				case VERSION:
				case WEEKOFYEAR:
				case WEEK:
				case WEEKDAY:
				case WIDTH:
				case WIDTH_BUCKET:
				case XMLAGG:
				case XMLCOMMENT:
				case XMLCONCAT:
				case XMLELEMENT:
				case XMLFOREST:
				case XMLPI:
				case XMLROOT:
				case XML_ISWELL_FORMAT:
				case XPATH:
				case XPATH_EXISTS:
				case YEAR:
				case YEARWEEK:
				case ST_ASBINARY:
				case ST_ASTEXT:
				case ST_GEOMETRYFROMTEXT:
				case ST_GEOMFROMBINARY:
				case ST_LINEFROMTEXT:
				case ST_LINESTRING:
				case ST_MULTIPOINT:
				case ST_POINT:
				case ST_POLYGON:
				case ST_CONTAINS:
				case ST_CROSSES:
				case ST_DISJOINT:
				case ST_EQUALS:
				case ST_INTERSECTS:
				case ST_OVERLAPS:
				case ST_RELATE:
				case ST_TOUCHES:
				case ST_WITHIN:
				case GEOMETRY_UNION:
				case ST_BOUNDARY:
				case ST_BUFFER:
				case ST_DIFFERENCE:
				case ST_ENVELOPE:
				case ST_ENVELOPEASPTS:
				case ST_EXTERIORRING:
				case ST_INTERSECTION:
				case ST_SYMDIFFERENCE:
				case ST_UNION:
				case ST_AREA:
				case ST_CENTROID:
				case ST_CONVEXHULL:
				case ST_DIMENSION:
				case ST_DISTANCE:
				case ST_GEOMETRYN:
				case ST_INTERIORRINGN:
				case ST_GEOMETRYTYPE:
				case ST_ISCLOSED:
				case ST_ISEMPTY:
				case ST_ISSIMPLE:
				case ST_ISRING:
				case ST_ISVALID:
				case ST_LENGTH:
				case ST_POINTN:
				case ST_XMAX:
				case ST_YMAX:
				case ST_XMIN:
				case ST_YMIN:
				case ST_STARTPOINT:
				case SIMPLIFY_GEOMETRY:
				case ST_ENDPOINT:
				case ST_X:
				case ST_Y:
				case ST_INTERIORRINGS:
				case ST_NUMGEOMETRIES:
				case ST_GEOMETRIES:
				case ST_NUMPOINTS:
				case ST_NUMINTERIORRING:
				case LINE_LOCATE_POINT:
				case GEOMETRY_INVALID_REASON:
				case GREAT_CIRCLE_DISTANCE:
				case CONVEX_HULL_AGG:
				case GEOMETRY_UNION_AGG:
				case BING_TILE:
				case BING_TILE_AT:
				case BING_TILES_AROUND:
				case BING_TILE_COORDINATES:
				case BING_TILE_POLYGON:
				case BING_TILE_QUADKEY:
				case BING_TILE_ZOOM_LEVEL:
				case GEOMETRY_TO_BING_TILES:
				case SPACE:
				case DOUBLE_QUOTE_ID:
				case BACKTICK_ID:
				case SQUARE_BRACKET_ID:
				case LOCAL_ID:
				case DECIMAL:
				case ID:
				case STRING:
				case BINARY:
				case FLOAT:
				case REAL:
				case DOLLAR:
				case LR_BRACKET:
				case PLUS:
				case MINUS:
				case BIT_NOT:
				case BIT_OR:
				case BIT_AND:
					{
					setState(1636);
					all_distinct_expression();
					}
					break;
				default:
					throw new NoViableAltException(this);
				}
				setState(1639);
				match(RR_BRACKET);
				setState(1641);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,186,_ctx) ) {
				case 1:
					{
					setState(1640);
					over_clause();
					}
					break;
				}
				}
				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 All_distinct_expressionContext extends ParserRuleContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode ALL() { return getToken(VerdictSQLParser.ALL, 0); }
		public TerminalNode DISTINCT() { return getToken(VerdictSQLParser.DISTINCT, 0); }
		public All_distinct_expressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_all_distinct_expression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitAll_distinct_expression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final All_distinct_expressionContext all_distinct_expression() throws RecognitionException {
		All_distinct_expressionContext _localctx = new All_distinct_expressionContext(_ctx, getState());
		enterRule(_localctx, 220, RULE_all_distinct_expression);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1646);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,188,_ctx) ) {
			case 1:
				{
				setState(1645);
				_la = _input.LA(1);
				if ( !(_la==ALL || _la==DISTINCT) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				}
				break;
			}
			setState(1648);
			expression(0);
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Cast_as_expressionContext extends ParserRuleContext {
		public ExpressionContext expression() {
			return getRuleContext(ExpressionContext.class,0);
		}
		public TerminalNode AS() { return getToken(VerdictSQLParser.AS, 0); }
		public Data_typeContext data_type() {
			return getRuleContext(Data_typeContext.class,0);
		}
		public Cast_as_expressionContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_cast_as_expression; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCast_as_expression(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Cast_as_expressionContext cast_as_expression() throws RecognitionException {
		Cast_as_expressionContext _localctx = new Cast_as_expressionContext(_ctx, getState());
		enterRule(_localctx, 222, RULE_cast_as_expression);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1650);
			expression(0);
			setState(1651);
			match(AS);
			setState(1652);
			data_type();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Over_clauseContext extends ParserRuleContext {
		public TerminalNode OVER() { return getToken(VerdictSQLParser.OVER, 0); }
		public Partition_by_clauseContext partition_by_clause() {
			return getRuleContext(Partition_by_clauseContext.class,0);
		}
		public Order_by_clauseContext order_by_clause() {
			return getRuleContext(Order_by_clauseContext.class,0);
		}
		public Row_or_range_clauseContext row_or_range_clause() {
			return getRuleContext(Row_or_range_clauseContext.class,0);
		}
		public Over_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_over_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOver_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Over_clauseContext over_clause() throws RecognitionException {
		Over_clauseContext _localctx = new Over_clauseContext(_ctx, getState());
		enterRule(_localctx, 224, RULE_over_clause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1654);
			match(OVER);
			setState(1655);
			match(LR_BRACKET);
			setState(1657);
			_la = _input.LA(1);
			if (_la==PARTITION) {
				{
				setState(1656);
				partition_by_clause();
				}
			}

			setState(1660);
			_la = _input.LA(1);
			if (_la==ORDER) {
				{
				setState(1659);
				order_by_clause();
				}
			}

			setState(1663);
			_la = _input.LA(1);
			if (_la==RANGE || _la==ROWS) {
				{
				setState(1662);
				row_or_range_clause();
				}
			}

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

	public static class Row_or_range_clauseContext extends ParserRuleContext {
		public Window_frame_extentContext window_frame_extent() {
			return getRuleContext(Window_frame_extentContext.class,0);
		}
		public TerminalNode ROWS() { return getToken(VerdictSQLParser.ROWS, 0); }
		public TerminalNode RANGE() { return getToken(VerdictSQLParser.RANGE, 0); }
		public Row_or_range_clauseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_row_or_range_clause; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitRow_or_range_clause(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Row_or_range_clauseContext row_or_range_clause() throws RecognitionException {
		Row_or_range_clauseContext _localctx = new Row_or_range_clauseContext(_ctx, getState());
		enterRule(_localctx, 226, RULE_row_or_range_clause);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1667);
			_la = _input.LA(1);
			if ( !(_la==RANGE || _la==ROWS) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			setState(1668);
			window_frame_extent();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Window_frame_extentContext extends ParserRuleContext {
		public Window_frame_precedingContext window_frame_preceding() {
			return getRuleContext(Window_frame_precedingContext.class,0);
		}
		public TerminalNode BETWEEN() { return getToken(VerdictSQLParser.BETWEEN, 0); }
		public List window_frame_bound() {
			return getRuleContexts(Window_frame_boundContext.class);
		}
		public Window_frame_boundContext window_frame_bound(int i) {
			return getRuleContext(Window_frame_boundContext.class,i);
		}
		public TerminalNode AND() { return getToken(VerdictSQLParser.AND, 0); }
		public Window_frame_extentContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_window_frame_extent; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitWindow_frame_extent(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Window_frame_extentContext window_frame_extent() throws RecognitionException {
		Window_frame_extentContext _localctx = new Window_frame_extentContext(_ctx, getState());
		enterRule(_localctx, 228, RULE_window_frame_extent);
		try {
			setState(1676);
			switch (_input.LA(1)) {
			case CURRENT:
			case UNBOUNDED:
			case DECIMAL:
				enterOuterAlt(_localctx, 1);
				{
				setState(1670);
				window_frame_preceding();
				}
				break;
			case BETWEEN:
				enterOuterAlt(_localctx, 2);
				{
				setState(1671);
				match(BETWEEN);
				setState(1672);
				window_frame_bound();
				setState(1673);
				match(AND);
				setState(1674);
				window_frame_bound();
				}
				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 Window_frame_boundContext extends ParserRuleContext {
		public Window_frame_precedingContext window_frame_preceding() {
			return getRuleContext(Window_frame_precedingContext.class,0);
		}
		public Window_frame_followingContext window_frame_following() {
			return getRuleContext(Window_frame_followingContext.class,0);
		}
		public Window_frame_boundContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_window_frame_bound; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitWindow_frame_bound(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Window_frame_boundContext window_frame_bound() throws RecognitionException {
		Window_frame_boundContext _localctx = new Window_frame_boundContext(_ctx, getState());
		enterRule(_localctx, 230, RULE_window_frame_bound);
		try {
			setState(1680);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,193,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1678);
				window_frame_preceding();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1679);
				window_frame_following();
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Window_frame_precedingContext extends ParserRuleContext {
		public TerminalNode UNBOUNDED() { return getToken(VerdictSQLParser.UNBOUNDED, 0); }
		public TerminalNode PRECEDING() { return getToken(VerdictSQLParser.PRECEDING, 0); }
		public TerminalNode DECIMAL() { return getToken(VerdictSQLParser.DECIMAL, 0); }
		public TerminalNode CURRENT() { return getToken(VerdictSQLParser.CURRENT, 0); }
		public TerminalNode ROW() { return getToken(VerdictSQLParser.ROW, 0); }
		public Window_frame_precedingContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_window_frame_preceding; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitWindow_frame_preceding(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Window_frame_precedingContext window_frame_preceding() throws RecognitionException {
		Window_frame_precedingContext _localctx = new Window_frame_precedingContext(_ctx, getState());
		enterRule(_localctx, 232, RULE_window_frame_preceding);
		try {
			setState(1688);
			switch (_input.LA(1)) {
			case UNBOUNDED:
				enterOuterAlt(_localctx, 1);
				{
				setState(1682);
				match(UNBOUNDED);
				setState(1683);
				match(PRECEDING);
				}
				break;
			case DECIMAL:
				enterOuterAlt(_localctx, 2);
				{
				setState(1684);
				match(DECIMAL);
				setState(1685);
				match(PRECEDING);
				}
				break;
			case CURRENT:
				enterOuterAlt(_localctx, 3);
				{
				setState(1686);
				match(CURRENT);
				setState(1687);
				match(ROW);
				}
				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 Window_frame_followingContext extends ParserRuleContext {
		public TerminalNode UNBOUNDED() { return getToken(VerdictSQLParser.UNBOUNDED, 0); }
		public TerminalNode FOLLOWING() { return getToken(VerdictSQLParser.FOLLOWING, 0); }
		public TerminalNode DECIMAL() { return getToken(VerdictSQLParser.DECIMAL, 0); }
		public Window_frame_followingContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_window_frame_following; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitWindow_frame_following(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Window_frame_followingContext window_frame_following() throws RecognitionException {
		Window_frame_followingContext _localctx = new Window_frame_followingContext(_ctx, getState());
		enterRule(_localctx, 234, RULE_window_frame_following);
		try {
			setState(1694);
			switch (_input.LA(1)) {
			case UNBOUNDED:
				enterOuterAlt(_localctx, 1);
				{
				setState(1690);
				match(UNBOUNDED);
				setState(1691);
				match(FOLLOWING);
				}
				break;
			case DECIMAL:
				enterOuterAlt(_localctx, 2);
				{
				setState(1692);
				match(DECIMAL);
				setState(1693);
				match(FOLLOWING);
				}
				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 Full_table_nameContext extends ParserRuleContext {
		public IdContext server;
		public IdContext database;
		public IdContext schema;
		public IdContext table;
		public List id() {
			return getRuleContexts(IdContext.class);
		}
		public IdContext id(int i) {
			return getRuleContext(IdContext.class,i);
		}
		public Full_table_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_full_table_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitFull_table_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Full_table_nameContext full_table_name() throws RecognitionException {
		Full_table_nameContext _localctx = new Full_table_nameContext(_ctx, getState());
		enterRule(_localctx, 236, RULE_full_table_name);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1713);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,197,_ctx) ) {
			case 1:
				{
				setState(1696);
				((Full_table_nameContext)_localctx).server = id();
				setState(1697);
				match(DOT);
				setState(1698);
				((Full_table_nameContext)_localctx).database = id();
				setState(1699);
				match(DOT);
				setState(1700);
				((Full_table_nameContext)_localctx).schema = id();
				setState(1701);
				match(DOT);
				}
				break;
			case 2:
				{
				setState(1703);
				((Full_table_nameContext)_localctx).database = id();
				setState(1704);
				match(DOT);
				setState(1706);
				_la = _input.LA(1);
				if (_la==DISTINCT || _la==LEFT || _la==RIGHT || ((((_la - 228)) & ~0x3f) == 0 && ((1L << (_la - 228)) & ((1L << (AGE - 228)) | (1L << (AREA - 228)) | (1L << (CENTER - 228)) | (1L << (CIRCLE - 228)))) != 0) || ((((_la - 293)) & ~0x3f) == 0 && ((1L << (_la - 293)) & ((1L << (COUNT - 293)) | (1L << (DATE - 293)) | (1L << (DAY - 293)) | (1L << (DAYNAME - 293)) | (1L << (DAYOFMONTH - 293)) | (1L << (DAYOFWEEK - 293)) | (1L << (DAYOFYEAR - 293)) | (1L << (DEGREES - 293)) | (1L << (DIAMETER - 293)))) != 0) || ((((_la - 367)) & ~0x3f) == 0 && ((1L << (_la - 367)) & ((1L << (HEIGHT - 367)) | (1L << (HOUR - 367)) | (1L << (LENGTH - 367)))) != 0) || ((((_la - 448)) & ~0x3f) == 0 && ((1L << (_la - 448)) & ((1L << (MAKEDATE - 448)) | (1L << (MICROSECOND - 448)) | (1L << (MINUTE - 448)) | (1L << (MOD - 448)) | (1L << (MONTH - 448)) | (1L << (MONTHNAME - 448)))) != 0) || ((((_la - 516)) & ~0x3f) == 0 && ((1L << (_la - 516)) & ((1L << (POWER - 516)) | (1L << (SCALE - 516)) | (1L << (SECOND - 516)))) != 0) || ((((_la - 618)) & ~0x3f) == 0 && ((1L << (_la - 618)) & ((1L << (TEXT - 618)) | (1L << (TIME - 618)) | (1L << (TIMESTAMP - 618)) | (1L << (VARIANCE - 618)) | (1L << (WEEKOFYEAR - 618)))) != 0) || ((((_la - 774)) & ~0x3f) == 0 && ((1L << (_la - 774)) & ((1L << (DOUBLE_QUOTE_ID - 774)) | (1L << (BACKTICK_ID - 774)) | (1L << (SQUARE_BRACKET_ID - 774)) | (1L << (ID - 774)))) != 0)) {
					{
					setState(1705);
					((Full_table_nameContext)_localctx).schema = id();
					}
				}

				setState(1708);
				match(DOT);
				}
				break;
			case 3:
				{
				setState(1710);
				((Full_table_nameContext)_localctx).schema = id();
				setState(1711);
				match(DOT);
				}
				break;
			}
			setState(1715);
			((Full_table_nameContext)_localctx).table = id();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Table_nameContext extends ParserRuleContext {
		public IdContext schema;
		public IdContext table;
		public List id() {
			return getRuleContexts(IdContext.class);
		}
		public IdContext id(int i) {
			return getRuleContext(IdContext.class,i);
		}
		public Table_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_table_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTable_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Table_nameContext table_name() throws RecognitionException {
		Table_nameContext _localctx = new Table_nameContext(_ctx, getState());
		enterRule(_localctx, 238, RULE_table_name);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1720);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,198,_ctx) ) {
			case 1:
				{
				setState(1717);
				((Table_nameContext)_localctx).schema = id();
				setState(1718);
				match(DOT);
				}
				break;
			}
			setState(1722);
			((Table_nameContext)_localctx).table = id();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class View_nameContext extends ParserRuleContext {
		public IdContext schema;
		public IdContext view;
		public List id() {
			return getRuleContexts(IdContext.class);
		}
		public IdContext id(int i) {
			return getRuleContext(IdContext.class,i);
		}
		public View_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_view_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitView_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final View_nameContext view_name() throws RecognitionException {
		View_nameContext _localctx = new View_nameContext(_ctx, getState());
		enterRule(_localctx, 240, RULE_view_name);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1727);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,199,_ctx) ) {
			case 1:
				{
				setState(1724);
				((View_nameContext)_localctx).schema = id();
				setState(1725);
				match(DOT);
				}
				break;
			}
			setState(1729);
			((View_nameContext)_localctx).view = id();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Func_proc_nameContext extends ParserRuleContext {
		public IdContext database;
		public IdContext schema;
		public IdContext procedure;
		public List id() {
			return getRuleContexts(IdContext.class);
		}
		public IdContext id(int i) {
			return getRuleContext(IdContext.class,i);
		}
		public Func_proc_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_func_proc_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitFunc_proc_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Func_proc_nameContext func_proc_name() throws RecognitionException {
		Func_proc_nameContext _localctx = new Func_proc_nameContext(_ctx, getState());
		enterRule(_localctx, 242, RULE_func_proc_name);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1741);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,201,_ctx) ) {
			case 1:
				{
				setState(1731);
				((Func_proc_nameContext)_localctx).database = id();
				setState(1732);
				match(DOT);
				setState(1734);
				_la = _input.LA(1);
				if (_la==DISTINCT || _la==LEFT || _la==RIGHT || ((((_la - 228)) & ~0x3f) == 0 && ((1L << (_la - 228)) & ((1L << (AGE - 228)) | (1L << (AREA - 228)) | (1L << (CENTER - 228)) | (1L << (CIRCLE - 228)))) != 0) || ((((_la - 293)) & ~0x3f) == 0 && ((1L << (_la - 293)) & ((1L << (COUNT - 293)) | (1L << (DATE - 293)) | (1L << (DAY - 293)) | (1L << (DAYNAME - 293)) | (1L << (DAYOFMONTH - 293)) | (1L << (DAYOFWEEK - 293)) | (1L << (DAYOFYEAR - 293)) | (1L << (DEGREES - 293)) | (1L << (DIAMETER - 293)))) != 0) || ((((_la - 367)) & ~0x3f) == 0 && ((1L << (_la - 367)) & ((1L << (HEIGHT - 367)) | (1L << (HOUR - 367)) | (1L << (LENGTH - 367)))) != 0) || ((((_la - 448)) & ~0x3f) == 0 && ((1L << (_la - 448)) & ((1L << (MAKEDATE - 448)) | (1L << (MICROSECOND - 448)) | (1L << (MINUTE - 448)) | (1L << (MOD - 448)) | (1L << (MONTH - 448)) | (1L << (MONTHNAME - 448)))) != 0) || ((((_la - 516)) & ~0x3f) == 0 && ((1L << (_la - 516)) & ((1L << (POWER - 516)) | (1L << (SCALE - 516)) | (1L << (SECOND - 516)))) != 0) || ((((_la - 618)) & ~0x3f) == 0 && ((1L << (_la - 618)) & ((1L << (TEXT - 618)) | (1L << (TIME - 618)) | (1L << (TIMESTAMP - 618)) | (1L << (VARIANCE - 618)) | (1L << (WEEKOFYEAR - 618)))) != 0) || ((((_la - 774)) & ~0x3f) == 0 && ((1L << (_la - 774)) & ((1L << (DOUBLE_QUOTE_ID - 774)) | (1L << (BACKTICK_ID - 774)) | (1L << (SQUARE_BRACKET_ID - 774)) | (1L << (ID - 774)))) != 0)) {
					{
					setState(1733);
					((Func_proc_nameContext)_localctx).schema = id();
					}
				}

				setState(1736);
				match(DOT);
				}
				break;
			case 2:
				{
				{
				setState(1738);
				((Func_proc_nameContext)_localctx).schema = id();
				}
				setState(1739);
				match(DOT);
				}
				break;
			}
			setState(1743);
			((Func_proc_nameContext)_localctx).procedure = id();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Ddl_objectContext extends ParserRuleContext {
		public Full_table_nameContext full_table_name() {
			return getRuleContext(Full_table_nameContext.class,0);
		}
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public Ddl_objectContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_ddl_object; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDdl_object(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Ddl_objectContext ddl_object() throws RecognitionException {
		Ddl_objectContext _localctx = new Ddl_objectContext(_ctx, getState());
		enterRule(_localctx, 244, RULE_ddl_object);
		try {
			setState(1747);
			switch (_input.LA(1)) {
			case DISTINCT:
			case LEFT:
			case RIGHT:
			case AGE:
			case AREA:
			case CENTER:
			case CIRCLE:
			case COUNT:
			case DATE:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DIAMETER:
			case HEIGHT:
			case HOUR:
			case LENGTH:
			case MAKEDATE:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONTH:
			case MONTHNAME:
			case POWER:
			case SCALE:
			case SECOND:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case VARIANCE:
			case WEEKOFYEAR:
			case DOUBLE_QUOTE_ID:
			case BACKTICK_ID:
			case SQUARE_BRACKET_ID:
			case ID:
				enterOuterAlt(_localctx, 1);
				{
				setState(1745);
				full_table_name();
				}
				break;
			case LOCAL_ID:
				enterOuterAlt(_localctx, 2);
				{
				setState(1746);
				match(LOCAL_ID);
				}
				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 Full_column_nameContext extends ParserRuleContext {
		public Column_nameContext column_name() {
			return getRuleContext(Column_nameContext.class,0);
		}
		public Table_nameContext table_name() {
			return getRuleContext(Table_nameContext.class,0);
		}
		public Full_column_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_full_column_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitFull_column_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Full_column_nameContext full_column_name() throws RecognitionException {
		Full_column_nameContext _localctx = new Full_column_nameContext(_ctx, getState());
		enterRule(_localctx, 246, RULE_full_column_name);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1752);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,203,_ctx) ) {
			case 1:
				{
				setState(1749);
				table_name();
				setState(1750);
				match(DOT);
				}
				break;
			}
			setState(1754);
			column_name();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Column_name_listContext extends ParserRuleContext {
		public List column_name() {
			return getRuleContexts(Column_nameContext.class);
		}
		public Column_nameContext column_name(int i) {
			return getRuleContext(Column_nameContext.class,i);
		}
		public Column_name_listContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_column_name_list; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitColumn_name_list(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Column_name_listContext column_name_list() throws RecognitionException {
		Column_name_listContext _localctx = new Column_name_listContext(_ctx, getState());
		enterRule(_localctx, 248, RULE_column_name_list);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1756);
			column_name();
			setState(1761);
			_errHandler.sync(this);
			_la = _input.LA(1);
			while (_la==COMMA) {
				{
				{
				setState(1757);
				match(COMMA);
				setState(1758);
				column_name();
				}
				}
				setState(1763);
				_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 Column_nameContext extends ParserRuleContext {
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public Column_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_column_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitColumn_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Column_nameContext column_name() throws RecognitionException {
		Column_nameContext _localctx = new Column_nameContext(_ctx, getState());
		enterRule(_localctx, 250, RULE_column_name);
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1764);
			id();
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Cursor_nameContext extends ParserRuleContext {
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public TerminalNode LOCAL_ID() { return getToken(VerdictSQLParser.LOCAL_ID, 0); }
		public Cursor_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_cursor_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitCursor_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Cursor_nameContext cursor_name() throws RecognitionException {
		Cursor_nameContext _localctx = new Cursor_nameContext(_ctx, getState());
		enterRule(_localctx, 252, RULE_cursor_name);
		try {
			setState(1768);
			switch (_input.LA(1)) {
			case DISTINCT:
			case LEFT:
			case RIGHT:
			case AGE:
			case AREA:
			case CENTER:
			case CIRCLE:
			case COUNT:
			case DATE:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DIAMETER:
			case HEIGHT:
			case HOUR:
			case LENGTH:
			case MAKEDATE:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONTH:
			case MONTHNAME:
			case POWER:
			case SCALE:
			case SECOND:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case VARIANCE:
			case WEEKOFYEAR:
			case DOUBLE_QUOTE_ID:
			case BACKTICK_ID:
			case SQUARE_BRACKET_ID:
			case ID:
				enterOuterAlt(_localctx, 1);
				{
				setState(1766);
				id();
				}
				break;
			case LOCAL_ID:
				enterOuterAlt(_localctx, 2);
				{
				setState(1767);
				match(LOCAL_ID);
				}
				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 On_offContext extends ParserRuleContext {
		public TerminalNode ON() { return getToken(VerdictSQLParser.ON, 0); }
		public TerminalNode OFF() { return getToken(VerdictSQLParser.OFF, 0); }
		public On_offContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_on_off; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitOn_off(this);
			else return visitor.visitChildren(this);
		}
	}

	public final On_offContext on_off() throws RecognitionException {
		On_offContext _localctx = new On_offContext(_ctx, getState());
		enterRule(_localctx, 254, RULE_on_off);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1770);
			_la = _input.LA(1);
			if ( !(_la==OFF || _la==ON) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class ClusteredContext extends ParserRuleContext {
		public TerminalNode CLUSTERED() { return getToken(VerdictSQLParser.CLUSTERED, 0); }
		public TerminalNode NONCLUSTERED() { return getToken(VerdictSQLParser.NONCLUSTERED, 0); }
		public ClusteredContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_clustered; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitClustered(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ClusteredContext clustered() throws RecognitionException {
		ClusteredContext _localctx = new ClusteredContext(_ctx, getState());
		enterRule(_localctx, 256, RULE_clustered);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1772);
			_la = _input.LA(1);
			if ( !(_la==CLUSTERED || _la==NONCLUSTERED) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Null_notnullContext extends ParserRuleContext {
		public TerminalNode NULL() { return getToken(VerdictSQLParser.NULL, 0); }
		public TerminalNode NOT() { return getToken(VerdictSQLParser.NOT, 0); }
		public Null_notnullContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_null_notnull; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitNull_notnull(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Null_notnullContext null_notnull() throws RecognitionException {
		Null_notnullContext _localctx = new Null_notnullContext(_ctx, getState());
		enterRule(_localctx, 258, RULE_null_notnull);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1775);
			_la = _input.LA(1);
			if (_la==NOT) {
				{
				setState(1774);
				match(NOT);
				}
			}

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

	public static class True_orfalseContext extends ParserRuleContext {
		public TerminalNode TRUE() { return getToken(VerdictSQLParser.TRUE, 0); }
		public TerminalNode FALSE() { return getToken(VerdictSQLParser.FALSE, 0); }
		public True_orfalseContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_true_orfalse; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitTrue_orfalse(this);
			else return visitor.visitChildren(this);
		}
	}

	public final True_orfalseContext true_orfalse() throws RecognitionException {
		True_orfalseContext _localctx = new True_orfalseContext(_ctx, getState());
		enterRule(_localctx, 260, RULE_true_orfalse);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1779);
			_la = _input.LA(1);
			if ( !(_la==FALSE || _la==TRUE) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Scalar_function_nameContext extends ParserRuleContext {
		public Func_proc_nameContext func_proc_name() {
			return getRuleContext(Func_proc_nameContext.class,0);
		}
		public TerminalNode RIGHT() { return getToken(VerdictSQLParser.RIGHT, 0); }
		public TerminalNode LEFT() { return getToken(VerdictSQLParser.LEFT, 0); }
		public TerminalNode BINARY_CHECKSUM() { return getToken(VerdictSQLParser.BINARY_CHECKSUM, 0); }
		public TerminalNode CHECKSUM() { return getToken(VerdictSQLParser.CHECKSUM, 0); }
		public Scalar_function_nameContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_scalar_function_name; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitScalar_function_name(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Scalar_function_nameContext scalar_function_name() throws RecognitionException {
		Scalar_function_nameContext _localctx = new Scalar_function_nameContext(_ctx, getState());
		enterRule(_localctx, 262, RULE_scalar_function_name);
		try {
			setState(1786);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,207,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1781);
				func_proc_name();
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1782);
				match(RIGHT);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1783);
				match(LEFT);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1784);
				match(BINARY_CHECKSUM);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1785);
				match(CHECKSUM);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Data_typeContext extends ParserRuleContext {
		public TerminalNode BIGINT() { return getToken(VerdictSQLParser.BIGINT, 0); }
		public TerminalNode BINARY() { return getToken(VerdictSQLParser.BINARY, 0); }
		public List DECIMAL() { return getTokens(VerdictSQLParser.DECIMAL); }
		public TerminalNode DECIMAL(int i) {
			return getToken(VerdictSQLParser.DECIMAL, i);
		}
		public TerminalNode BIT() { return getToken(VerdictSQLParser.BIT, 0); }
		public TerminalNode CHAR() { return getToken(VerdictSQLParser.CHAR, 0); }
		public TerminalNode DATE() { return getToken(VerdictSQLParser.DATE, 0); }
		public TerminalNode DATETIME() { return getToken(VerdictSQLParser.DATETIME, 0); }
		public TerminalNode DATETIME2() { return getToken(VerdictSQLParser.DATETIME2, 0); }
		public TerminalNode DATETIMEOFFSET() { return getToken(VerdictSQLParser.DATETIMEOFFSET, 0); }
		public TerminalNode DOUBLE() { return getToken(VerdictSQLParser.DOUBLE, 0); }
		public TerminalNode PRECISION() { return getToken(VerdictSQLParser.PRECISION, 0); }
		public TerminalNode FLOAT() { return getToken(VerdictSQLParser.FLOAT, 0); }
		public TerminalNode GEOGRAPHY() { return getToken(VerdictSQLParser.GEOGRAPHY, 0); }
		public TerminalNode GEOMETRY() { return getToken(VerdictSQLParser.GEOMETRY, 0); }
		public TerminalNode HIERARCHYID() { return getToken(VerdictSQLParser.HIERARCHYID, 0); }
		public TerminalNode IMAGE() { return getToken(VerdictSQLParser.IMAGE, 0); }
		public TerminalNode INT() { return getToken(VerdictSQLParser.INT, 0); }
		public TerminalNode MONEY() { return getToken(VerdictSQLParser.MONEY, 0); }
		public TerminalNode NCHAR() { return getToken(VerdictSQLParser.NCHAR, 0); }
		public TerminalNode NTEXT() { return getToken(VerdictSQLParser.NTEXT, 0); }
		public TerminalNode NUMERIC() { return getToken(VerdictSQLParser.NUMERIC, 0); }
		public TerminalNode NVARCHAR() { return getToken(VerdictSQLParser.NVARCHAR, 0); }
		public TerminalNode MAX() { return getToken(VerdictSQLParser.MAX, 0); }
		public TerminalNode REAL() { return getToken(VerdictSQLParser.REAL, 0); }
		public TerminalNode SMALLDATETIME() { return getToken(VerdictSQLParser.SMALLDATETIME, 0); }
		public TerminalNode SMALLINT() { return getToken(VerdictSQLParser.SMALLINT, 0); }
		public TerminalNode SMALLMONEY() { return getToken(VerdictSQLParser.SMALLMONEY, 0); }
		public TerminalNode SQL_VARIANT() { return getToken(VerdictSQLParser.SQL_VARIANT, 0); }
		public TerminalNode TEXT() { return getToken(VerdictSQLParser.TEXT, 0); }
		public TerminalNode TIME() { return getToken(VerdictSQLParser.TIME, 0); }
		public TerminalNode TIMESTAMP() { return getToken(VerdictSQLParser.TIMESTAMP, 0); }
		public TerminalNode WITHOUT() { return getToken(VerdictSQLParser.WITHOUT, 0); }
		public TerminalNode ZONE() { return getToken(VerdictSQLParser.ZONE, 0); }
		public TerminalNode TINYINT() { return getToken(VerdictSQLParser.TINYINT, 0); }
		public TerminalNode UNIQUEIDENTIFIER() { return getToken(VerdictSQLParser.UNIQUEIDENTIFIER, 0); }
		public TerminalNode VARBINARY() { return getToken(VerdictSQLParser.VARBINARY, 0); }
		public TerminalNode VARCHAR() { return getToken(VerdictSQLParser.VARCHAR, 0); }
		public TerminalNode XML() { return getToken(VerdictSQLParser.XML, 0); }
		public IdContext id() {
			return getRuleContext(IdContext.class,0);
		}
		public TerminalNode IDENTITY() { return getToken(VerdictSQLParser.IDENTITY, 0); }
		public Data_typeContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_data_type; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitData_type(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Data_typeContext data_type() throws RecognitionException {
		Data_typeContext _localctx = new Data_typeContext(_ctx, getState());
		enterRule(_localctx, 264, RULE_data_type);
		int _la;
		try {
			setState(1880);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,212,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1788);
				match(BIGINT);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1789);
				match(BINARY);
				setState(1790);
				match(LR_BRACKET);
				setState(1791);
				match(DECIMAL);
				setState(1792);
				match(RR_BRACKET);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1793);
				match(BIT);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1794);
				match(CHAR);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1795);
				match(CHAR);
				setState(1796);
				match(LR_BRACKET);
				setState(1797);
				match(DECIMAL);
				setState(1798);
				match(RR_BRACKET);
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1799);
				match(DATE);
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(1800);
				match(DATETIME);
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(1801);
				match(DATETIME2);
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(1802);
				match(DATETIMEOFFSET);
				setState(1803);
				match(LR_BRACKET);
				setState(1804);
				match(DECIMAL);
				setState(1805);
				match(RR_BRACKET);
				}
				break;
			case 10:
				enterOuterAlt(_localctx, 10);
				{
				setState(1806);
				match(DECIMAL);
				setState(1807);
				match(LR_BRACKET);
				setState(1808);
				match(DECIMAL);
				setState(1809);
				match(COMMA);
				setState(1810);
				match(DECIMAL);
				setState(1811);
				match(RR_BRACKET);
				}
				break;
			case 11:
				enterOuterAlt(_localctx, 11);
				{
				setState(1812);
				match(DOUBLE);
				setState(1814);
				_la = _input.LA(1);
				if (_la==PRECISION) {
					{
					setState(1813);
					match(PRECISION);
					}
				}

				}
				break;
			case 12:
				enterOuterAlt(_localctx, 12);
				{
				setState(1816);
				match(FLOAT);
				}
				break;
			case 13:
				enterOuterAlt(_localctx, 13);
				{
				setState(1817);
				match(GEOGRAPHY);
				}
				break;
			case 14:
				enterOuterAlt(_localctx, 14);
				{
				setState(1818);
				match(GEOMETRY);
				}
				break;
			case 15:
				enterOuterAlt(_localctx, 15);
				{
				setState(1819);
				match(HIERARCHYID);
				}
				break;
			case 16:
				enterOuterAlt(_localctx, 16);
				{
				setState(1820);
				match(IMAGE);
				}
				break;
			case 17:
				enterOuterAlt(_localctx, 17);
				{
				setState(1821);
				match(INT);
				}
				break;
			case 18:
				enterOuterAlt(_localctx, 18);
				{
				setState(1822);
				match(MONEY);
				}
				break;
			case 19:
				enterOuterAlt(_localctx, 19);
				{
				setState(1823);
				match(NCHAR);
				setState(1824);
				match(LR_BRACKET);
				setState(1825);
				match(DECIMAL);
				setState(1826);
				match(RR_BRACKET);
				}
				break;
			case 20:
				enterOuterAlt(_localctx, 20);
				{
				setState(1827);
				match(NTEXT);
				}
				break;
			case 21:
				enterOuterAlt(_localctx, 21);
				{
				setState(1828);
				match(NUMERIC);
				setState(1829);
				match(LR_BRACKET);
				setState(1830);
				match(DECIMAL);
				setState(1831);
				match(COMMA);
				setState(1832);
				match(DECIMAL);
				setState(1833);
				match(RR_BRACKET);
				}
				break;
			case 22:
				enterOuterAlt(_localctx, 22);
				{
				setState(1834);
				match(NVARCHAR);
				setState(1835);
				match(LR_BRACKET);
				setState(1836);
				match(DECIMAL);
				}
				break;
			case 23:
				enterOuterAlt(_localctx, 23);
				{
				setState(1837);
				match(MAX);
				setState(1838);
				match(RR_BRACKET);
				}
				break;
			case 24:
				enterOuterAlt(_localctx, 24);
				{
				setState(1839);
				match(REAL);
				}
				break;
			case 25:
				enterOuterAlt(_localctx, 25);
				{
				setState(1840);
				match(SMALLDATETIME);
				}
				break;
			case 26:
				enterOuterAlt(_localctx, 26);
				{
				setState(1841);
				match(SMALLINT);
				}
				break;
			case 27:
				enterOuterAlt(_localctx, 27);
				{
				setState(1842);
				match(SMALLMONEY);
				}
				break;
			case 28:
				enterOuterAlt(_localctx, 28);
				{
				setState(1843);
				match(SQL_VARIANT);
				}
				break;
			case 29:
				enterOuterAlt(_localctx, 29);
				{
				setState(1844);
				match(TEXT);
				}
				break;
			case 30:
				enterOuterAlt(_localctx, 30);
				{
				setState(1845);
				match(TIME);
				setState(1846);
				match(LR_BRACKET);
				setState(1847);
				match(DECIMAL);
				setState(1848);
				match(RR_BRACKET);
				}
				break;
			case 31:
				enterOuterAlt(_localctx, 31);
				{
				setState(1849);
				match(TIMESTAMP);
				}
				break;
			case 32:
				enterOuterAlt(_localctx, 32);
				{
				setState(1850);
				match(TIMESTAMP);
				setState(1851);
				match(WITHOUT);
				setState(1852);
				match(TIME);
				setState(1853);
				match(ZONE);
				}
				break;
			case 33:
				enterOuterAlt(_localctx, 33);
				{
				setState(1854);
				match(TINYINT);
				}
				break;
			case 34:
				enterOuterAlt(_localctx, 34);
				{
				setState(1855);
				match(UNIQUEIDENTIFIER);
				}
				break;
			case 35:
				enterOuterAlt(_localctx, 35);
				{
				setState(1856);
				match(VARBINARY);
				setState(1857);
				match(LR_BRACKET);
				setState(1858);
				match(DECIMAL);
				}
				break;
			case 36:
				enterOuterAlt(_localctx, 36);
				{
				setState(1859);
				match(MAX);
				setState(1860);
				match(RR_BRACKET);
				}
				break;
			case 37:
				enterOuterAlt(_localctx, 37);
				{
				setState(1861);
				match(VARCHAR);
				setState(1862);
				match(LR_BRACKET);
				setState(1863);
				match(DECIMAL);
				}
				break;
			case 38:
				enterOuterAlt(_localctx, 38);
				{
				setState(1864);
				match(MAX);
				setState(1865);
				match(RR_BRACKET);
				}
				break;
			case 39:
				enterOuterAlt(_localctx, 39);
				{
				setState(1866);
				match(XML);
				}
				break;
			case 40:
				enterOuterAlt(_localctx, 40);
				{
				setState(1867);
				id();
				setState(1869);
				_la = _input.LA(1);
				if (_la==IDENTITY) {
					{
					setState(1868);
					match(IDENTITY);
					}
				}

				setState(1878);
				_errHandler.sync(this);
				switch ( getInterpreter().adaptivePredict(_input,211,_ctx) ) {
				case 1:
					{
					setState(1871);
					match(LR_BRACKET);
					setState(1872);
					_la = _input.LA(1);
					if ( !(_la==MAX || _la==DECIMAL) ) {
					_errHandler.recoverInline(this);
					} else {
						consume();
					}
					setState(1875);
					_la = _input.LA(1);
					if (_la==COMMA) {
						{
						setState(1873);
						match(COMMA);
						setState(1874);
						match(DECIMAL);
						}
					}

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

	public static class Default_valueContext extends ParserRuleContext {
		public TerminalNode NULL() { return getToken(VerdictSQLParser.NULL, 0); }
		public ConstantContext constant() {
			return getRuleContext(ConstantContext.class,0);
		}
		public Default_valueContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_default_value; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitDefault_value(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Default_valueContext default_value() throws RecognitionException {
		Default_valueContext _localctx = new Default_valueContext(_ctx, getState());
		enterRule(_localctx, 266, RULE_default_value);
		try {
			setState(1884);
			switch (_input.LA(1)) {
			case NULL:
				enterOuterAlt(_localctx, 1);
				{
				setState(1882);
				match(NULL);
				}
				break;
			case DECIMAL:
			case STRING:
			case BINARY:
			case FLOAT:
			case REAL:
			case DOLLAR:
			case PLUS:
			case MINUS:
				enterOuterAlt(_localctx, 2);
				{
				setState(1883);
				constant();
				}
				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 ConstantContext extends ParserRuleContext {
		public TerminalNode STRING() { return getToken(VerdictSQLParser.STRING, 0); }
		public TerminalNode BINARY() { return getToken(VerdictSQLParser.BINARY, 0); }
		public NumberContext number() {
			return getRuleContext(NumberContext.class,0);
		}
		public TerminalNode REAL() { return getToken(VerdictSQLParser.REAL, 0); }
		public TerminalNode FLOAT() { return getToken(VerdictSQLParser.FLOAT, 0); }
		public SignContext sign() {
			return getRuleContext(SignContext.class,0);
		}
		public TerminalNode DECIMAL() { return getToken(VerdictSQLParser.DECIMAL, 0); }
		public ConstantContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_constant; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitConstant(this);
			else return visitor.visitChildren(this);
		}
	}

	public final ConstantContext constant() throws RecognitionException {
		ConstantContext _localctx = new ConstantContext(_ctx, getState());
		enterRule(_localctx, 268, RULE_constant);
		int _la;
		try {
			setState(1898);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,216,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1886);
				match(STRING);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1887);
				match(BINARY);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1888);
				number();
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1890);
				_la = _input.LA(1);
				if (_la==PLUS || _la==MINUS) {
					{
					setState(1889);
					sign();
					}
				}

				setState(1892);
				_la = _input.LA(1);
				if ( !(_la==FLOAT || _la==REAL) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1894);
				_la = _input.LA(1);
				if (_la==PLUS || _la==MINUS) {
					{
					setState(1893);
					sign();
					}
				}

				setState(1896);
				match(DOLLAR);
				setState(1897);
				_la = _input.LA(1);
				if ( !(_la==DECIMAL || _la==FLOAT) ) {
				_errHandler.recoverInline(this);
				} else {
					consume();
				}
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class NumberContext extends ParserRuleContext {
		public TerminalNode DECIMAL() { return getToken(VerdictSQLParser.DECIMAL, 0); }
		public SignContext sign() {
			return getRuleContext(SignContext.class,0);
		}
		public NumberContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_number; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitNumber(this);
			else return visitor.visitChildren(this);
		}
	}

	public final NumberContext number() throws RecognitionException {
		NumberContext _localctx = new NumberContext(_ctx, getState());
		enterRule(_localctx, 270, RULE_number);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1901);
			_la = _input.LA(1);
			if (_la==PLUS || _la==MINUS) {
				{
				setState(1900);
				sign();
				}
			}

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

	public static class SignContext extends ParserRuleContext {
		public TerminalNode PLUS() { return getToken(VerdictSQLParser.PLUS, 0); }
		public TerminalNode MINUS() { return getToken(VerdictSQLParser.MINUS, 0); }
		public SignContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_sign; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSign(this);
			else return visitor.visitChildren(this);
		}
	}

	public final SignContext sign() throws RecognitionException {
		SignContext _localctx = new SignContext(_ctx, getState());
		enterRule(_localctx, 272, RULE_sign);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1905);
			_la = _input.LA(1);
			if ( !(_la==PLUS || _la==MINUS) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class IdContext extends ParserRuleContext {
		public Simple_idContext simple_id() {
			return getRuleContext(Simple_idContext.class,0);
		}
		public TerminalNode DOUBLE_QUOTE_ID() { return getToken(VerdictSQLParser.DOUBLE_QUOTE_ID, 0); }
		public TerminalNode SQUARE_BRACKET_ID() { return getToken(VerdictSQLParser.SQUARE_BRACKET_ID, 0); }
		public TerminalNode BACKTICK_ID() { return getToken(VerdictSQLParser.BACKTICK_ID, 0); }
		public IdContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_id; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitId(this);
			else return visitor.visitChildren(this);
		}
	}

	public final IdContext id() throws RecognitionException {
		IdContext _localctx = new IdContext(_ctx, getState());
		enterRule(_localctx, 274, RULE_id);
		try {
			setState(1911);
			switch (_input.LA(1)) {
			case DISTINCT:
			case LEFT:
			case RIGHT:
			case AGE:
			case AREA:
			case CENTER:
			case CIRCLE:
			case COUNT:
			case DATE:
			case DAY:
			case DAYNAME:
			case DAYOFMONTH:
			case DAYOFWEEK:
			case DAYOFYEAR:
			case DEGREES:
			case DIAMETER:
			case HEIGHT:
			case HOUR:
			case LENGTH:
			case MAKEDATE:
			case MICROSECOND:
			case MINUTE:
			case MOD:
			case MONTH:
			case MONTHNAME:
			case POWER:
			case SCALE:
			case SECOND:
			case TEXT:
			case TIME:
			case TIMESTAMP:
			case VARIANCE:
			case WEEKOFYEAR:
			case ID:
				enterOuterAlt(_localctx, 1);
				{
				setState(1907);
				simple_id();
				}
				break;
			case DOUBLE_QUOTE_ID:
				enterOuterAlt(_localctx, 2);
				{
				setState(1908);
				match(DOUBLE_QUOTE_ID);
				}
				break;
			case SQUARE_BRACKET_ID:
				enterOuterAlt(_localctx, 3);
				{
				setState(1909);
				match(SQUARE_BRACKET_ID);
				}
				break;
			case BACKTICK_ID:
				enterOuterAlt(_localctx, 4);
				{
				setState(1910);
				match(BACKTICK_ID);
				}
				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 Simple_idContext extends ParserRuleContext {
		public TerminalNode ID() { return getToken(VerdictSQLParser.ID, 0); }
		public TerminalNode AGE() { return getToken(VerdictSQLParser.AGE, 0); }
		public TerminalNode AREA() { return getToken(VerdictSQLParser.AREA, 0); }
		public TerminalNode CENTER() { return getToken(VerdictSQLParser.CENTER, 0); }
		public TerminalNode CIRCLE() { return getToken(VerdictSQLParser.CIRCLE, 0); }
		public TerminalNode COUNT() { return getToken(VerdictSQLParser.COUNT, 0); }
		public TerminalNode DATE() { return getToken(VerdictSQLParser.DATE, 0); }
		public TerminalNode DAY() { return getToken(VerdictSQLParser.DAY, 0); }
		public TerminalNode DAYNAME() { return getToken(VerdictSQLParser.DAYNAME, 0); }
		public TerminalNode DAYOFMONTH() { return getToken(VerdictSQLParser.DAYOFMONTH, 0); }
		public TerminalNode DAYOFWEEK() { return getToken(VerdictSQLParser.DAYOFWEEK, 0); }
		public TerminalNode DAYOFYEAR() { return getToken(VerdictSQLParser.DAYOFYEAR, 0); }
		public TerminalNode DEGREES() { return getToken(VerdictSQLParser.DEGREES, 0); }
		public TerminalNode DIAMETER() { return getToken(VerdictSQLParser.DIAMETER, 0); }
		public TerminalNode DISTINCT() { return getToken(VerdictSQLParser.DISTINCT, 0); }
		public TerminalNode HEIGHT() { return getToken(VerdictSQLParser.HEIGHT, 0); }
		public TerminalNode HOUR() { return getToken(VerdictSQLParser.HOUR, 0); }
		public TerminalNode LEFT() { return getToken(VerdictSQLParser.LEFT, 0); }
		public TerminalNode LENGTH() { return getToken(VerdictSQLParser.LENGTH, 0); }
		public TerminalNode MAKEDATE() { return getToken(VerdictSQLParser.MAKEDATE, 0); }
		public TerminalNode MICROSECOND() { return getToken(VerdictSQLParser.MICROSECOND, 0); }
		public TerminalNode MINUTE() { return getToken(VerdictSQLParser.MINUTE, 0); }
		public TerminalNode MOD() { return getToken(VerdictSQLParser.MOD, 0); }
		public TerminalNode MONTH() { return getToken(VerdictSQLParser.MONTH, 0); }
		public TerminalNode MONTHNAME() { return getToken(VerdictSQLParser.MONTHNAME, 0); }
		public TerminalNode RIGHT() { return getToken(VerdictSQLParser.RIGHT, 0); }
		public TerminalNode POWER() { return getToken(VerdictSQLParser.POWER, 0); }
		public TerminalNode SCALE() { return getToken(VerdictSQLParser.SCALE, 0); }
		public TerminalNode SECOND() { return getToken(VerdictSQLParser.SECOND, 0); }
		public TerminalNode TEXT() { return getToken(VerdictSQLParser.TEXT, 0); }
		public TerminalNode TIME() { return getToken(VerdictSQLParser.TIME, 0); }
		public TerminalNode TIMESTAMP() { return getToken(VerdictSQLParser.TIMESTAMP, 0); }
		public TerminalNode VARIANCE() { return getToken(VerdictSQLParser.VARIANCE, 0); }
		public TerminalNode WEEKOFYEAR() { return getToken(VerdictSQLParser.WEEKOFYEAR, 0); }
		public Simple_idContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_simple_id; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitSimple_id(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Simple_idContext simple_id() throws RecognitionException {
		Simple_idContext _localctx = new Simple_idContext(_ctx, getState());
		enterRule(_localctx, 276, RULE_simple_id);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1913);
			_la = _input.LA(1);
			if ( !(_la==DISTINCT || _la==LEFT || _la==RIGHT || ((((_la - 228)) & ~0x3f) == 0 && ((1L << (_la - 228)) & ((1L << (AGE - 228)) | (1L << (AREA - 228)) | (1L << (CENTER - 228)) | (1L << (CIRCLE - 228)))) != 0) || ((((_la - 293)) & ~0x3f) == 0 && ((1L << (_la - 293)) & ((1L << (COUNT - 293)) | (1L << (DATE - 293)) | (1L << (DAY - 293)) | (1L << (DAYNAME - 293)) | (1L << (DAYOFMONTH - 293)) | (1L << (DAYOFWEEK - 293)) | (1L << (DAYOFYEAR - 293)) | (1L << (DEGREES - 293)) | (1L << (DIAMETER - 293)))) != 0) || ((((_la - 367)) & ~0x3f) == 0 && ((1L << (_la - 367)) & ((1L << (HEIGHT - 367)) | (1L << (HOUR - 367)) | (1L << (LENGTH - 367)))) != 0) || ((((_la - 448)) & ~0x3f) == 0 && ((1L << (_la - 448)) & ((1L << (MAKEDATE - 448)) | (1L << (MICROSECOND - 448)) | (1L << (MINUTE - 448)) | (1L << (MOD - 448)) | (1L << (MONTH - 448)) | (1L << (MONTHNAME - 448)))) != 0) || ((((_la - 516)) & ~0x3f) == 0 && ((1L << (_la - 516)) & ((1L << (POWER - 516)) | (1L << (SCALE - 516)) | (1L << (SECOND - 516)))) != 0) || ((((_la - 618)) & ~0x3f) == 0 && ((1L << (_la - 618)) & ((1L << (TEXT - 618)) | (1L << (TIME - 618)) | (1L << (TIMESTAMP - 618)) | (1L << (VARIANCE - 618)) | (1L << (WEEKOFYEAR - 618)))) != 0) || _la==ID) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Comparison_operatorContext extends ParserRuleContext {
		public Comparison_operatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_comparison_operator; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitComparison_operator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Comparison_operatorContext comparison_operator() throws RecognitionException {
		Comparison_operatorContext _localctx = new Comparison_operatorContext(_ctx, getState());
		enterRule(_localctx, 278, RULE_comparison_operator);
		try {
			setState(1930);
			_errHandler.sync(this);
			switch ( getInterpreter().adaptivePredict(_input,219,_ctx) ) {
			case 1:
				enterOuterAlt(_localctx, 1);
				{
				setState(1915);
				match(EQUAL);
				}
				break;
			case 2:
				enterOuterAlt(_localctx, 2);
				{
				setState(1916);
				match(GREATER);
				}
				break;
			case 3:
				enterOuterAlt(_localctx, 3);
				{
				setState(1917);
				match(LESS);
				}
				break;
			case 4:
				enterOuterAlt(_localctx, 4);
				{
				setState(1918);
				match(LESS);
				setState(1919);
				match(EQUAL);
				}
				break;
			case 5:
				enterOuterAlt(_localctx, 5);
				{
				setState(1920);
				match(GREATER);
				setState(1921);
				match(EQUAL);
				}
				break;
			case 6:
				enterOuterAlt(_localctx, 6);
				{
				setState(1922);
				match(LESS);
				setState(1923);
				match(GREATER);
				}
				break;
			case 7:
				enterOuterAlt(_localctx, 7);
				{
				setState(1924);
				match(EXCLAMATION);
				setState(1925);
				match(EQUAL);
				}
				break;
			case 8:
				enterOuterAlt(_localctx, 8);
				{
				setState(1926);
				match(EXCLAMATION);
				setState(1927);
				match(GREATER);
				}
				break;
			case 9:
				enterOuterAlt(_localctx, 9);
				{
				setState(1928);
				match(EXCLAMATION);
				setState(1929);
				match(LESS);
				}
				break;
			}
		}
		catch (RecognitionException re) {
			_localctx.exception = re;
			_errHandler.reportError(this, re);
			_errHandler.recover(this, re);
		}
		finally {
			exitRule();
		}
		return _localctx;
	}

	public static class Assignment_operatorContext extends ParserRuleContext {
		public Assignment_operatorContext(ParserRuleContext parent, int invokingState) {
			super(parent, invokingState);
		}
		@Override public int getRuleIndex() { return RULE_assignment_operator; }
		@Override
		public  T accept(ParseTreeVisitor visitor) {
			if ( visitor instanceof VerdictSQLParserVisitor ) return ((VerdictSQLParserVisitor)visitor).visitAssignment_operator(this);
			else return visitor.visitChildren(this);
		}
	}

	public final Assignment_operatorContext assignment_operator() throws RecognitionException {
		Assignment_operatorContext _localctx = new Assignment_operatorContext(_ctx, getState());
		enterRule(_localctx, 280, RULE_assignment_operator);
		int _la;
		try {
			enterOuterAlt(_localctx, 1);
			{
			setState(1932);
			_la = _input.LA(1);
			if ( !(((((_la - 788)) & ~0x3f) == 0 && ((1L << (_la - 788)) & ((1L << (PLUS_ASSIGN - 788)) | (1L << (MINUS_ASSIGN - 788)) | (1L << (MULT_ASSIGN - 788)) | (1L << (DIV_ASSIGN - 788)) | (1L << (MOD_ASSIGN - 788)) | (1L << (AND_ASSIGN - 788)) | (1L << (XOR_ASSIGN - 788)) | (1L << (OR_ASSIGN - 788)))) != 0)) ) {
			_errHandler.recoverInline(this);
			} else {
				consume();
			}
			}
		}
		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 42:
			return expression_sempred((ExpressionContext)_localctx, predIndex);
		case 55:
			return predicate_sempred((PredicateContext)_localctx, predIndex);
		}
		return true;
	}
	private boolean expression_sempred(ExpressionContext _localctx, int predIndex) {
		switch (predIndex) {
		case 0:
			return precpred(_ctx, 10);
		case 1:
			return precpred(_ctx, 8);
		case 2:
			return precpred(_ctx, 7);
		case 3:
			return precpred(_ctx, 5);
		case 4:
			return precpred(_ctx, 1);
		}
		return true;
	}
	private boolean predicate_sempred(PredicateContext _localctx, int predIndex) {
		switch (predIndex) {
		case 5:
			return precpred(_ctx, 9);
		}
		return true;
	}

	public static final String _serializedATN =
		"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\u0333\u0791\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.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
		"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
		"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
		"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+
		"\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+
		"`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"+
		"k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"+
		"w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t\u0080"+
		"\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084\4\u0085"+
		"\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089"+
		"\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e"+
		"\t\u008e\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\5\2\u012a"+
		"\n\2\3\3\3\3\3\3\3\3\3\3\5\3\u0131\n\3\3\3\3\3\3\3\3\3\3\3\5\3\u0138\n"+
		"\3\3\3\3\3\5\3\u013c\n\3\3\3\3\3\5\3\u0140\n\3\3\3\3\3\5\3\u0144\n\3\3"+
		"\4\3\4\3\4\5\4\u0149\n\4\3\5\3\5\3\5\3\5\3\5\5\5\u0150\n\5\3\6\3\6\3\6"+
		"\3\6\3\6\3\7\3\7\3\7\3\b\3\b\5\b\u015c\n\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t"+
		"\3\t\5\t\u0166\n\t\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13\5\13\u0170\n\13"+
		"\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\17\3"+
		"\17\3\17\7\17\u0183\n\17\f\17\16\17\u0186\13\17\5\17\u0188\n\17\3\20\7"+
		"\20\u018b\n\20\f\20\16\20\u018e\13\20\3\20\3\20\3\21\3\21\5\21\u0194\n"+
		"\21\3\22\3\22\3\22\3\22\3\22\3\22\5\22\u019c\n\22\3\23\5\23\u019f\n\23"+
		"\3\23\5\23\u01a2\n\23\3\23\3\23\5\23\u01a6\n\23\3\23\5\23\u01a9\n\23\3"+
		"\23\5\23\u01ac\n\23\3\24\3\24\3\24\3\25\3\25\3\25\3\25\7\25\u01b5\n\25"+
		"\f\25\16\25\u01b8\13\25\3\25\3\25\3\25\5\25\u01bd\n\25\3\25\3\25\3\25"+
		"\3\25\5\25\u01c3\n\25\5\25\u01c5\n\25\3\26\3\26\5\26\u01c9\n\26\3\26\5"+
		"\26\u01cc\n\26\3\26\5\26\u01cf\n\26\3\27\3\27\3\27\5\27\u01d4\n\27\3\27"+
		"\3\27\3\27\5\27\u01d9\n\27\3\27\5\27\u01dc\n\27\3\30\3\30\3\30\3\30\3"+
		"\30\3\30\5\30\u01e4\n\30\3\30\7\30\u01e7\n\30\f\30\16\30\u01ea\13\30\3"+
		"\30\5\30\u01ed\n\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\5\31\u01f6\n\31"+
		"\3\31\3\31\5\31\u01fa\n\31\3\31\3\31\3\31\5\31\u01ff\n\31\3\32\3\32\3"+
		"\32\3\32\3\32\3\32\3\32\7\32\u0208\n\32\f\32\16\32\u020b\13\32\3\32\3"+
		"\32\5\32\u020f\n\32\3\32\3\32\3\32\3\32\3\32\5\32\u0216\n\32\3\32\5\32"+
		"\u0219\n\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u0225"+
		"\n\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u022d\n\33\5\33\u022f\n\33\3"+
		"\34\3\34\3\34\3\34\5\34\u0235\n\34\3\34\3\34\3\34\3\34\3\34\5\34\u023c"+
		"\n\34\3\35\3\35\3\35\3\35\5\35\u0242\n\35\3\35\3\35\5\35\u0246\n\35\3"+
		"\36\3\36\3\36\3\36\5\36\u024c\n\36\3\36\3\36\3\36\7\36\u0251\n\36\f\36"+
		"\16\36\u0254\13\36\3\36\5\36\u0257\n\36\3\37\3\37\3\37\3\37\5\37\u025d"+
		"\n\37\3\37\3\37\3\37\5\37\u0262\n\37\3\37\3\37\3\37\3\37\3\37\5\37\u0269"+
		"\n\37\3\37\5\37\u026c\n\37\3 \3 \3 \5 \u0271\n \3!\3!\3!\3!\5!\u0277\n"+
		"!\3!\5!\u027a\n!\3\"\3\"\3\"\3#\3#\3#\5#\u0282\n#\3$\3$\5$\u0286\n$\3"+
		"$\5$\u0289\n$\3%\3%\3%\5%\u028e\n%\3&\3&\3&\3&\5&\u0294\n&\3&\7&\u0297"+
		"\n&\f&\16&\u029a\13&\3&\3&\3\'\3\'\5\'\u02a0\n\'\3(\3(\3(\3(\5(\u02a6"+
		"\n(\3(\5(\u02a9\n(\3)\3)\5)\u02ad\n)\3)\5)\u02b0\n)\3*\3*\5*\u02b4\n*"+
		"\3*\3*\3*\3*\3+\3+\3+\3+\3+\3+\5+\u02c0\n+\3+\5+\u02c3\n+\3+\3+\3+\3+"+
		"\3+\3+\3+\3+\3+\3+\3+\3+\5+\u02d1\n+\3+\5+\u02d4\n+\3+\3+\3+\3+\3+\5+"+
		"\u02db\n+\5+\u02dd\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,\u02f7\n,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,\3,"+
		"\3,\3,\3,\3,\3,\7,\u0309\n,\f,\16,\u030c\13,\3-\3-\3-\3-\3.\3.\3.\3/\3"+
		"/\3/\3/\3/\3/\3/\5/\u031c\n/\3\60\3\60\3\61\3\61\3\62\3\62\3\62\5\62\u0325"+
		"\n\62\3\62\3\62\3\62\7\62\u032a\n\62\f\62\16\62\u032d\13\62\3\63\3\63"+
		"\3\63\3\63\3\63\5\63\u0334\n\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\5\64"+
		"\u033d\n\64\3\64\3\64\5\64\u0341\n\64\3\64\3\64\3\64\3\64\3\64\3\64\3"+
		"\64\3\64\5\64\u034b\n\64\3\65\3\65\3\65\7\65\u0350\n\65\f\65\16\65\u0353"+
		"\13\65\3\66\3\66\3\66\7\66\u0358\n\66\f\66\16\66\u035b\13\66\3\67\3\67"+
		"\3\67\7\67\u0360\n\67\f\67\16\67\u0363\13\67\38\58\u0366\n8\38\38\39\3"+
		"9\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\39\59\u0381"+
		"\n9\39\39\39\39\39\39\39\59\u038a\n9\39\39\39\39\59\u0390\n9\39\39\39"+
		"\39\59\u0396\n9\39\39\39\39\59\u039c\n9\39\39\39\39\39\39\59\u03a4\n9"+
		"\39\39\39\39\79\u03aa\n9\f9\169\u03ad\139\3:\3:\3:\3:\3:\5:\u03b4\n:\3"+
		":\7:\u03b7\n:\f:\16:\u03ba\13:\3;\3;\5;\u03be\n;\3;\3;\5;\u03c2\n;\3;"+
		"\3;\3;\3;\3;\6;\u03c9\n;\r;\16;\u03ca\5;\u03cd\n;\3<\3<\5<\u03d1\n<\3"+
		"<\5<\u03d4\n<\3<\3<\3<\5<\u03d9\n<\3<\3<\3<\3<\7<\u03df\n<\f<\16<\u03e2"+
		"\13<\5<\u03e4\n<\3<\3<\5<\u03e8\n<\3<\3<\3<\3<\3<\7<\u03ef\n<\f<\16<\u03f2"+
		"\13<\3<\3<\5<\u03f6\n<\3<\3<\3<\3<\3<\3<\3<\7<\u03ff\n<\f<\16<\u0402\13"+
		"<\3<\3<\5<\u0406\n<\3<\3<\5<\u040a\n<\3=\3=\3=\3>\3>\3>\3?\3?\3?\3?\3"+
		"?\7?\u0417\n?\f?\16?\u041a\13?\3?\3?\3?\3?\3?\3?\3?\3?\3?\5?\u0425\n?"+
		"\5?\u0427\n?\3@\3@\3@\3@\3@\3@\5@\u042f\n@\3@\3@\3@\3@\3@\3@\5@\u0437"+
		"\n@\3@\5@\u043a\n@\5@\u043c\n@\3A\3A\3A\3A\3A\5A\u0443\nA\3B\3B\5B\u0447"+
		"\nB\3B\3B\3B\3B\5B\u044d\nB\3C\3C\3D\3D\3D\3D\3D\7D\u0456\nD\fD\16D\u0459"+
		"\13D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\7E\u046b\nE\fE\16"+
		"E\u046e\13E\3E\3E\3E\3E\3E\5E\u0475\nE\3F\3F\3F\3F\5F\u047b\nF\3G\3G\3"+
		"G\7G\u0480\nG\fG\16G\u0483\13G\3H\3H\3H\5H\u0488\nH\3H\3H\3H\5H\u048d"+
		"\nH\3H\3H\3H\3H\3H\3H\5H\u0495\nH\3H\5H\u0498\nH\5H\u049a\nH\3I\3I\3I"+
		"\3I\3J\3J\3J\3J\3J\5J\u04a5\nJ\3K\3K\7K\u04a9\nK\fK\16K\u04ac\13K\3L\3"+
		"L\5L\u04b0\nL\3L\3L\3L\5L\u04b5\nL\5L\u04b7\nL\5L\u04b9\nL\3M\3M\3M\3"+
		"M\3M\3M\3M\3M\3N\5N\u04c4\nN\3N\3N\5N\u04c8\nN\5N\u04ca\nN\3N\5N\u04cd"+
		"\nN\3N\3N\3N\3N\5N\u04d3\nN\3N\3N\3N\3N\3N\3N\3N\3N\3N\3N\3N\3N\3N\5N"+
		"\u04e2\nN\3N\5N\u04e5\nN\3N\5N\u04e8\nN\5N\u04ea\nN\3O\3O\3P\3P\3P\3P"+
		"\3P\3P\3P\3P\7P\u04f6\nP\fP\16P\u04f9\13P\3P\5P\u04fc\nP\3P\3P\3Q\3Q\3"+
		"Q\3Q\3R\3R\3R\3R\3R\5R\u0509\nR\3S\3S\3S\5S\u050e\nS\3T\3T\3U\5U\u0513"+
		"\nU\3U\3U\3V\3V\3W\3W\3X\3X\3Y\3Y\3Y\3Y\7Y\u0521\nY\fY\16Y\u0524\13Y\3"+
		"Y\3Y\3Z\3Z\5Z\u052a\nZ\3[\3[\3[\3[\3[\3[\3[\3[\3[\7[\u0535\n[\f[\16[\u0538"+
		"\13[\3\\\3\\\3\\\7\\\u053d\n\\\f\\\16\\\u0540\13\\\3]\3]\3]\3]\3]\3]\3"+
		"]\6]\u0549\n]\r]\16]\u054a\3]\3]\5]\u054f\n]\3]\3]\3]\3]\3]\3]\3]\3]\6"+
		"]\u0559\n]\r]\16]\u055a\3]\3]\5]\u055f\n]\3]\3]\5]\u0563\n]\3^\3^\3^\3"+
		"^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\5^\u0577\n^\3_\3_\3_\3_\3"+
		"_\3_\3_\3_\3_\3_\3_\3_\5_\u0585\n_\3`\3`\3`\3`\3`\3`\3`\3a\3a\3a\3a\3"+
		"a\3a\5a\u0594\na\3b\3b\3b\3b\3b\3b\5b\u059c\nb\3c\3c\3c\3c\3c\3c\3c\3"+
		"c\3c\5c\u05a7\nc\3c\3c\3d\3d\3d\3d\3d\3d\3d\5d\u05b2\nd\3d\3d\3e\3e\3"+
		"e\3e\3e\7e\u05bb\ne\fe\16e\u05be\13e\3e\3e\3f\3f\3f\3f\3f\3f\3f\3f\3f"+
		"\3g\3g\3g\3g\3g\3g\3g\3h\3h\3h\3h\3h\3h\3h\3h\3h\3h\5h\u05dc\nh\3i\3i"+
		"\3i\3j\3j\3j\3j\3j\3j\3j\3j\3j\3k\5k\u05eb\nk\3k\3k\3k\3k\3k\3l\5l\u05f3"+
		"\nl\3l\3l\3l\3l\3l\3l\3l\3m\3m\3m\3m\3n\3n\3n\3n\3n\3o\3o\3o\3o\3o\5o"+
		"\u060a\no\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o\3o"+
		"\5o\u0620\no\3o\3o\3o\3o\3o\5o\u0627\no\3o\3o\3o\3o\3o\5o\u062e\no\3o"+
		"\3o\3o\3o\3o\5o\u0635\no\3o\3o\3o\3o\3o\5o\u063c\no\3o\3o\3o\3o\3o\5o"+
		"\u0643\no\3o\3o\3o\3o\3o\5o\u064a\no\3o\3o\3o\3o\3o\5o\u0651\no\3o\3o"+
		"\3o\3o\5o\u0657\no\3o\3o\5o\u065b\no\3o\3o\3o\3o\3o\5o\u0662\no\3o\3o"+
		"\3o\3o\5o\u0668\no\3o\3o\5o\u066c\no\5o\u066e\no\3p\5p\u0671\np\3p\3p"+
		"\3q\3q\3q\3q\3r\3r\3r\5r\u067c\nr\3r\5r\u067f\nr\3r\5r\u0682\nr\3r\3r"+
		"\3s\3s\3s\3t\3t\3t\3t\3t\3t\5t\u068f\nt\3u\3u\5u\u0693\nu\3v\3v\3v\3v"+
		"\3v\3v\5v\u069b\nv\3w\3w\3w\3w\5w\u06a1\nw\3x\3x\3x\3x\3x\3x\3x\3x\3x"+
		"\3x\5x\u06ad\nx\3x\3x\3x\3x\3x\5x\u06b4\nx\3x\3x\3y\3y\3y\5y\u06bb\ny"+
		"\3y\3y\3z\3z\3z\5z\u06c2\nz\3z\3z\3{\3{\3{\5{\u06c9\n{\3{\3{\3{\3{\3{"+
		"\5{\u06d0\n{\3{\3{\3|\3|\5|\u06d6\n|\3}\3}\3}\5}\u06db\n}\3}\3}\3~\3~"+
		"\3~\7~\u06e2\n~\f~\16~\u06e5\13~\3\177\3\177\3\u0080\3\u0080\5\u0080\u06eb"+
		"\n\u0080\3\u0081\3\u0081\3\u0082\3\u0082\3\u0083\5\u0083\u06f2\n\u0083"+
		"\3\u0083\3\u0083\3\u0084\3\u0084\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085"+
		"\5\u0085\u06fd\n\u0085\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\5\u0086\u0719\n\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\3\u0086\3\u0086\5\u0086\u0750\n\u0086\3\u0086\3\u0086"+
		"\3\u0086\3\u0086\5\u0086\u0756\n\u0086\3\u0086\5\u0086\u0759\n\u0086\5"+
		"\u0086\u075b\n\u0086\3\u0087\3\u0087\5\u0087\u075f\n\u0087\3\u0088\3\u0088"+
		"\3\u0088\3\u0088\5\u0088\u0765\n\u0088\3\u0088\3\u0088\5\u0088\u0769\n"+
		"\u0088\3\u0088\3\u0088\5\u0088\u076d\n\u0088\3\u0089\5\u0089\u0770\n\u0089"+
		"\3\u0089\3\u0089\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b\3\u008b\5\u008b"+
		"\u077a\n\u008b\3\u008c\3\u008c\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d"+
		"\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d\3\u008d"+
		"\3\u008d\5\u008d\u078d\n\u008d\3\u008e\3\u008e\3\u008e\2\4Vp\u008f\2\4"+
		"\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNP"+
		"RTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e"+
		"\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6"+
		"\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be"+
		"\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6"+
		"\u00d8\u00da\u00dc\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee"+
		"\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106"+
		"\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\2)\4\2bb"+
		"\u0084\u0084\4\2\3\3\u0098\u0098\4\299\u00ac\u00ac\5\2\u00bd\u00bd\u00fc"+
		"\u00fc\u0146\u0146\4\2::\u00ad\u00ad\3\2\u032b\u032c\3\2\u0328\u032a\5"+
		"\2\u0321\u0321\u032b\u032c\u032e\u0333\7\2\u013a\u013a\u013f\u013f\u01d4"+
		"\u01d4\u01d6\u01d6\u02ba\u02bb\5\2\r\r\20\20\u00b8\u00b8\4\2tt\u00a5\u00a5"+
		"\4\2\r\rCC\4\2\u0231\u0231\u0234\u0234\4\2\u015c\u015c\u01d8\u01d8\4\2"+
		"\23\23@@\4\2aa\u008c\u008c\5\2aaxx\u011c\u011c\4\2dd\u0233\u0233\4\2~"+
		"~\u030b\u030c\5\2\\\\ss\u00a4\u00a4\7\2aaxx\u00b3\u00b3\u01ba\u01ba\u0229"+
		"\u0229\4\2\u030c\u030c\u030e\u030e\3\2\u030c\u030d\26\2&&\u0109\u0109"+
		"\u011c\u011d\u0159\u0159\u015f\u015f\u016e\u016e\u018c\u018d\u019d\u019e"+
		"\u01ab\u01ab\u01bf\u01bf\u01c6\u01c7\u0225\u0228\u0236\u0236\u0276\u0276"+
		"\u0288\u028a\u029a\u029a\u02ac\u02ac\u02b1\u02b3\u02f9\u02f9\u02fe\u02fe"+
		"\27\2/\60aaggyy\u00a9\u00a9\u00b9\u00ba\u00f4\u00f4\u00f6\u00f6\u01b3"+
		"\u01b3\u01be\u01be\u01c3\u01c5\u022c\u022c\u0241\u0241\u0254\u0254\u0260"+
		"\u0260\u0264\u0264\u0282\u0282\u028b\u028c\u02b6\u02b6\u02b8\u02b9\u02fc"+
		"\u02feL\2\60\60llss\177\177\u00a4\u00a4\u00b9\u00ba\u00c8\u00c8\u00e2"+
		"\u00e6\u00ea\u00eb\u00ed\u00ee\u00f0\u00f3\u00f5\u00f6\u00f8\u00f8\u0107"+
		"\u0107\u0119\u0119\u011f\u0120\u0123\u0125\u012f\u0134\u0140\u0140\u0147"+
		"\u0147\u014a\u014a\u014e\u014e\u015b\u015b\u015f\u0160\u0168\u0169\u016b"+
		"\u016b\u0177\u0177\u017d\u017d\u017f\u0181\u0190\u0192\u0195\u0196\u01ac"+
		"\u01ac\u01b3\u01b3\u01b6\u01b6\u01c2\u01c2\u01d1\u01d1\u01ea\u01ea\u01f7"+
		"\u01f9\u01fb\u01fc\u01ff\u0200\u0203\u0203\u0205\u0206\u0214\u0214\u021b"+
		"\u0223\u022a\u022a\u0230\u0230\u0232\u0232\u0241\u0245\u0248\u024a\u0253"+
		"\u0253\u025e\u025e\u0260\u0261\u0263\u0263\u0267\u0267\u0269\u0269\u0270"+
		"\u0270\u0273\u0273\u0277\u0277\u027d\u0280\u0284\u0284\u0286\u0287\u028b"+
		"\u028c\u02a2\u02a4\u02b5\u02b6\u02b8\u02b9\u02c4\u02c4\u02c6\u02ce\u02d1"+
		"\u02d2\u02d6\u02d8\u02de\u02e0\u02e8\u02e8\u02ee\u02ee\u02f7\u02f7\u0303"+
		"\u0303r\2\21\21\24\24\u0099\u0099\u00de\u00de\u00e0\u00e1\u00e6\u00e6"+
		"\u00e8\u00e9\u00ec\u00ec\u00ef\u00ef\u00f5\u00f5\u00f7\u00f7\u00f9\u00fb"+
		"\u0100\u0100\u0103\u0106\u0108\u0108\u010a\u010a\u010c\u010c\u010f\u0112"+
		"\u0114\u0115\u0118\u0119\u0122\u0122\u0126\u0126\u0129\u0129\u012b\u012b"+
		"\u012d\u012d\u013a\u013e\u0141\u0141\u0145\u0145\u014c\u014e\u0151\u0151"+
		"\u0154\u0156\u015d\u015d\u0162\u0164\u0171\u0172\u0174\u0176\u017a\u017a"+
		"\u0182\u0185\u0187\u018b\u018e\u018f\u0192\u0194\u0197\u019c\u019f\u01a2"+
		"\u01a7\u01a7\u01aa\u01aa\u01ac\u01ac\u01ae\u01af\u01b6\u01b8\u01bb\u01bd"+
		"\u01bf\u01c1\u01c9\u01c9\u01cb\u01cb\u01cd\u01cd\u01d0\u01d0\u01d4\u01d5"+
		"\u01d7\u01d7\u01d9\u01da\u01de\u01de\u01e3\u01e3\u01e7\u01e7\u01eb\u01eb"+
		"\u01f5\u01f6\u01fb\u01fc\u0200\u0202\u0204\u0204\u0209\u020a\u020c\u0211"+
		"\u022d\u022d\u0230\u0230\u0232\u0232\u0236\u0236\u0238\u0238\u023c\u023d"+
		"\u0240\u0240\u0246\u0247\u024b\u024c\u0251\u0251\u025a\u025a\u025f\u025f"+
		"\u0262\u0262\u0266\u0266\u0268\u0268\u026b\u026c\u026f\u026f\u0272\u0272"+
		"\u0274\u0274\u0278\u027c\u027e\u0280\u0283\u0284\u028d\u028d\u0292\u0292"+
		"\u0295\u0295\u029b\u029d\u02a8\u02ab\u02af\u02b0\u02b5\u02b5\u02b7\u02b7"+
		"\u02ba\u02ba\u02bc\u02c3\u02c5\u02c5\u02cf\u02d0\u02d3\u02d5\u02d9\u02db"+
		"\u02dd\u02dd\u02e1\u02e7\u02e9\u02ed\u02ef\u02f6\u02f8\u02f8\u02fa\u02fc"+
		"\u02ff\u0302\u0305\u0305\u030f\u030f\u032e\u032f\5\2\u0185\u0185\u02e2"+
		"\u02e3\u02e5\u02e6\3\2\u02c6\u02ce\32\2\64\6799\u00b4\u00b4\u00bc\u00bc"+
		"\u00d1\u00d1\u011a\u011a\u012a\u012a\u012c\u012c\u0149\u0149\u016a\u016a"+
		"\u01a6\u01a6\u01a8\u01a8\u01b1\u01b2\u01e2\u01e2\u01fa\u01fa\u01fd\u01fd"+
		"\u0211\u0212\u0256\u0256\u026a\u026a\u0271\u0271\u0281\u0281\u028e\u028f"+
		"\u0298\u0298\u02a6\u02a6\4\2\u0213\u0213\u0234\u0234\4\2\u0082\u0082\u0084"+
		"\u0084\4\2%%||\4\2RR\u00c7\u00c7\4\2\u01ca\u01ca\u030c\u030c\3\2\u0310"+
		"\u0311\4\2\u030c\u030c\u0310\u0310\36\2CCss\u00a4\u00a4\u00e6\u00e6\u00e8"+
		"\u00e8\u0112\u0112\u0119\u0119\u0127\u0127\u012d\u012d\u013a\u013e\u0141"+
		"\u0141\u0145\u0145\u0171\u0171\u0176\u0176\u01ac\u01ac\u01c2\u01c2\u01cd"+
		"\u01cd\u01d0\u01d1\u01d4\u01d5\u0206\u0206\u0238\u0238\u023c\u023c\u026c"+
		"\u026c\u026f\u026f\u0272\u0272\u02a2\u02a2\u02a8\u02a8\u030d\u030d\3\2"+
		"\u0316\u031d\u087f\2\u0129\3\2\2\2\4\u012b\3\2\2\2\6\u0148\3\2\2\2\b\u014a"+
		"\3\2\2\2\n\u0151\3\2\2\2\f\u0156\3\2\2\2\16\u015b\3\2\2\2\20\u0165\3\2"+
		"\2\2\22\u0167\3\2\2\2\24\u016b\3\2\2\2\26\u0173\3\2\2\2\30\u0178\3\2\2"+
		"\2\32\u017b\3\2\2\2\34\u0187\3\2\2\2\36\u018c\3\2\2\2 \u0193\3\2\2\2\""+
		"\u019b\3\2\2\2$\u019e\3\2\2\2&\u01ad\3\2\2\2(\u01b0\3\2\2\2*\u01c8\3\2"+
		"\2\2,\u01db\3\2\2\2.\u01dd\3\2\2\2\60\u01f0\3\2\2\2\62\u0200\3\2\2\2\64"+
		"\u022e\3\2\2\2\66\u0230\3\2\2\28\u023d\3\2\2\2:\u0247\3\2\2\2<\u026b\3"+
		"\2\2\2>\u026d\3\2\2\2@\u0272\3\2\2\2B\u027b\3\2\2\2D\u027e\3\2\2\2F\u0283"+
		"\3\2\2\2H\u028a\3\2\2\2J\u028f\3\2\2\2L\u029f\3\2\2\2N\u02a1\3\2\2\2P"+
		"\u02ac\3\2\2\2R\u02b3\3\2\2\2T\u02dc\3\2\2\2V\u02f6\3\2\2\2X\u030d\3\2"+
		"\2\2Z\u0311\3\2\2\2\\\u031b\3\2\2\2^\u031d\3\2\2\2`\u031f\3\2\2\2b\u0321"+
		"\3\2\2\2d\u032e\3\2\2\2f\u034a\3\2\2\2h\u034c\3\2\2\2j\u0354\3\2\2\2l"+
		"\u035c\3\2\2\2n\u0365\3\2\2\2p\u03a3\3\2\2\2r\u03b3\3\2\2\2t\u03c1\3\2"+
		"\2\2v\u03ce\3\2\2\2x\u040b\3\2\2\2z\u040e\3\2\2\2|\u0411\3\2\2\2~\u043b"+
		"\3\2\2\2\u0080\u043d\3\2\2\2\u0082\u0444\3\2\2\2\u0084\u044e\3\2\2\2\u0086"+
		"\u0450\3\2\2\2\u0088\u0474\3\2\2\2\u008a\u0476\3\2\2\2\u008c\u047c\3\2"+
		"\2\2\u008e\u0499\3\2\2\2\u0090\u049b\3\2\2\2\u0092\u04a4\3\2\2\2\u0094"+
		"\u04a6\3\2\2\2\u0096\u04b8\3\2\2\2\u0098\u04ba\3\2\2\2\u009a\u04e9\3\2"+
		"\2\2\u009c\u04eb\3\2\2\2\u009e\u04ed\3\2\2\2\u00a0\u04ff\3\2\2\2\u00a2"+
		"\u0508\3\2\2\2\u00a4\u050d\3\2\2\2\u00a6\u050f\3\2\2\2\u00a8\u0512\3\2"+
		"\2\2\u00aa\u0516\3\2\2\2\u00ac\u0518\3\2\2\2\u00ae\u051a\3\2\2\2\u00b0"+
		"\u051c\3\2\2\2\u00b2\u0529\3\2\2\2\u00b4\u052b\3\2\2\2\u00b6\u0539\3\2"+
		"\2\2\u00b8\u0562\3\2\2\2\u00ba\u0576\3\2\2\2\u00bc\u0584\3\2\2\2\u00be"+
		"\u0586\3\2\2\2\u00c0\u0593\3\2\2\2\u00c2\u059b\3\2\2\2\u00c4\u059d\3\2"+
		"\2\2\u00c6\u05aa\3\2\2\2\u00c8\u05b5\3\2\2\2\u00ca\u05c1\3\2\2\2\u00cc"+
		"\u05ca\3\2\2\2\u00ce\u05db\3\2\2\2\u00d0\u05dd\3\2\2\2\u00d2\u05e0\3\2"+
		"\2\2\u00d4\u05ea\3\2\2\2\u00d6\u05f2\3\2\2\2\u00d8\u05fb\3\2\2\2\u00da"+
		"\u05ff\3\2\2\2\u00dc\u066d\3\2\2\2\u00de\u0670\3\2\2\2\u00e0\u0674\3\2"+
		"\2\2\u00e2\u0678\3\2\2\2\u00e4\u0685\3\2\2\2\u00e6\u068e\3\2\2\2\u00e8"+
		"\u0692\3\2\2\2\u00ea\u069a\3\2\2\2\u00ec\u06a0\3\2\2\2\u00ee\u06b3\3\2"+
		"\2\2\u00f0\u06ba\3\2\2\2\u00f2\u06c1\3\2\2\2\u00f4\u06cf\3\2\2\2\u00f6"+
		"\u06d5\3\2\2\2\u00f8\u06da\3\2\2\2\u00fa\u06de\3\2\2\2\u00fc\u06e6\3\2"+
		"\2\2\u00fe\u06ea\3\2\2\2\u0100\u06ec\3\2\2\2\u0102\u06ee\3\2\2\2\u0104"+
		"\u06f1\3\2\2\2\u0106\u06f5\3\2\2\2\u0108\u06fc\3\2\2\2\u010a\u075a\3\2"+
		"\2\2\u010c\u075e\3\2\2\2\u010e\u076c\3\2\2\2\u0110\u076f\3\2\2\2\u0112"+
		"\u0773\3\2\2\2\u0114\u0779\3\2\2\2\u0116\u077b\3\2\2\2\u0118\u078c\3\2"+
		"\2\2\u011a\u078e\3\2\2\2\u011c\u012a\5$\23\2\u011d\u012a\5&\24\2\u011e"+
		"\u012a\5\4\3\2\u011f\u012a\5\b\5\2\u0120\u012a\5\n\6\2\u0121\u012a\5\f"+
		"\7\2\u0122\u012a\5\16\b\2\u0123\u012a\5\20\t\2\u0124\u012a\5.\30\2\u0125"+
		"\u012a\5\60\31\2\u0126\u012a\5\62\32\2\u0127\u012a\58\35\2\u0128\u012a"+
		"\5:\36\2\u0129\u011c\3\2\2\2\u0129\u011d\3\2\2\2\u0129\u011e\3\2\2\2\u0129"+
		"\u011f\3\2\2\2\u0129\u0120\3\2\2\2\u0129\u0121\3\2\2\2\u0129\u0122\3\2"+
		"\2\2\u0129\u0123\3\2\2\2\u0129\u0124\3\2\2\2\u0129\u0125\3\2\2\2\u0129"+
		"\u0126\3\2\2\2\u0129\u0127\3\2\2\2\u0129\u0128\3\2\2\2\u012a\3\3\2\2\2"+
		"\u012b\u012c\7\61\2\2\u012c\u0130\7\b\2\2\u012d\u012e\7g\2\2\u012e\u012f"+
		"\7}\2\2\u012f\u0131\7O\2\2\u0130\u012d\3\2\2\2\u0130\u0131\3\2\2\2\u0131"+
		"\u0132\3\2\2\2\u0132\u0133\5\u00f0y\2\u0133\u0134\7[\2\2\u0134\u0137\5"+
		"\u00f0y\2\u0135\u0136\7\u01cc\2\2\u0136\u0138\5\6\4\2\u0137\u0135\3\2"+
		"\2\2\u0137\u0138\3\2\2\2\u0138\u013b\3\2\2\2\u0139\u013a\t\2\2\2\u013a"+
		"\u013c\5\u00fc\177\2\u013b\u0139\3\2\2\2\u013b\u013c\3\2\2\2\u013c\u013f"+
		"\3\2\2\2\u013d\u013e\t\3\2\2\u013e\u0140\7\u0310\2\2\u013f\u013d\3\2\2"+
		"\2\u013f\u0140\3\2\2\2\u0140\u0143\3\2\2\2\u0141\u0142\7\31\2\2\u0142"+
		"\u0144\7\u030c\2\2\u0143\u0141\3\2\2\2\u0143\u0144\3\2\2\2\u0144\5\3\2"+
		"\2\2\u0145\u0149\5\34\17\2\u0146\u0149\7a\2\2\u0147\u0149\7\6\2\2\u0148"+
		"\u0145\3\2\2\2\u0148\u0146\3\2\2\2\u0148\u0147\3\2\2\2\u0149\7\3\2\2\2"+
		"\u014a\u014b\7F\2\2\u014b\u014c\7\b\2\2\u014c\u014f\5\u00f0y\2\u014d\u014e"+
		"\7\u0084\2\2\u014e\u0150\5\u00f0y\2\u014f\u014d\3\2\2\2\u014f\u0150\3"+
		"\2\2\2\u0150\t\3\2\2\2\u0151\u0152\7F\2\2\u0152\u0153\7\r\2\2\u0153\u0154"+
		"\7\b\2\2\u0154\u0155\5\u00f0y\2\u0155\13\3\2\2\2\u0156\u0157\7\5\2\2\u0157"+
		"\u0158\7\t\2\2\u0158\r\3\2\2\2\u0159\u015c\5\26\f\2\u015a\u015c\5\30\r"+
		"\2\u015b\u0159\3\2\2\2\u015b\u015a\3\2\2\2\u015c\17\3\2\2\2\u015d\u0166"+
		"\5> \2\u015e\u0166\5@!\2\u015f\u0166\5B\"\2\u0160\u0166\5D#\2\u0161\u0166"+
		"\5F$\2\u0162\u0166\5H%\2\u0163\u0166\5\22\n\2\u0164\u0166\5\24\13\2\u0165"+
		"\u015d\3\2\2\2\u0165\u015e\3\2\2\2\u0165\u015f\3\2\2\2\u0165\u0160\3\2"+
		"\2\2\u0165\u0161\3\2\2\2\u0165\u0162\3\2\2\2\u0165\u0163\3\2\2\2\u0165"+
		"\u0164\3\2\2\2\u0166\21\3\2\2\2\u0167\u0168\7\61\2\2\u0168\u0169\t\4\2"+
		"\2\u0169\u016a\5\u0114\u008b\2\u016a\23\3\2\2\2\u016b\u016c\7F\2\2\u016c"+
		"\u016f\t\4\2\2\u016d\u016e\7g\2\2\u016e\u0170\7O\2\2\u016f\u016d\3\2\2"+
		"\2\u016f\u0170\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u0172\5\u0114\u008b\2"+
		"\u0172\25\3\2\2\2\u0173\u0174\7\u00b5\2\2\u0174\u0175\5\32\16\2\u0175"+
		"\u0176\7\u0312\2\2\u0176\u0177\5\34\17\2\u0177\27\3\2\2\2\u0178\u0179"+
		"\7\13\2\2\u0179\u017a\5\32\16\2\u017a\31\3\2\2\2\u017b\u017c\7\u030d\2"+
		"\2\u017c\33\3\2\2\2\u017d\u0188\7\u0308\2\2\u017e\u0188\7\u030e\2\2\u017f"+
		"\u0184\7\u030d\2\2\u0180\u0181\7\u0325\2\2\u0181\u0183\7\u030d\2\2\u0182"+
		"\u0180\3\2\2\2\u0183\u0186\3\2\2\2\u0184\u0182\3\2\2\2\u0184\u0185\3\2"+
		"\2\2\u0185\u0188\3\2\2\2\u0186\u0184\3\2\2\2\u0187\u017d\3\2\2\2\u0187"+
		"\u017e\3\2\2\2\u0187\u017f\3\2\2\2\u0188\35\3\2\2\2\u0189\u018b\5 \21"+
		"\2\u018a\u0189\3\2\2\2\u018b\u018e\3\2\2\2\u018c\u018a\3\2\2\2\u018c\u018d"+
		"\3\2\2\2\u018d\u018f\3\2\2\2\u018e\u018c\3\2\2\2\u018f\u0190\7\2\2\3\u0190"+
		"\37\3\2\2\2\u0191\u0194\5\"\22\2\u0192\u0194\5\20\t\2\u0193\u0191\3\2"+
		"\2\2\u0193\u0192\3\2\2\2\u0194!\3\2\2\2\u0195\u019c\5.\30\2\u0196\u019c"+
		"\5\62\32\2\u0197\u019c\5\64\33\2\u0198\u019c\5\66\34\2\u0199\u019c\58"+
		"\35\2\u019a\u019c\5:\36\2\u019b\u0195\3\2\2\2\u019b\u0196\3\2\2\2\u019b"+
		"\u0197\3\2\2\2\u019b\u0198\3\2\2\2\u019b\u0199\3\2\2\2\u019b\u019a\3\2"+
		"\2\2\u019c#\3\2\2\2\u019d\u019f\5b\62\2\u019e\u019d\3\2\2\2\u019e\u019f"+
		"\3\2\2\2\u019f\u01a1\3\2\2\2\u01a0\u01a2\7\u0150\2\2\u01a1\u01a0\3\2\2"+
		"\2\u01a1\u01a2\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01a5\5r:\2\u01a4\u01a6"+
		"\5|?\2\u01a5\u01a4\3\2\2\2\u01a5\u01a6\3\2\2\2\u01a6\u01a8\3\2\2\2\u01a7"+
		"\u01a9\5z>\2\u01a8\u01a7\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01ab\3\2\2"+
		"\2\u01aa\u01ac\7\u0326\2\2\u01ab\u01aa\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac"+
		"%\3\2\2\2\u01ad\u01ae\7\n\2\2\u01ae\u01af\5$\23\2\u01af\'\3\2\2\2\u01b0"+
		"\u01b1\7\u01f1\2\2\u01b1\u01b6\5*\26\2\u01b2\u01b3\7\u0325\2\2\u01b3\u01b5"+
		"\5*\26\2\u01b4\u01b2\3\2\2\2\u01b5\u01b8\3\2\2\2\u01b6\u01b4\3\2\2\2\u01b6"+
		"\u01b7\3\2\2\2\u01b7\u01c4\3\2\2\2\u01b8\u01b6\3\2\2\2\u01b9\u01bc\7n"+
		"\2\2\u01ba\u01bd\7\u030b\2\2\u01bb\u01bd\5\u00f0y\2\u01bc\u01ba\3\2\2"+
		"\2\u01bc\u01bb\3\2\2\2\u01bd\u01c2\3\2\2\2\u01be\u01bf\7\u0323\2\2\u01bf"+
		"\u01c0\5\u00fa~\2\u01c0\u01c1\7\u0324\2\2\u01c1\u01c3\3\2\2\2\u01c2\u01be"+
		"\3\2\2\2\u01c2\u01c3\3\2\2\2\u01c3\u01c5\3\2\2\2\u01c4\u01b9\3\2\2\2\u01c4"+
		"\u01c5\3\2\2\2\u01c5)\3\2\2\2\u01c6\u01c9\5,\27\2\u01c7\u01c9\5V,\2\u01c8"+
		"\u01c6\3\2\2\2\u01c8\u01c7\3\2\2\2\u01c9\u01ce\3\2\2\2\u01ca\u01cc\7\22"+
		"\2\2\u01cb\u01ca\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd"+
		"\u01cf\5\u00b2Z\2\u01ce\u01cb\3\2\2\2\u01ce\u01cf\3\2\2\2\u01cf+\3\2\2"+
		"\2\u01d0\u01d4\7\u0143\2\2\u01d1\u01d4\7\u017c\2\2\u01d2\u01d4\5\u00f0"+
		"y\2\u01d3\u01d0\3\2\2\2\u01d3\u01d1\3\2\2\2\u01d3\u01d2\3\2\2\2\u01d4"+
		"\u01d5\3\2\2\2\u01d5\u01d8\7\u031e\2\2\u01d6\u01d9\7\u0328\2\2\u01d7\u01d9"+
		"\5\u00fc\177\2\u01d8\u01d6\3\2\2\2\u01d8\u01d7\3\2\2\2\u01d9\u01dc\3\2"+
		"\2\2\u01da\u01dc\7\u0304\2\2\u01db\u01d3\3\2\2\2\u01db\u01da\3\2\2\2\u01dc"+
		"-\3\2\2\2\u01dd\u01de\7\61\2\2\u01de\u01df\7\u00bd\2\2\u01df\u01e0\5\u00f0"+
		"y\2\u01e0\u01e1\7\u0323\2\2\u01e1\u01e8\5L\'\2\u01e2\u01e4\7\u0325\2\2"+
		"\u01e3\u01e2\3\2\2\2\u01e3\u01e4\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e7"+
		"\5L\'\2\u01e6\u01e3\3\2\2\2\u01e7\u01ea\3\2\2\2\u01e8\u01e6\3\2\2\2\u01e8"+
		"\u01e9\3\2\2\2\u01e9\u01ec\3\2\2\2\u01ea\u01e8\3\2\2\2\u01eb\u01ed\7\u0325"+
		"\2\2\u01ec\u01eb\3\2\2\2\u01ec\u01ed\3\2\2\2\u01ed\u01ee\3\2\2\2\u01ee"+
		"\u01ef\7\u0324\2\2\u01ef/\3\2\2\2\u01f0\u01f1\7\61\2\2\u01f1\u01f5\7\u00bd"+
		"\2\2\u01f2\u01f3\7g\2\2\u01f3\u01f4\7}\2\2\u01f4\u01f6\7O\2\2\u01f5\u01f2"+
		"\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7\u01f9\5\u00f0y"+
		"\2\u01f8\u01fa\7\u025d\2\2\u01f9\u01f8\3\2\2\2\u01f9\u01fa\3\2\2\2\u01fa"+
		"\u01fb\3\2\2\2\u01fb\u01fc\7\22\2\2\u01fc\u01fe\5$\23\2\u01fd\u01ff\7"+
		"\u0326\2\2\u01fe\u01fd\3\2\2\2\u01fe\u01ff\3\2\2\2\u01ff\61\3\2\2\2\u0200"+
		"\u0201\7\61\2\2\u0201\u0202\7\u00d4\2\2\u0202\u020e\5\u00f2z\2\u0203\u0204"+
		"\7\u0323\2\2\u0204\u0209\5\u00fc\177\2\u0205\u0206\7\u0325\2\2\u0206\u0208"+
		"\5\u00fc\177\2\u0207\u0205\3\2\2\2\u0208\u020b\3\2\2\2\u0209\u0207\3\2"+
		"\2\2\u0209\u020a\3\2\2\2\u020a\u020c\3\2\2\2\u020b\u0209\3\2\2\2\u020c"+
		"\u020d\7\u0324\2\2\u020d\u020f\3\2\2\2\u020e\u0203\3\2\2\2\u020e\u020f"+
		"\3\2\2\2\u020f\u0210\3\2\2\2\u0210\u0211\7\22\2\2\u0211\u0215\5$\23\2"+
		"\u0212\u0213\7\u00d9\2\2\u0213\u0214\7\"\2\2\u0214\u0216\7\u008a\2\2\u0215"+
		"\u0212\3\2\2\2\u0215\u0216\3\2\2\2\u0216\u0218\3\2\2\2\u0217\u0219\7\u0326"+
		"\2\2\u0218\u0217\3\2\2\2\u0218\u0219\3\2\2\2\u0219\63\3\2\2\2\u021a\u021b"+
		"\7\16\2\2\u021b\u021c\7\u00bd\2\2\u021c\u021d\5\u00f0y\2\u021d\u021e\7"+
		"\u00b5\2\2\u021e\u021f\7\u0323\2\2\u021f\u0220\7\u01b5\2\2\u0220\u0221"+
		"\7\u0312\2\2\u0221\u0222\t\5\2\2\u0222\u0224\7\u0324\2\2\u0223\u0225\7"+
		"\u0326\2\2\u0224\u0223\3\2\2\2\u0224\u0225\3\2\2\2\u0225\u022f\3\2\2\2"+
		"\u0226\u0227\7\16\2\2\u0227\u0228\7\u00bd\2\2\u0228\u0229\5\u00f0y\2\u0229"+
		"\u022a\7\f\2\2\u022a\u022c\5L\'\2\u022b\u022d\7\u0326\2\2\u022c\u022b"+
		"\3\2\2\2\u022c\u022d\3\2\2\2\u022d\u022f\3\2\2\2\u022e\u021a\3\2\2\2\u022e"+
		"\u0226\3\2\2\2\u022f\65\3\2\2\2\u0230\u0231\7\16\2\2\u0231\u0234\79\2"+
		"\2\u0232\u0235\5\u0114\u008b\2\u0233\u0235\7\63\2\2\u0234\u0232\3\2\2"+
		"\2\u0234\u0233\3\2\2\2\u0235\u0236\3\2\2\2\u0236\u0237\7\u01d2\2\2\u0237"+
		"\u0238\7\u01db\2\2\u0238\u0239\7\u0312\2\2\u0239\u023b\5\u0114\u008b\2"+
		"\u023a\u023c\7\u0326\2\2\u023b\u023a\3\2\2\2\u023b\u023c\3\2\2\2\u023c"+
		"\67\3\2\2\2\u023d\u023e\7F\2\2\u023e\u0241\7\u00bd\2\2\u023f\u0240\7g"+
		"\2\2\u0240\u0242\7O\2\2\u0241\u023f\3\2\2\2\u0241\u0242\3\2\2\2\u0242"+
		"\u0243\3\2\2\2\u0243\u0245\5\u00f0y\2\u0244\u0246\7\u0326\2\2\u0245\u0244"+
		"\3\2\2\2\u0245\u0246\3\2\2\2\u02469\3\2\2\2\u0247\u0248\7F\2\2\u0248\u024b"+
		"\7\u00d4\2\2\u0249\u024a\7g\2\2\u024a\u024c\7O\2\2\u024b\u0249\3\2\2\2"+
		"\u024b\u024c\3\2\2\2\u024c\u024d\3\2\2\2\u024d\u0252\5\u00f2z\2\u024e"+
		"\u024f\7\u0325\2\2\u024f\u0251\5\u00f2z\2\u0250\u024e\3\2\2\2\u0251\u0254"+
		"\3\2\2\2\u0252\u0250\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u0256\3\2\2\2\u0254"+
		"\u0252\3\2\2\2\u0255\u0257\7\u0326\2\2\u0256\u0255\3\2\2\2\u0256\u0257"+
		"\3\2\2\2\u0257;\3\2\2\2\u0258\u0259\7\u00b5\2\2\u0259\u025c\7\u030b\2"+
		"\2\u025a\u025b\7\u031e\2\2\u025b\u025d\5\u0114\u008b\2\u025c\u025a\3\2"+
		"\2\2\u025c\u025d\3\2\2\2\u025d\u025e\3\2\2\2\u025e\u025f\7\u0312\2\2\u025f"+
		"\u0261\5V,\2\u0260\u0262\7\u0326\2\2\u0261\u0260\3\2\2\2\u0261\u0262\3"+
		"\2\2\2\u0262\u026c\3\2\2\2\u0263\u0264\7\u00b5\2\2\u0264\u0265\7\u030b"+
		"\2\2\u0265\u0266\5\u011a\u008e\2\u0266\u0268\5V,\2\u0267\u0269\7\u0326"+
		"\2\2\u0268\u0267\3\2\2\2\u0268\u0269\3\2\2\2\u0269\u026c\3\2\2\2\u026a"+
		"\u026c\5T+\2\u026b\u0258\3\2\2\2\u026b\u0263\3\2\2\2\u026b\u026a\3\2\2"+
		"\2\u026c=\3\2\2\2\u026d\u026e\7\u00d0\2\2\u026e\u0270\5\u0114\u008b\2"+
		"\u026f\u0271\7\u0326\2\2\u0270\u026f\3\2\2\2\u0270\u0271\3\2\2\2\u0271"+
		"?\3\2\2\2\u0272\u0273\7\5\2\2\u0273\u0276\7\u00be\2\2\u0274\u0275\7h\2"+
		"\2\u0275\u0277\5\u0114\u008b\2\u0276\u0274\3\2\2\2\u0276\u0277\3\2\2\2"+
		"\u0277\u0279\3\2\2\2\u0278\u027a\7\u0326\2\2\u0279\u0278\3\2\2\2\u0279"+
		"\u027a\3\2\2\2\u027aA\3\2\2\2\u027b\u027c\7\5\2\2\u027c\u027d\t\6\2\2"+
		"\u027dC\3\2\2\2\u027e\u027f\7A\2\2\u027f\u0281\5\u00f0y\2\u0280\u0282"+
		"\7\u0326\2\2\u0281\u0280\3\2\2\2\u0281\u0282\3\2\2\2\u0282E\3\2\2\2\u0283"+
		"\u0285\7\u021a\2\2\u0284\u0286\5\u0114\u008b\2\u0285\u0284\3\2\2\2\u0285"+
		"\u0286\3\2\2\2\u0286\u0288\3\2\2\2\u0287\u0289\7\u0326\2\2\u0288\u0287"+
		"\3\2\2\2\u0288\u0289\3\2\2\2\u0289G\3\2\2\2\u028a\u028b\7\5\2\2\u028b"+
		"\u028d\7\u011e\2\2\u028c\u028e\7\u0326\2\2\u028d\u028c\3\2\2\2\u028d\u028e"+
		"\3\2\2\2\u028eI\3\2\2\2\u028f\u0290\7\u00bd\2\2\u0290\u0291\7\u0323\2"+
		"\2\u0291\u0298\5L\'\2\u0292\u0294\7\u0325\2\2\u0293\u0292\3\2\2\2\u0293"+
		"\u0294\3\2\2\2\u0294\u0295\3\2\2\2\u0295\u0297\5L\'\2\u0296\u0293\3\2"+
		"\2\2\u0297\u029a\3\2\2\2\u0298\u0296\3\2\2\2\u0298\u0299\3\2\2\2\u0299"+
		"\u029b\3\2\2\2\u029a\u0298\3\2\2\2\u029b\u029c\7\u0324\2\2\u029cK\3\2"+
		"\2\2\u029d\u02a0\5N(\2\u029e\u02a0\5R*\2\u029f\u029d\3\2\2\2\u029f\u029e"+
		"\3\2\2\2\u02a0M\3\2\2\2\u02a1\u02a5\5\u00fc\177\2\u02a2\u02a6\5\u010a"+
		"\u0086\2\u02a3\u02a4\7\22\2\2\u02a4\u02a6\5V,\2\u02a5\u02a2\3\2\2\2\u02a5"+
		"\u02a3\3\2\2\2\u02a6\u02a8\3\2\2\2\u02a7\u02a9\5\u0104\u0083\2\u02a8\u02a7"+
		"\3\2\2\2\u02a8\u02a9\3\2\2\2\u02a9O\3\2\2\2\u02aa\u02ab\7+\2\2\u02ab\u02ad"+
		"\5\u0114\u008b\2\u02ac\u02aa\3\2\2\2\u02ac\u02ad\3\2\2\2\u02ad\u02af\3"+
		"\2\2\2\u02ae\u02b0\5\u0104\u0083\2\u02af\u02ae\3\2\2\2\u02af\u02b0\3\2"+
		"\2\2\u02b0Q\3\2\2\2\u02b1\u02b2\7+\2\2\u02b2\u02b4\5\u0114\u008b\2\u02b3"+
		"\u02b1\3\2\2\2\u02b3\u02b4\3\2\2\2\u02b4\u02b5\3\2\2\2\u02b5\u02b6\7\u0323"+
		"\2\2\u02b6\u02b7\5\u00fa~\2\u02b7\u02b8\7\u0324\2\2\u02b8S\3\2\2\2\u02b9"+
		"\u02ba\7\u00b5\2\2\u02ba\u02bf\5\u0114\u008b\2\u02bb\u02c0\5\u0114\u008b"+
		"\2\u02bc\u02c0\5\u010e\u0088\2\u02bd\u02c0\7\u030b\2\2\u02be\u02c0\5\u0100"+
		"\u0081\2\u02bf\u02bb\3\2\2\2\u02bf\u02bc\3\2\2\2\u02bf\u02bd\3\2\2\2\u02bf"+
		"\u02be\3\2\2\2\u02c0\u02c2\3\2\2\2\u02c1\u02c3\7\u0326\2\2\u02c2\u02c1"+
		"\3\2\2\2\u02c2\u02c3\3\2\2\2\u02c3\u02dd\3\2\2\2\u02c4\u02c5\7\u00b5\2"+
		"\2\u02c5\u02c6\7\u00c5\2\2\u02c6\u02c7\7\u0186\2\2\u02c7\u02d0\7\u01ad"+
		"\2\2\u02c8\u02c9\7\u009a\2\2\u02c9\u02d1\7\u0294\2\2\u02ca\u02cb\7\u009a"+
		"\2\2\u02cb\u02d1\7\u011b\2\2\u02cc\u02cd\7\u022b\2\2\u02cd\u02d1\7\u009a"+
		"\2\2\u02ce\u02d1\7\u0250\2\2\u02cf\u02d1\7\u023f\2\2\u02d0\u02c8\3\2\2"+
		"\2\u02d0\u02ca\3\2\2\2\u02d0\u02cc\3\2\2\2\u02d0\u02ce\3\2\2\2\u02d0\u02cf"+
		"\3\2\2\2\u02d1\u02d3\3\2\2\2\u02d2\u02d4\7\u0326\2\2\u02d3\u02d2\3\2\2"+
		"\2\u02d3\u02d4\3\2\2\2\u02d4\u02dd\3\2\2\2\u02d5\u02d6\7\u00b5\2\2\u02d6"+
		"\u02d7\7f\2\2\u02d7\u02d8\5\u00f0y\2\u02d8\u02da\5\u0100\u0081\2\u02d9"+
		"\u02db\7\u0326\2\2\u02da\u02d9\3\2\2\2\u02da\u02db\3\2\2\2\u02db\u02dd"+
		"\3\2\2\2\u02dc\u02b9\3\2\2\2\u02dc\u02c4\3\2\2\2\u02dc\u02d5\3\2\2\2\u02dd"+
		"U\3\2\2\2\u02de\u02df\b,\1\2\u02df\u02f7\7~\2\2\u02e0\u02f7\7\u030b\2"+
		"\2\u02e1\u02f7\5\u010e\u0088\2\u02e2\u02f7\5\u0106\u0084\2\u02e3\u02f7"+
		"\5\u00b8]\2\u02e4\u02f7\5\u00f8}\2\u02e5\u02e6\7\u0323\2\2\u02e6\u02e7"+
		"\5V,\2\u02e7\u02e8\7\u0324\2\2\u02e8\u02f7\3\2\2\2\u02e9\u02ea\7\u0323"+
		"\2\2\u02ea\u02eb\5^\60\2\u02eb\u02ec\7\u0324\2\2\u02ec\u02f7\3\2\2\2\u02ed"+
		"\u02ee\7\u032d\2\2\u02ee\u02f7\5V,\r\u02ef\u02f0\t\7\2\2\u02f0\u02f7\5"+
		"V,\13\u02f1\u02f2\7}\2\2\u02f2\u02f7\5V,\b\u02f3\u02f7\5X-\2\u02f4\u02f7"+
		"\5Z.\2\u02f5\u02f7\5\u00a4S\2\u02f6\u02de\3\2\2\2\u02f6\u02e0\3\2\2\2"+
		"\u02f6\u02e1\3\2\2\2\u02f6\u02e2\3\2\2\2\u02f6\u02e3\3\2\2\2\u02f6\u02e4"+
		"\3\2\2\2\u02f6\u02e5\3\2\2\2\u02f6\u02e9\3\2\2\2\u02f6\u02ed\3\2\2\2\u02f6"+
		"\u02ef\3\2\2\2\u02f6\u02f1\3\2\2\2\u02f6\u02f3\3\2\2\2\u02f6\u02f4\3\2"+
		"\2\2\u02f6\u02f5\3\2\2\2\u02f7\u030a\3\2\2\2\u02f8\u02f9\f\f\2\2\u02f9"+
		"\u02fa\t\b\2\2\u02fa\u0309\5V,\r\u02fb\u02fc\f\n\2\2\u02fc\u02fd\t\t\2"+
		"\2\u02fd\u0309\5V,\13\u02fe\u02ff\f\t\2\2\u02ff\u0300\5\u0118\u008d\2"+
		"\u0300\u0301\5V,\n\u0301\u0309\3\2\2\2\u0302\u0303\f\7\2\2\u0303\u0304"+
		"\7o\2\2\u0304\u0309\5\u0104\u0083\2\u0305\u0306\f\3\2\2\u0306\u0307\7"+
		"\'\2\2\u0307\u0309\5\u0114\u008b\2\u0308\u02f8\3\2\2\2\u0308\u02fb\3\2"+
		"\2\2\u0308\u02fe\3\2\2\2\u0308\u0302\3\2\2\2\u0308\u0305\3\2\2\2\u0309"+
		"\u030c\3\2\2\2\u030a\u0308\3\2\2\2\u030a\u030b\3\2\2\2\u030bW\3\2\2\2"+
		"\u030c\u030a\3\2\2\2\u030d\u030e\7\u017e\2\2\u030e\u030f\5\\/\2\u030f"+
		"\u0310\t\n\2\2\u0310Y\3\2\2\2\u0311\u0312\7\u012d\2\2\u0312\u0313\5\\"+
		"/\2\u0313[\3\2\2\2\u0314\u031c\7~\2\2\u0315\u031c\5\u010e\u0088\2\u0316"+
		"\u031c\7\u030b\2\2\u0317\u0318\7\u0323\2\2\u0318\u0319\5\\/\2\u0319\u031a"+
		"\7\u0324\2\2\u031a\u031c\3\2\2\2\u031b\u0314\3\2\2\2\u031b\u0315\3\2\2"+
		"\2\u031b\u0316\3\2\2\2\u031b\u0317\3\2\2\2\u031c]\3\2\2\2\u031d\u031e"+
		"\5$\23\2\u031e_\3\2\2\2\u031f\u0320\5v<\2\u0320a\3\2\2\2\u0321\u0324\7"+
		"\u00d9\2\2\u0322\u0323\7\u02b4\2\2\u0323\u0325\7\u0325\2\2\u0324\u0322"+
		"\3\2\2\2\u0324\u0325\3\2\2\2\u0325\u0326\3\2\2\2\u0326\u032b\5d\63\2\u0327"+
		"\u0328\7\u0325\2\2\u0328\u032a\5d\63\2\u0329\u0327\3\2\2\2\u032a\u032d"+
		"\3\2\2\2\u032b\u0329\3\2\2\2\u032b\u032c\3\2\2\2\u032cc\3\2\2\2\u032d"+
		"\u032b\3\2\2\2\u032e\u0333\5\u0114\u008b\2\u032f\u0330\7\u0323\2\2\u0330"+
		"\u0331\5\u00fa~\2\u0331\u0332\7\u0324\2\2\u0332\u0334\3\2\2\2\u0333\u032f"+
		"\3\2\2\2\u0333\u0334\3\2\2\2\u0334\u0335\3\2\2\2\u0335\u0336\7\22\2\2"+
		"\u0336\u0337\7\u0323\2\2\u0337\u0338\5$\23\2\u0338\u0339\7\u0324\2\2\u0339"+
		"e\3\2\2\2\u033a\u033d\5\u00f8}\2\u033b\u033d\7\u030b\2\2\u033c\u033a\3"+
		"\2\2\2\u033c\u033b\3\2\2\2\u033d\u0340\3\2\2\2\u033e\u0341\7\u0312\2\2"+
		"\u033f\u0341\5\u011a\u008e\2\u0340\u033e\3\2\2\2\u0340\u033f\3\2\2\2\u0341"+
		"\u0342\3\2\2\2\u0342\u034b\5V,\2\u0343\u0344\5\u0114\u008b\2\u0344\u0345"+
		"\7\u031e\2\2\u0345\u0346\5\u0114\u008b\2\u0346\u0347\7\u0323\2\2\u0347"+
		"\u0348\5\u00b6\\\2\u0348\u0349\7\u0324\2\2\u0349\u034b\3\2\2\2\u034a\u033c"+
		"\3\2\2\2\u034a\u0343\3\2\2\2\u034bg\3\2\2\2\u034c\u0351\5j\66\2\u034d"+
		"\u034e\7\u0325\2\2\u034e\u0350\5j\66\2\u034f\u034d\3\2\2\2\u0350\u0353"+
		"\3\2\2\2\u0351\u034f\3\2\2\2\u0351\u0352\3\2\2\2\u0352i\3\2\2\2\u0353"+
		"\u0351\3\2\2\2\u0354\u0359\5l\67\2\u0355\u0356\7\17\2\2\u0356\u0358\5"+
		"l\67\2\u0357\u0355\3\2\2\2\u0358\u035b\3\2\2\2\u0359\u0357\3\2\2\2\u0359"+
		"\u035a\3\2\2\2\u035ak\3\2\2\2\u035b\u0359\3\2\2\2\u035c\u0361\5n8\2\u035d"+
		"\u035e\7\u008b\2\2\u035e\u0360\5n8\2\u035f\u035d\3\2\2\2\u0360\u0363\3"+
		"\2\2\2\u0361\u035f\3\2\2\2\u0361\u0362\3\2\2\2\u0362m\3\2\2\2\u0363\u0361"+
		"\3\2\2\2\u0364\u0366\7}\2\2\u0365\u0364\3\2\2\2\u0365\u0366\3\2\2\2\u0366"+
		"\u0367\3\2\2\2\u0367\u0368\5p9\2\u0368o\3\2\2\2\u0369\u036a\b9\1\2\u036a"+
		"\u036b\7O\2\2\u036b\u036c\7\u0323\2\2\u036c\u036d\5^\60\2\u036d\u036e"+
		"\7\u0324\2\2\u036e\u03a4\3\2\2\2\u036f\u0370\7\u0323\2\2\u0370\u0371\5"+
		"j\66\2\u0371\u0372\7\u0324\2\2\u0372\u03a4\3\2\2\2\u0373\u0374\5V,\2\u0374"+
		"\u0375\5\u0118\u008d\2\u0375\u0376\5V,\2\u0376\u03a4\3\2\2\2\u0377\u0378"+
		"\5V,\2\u0378\u0379\5\u0118\u008d\2\u0379\u037a\t\13\2\2\u037a\u037b\7"+
		"\u0323\2\2\u037b\u037c\5^\60\2\u037c\u037d\7\u0324\2\2\u037d\u03a4\3\2"+
		"\2\2\u037e\u0380\5V,\2\u037f\u0381\7}\2\2\u0380\u037f\3\2\2\2\u0380\u0381"+
		"\3\2\2\2\u0381\u0382\3\2\2\2\u0382\u0383\7\30\2\2\u0383\u0384\5V,\2\u0384"+
		"\u0385\7\17\2\2\u0385\u0386\5V,\2\u0386\u03a4\3\2\2\2\u0387\u0389\5V,"+
		"\2\u0388\u038a\7}\2\2\u0389\u0388\3\2\2\2\u0389\u038a\3\2\2\2\u038a\u038b"+
		"\3\2\2\2\u038b\u038c\7h\2\2\u038c\u038f\7\u0323\2\2\u038d\u0390\5^\60"+
		"\2\u038e\u0390\5\u00b6\\\2\u038f\u038d\3\2\2\2\u038f\u038e\3\2\2\2\u0390"+
		"\u0391\3\2\2\2\u0391\u0392\7\u0324\2\2\u0392\u03a4\3\2\2\2\u0393\u0395"+
		"\5V,\2\u0394\u0396\7}\2\2\u0395\u0394\3\2\2\2\u0395\u0396\3\2\2\2\u0396"+
		"\u0397\3\2\2\2\u0397\u0398\t\f\2\2\u0398\u039b\5V,\2\u0399\u039a\7K\2"+
		"\2\u039a\u039c\5V,\2\u039b\u0399\3\2\2\2\u039b\u039c\3\2\2\2\u039c\u03a4"+
		"\3\2\2\2\u039d\u039e\5V,\2\u039e\u039f\7o\2\2\u039f\u03a0\5\u0104\u0083"+
		"\2\u03a0\u03a4\3\2\2\2\u03a1\u03a4\5\u00d4k\2\u03a2\u03a4\5\u00d6l\2\u03a3"+
		"\u0369\3\2\2\2\u03a3\u036f\3\2\2\2\u03a3\u0373\3\2\2\2\u03a3\u0377\3\2"+
		"\2\2\u03a3\u037e\3\2\2\2\u03a3\u0387\3\2\2\2\u03a3\u0393\3\2\2\2\u03a3"+
		"\u039d\3\2\2\2\u03a3\u03a1\3\2\2\2\u03a3\u03a2\3\2\2\2\u03a4\u03ab\3\2"+
		"\2\2\u03a5\u03a6\f\13\2\2\u03a6\u03a7\5\u0118\u008d\2\u03a7\u03a8\5V,"+
		"\2\u03a8\u03aa\3\2\2\2\u03a9\u03a5\3\2\2\2\u03aa\u03ad\3\2\2\2\u03ab\u03a9"+
		"\3\2\2\2\u03ab\u03ac\3\2\2\2\u03acq\3\2\2\2\u03ad\u03ab\3\2\2\2\u03ae"+
		"\u03b4\5v<\2\u03af\u03b0\7\u0323\2\2\u03b0\u03b1\5r:\2\u03b1\u03b2\7\u0324"+
		"\2\2\u03b2\u03b4\3\2\2\2\u03b3\u03ae\3\2\2\2\u03b3\u03af\3\2\2\2\u03b4"+
		"\u03b8\3\2\2\2\u03b5\u03b7\5t;\2\u03b6\u03b5\3\2\2\2\u03b7\u03ba\3\2\2"+
		"\2\u03b8\u03b6\3\2\2\2\u03b8\u03b9\3\2\2\2\u03b9s\3\2\2\2\u03ba\u03b8"+
		"\3\2\2\2\u03bb\u03bd\7\u00cb\2\2\u03bc\u03be\7\r\2\2\u03bd\u03bc\3\2\2"+
		"\2\u03bd\u03be\3\2\2\2\u03be\u03c2\3\2\2\2\u03bf\u03c2\7L\2\2\u03c0\u03c2"+
		"\7m\2\2\u03c1\u03bb\3\2\2\2\u03c1\u03bf\3\2\2\2\u03c1\u03c0\3\2\2\2\u03c2"+
		"\u03cc\3\2\2\2\u03c3\u03cd\5v<\2\u03c4\u03c5\7\u0323\2\2\u03c5\u03c6\5"+
		"r:\2\u03c6\u03c7\7\u0324\2\2\u03c7\u03c9\3\2\2\2\u03c8\u03c4\3\2\2\2\u03c9"+
		"\u03ca\3\2\2\2\u03ca\u03c8\3\2\2\2\u03ca\u03cb\3\2\2\2\u03cb\u03cd\3\2"+
		"\2\2\u03cc\u03c3\3\2\2\2\u03cc\u03c8\3\2\2\2\u03cdu\3\2\2\2\u03ce\u03d0"+
		"\7\u00af\2\2\u03cf\u03d1\t\r\2\2\u03d0\u03cf\3\2\2\2\u03d0\u03d1\3\2\2"+
		"\2\u03d1\u03d3\3\2\2\2\u03d2\u03d4\5x=\2\u03d3\u03d2\3\2\2\2\u03d3\u03d4"+
		"\3\2\2\2\u03d4\u03d5\3\2\2\2\u03d5\u03d8\5\u008cG\2\u03d6\u03d7\7n\2\2"+
		"\u03d7\u03d9\5\u00f0y\2\u03d8\u03d6\3\2\2\2\u03d8\u03d9\3\2\2\2\u03d9"+
		"\u03e3\3\2\2\2\u03da\u03db\7[\2\2\u03db\u03e0\5\u0092J\2\u03dc\u03dd\7"+
		"\u0325\2\2\u03dd\u03df\5\u0092J\2\u03de\u03dc\3\2\2\2\u03df\u03e2\3\2"+
		"\2\2\u03e0\u03de\3\2\2\2\u03e0\u03e1\3\2\2\2\u03e1\u03e4\3\2\2\2\u03e2"+
		"\u03e0\3\2\2\2\u03e3\u03da\3\2\2\2\u03e3\u03e4\3\2\2\2\u03e4\u03e7\3\2"+
		"\2\2\u03e5\u03e6\7\u00d7\2\2\u03e6\u03e8\5j\66\2\u03e7\u03e5\3\2\2\2\u03e7"+
		"\u03e8\3\2\2\2\u03e8\u0405\3\2\2\2\u03e9\u03ea\7`\2\2\u03ea\u03eb\7\35"+
		"\2\2\u03eb\u03f0\5\u0084C\2\u03ec\u03ed\7\u0325\2\2\u03ed\u03ef\5\u0084"+
		"C\2\u03ee\u03ec\3\2\2\2\u03ef\u03f2\3\2\2\2\u03f0\u03ee\3\2\2\2\u03f0"+
		"\u03f1\3\2\2\2\u03f1\u03f5\3\2\2\2\u03f2\u03f0\3\2\2\2\u03f3\u03f4\7\u00d9"+
		"\2\2\u03f4\u03f6\7\u022e\2\2\u03f5\u03f3\3\2\2\2\u03f5\u03f6\3\2\2\2\u03f6"+
		"\u0406\3\2\2\2\u03f7\u03f8\7`\2\2\u03f8\u03f9\7\35\2\2\u03f9\u03fa\7\u022e"+
		"\2\2\u03fa\u03fb\7\u0323\2\2\u03fb\u0400\5\u0084C\2\u03fc\u03fd\7\u0325"+
		"\2\2\u03fd\u03ff\5\u0084C\2\u03fe\u03fc\3\2\2\2\u03ff\u0402\3\2\2\2\u0400"+
		"\u03fe\3\2\2\2\u0400\u0401\3\2\2\2\u0401\u0403\3\2\2\2\u0402\u0400\3\2"+
		"\2\2\u0403\u0404\7\u0324\2\2\u0404\u0406\3\2\2\2\u0405\u03e9\3\2\2\2\u0405"+
		"\u03f7\3\2\2\2\u0405\u0406\3\2\2\2\u0406\u0409\3\2\2\2\u0407\u0408\7c"+
		"\2\2\u0408\u040a\5j\66\2\u0409\u0407\3\2\2\2\u0409\u040a\3\2\2\2\u040a"+
		"w\3\2\2\2\u040b\u040c\7\u00c3\2\2\u040c\u040d\5\u0110\u0089\2\u040dy\3"+
		"\2\2\2\u040e\u040f\7u\2\2\u040f\u0410\5\u0110\u0089\2\u0410{\3\2\2\2\u0411"+
		"\u0412\7\u008c\2\2\u0412\u0413\7\35\2\2\u0413\u0418\5\u0082B\2\u0414\u0415"+
		"\7\u0325\2\2\u0415\u0417\5\u0082B\2\u0416\u0414\3\2\2\2\u0417\u041a\3"+
		"\2\2\2\u0418\u0416\3\2\2\2\u0418\u0419\3\2\2\2\u0419\u0426\3\2\2\2\u041a"+
		"\u0418\3\2\2\2\u041b\u041c\7\u01ec\2\2\u041c\u041d\5V,\2\u041d\u0424\t"+
		"\16\2\2\u041e\u041f\7S\2\2\u041f\u0420\t\17\2\2\u0420\u0421\5V,\2\u0421"+
		"\u0422\t\16\2\2\u0422\u0423\7\u01ed\2\2\u0423\u0425\3\2\2\2\u0424\u041e"+
		"\3\2\2\2\u0424\u0425\3\2\2\2\u0425\u0427\3\2\2\2\u0426\u041b\3\2\2\2\u0426"+
		"\u0427\3\2\2\2\u0427}\3\2\2\2\u0428\u0429\7V\2\2\u0429\u043c\7\33\2\2"+
		"\u042a\u042b\7V\2\2\u042b\u042c\7\u02ae\2\2\u042c\u042e\7\u00fc\2\2\u042d"+
		"\u042f\5\u0080A\2\u042e\u042d\3\2\2\2\u042e\u042f\3\2\2\2\u042f\u043c"+
		"\3\2\2\2\u0430\u0431\7V\2\2\u0431\u0432\7\u02ae\2\2\u0432\u0436\7\u01f5"+
		"\2\2\u0433\u0434\7\u0323\2\2\u0434\u0435\7\u030e\2\2\u0435\u0437\7\u0324"+
		"\2\2\u0436\u0433\3\2\2\2\u0436\u0437\3\2\2\2\u0437\u0439\3\2\2\2\u0438"+
		"\u043a\5\u0080A\2\u0439\u0438\3\2\2\2\u0439\u043a\3\2\2\2\u043a\u043c"+
		"\3\2\2\2\u043b\u0428\3\2\2\2\u043b\u042a\3\2\2\2\u043b\u0430\3\2\2\2\u043c"+
		"\177\3\2\2\2\u043d\u0442\7\u0325\2\2\u043e\u043f\7\u030f\2\2\u043f\u0443"+
		"\7\u00fe\2\2\u0440\u0443\7\u0290\2\2\u0441\u0443\7\u022f\2\2\u0442\u043e"+
		"\3\2\2\2\u0442\u0440\3\2\2\2\u0442\u0441\3\2\2\2\u0443\u0081\3\2\2\2\u0444"+
		"\u0446\5V,\2\u0445\u0447\t\20\2\2\u0446\u0445\3\2\2\2\u0446\u0447\3\2"+
		"\2\2\u0447\u044c\3\2\2\2\u0448\u0449\7\u0080\2\2\u0449\u044d\7\u015c\2"+
		"\2\u044a\u044b\7\u0080\2\2\u044b\u044d\7\u01a5\2\2\u044c\u0448\3\2\2\2"+
		"\u044c\u044a\3\2\2\2\u044c\u044d\3\2\2\2\u044d\u0083\3\2\2\2\u044e\u044f"+
		"\5V,\2\u044f\u0085\3\2\2\2\u0450\u0451\7\u008a\2\2\u0451\u0452\7\u0323"+
		"\2\2\u0452\u0457\5\u0088E\2\u0453\u0454\7\u0325\2\2\u0454\u0456\5\u0088"+
		"E\2\u0455\u0453\3\2\2\2\u0456\u0459\3\2\2\2\u0457\u0455\3\2\2\2\u0457"+
		"\u0458\3\2\2\2\u0458\u045a\3\2\2\2\u0459\u0457\3\2\2\2\u045a\u045b\7\u0324"+
		"\2\2\u045b\u0087\3\2\2\2\u045c\u045d\7\u0157\2\2\u045d\u0475\7\u030c\2"+
		"\2\u045e\u045f\t\21\2\2\u045f\u0475\7`\2\2\u0460\u0461\t\22\2\2\u0461"+
		"\u0475\7\u00cb\2\2\u0462\u0463\7\u01a3\2\2\u0463\u0475\7\u0091\2\2\u0464"+
		"\u0465\7\u01ef\2\2\u0465\u0466\7V\2\2\u0466\u0467\7\u0323\2\2\u0467\u046c"+
		"\5\u008aF\2\u0468\u0469\7\u0325\2\2\u0469\u046b\5\u008aF\2\u046a\u0468"+
		"\3\2\2\2\u046b\u046e\3\2\2\2\u046c\u046a\3\2\2\2\u046c\u046d\3\2\2\2\u046d"+
		"\u046f\3\2\2\2\u046e\u046c\3\2\2\2\u046f\u0470\7\u0324\2\2\u0470\u0475"+
		"\3\2\2\2\u0471\u0472\7\u01ef\2\2\u0472\u0473\7V\2\2\u0473\u0475\7\u0299"+
		"\2\2\u0474\u045c\3\2\2\2\u0474\u045e\3\2\2\2\u0474\u0460\3\2\2\2\u0474"+
		"\u0462\3\2\2\2\u0474\u0464\3\2\2\2\u0474\u0471\3\2\2\2\u0475\u0089\3\2"+
		"\2\2\u0476\u047a\7\u030b\2\2\u0477\u047b\7\u0299\2\2\u0478\u0479\7\u0312"+
		"\2\2\u0479\u047b\5\u010e\u0088\2\u047a\u0477\3\2\2\2\u047a\u0478\3\2\2"+
		"\2\u047b\u008b\3\2\2\2\u047c\u0481\5\u008eH\2\u047d\u047e\7\u0325\2\2"+
		"\u047e\u0480\5\u008eH\2\u047f\u047d\3\2\2\2\u0480\u0483\3\2\2\2\u0481"+
		"\u047f\3\2\2\2\u0481\u0482\3\2\2\2\u0482\u008d\3\2\2\2\u0483\u0481\3\2"+
		"\2\2\u0484\u0485\5\u00f0y\2\u0485\u0486\7\u031e\2\2\u0486\u0488\3\2\2"+
		"\2\u0487\u0484\3\2\2\2\u0487\u0488\3\2\2\2\u0488\u048c\3\2\2\2\u0489\u048d"+
		"\7\u0328\2\2\u048a\u048b\7\u0322\2\2\u048b\u048d\t\23\2\2\u048c\u0489"+
		"\3\2\2\2\u048c\u048a\3\2\2\2\u048d\u049a\3\2\2\2\u048e\u048f\5\u00b2Z"+
		"\2\u048f\u0490\7\u0312\2\2\u0490\u0491\5V,\2\u0491\u049a\3\2\2\2\u0492"+
		"\u0497\5V,\2\u0493\u0495\7\22\2\2\u0494\u0493\3\2\2\2\u0494\u0495\3\2"+
		"\2\2\u0495\u0496\3\2\2\2\u0496\u0498\5\u00b2Z\2\u0497\u0494\3\2\2\2\u0497"+
		"\u0498\3\2\2\2\u0498\u049a\3\2\2\2\u0499\u0487\3\2\2\2\u0499\u048e\3\2"+
		"\2\2\u0499\u0492\3\2\2\2\u049a\u008f\3\2\2\2\u049b\u049c\7\u01f4\2\2\u049c"+
		"\u049d\7\35\2\2\u049d\u049e\5\u00b6\\\2\u049e\u0091\3\2\2\2\u049f\u04a5"+
		"\5\u0094K\2\u04a0\u04a1\7\u0323\2\2\u04a1\u04a2\5\u0094K\2\u04a2\u04a3"+
		"\7\u0324\2\2\u04a3\u04a5\3\2\2\2\u04a4\u049f\3\2\2\2\u04a4\u04a0\3\2\2"+
		"\2\u04a5\u0093\3\2\2\2\u04a6\u04aa\5\u0096L\2\u04a7\u04a9\5\u009aN\2\u04a8"+
		"\u04a7\3\2\2\2\u04a9\u04ac\3\2\2\2\u04aa\u04a8\3\2\2\2\u04aa\u04ab\3\2"+
		"\2\2\u04ab\u0095\3\2\2\2\u04ac\u04aa\3\2\2\2\u04ad\u04af\5\u009cO\2\u04ae"+
		"\u04b0\5\u00a8U\2\u04af\u04ae\3\2\2\2\u04af\u04b0\3\2\2\2\u04b0\u04b9"+
		"\3\2\2\2\u04b1\u04b6\5\u00a2R\2\u04b2\u04b4\5\u00a8U\2\u04b3\u04b5\5\u00b0"+
		"Y\2\u04b4\u04b3\3\2\2\2\u04b4\u04b5\3\2\2\2\u04b5\u04b7\3\2\2\2\u04b6"+
		"\u04b2\3\2\2\2\u04b6\u04b7\3\2\2\2\u04b7\u04b9\3\2\2\2\u04b8\u04ad\3\2"+
		"\2\2\u04b8\u04b1\3\2\2\2\u04b9\u0097\3\2\2\2\u04ba\u04bb\7 \2\2\u04bb"+
		"\u04bc\7\u0323\2\2\u04bc\u04bd\7!\2\2\u04bd\u04be\5\u00f0y\2\u04be\u04bf"+
		"\7\u0325\2\2\u04bf\u04c0\t\24\2\2\u04c0\u04c1\7\u0324\2\2\u04c1\u0099"+
		"\3\2\2\2\u04c2\u04c4\7j\2\2\u04c3\u04c2\3\2\2\2\u04c3\u04c4\3\2\2\2\u04c4"+
		"\u04ca\3\2\2\2\u04c5\u04c7\t\25\2\2\u04c6\u04c8\7\u008d\2\2\u04c7\u04c6"+
		"\3\2\2\2\u04c7\u04c8\3\2\2\2\u04c8\u04ca\3\2\2\2\u04c9\u04c3\3\2\2\2\u04c9"+
		"\u04c5\3\2\2\2\u04ca\u04cc\3\2\2\2\u04cb\u04cd\t\26\2\2\u04cc\u04cb\3"+
		"\2\2\2\u04cc\u04cd\3\2\2\2\u04cd\u04ce\3\2\2\2\u04ce\u04cf\7p\2\2\u04cf"+
		"\u04d2\5\u0092J\2\u04d0\u04d1\7\u0084\2\2\u04d1\u04d3\5j\66\2\u04d2\u04d0"+
		"\3\2\2\2\u04d2\u04d3\3\2\2\2\u04d3\u04ea\3\2\2\2\u04d4\u04d5\7\62\2\2"+
		"\u04d5\u04d6\7\u00e7\2\2\u04d6\u04ea\5\u0092J\2\u04d7\u04d8\7\62\2\2\u04d8"+
		"\u04d9\7p\2\2\u04d9\u04ea\5\u0092J\2\u04da\u04db\7\u008d\2\2\u04db\u04dc"+
		"\7\u00e7\2\2\u04dc\u04ea\5\u0092J\2\u04dd\u04de\7\u01a9\2\2\u04de\u04df"+
		"\7\u00d4\2\2\u04df\u04e1\5\u00dan\2\u04e0\u04e2\5\u00aaV\2\u04e1\u04e0"+
		"\3\2\2\2\u04e1\u04e2\3\2\2\2\u04e2\u04e7\3\2\2\2\u04e3\u04e5\7\22\2\2"+
		"\u04e4\u04e3\3\2\2\2\u04e4\u04e5\3\2\2\2\u04e5\u04e6\3\2\2\2\u04e6\u04e8"+
		"\5\u00b2Z\2\u04e7\u04e4\3\2\2\2\u04e7\u04e8\3\2\2\2\u04e8\u04ea\3\2\2"+
		"\2\u04e9\u04c9\3\2\2\2\u04e9\u04d4\3\2\2\2\u04e9\u04d7\3\2\2\2\u04e9\u04da"+
		"\3\2\2\2\u04e9\u04dd\3\2\2\2\u04ea\u009b\3\2\2\2\u04eb\u04ec\5\u00f0y"+
		"\2\u04ec\u009d\3\2\2\2\u04ed\u04ee\7\u0088\2\2\u04ee\u04ef\7\u0323\2\2"+
		"\u04ef\u04f0\7\34\2\2\u04f0\u04f1\7\u030e\2\2\u04f1\u04fb\7\u0325\2\2"+
		"\u04f2\u04f7\5\u00a0Q\2\u04f3\u04f4\7\u0325\2\2\u04f4\u04f6\5\u00a0Q\2"+
		"\u04f5\u04f3\3\2\2\2\u04f6\u04f9\3\2\2\2\u04f7\u04f5\3\2\2\2\u04f7\u04f8"+
		"\3\2\2\2\u04f8\u04fc\3\2\2\2\u04f9\u04f7\3\2\2\2\u04fa\u04fc\5\u0114\u008b"+
		"\2\u04fb\u04f2\3\2\2\2\u04fb\u04fa\3\2\2\2\u04fc\u04fd\3\2\2\2\u04fd\u04fe"+
		"\7\u0324\2\2\u04fe\u009f\3\2\2\2\u04ff\u0500\5\u0114\u008b\2\u0500\u0501"+
		"\7\u0312\2\2\u0501\u0502\t\27\2\2\u0502\u00a1\3\2\2\2\u0503\u0504\7\u0323"+
		"\2\2\u0504\u0505\5^\60\2\u0505\u0506\7\u0324\2\2\u0506\u0509\3\2\2\2\u0507"+
		"\u0509\5\u00b4[\2\u0508\u0503\3\2\2\2\u0508\u0507\3\2\2\2\u0509\u00a3"+
		"\3\2\2\2\u050a\u050e\5\u00ba^\2\u050b\u050e\5\u00bc_\2\u050c\u050e\5\u00dc"+
		"o\2\u050d\u050a\3\2\2\2\u050d\u050b\3\2\2\2\u050d\u050c\3\2\2\2\u050e"+
		"\u00a5\3\2\2\2\u050f\u0510\7\u030d\2\2\u0510\u00a7\3\2\2\2\u0511\u0513"+
		"\7\22\2\2\u0512\u0511\3\2\2\2\u0512\u0513\3\2\2\2\u0513\u0514\3\2\2\2"+
		"\u0514\u0515\5\u00aaV\2\u0515\u00a9\3\2\2\2\u0516\u0517\5\u0114\u008b"+
		"\2\u0517\u00ab\3\2\2\2\u0518\u0519\7\u030d\2\2\u0519\u00ad\3\2\2\2\u051a"+
		"\u051b\t\30\2\2\u051b\u00af\3\2\2\2\u051c\u051d\7\u0323\2\2\u051d\u0522"+
		"\5\u00b2Z\2\u051e\u051f\7\u0325\2\2\u051f\u0521\5\u00b2Z\2\u0520\u051e"+
		"\3\2\2\2\u0521\u0524\3\2\2\2\u0522\u0520\3\2\2\2\u0522\u0523\3\2\2\2\u0523"+
		"\u0525\3\2\2\2\u0524\u0522\3\2\2\2\u0525\u0526\7\u0324\2\2\u0526\u00b1"+
		"\3\2\2\2\u0527\u052a\5\u0114\u008b\2\u0528\u052a\7\u030e\2\2\u0529\u0527"+
		"\3\2\2\2\u0529\u0528\3\2\2\2\u052a\u00b3\3\2\2\2\u052b\u052c\7\u00d2\2"+
		"\2\u052c\u052d\7\u0323\2\2\u052d\u052e\5\u00b6\\\2\u052e\u0536\7\u0324"+
		"\2\2\u052f\u0530\7\u0325\2\2\u0530\u0531\7\u0323\2\2\u0531\u0532\5\u00b6"+
		"\\\2\u0532\u0533\7\u0324\2\2\u0533\u0535\3\2\2\2\u0534\u052f\3\2\2\2\u0535"+
		"\u0538\3\2\2\2\u0536\u0534\3\2\2\2\u0536\u0537\3\2\2\2\u0537\u00b5\3\2"+
		"\2\2\u0538\u0536\3\2\2\2\u0539\u053e\5V,\2\u053a\u053b\7\u0325\2\2\u053b"+
		"\u053d\5V,\2\u053c\u053a\3\2\2\2\u053d\u0540\3\2\2\2\u053e\u053c\3\2\2"+
		"\2\u053e\u053f\3\2\2\2\u053f\u00b7\3\2\2\2\u0540\u053e\3\2\2\2\u0541\u0542"+
		"\7\37\2\2\u0542\u0548\5V,\2\u0543\u0544\7\u00d6\2\2\u0544\u0545\5V,\2"+
		"\u0545\u0546\7\u00c1\2\2\u0546\u0547\5V,\2\u0547\u0549\3\2\2\2\u0548\u0543"+
		"\3\2\2\2\u0549\u054a\3\2\2\2\u054a\u0548\3\2\2\2\u054a\u054b\3\2\2\2\u054b"+
		"\u054e\3\2\2\2\u054c\u054d\7H\2\2\u054d\u054f\5V,\2\u054e\u054c\3\2\2"+
		"\2\u054e\u054f\3\2\2\2\u054f\u0550\3\2\2\2\u0550\u0551\7I\2\2\u0551\u0563"+
		"\3\2\2\2\u0552\u0558\7\37\2\2\u0553\u0554\7\u00d6\2\2\u0554\u0555\5j\66"+
		"\2\u0555\u0556\7\u00c1\2\2\u0556\u0557\5V,\2\u0557\u0559\3\2\2\2\u0558"+
		"\u0553\3\2\2\2\u0559\u055a\3\2\2\2\u055a\u0558\3\2\2\2\u055a\u055b\3\2"+
		"\2\2\u055b\u055e\3\2\2\2\u055c\u055d\7H\2\2\u055d\u055f\5V,\2\u055e\u055c"+
		"\3\2\2\2\u055e\u055f\3\2\2\2\u055f\u0560\3\2\2\2\u0560\u0561\7I\2\2\u0561"+
		"\u0563\3\2\2\2\u0562\u0541\3\2\2\2\u0562\u0552\3\2\2\2\u0563\u00b9\3\2"+
		"\2\2\u0564\u0565\7\u0215\2\2\u0565\u0566\7\u0323\2\2\u0566\u0567\7\u0324"+
		"\2\2\u0567\u0577\5\u00e2r\2\u0568\u0569\7\u0144\2\2\u0569\u056a\7\u0323"+
		"\2\2\u056a\u056b\7\u0324\2\2\u056b\u0577\5\u00e2r\2\u056c\u056d\7\u01e5"+
		"\2\2\u056d\u056e\7\u0323\2\2\u056e\u056f\5V,\2\u056f\u0570\7\u0324\2\2"+
		"\u0570\u0571\5\u00e2r\2\u0571\u0577\3\2\2\2\u0572\u0573\7\u0235\2\2\u0573"+
		"\u0574\7\u0323\2\2\u0574\u0575\7\u0324\2\2\u0575\u0577\5\u00e2r\2\u0576"+
		"\u0564\3\2\2\2\u0576\u0568\3\2\2\2\u0576\u056c\3\2\2\2\u0576\u0572\3\2"+
		"\2\2\u0577\u00bb\3\2\2\2\u0578\u0585\5\u00ceh\2\u0579\u0585\5\u00d8m\2"+
		"\u057a\u0585\5\u00ccg\2\u057b\u0585\5\u00caf\2\u057c\u0585\5\u00c8e\2"+
		"\u057d\u0585\5\u00d4k\2\u057e\u0585\5\u00d6l\2\u057f\u0585\5\u00d0i\2"+
		"\u0580\u0585\5\u00d2j\2\u0581\u0585\5\u00be`\2\u0582\u0585\5\u00c4c\2"+
		"\u0583\u0585\5\u00c6d\2\u0584\u0578\3\2\2\2\u0584\u0579\3\2\2\2\u0584"+
		"\u057a\3\2\2\2\u0584\u057b\3\2\2\2\u0584\u057c\3\2\2\2\u0584\u057d\3\2"+
		"\2\2\u0584\u057e\3\2\2\2\u0584\u057f\3\2\2\2\u0584\u0580\3\2\2\2\u0584"+
		"\u0581\3\2\2\2\u0584\u0582\3\2\2\2\u0584\u0583\3\2\2\2\u0585\u00bd\3\2"+
		"\2\2\u0586\u0587\7\u0153\2\2\u0587\u0588\7\u0323\2\2\u0588\u0589\5\u00c0"+
		"a\2\u0589\u058a\7[\2\2\u058a\u058b\5V,\2\u058b\u058c\7\u0324\2\2\u058c"+
		"\u00bf\3\2\2\2\u058d\u0594\7\u02ba\2\2\u058e\u0594\7\u01d4\2\2\u058f\u0594"+
		"\7\u013a\2\2\u0590\u0594\7\u0176\2\2\u0591\u0594\7\u01d0\2\2\u0592\u0594"+
		"\5V,\2\u0593\u058d\3\2\2\2\u0593\u058e\3\2\2\2\u0593\u058f\3\2\2\2\u0593"+
		"\u0590\3\2\2\2\u0593\u0591\3\2\2\2\u0593\u0592\3\2\2\2\u0594\u00c1\3\2"+
		"\2\2\u0595\u059c\7\u02ba\2\2\u0596\u059c\7\u01d4\2\2\u0597\u059c\7\u013a"+
		"\2\2\u0598\u059c\7\u0176\2\2\u0599\u059c\7\u01d0\2\2\u059a\u059c\5V,\2"+
		"\u059b\u0595\3\2\2\2\u059b\u0596\3\2\2\2\u059b\u0597\3\2\2\2\u059b\u0598"+
		"\3\2\2\2\u059b\u0599\3\2\2\2\u059b\u059a\3\2\2\2\u059c\u00c3\3\2\2\2\u059d"+
		"\u059e\7\u01f2\2\2\u059e\u059f\7\u0323\2\2\u059f\u05a0\5V,\2\u05a0\u05a1"+
		"\7\u01fe\2\2\u05a1\u05a2\5V,\2\u05a2\u05a3\7[\2\2\u05a3\u05a6\5V,\2\u05a4"+
		"\u05a5\7V\2\2\u05a5\u05a7\5V,\2\u05a6\u05a4\3\2\2\2\u05a6\u05a7\3\2\2"+
		"\2\u05a7\u05a8\3\2\2\2\u05a8\u05a9\7\u0324\2\2\u05a9\u00c5\3\2\2\2\u05aa"+
		"\u05ab\7\u00ba\2\2\u05ab\u05ac\7\u0323\2\2\u05ac\u05ad\5V,\2\u05ad\u05ae"+
		"\7[\2\2\u05ae\u05b1\5V,\2\u05af\u05b0\7V\2\2\u05b0\u05b2\5V,\2\u05b1\u05af"+
		"\3\2\2\2\u05b1\u05b2\3\2\2\2\u05b2\u05b3\3\2\2\2\u05b3\u05b4\7\u0324\2"+
		"\2\u05b4\u00c7\3\2\2\2\u05b5\u05b6\t\31\2\2\u05b6\u05b7\7\u0323\2\2\u05b7"+
		"\u05bc\5V,\2\u05b8\u05b9\7\u0325\2\2\u05b9\u05bb\5V,\2\u05ba\u05b8\3\2"+
		"\2\2\u05bb\u05be\3\2\2\2\u05bc\u05ba\3\2\2\2\u05bc\u05bd\3\2\2\2\u05bd"+
		"\u05bf\3\2\2\2\u05be\u05bc\3\2\2\2\u05bf\u05c0\7\u0324\2\2\u05c0\u00c9"+
		"\3\2\2\2\u05c1\u05c2\t\32\2\2\u05c2\u05c3\7\u0323\2\2\u05c3\u05c4\5V,"+
		"\2\u05c4\u05c5\7\u0325\2\2\u05c5\u05c6\5V,\2\u05c6\u05c7\7\u0325\2\2\u05c7"+
		"\u05c8\5V,\2\u05c8\u05c9\7\u0324\2\2\u05c9\u00cb\3\2\2\2\u05ca\u05cb\t"+
		"\33\2\2\u05cb\u05cc\7\u0323\2\2\u05cc\u05cd\5V,\2\u05cd\u05ce\7\u0325"+
		"\2\2\u05ce\u05cf\5V,\2\u05cf\u05d0\7\u0324\2\2\u05d0\u00cd\3\2\2\2\u05d1"+
		"\u05d2\t\34\2\2\u05d2\u05d3\7\u0323\2\2\u05d3\u05d4\5V,\2\u05d4\u05d5"+
		"\7\u0324\2\2\u05d5\u05dc\3\2\2\2\u05d6\u05d7\7\u010d\2\2\u05d7\u05d8\7"+
		"\u0323\2\2\u05d8\u05d9\5\u00e0q\2\u05d9\u05da\7\u0324\2\2\u05da\u05dc"+
		"\3\2\2\2\u05db\u05d1\3\2\2\2\u05db\u05d6\3\2\2\2\u05dc\u00cf\3\2\2\2\u05dd"+
		"\u05de\7\u0272\2\2\u05de\u05df\5V,\2\u05df\u00d1\3\2\2\2\u05e0\u05e1\7"+
		"\u012e\2\2\u05e1\u05e2\7\u0323\2\2\u05e2\u05e3\5\u00c2b\2\u05e3\u05e4"+
		"\7\u0325\2\2\u05e4\u05e5\5V,\2\u05e5\u05e6\7\u0325\2\2\u05e6\u05e7\5V"+
		",\2\u05e7\u05e8\7\u0324\2\2\u05e8\u00d3\3\2\2\2\u05e9\u05eb\7}\2\2\u05ea"+
		"\u05e9\3\2\2\2\u05ea\u05eb\3\2\2\2\u05eb\u05ec\3\2\2\2\u05ec\u05ed\t\35"+
		"\2\2\u05ed\u05ee\7\u0323\2\2\u05ee\u05ef\5V,\2\u05ef\u05f0\7\u0324\2\2"+
		"\u05f0\u00d5\3\2\2\2\u05f1\u05f3\7}\2\2\u05f2\u05f1\3\2\2\2\u05f2\u05f3"+
		"\3\2\2\2\u05f3\u05f4\3\2\2\2\u05f4\u05f5\t\36\2\2\u05f5\u05f6\7\u0323"+
		"\2\2\u05f6\u05f7\5V,\2\u05f7\u05f8\7\u0325\2\2\u05f8\u05f9\5V,\2\u05f9"+
		"\u05fa\7\u0324\2\2\u05fa\u00d7\3\2\2\2\u05fb\u05fc\t\37\2\2\u05fc\u05fd"+
		"\7\u0323\2\2\u05fd\u05fe\7\u0324\2\2\u05fe\u00d9\3\2\2\2\u05ff\u0600\7"+
		"\u0152\2\2\u0600\u0601\7\u0323\2\2\u0601\u0602\5V,\2\u0602\u0603\7\u0324"+
		"\2\2\u0603\u00db\3\2\2\2\u0604\u0605\7\u00fd\2\2\u0605\u0606\7\u0323\2"+
		"\2\u0606\u0607\5\u00dep\2\u0607\u0609\7\u0324\2\2\u0608\u060a\5\u00e2"+
		"r\2\u0609\u0608\3\2\2\2\u0609\u060a\3\2\2\2\u060a\u066e\3\2\2\2\u060b"+
		"\u060c\7\u0117\2\2\u060c\u060d\7\u0323\2\2\u060d\u060e\5\u00dep\2\u060e"+
		"\u060f\7\u0324\2\2\u060f\u066e\3\2\2\2\u0610\u0611\7\u016f\2\2\u0611\u0612"+
		"\7\u0323\2\2\u0612\u0613\5V,\2\u0613\u0614\7\u0324\2\2\u0614\u066e\3\2"+
		"\2\2\u0615\u0616\7\u0170\2\2\u0616\u0617\7\u0323\2\2\u0617\u0618\5\u00b6"+
		"\\\2\u0618\u0619\7\u0324\2\2\u0619\u066e\3\2\2\2\u061a\u061b\7\u01ca\2"+
		"\2\u061b\u061c\7\u0323\2\2\u061c\u061d\5\u00dep\2\u061d\u061f\7\u0324"+
		"\2\2\u061e\u0620\5\u00e2r\2\u061f\u061e\3\2\2\2\u061f\u0620\3\2\2\2\u0620"+
		"\u066e\3\2\2\2\u0621\u0622\7\u01ce\2\2\u0622\u0623\7\u0323\2\2\u0623\u0624"+
		"\5\u00dep\2\u0624\u0626\7\u0324\2\2\u0625\u0627\5\u00e2r\2\u0626\u0625"+
		"\3\2\2\2\u0626\u0627\3\2\2\2\u0627\u066e\3\2\2\2\u0628\u0629\7\u0265\2"+
		"\2\u0629\u062a\7\u0323\2\2\u062a\u062b\5\u00dep\2\u062b\u062d\7\u0324"+
		"\2\2\u062c\u062e\5\u00e2r\2\u062d\u062c\3\2\2\2\u062d\u062e\3\2\2\2\u062e"+
		"\u066e\3\2\2\2\u062f\u0630\7\u0259\2\2\u0630\u0631\7\u0323\2\2\u0631\u0632"+
		"\5\u00dep\2\u0632\u0634\7\u0324\2\2\u0633\u0635\5\u00e2r\2\u0634\u0633"+
		"\3\2\2\2\u0634\u0635\3\2\2\2\u0635\u066e\3\2\2\2\u0636\u0637\7\u025b\2"+
		"\2\u0637\u0638\7\u0323\2\2\u0638\u0639\5\u00dep\2\u0639\u063b\7\u0324"+
		"\2\2\u063a\u063c\5\u00e2r\2\u063b\u063a\3\2\2\2\u063b\u063c\3\2\2\2\u063c"+
		"\u066e\3\2\2\2\u063d\u063e\7\u025c\2\2\u063e\u063f\7\u0323\2\2\u063f\u0640"+
		"\5\u00dep\2\u0640\u0642\7\u0324\2\2\u0641\u0643\5\u00e2r\2\u0642\u0641"+
		"\3\2\2\2\u0642\u0643\3\2\2\2\u0643\u066e\3\2\2\2\u0644\u0645\7\u029f\2"+
		"\2\u0645\u0646\7\u0323\2\2\u0646\u0647\5\u00dep\2\u0647\u0649\7\u0324"+
		"\2\2\u0648\u064a\5\u00e2r\2\u0649\u0648\3\2\2\2\u0649\u064a\3\2\2\2\u064a"+
		"\u066e\3\2\2\2\u064b\u064c\7\u02a5\2\2\u064c\u064d\7\u0323\2\2\u064d\u064e"+
		"\5\u00dep\2\u064e\u0650\7\u0324\2\2\u064f\u0651\5\u00e2r\2\u0650\u064f"+
		"\3\2\2\2\u0650\u0651\3\2\2\2\u0651\u066e\3\2\2\2\u0652\u0653\7\u0127\2"+
		"\2\u0653\u0656\7\u0323\2\2\u0654\u0657\7\u0328\2\2\u0655\u0657\5\u00de"+
		"p\2\u0656\u0654\3\2\2\2\u0656\u0655\3\2\2\2\u0657\u0658\3\2\2\2\u0658"+
		"\u065a\7\u0324\2\2\u0659\u065b\5\u00e2r\2\u065a\u0659\3\2\2\2\u065a\u065b"+
		"\3\2\2\2\u065b\u066e\3\2\2\2\u065c\u065d\7\u01dd\2\2\u065d\u065e\7\u0323"+
		"\2\2\u065e\u065f\5\u00dep\2\u065f\u0661\7\u0324\2\2\u0660\u0662\5\u00e2"+
		"r\2\u0661\u0660\3\2\2\2\u0661\u0662\3\2\2\2\u0662\u066e\3\2\2\2\u0663"+
		"\u0664\7\u0128\2\2\u0664\u0667\7\u0323\2\2\u0665\u0668\7\u0328\2\2\u0666"+
		"\u0668\5\u00dep\2\u0667\u0665\3\2\2\2\u0667\u0666\3\2\2\2\u0668\u0669"+
		"\3\2\2\2\u0669\u066b\7\u0324\2\2\u066a\u066c\5\u00e2r\2\u066b\u066a\3"+
		"\2\2\2\u066b\u066c\3\2\2\2\u066c\u066e\3\2\2\2\u066d\u0604\3\2\2\2\u066d"+
		"\u060b\3\2\2\2\u066d\u0610\3\2\2\2\u066d\u0615\3\2\2\2\u066d\u061a\3\2"+
		"\2\2\u066d\u0621\3\2\2\2\u066d\u0628\3\2\2\2\u066d\u062f\3\2\2\2\u066d"+
		"\u0636\3\2\2\2\u066d\u063d\3\2\2\2\u066d\u0644\3\2\2\2\u066d\u064b\3\2"+
		"\2\2\u066d\u0652\3\2\2\2\u066d\u065c\3\2\2\2\u066d\u0663\3\2\2\2\u066e"+
		"\u00dd\3\2\2\2\u066f\u0671\t\r\2\2\u0670\u066f\3\2\2\2\u0670\u0671\3\2"+
		"\2\2\u0671\u0672\3\2\2\2\u0672\u0673\5V,\2\u0673\u00df\3\2\2\2\u0674\u0675"+
		"\5V,\2\u0675\u0676\7\22\2\2\u0676\u0677\5\u010a\u0086\2\u0677\u00e1\3"+
		"\2\2\2\u0678\u0679\7\u008e\2\2\u0679\u067b\7\u0323\2\2\u067a\u067c\5\u0090"+
		"I\2\u067b\u067a\3\2\2\2\u067b\u067c\3\2\2\2\u067c\u067e\3\2\2\2\u067d"+
		"\u067f\5|?\2\u067e\u067d\3\2\2\2\u067e\u067f\3\2\2\2\u067f\u0681\3\2\2"+
		"\2\u0680\u0682\5\u00e4s\2\u0681\u0680\3\2\2\2\u0681\u0682\3\2\2\2\u0682"+
		"\u0683\3\2\2\2\u0683\u0684\7\u0324\2\2\u0684\u00e3\3\2\2\2\u0685\u0686"+
		"\t \2\2\u0686\u0687\5\u00e6t\2\u0687\u00e5\3\2\2\2\u0688\u068f\5\u00ea"+
		"v\2\u0689\u068a\7\30\2\2\u068a\u068b\5\u00e8u\2\u068b\u068c\7\17\2\2\u068c"+
		"\u068d\5\u00e8u\2\u068d\u068f\3\2\2\2\u068e\u0688\3\2\2\2\u068e\u0689"+
		"\3\2\2\2\u068f\u00e7\3\2\2\2\u0690\u0693\5\u00eav\2\u0691\u0693\5\u00ec"+
		"w\2\u0692\u0690\3\2\2\2\u0692\u0691\3\2\2\2\u0693\u00e9\3\2\2\2\u0694"+
		"\u0695\7\u0293\2\2\u0695\u069b\7\u0207\2\2\u0696\u0697\7\u030c\2\2\u0697"+
		"\u069b\7\u0207\2\2\u0698\u0699\7\63\2\2\u0699\u069b\7\u0231\2\2\u069a"+
		"\u0694\3\2\2\2\u069a\u0696\3\2\2\2\u069a\u0698\3\2\2\2\u069b\u00eb\3\2"+
		"\2\2\u069c\u069d\7\u0293\2\2\u069d\u06a1\7\u015e\2\2\u069e\u069f\7\u030c"+
		"\2\2\u069f\u06a1\7\u015e\2\2\u06a0\u069c\3\2\2\2\u06a0\u069e\3\2\2\2\u06a1"+
		"\u00ed\3\2\2\2\u06a2\u06a3\5\u0114\u008b\2\u06a3\u06a4\7\u031e\2\2\u06a4"+
		"\u06a5\5\u0114\u008b\2\u06a5\u06a6\7\u031e\2\2\u06a6\u06a7\5\u0114\u008b"+
		"\2\u06a7\u06a8\7\u031e\2\2\u06a8\u06b4\3\2\2\2\u06a9\u06aa\5\u0114\u008b"+
		"\2\u06aa\u06ac\7\u031e\2\2\u06ab\u06ad\5\u0114\u008b\2\u06ac\u06ab\3\2"+
		"\2\2\u06ac\u06ad\3\2\2\2\u06ad\u06ae\3\2\2\2\u06ae\u06af\7\u031e\2\2\u06af"+
		"\u06b4\3\2\2\2\u06b0\u06b1\5\u0114\u008b\2\u06b1\u06b2\7\u031e\2\2\u06b2"+
		"\u06b4\3\2\2\2\u06b3\u06a2\3\2\2\2\u06b3\u06a9\3\2\2\2\u06b3\u06b0\3\2"+
		"\2\2\u06b3\u06b4\3\2\2\2\u06b4\u06b5\3\2\2\2\u06b5\u06b6\5\u0114\u008b"+
		"\2\u06b6\u00ef\3\2\2\2\u06b7\u06b8\5\u0114\u008b\2\u06b8\u06b9\7\u031e"+
		"\2\2\u06b9\u06bb\3\2\2\2\u06ba\u06b7\3\2\2\2\u06ba\u06bb\3\2\2\2\u06bb"+
		"\u06bc\3\2\2\2\u06bc\u06bd\5\u0114\u008b\2\u06bd\u00f1\3\2\2\2\u06be\u06bf"+
		"\5\u0114\u008b\2\u06bf\u06c0\7\u031e\2\2\u06c0\u06c2\3\2\2\2\u06c1\u06be"+
		"\3\2\2\2\u06c1\u06c2\3\2\2\2\u06c2\u06c3\3\2\2\2\u06c3\u06c4\5\u0114\u008b"+
		"\2\u06c4\u00f3\3\2\2\2\u06c5\u06c6\5\u0114\u008b\2\u06c6\u06c8\7\u031e"+
		"\2\2\u06c7\u06c9\5\u0114\u008b\2\u06c8\u06c7\3\2\2\2\u06c8\u06c9\3\2\2"+
		"\2\u06c9\u06ca\3\2\2\2\u06ca\u06cb\7\u031e\2\2\u06cb\u06d0\3\2\2\2\u06cc"+
		"\u06cd\5\u0114\u008b\2\u06cd\u06ce\7\u031e\2\2\u06ce\u06d0\3\2\2\2\u06cf"+
		"\u06c5\3\2\2\2\u06cf\u06cc\3\2\2\2\u06cf\u06d0\3\2\2\2\u06d0\u06d1\3\2"+
		"\2\2\u06d1\u06d2\5\u0114\u008b\2\u06d2\u00f5\3\2\2\2\u06d3\u06d6\5\u00ee"+
		"x\2\u06d4\u06d6\7\u030b\2\2\u06d5\u06d3\3\2\2\2\u06d5\u06d4\3\2\2\2\u06d6"+
		"\u00f7\3\2\2\2\u06d7\u06d8\5\u00f0y\2\u06d8\u06d9\7\u031e\2\2\u06d9\u06db"+
		"\3\2\2\2\u06da\u06d7\3\2\2\2\u06da\u06db\3\2\2\2\u06db\u06dc\3\2\2\2\u06dc"+
		"\u06dd\5\u00fc\177\2\u06dd\u00f9\3\2\2\2\u06de\u06e3\5\u00fc\177\2\u06df"+
		"\u06e0\7\u0325\2\2\u06e0\u06e2\5\u00fc\177\2\u06e1\u06df\3\2\2\2\u06e2"+
		"\u06e5\3\2\2\2\u06e3\u06e1\3\2\2\2\u06e3\u06e4\3\2\2\2\u06e4\u00fb\3\2"+
		"\2\2\u06e5\u06e3\3\2\2\2\u06e6\u06e7\5\u0114\u008b\2\u06e7\u00fd\3\2\2"+
		"\2\u06e8\u06eb\5\u0114\u008b\2\u06e9\u06eb\7\u030b\2\2\u06ea\u06e8\3\2"+
		"\2\2\u06ea\u06e9\3\2\2\2\u06eb\u00ff\3\2\2\2\u06ec\u06ed\t!\2\2\u06ed"+
		"\u0101\3\2\2\2\u06ee\u06ef\t\"\2\2\u06ef\u0103\3\2\2\2\u06f0\u06f2\7}"+
		"\2\2\u06f1\u06f0\3\2\2\2\u06f1\u06f2\3\2\2\2\u06f2\u06f3\3\2\2\2\u06f3"+
		"\u06f4\7~\2\2\u06f4\u0105\3\2\2\2\u06f5\u06f6\t#\2\2\u06f6\u0107\3\2\2"+
		"\2\u06f7\u06fd\5\u00f4{\2\u06f8\u06fd\7\u00a4\2\2\u06f9\u06fd\7s\2\2\u06fa"+
		"\u06fd\7\u0101\2\2\u06fb\u06fd\7\u0116\2\2\u06fc\u06f7\3\2\2\2\u06fc\u06f8"+
		"\3\2\2\2\u06fc\u06f9\3\2\2\2\u06fc\u06fa\3\2\2\2\u06fc\u06fb\3\2\2\2\u06fd"+
		"\u0109\3\2\2\2\u06fe\u075b\7\u00ff\2\2\u06ff\u0700\7\u030f\2\2\u0700\u0701"+
		"\7\u0323\2\2\u0701\u0702\7\u030c\2\2\u0702\u075b\7\u0324\2\2\u0703\u075b"+
		"\7\u0102\2\2\u0704\u075b\7\u0113\2\2\u0705\u0706\7\u0113\2\2\u0706\u0707"+
		"\7\u0323\2\2\u0707\u0708\7\u030c\2\2\u0708\u075b\7\u0324\2\2\u0709\u075b"+
		"\7\u012d\2\2\u070a\u075b\7\u0137\2\2\u070b\u075b\7\u0138\2\2\u070c\u070d"+
		"\7\u0139\2\2\u070d\u070e\7\u0323\2\2\u070e\u070f\7\u030c\2\2\u070f\u075b"+
		"\7\u0324\2\2\u0710\u0711\7\u030c\2\2\u0711\u0712\7\u0323\2\2\u0712\u0713"+
		"\7\u030c\2\2\u0713\u0714\7\u0325\2\2\u0714\u0715\7\u030c\2\2\u0715\u075b"+
		"\7\u0324\2\2\u0716\u0718\7E\2\2\u0717\u0719\7\u0092\2\2\u0718\u0717\3"+
		"\2\2\2\u0718\u0719\3\2\2\2\u0719\u075b\3\2\2\2\u071a\u075b\7\u0310\2\2"+
		"\u071b\u075b\7\u0166\2\2\u071c\u075b\7\u0167\2\2\u071d\u075b\7\u0173\2"+
		"\2\u071e\u075b\7\u0178\2\2\u071f\u075b\7\u0179\2\2\u0720\u075b\7\u01d3"+
		"\2\2\u0721\u0722\7\u01dc\2\2\u0722\u0723\7\u0323\2\2\u0723\u0724\7\u030c"+
		"\2\2\u0724\u075b\7\u0324\2\2\u0725\u075b\7\u01e4\2\2\u0726\u0727\7\u01e8"+
		"\2\2\u0727\u0728\7\u0323\2\2\u0728\u0729\7\u030c\2\2\u0729\u072a\7\u0325"+
		"\2\2\u072a\u072b\7\u030c\2\2\u072b\u075b\7\u0324\2\2\u072c\u072d\7\u01e9"+
		"\2\2\u072d\u072e\7\u0323\2\2\u072e\u075b\7\u030c\2\2\u072f\u0730\7\u01ca"+
		"\2\2\u0730\u075b\7\u0324\2\2\u0731\u075b\7\u0311\2\2\u0732\u075b\7\u024d"+
		"\2\2\u0733\u075b\7\u024e\2\2\u0734\u075b\7\u024f\2\2\u0735\u075b\7\u0255"+
		"\2\2\u0736\u075b\7\u026c\2\2\u0737\u0738\7\u026f\2\2\u0738\u0739\7\u0323"+
		"\2\2\u0739\u073a\7\u030c\2\2\u073a\u075b\7\u0324\2\2\u073b\u075b\7\u0272"+
		"\2\2\u073c\u073d\7\u0272\2\2\u073d\u073e\7\u00db\2\2\u073e\u073f\7\u026f"+
		"\2\2\u073f\u075b\7\u00dd\2\2\u0740\u075b\7\u0275\2\2\u0741\u075b\7\u0296"+
		"\2\2\u0742\u0743\7\u02a0\2\2\u0743\u0744\7\u0323\2\2\u0744\u075b\7\u030c"+
		"\2\2\u0745\u0746\7\u01ca\2\2\u0746\u075b\7\u0324\2\2\u0747\u0748\7\u02a1"+
		"\2\2\u0748\u0749\7\u0323\2\2\u0749\u075b\7\u030c\2\2\u074a\u074b\7\u01ca"+
		"\2\2\u074b\u075b\7\u0324\2\2\u074c\u075b\7\u02ae\2\2\u074d\u074f\5\u0114"+
		"\u008b\2\u074e\u0750\7d\2\2\u074f\u074e\3\2\2\2\u074f\u0750\3\2\2\2\u0750"+
		"\u0758\3\2\2\2\u0751\u0752\7\u0323\2\2\u0752\u0755\t$\2\2\u0753\u0754"+
		"\7\u0325\2\2\u0754\u0756\7\u030c\2\2\u0755\u0753\3\2\2\2\u0755\u0756\3"+
		"\2\2\2\u0756\u0757\3\2\2\2\u0757\u0759\7\u0324\2\2\u0758\u0751\3\2\2\2"+
		"\u0758\u0759\3\2\2\2\u0759\u075b\3\2\2\2\u075a\u06fe\3\2\2\2\u075a\u06ff"+
		"\3\2\2\2\u075a\u0703\3\2\2\2\u075a\u0704\3\2\2\2\u075a\u0705\3\2\2\2\u075a"+
		"\u0709\3\2\2\2\u075a\u070a\3\2\2\2\u075a\u070b\3\2\2\2\u075a\u070c\3\2"+
		"\2\2\u075a\u0710\3\2\2\2\u075a\u0716\3\2\2\2\u075a\u071a\3\2\2\2\u075a"+
		"\u071b\3\2\2\2\u075a\u071c\3\2\2\2\u075a\u071d\3\2\2\2\u075a\u071e\3\2"+
		"\2\2\u075a\u071f\3\2\2\2\u075a\u0720\3\2\2\2\u075a\u0721\3\2\2\2\u075a"+
		"\u0725\3\2\2\2\u075a\u0726\3\2\2\2\u075a\u072c\3\2\2\2\u075a\u072f\3\2"+
		"\2\2\u075a\u0731\3\2\2\2\u075a\u0732\3\2\2\2\u075a\u0733\3\2\2\2\u075a"+
		"\u0734\3\2\2\2\u075a\u0735\3\2\2\2\u075a\u0736\3\2\2\2\u075a\u0737\3\2"+
		"\2\2\u075a\u073b\3\2\2\2\u075a\u073c\3\2\2\2\u075a\u0740\3\2\2\2\u075a"+
		"\u0741\3\2\2\2\u075a\u0742\3\2\2\2\u075a\u0745\3\2\2\2\u075a\u0747\3\2"+
		"\2\2\u075a\u074a\3\2\2\2\u075a\u074c\3\2\2\2\u075a\u074d\3\2\2\2\u075b"+
		"\u010b\3\2\2\2\u075c\u075f\7~\2\2\u075d\u075f\5\u010e\u0088\2\u075e\u075c"+
		"\3\2\2\2\u075e\u075d\3\2\2\2\u075f\u010d\3\2\2\2\u0760\u076d\7\u030e\2"+
		"\2\u0761\u076d\7\u030f\2\2\u0762\u076d\5\u0110\u0089\2\u0763\u0765\5\u0112"+
		"\u008a\2\u0764\u0763\3\2\2\2\u0764\u0765\3\2\2\2\u0765\u0766\3\2\2\2\u0766"+
		"\u076d\t%\2\2\u0767\u0769\5\u0112\u008a\2\u0768\u0767\3\2\2\2\u0768\u0769"+
		"\3\2\2\2\u0769\u076a\3\2\2\2\u076a\u076b\7\u0322\2\2\u076b\u076d\t&\2"+
		"\2\u076c\u0760\3\2\2\2\u076c\u0761\3\2\2\2\u076c\u0762\3\2\2\2\u076c\u0764"+
		"\3\2\2\2\u076c\u0768\3\2\2\2\u076d\u010f\3\2\2\2\u076e\u0770\5\u0112\u008a"+
		"\2\u076f\u076e\3\2\2\2\u076f\u0770\3\2\2\2\u0770\u0771\3\2\2\2\u0771\u0772"+
		"\7\u030c\2\2\u0772\u0111\3\2\2\2\u0773\u0774\t\7\2\2\u0774\u0113\3\2\2"+
		"\2\u0775\u077a\5\u0116\u008c\2\u0776\u077a\7\u0308\2\2\u0777\u077a\7\u030a"+
		"\2\2\u0778\u077a\7\u0309\2\2\u0779\u0775\3\2\2\2\u0779\u0776\3\2\2\2\u0779"+
		"\u0777\3\2\2\2\u0779\u0778\3\2\2\2\u077a\u0115\3\2\2\2\u077b\u077c\t\'"+
		"\2\2\u077c\u0117\3\2\2\2\u077d\u078d\7\u0312\2\2\u077e\u078d\7\u0313\2"+
		"\2\u077f\u078d\7\u0314\2\2\u0780\u0781\7\u0314\2\2\u0781\u078d\7\u0312"+
		"\2\2\u0782\u0783\7\u0313\2\2\u0783\u078d\7\u0312\2\2\u0784\u0785\7\u0314"+
		"\2\2\u0785\u078d\7\u0313\2\2\u0786\u0787\7\u0315\2\2\u0787\u078d\7\u0312"+
		"\2\2\u0788\u0789\7\u0315\2\2\u0789\u078d\7\u0313\2\2\u078a\u078b\7\u0315"+
		"\2\2\u078b\u078d\7\u0314\2\2\u078c\u077d\3\2\2\2\u078c\u077e\3\2\2\2\u078c"+
		"\u077f\3\2\2\2\u078c\u0780\3\2\2\2\u078c\u0782\3\2\2\2\u078c\u0784\3\2"+
		"\2\2\u078c\u0786\3\2\2\2\u078c\u0788\3\2\2\2\u078c\u078a\3\2\2\2\u078d"+
		"\u0119\3\2\2\2\u078e\u078f\t(\2\2\u078f\u011b\3\2\2\2\u00de\u0129\u0130"+
		"\u0137\u013b\u013f\u0143\u0148\u014f\u015b\u0165\u016f\u0184\u0187\u018c"+
		"\u0193\u019b\u019e\u01a1\u01a5\u01a8\u01ab\u01b6\u01bc\u01c2\u01c4\u01c8"+
		"\u01cb\u01ce\u01d3\u01d8\u01db\u01e3\u01e8\u01ec\u01f5\u01f9\u01fe\u0209"+
		"\u020e\u0215\u0218\u0224\u022c\u022e\u0234\u023b\u0241\u0245\u024b\u0252"+
		"\u0256\u025c\u0261\u0268\u026b\u0270\u0276\u0279\u0281\u0285\u0288\u028d"+
		"\u0293\u0298\u029f\u02a5\u02a8\u02ac\u02af\u02b3\u02bf\u02c2\u02d0\u02d3"+
		"\u02da\u02dc\u02f6\u0308\u030a\u031b\u0324\u032b\u0333\u033c\u0340\u034a"+
		"\u0351\u0359\u0361\u0365\u0380\u0389\u038f\u0395\u039b\u03a3\u03ab\u03b3"+
		"\u03b8\u03bd\u03c1\u03ca\u03cc\u03d0\u03d3\u03d8\u03e0\u03e3\u03e7\u03f0"+
		"\u03f5\u0400\u0405\u0409\u0418\u0424\u0426\u042e\u0436\u0439\u043b\u0442"+
		"\u0446\u044c\u0457\u046c\u0474\u047a\u0481\u0487\u048c\u0494\u0497\u0499"+
		"\u04a4\u04aa\u04af\u04b4\u04b6\u04b8\u04c3\u04c7\u04c9\u04cc\u04d2\u04e1"+
		"\u04e4\u04e7\u04e9\u04f7\u04fb\u0508\u050d\u0512\u0522\u0529\u0536\u053e"+
		"\u054a\u054e\u055a\u055e\u0562\u0576\u0584\u0593\u059b\u05a6\u05b1\u05bc"+
		"\u05db\u05ea\u05f2\u0609\u061f\u0626\u062d\u0634\u063b\u0642\u0649\u0650"+
		"\u0656\u065a\u0661\u0667\u066b\u066d\u0670\u067b\u067e\u0681\u068e\u0692"+
		"\u069a\u06a0\u06ac\u06b3\u06ba\u06c1\u06c8\u06cf\u06d5\u06da\u06e3\u06ea"+
		"\u06f1\u06fc\u0718\u074f\u0755\u0758\u075a\u075e\u0764\u0768\u076c\u076f"+
		"\u0779\u078c";
	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