// Generated from /Users/erindeng/Desktop/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.8
// jshint ignore: start
var antlr4 = require('antlr4/index');
var FlinkSqlParserListener = require('./FlinkSqlParserListener').FlinkSqlParserListener;
var FlinkSqlParserVisitor = require('./FlinkSqlParserVisitor').FlinkSqlParserVisitor;

var grammarFileName = "FlinkSqlParser.g4";


var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964",
    "\u0003\u0125\u0554\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004",
    "\t\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t\u0007",
    "\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004\f\t\f",
    "\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010\t\u0010",
    "\u0004\u0011\t\u0011\u0004\u0012\t\u0012\u0004\u0013\t\u0013\u0004\u0014",
    "\t\u0014\u0004\u0015\t\u0015\u0004\u0016\t\u0016\u0004\u0017\t\u0017",
    "\u0004\u0018\t\u0018\u0004\u0019\t\u0019\u0004\u001a\t\u001a\u0004\u001b",
    "\t\u001b\u0004\u001c\t\u001c\u0004\u001d\t\u001d\u0004\u001e\t\u001e",
    "\u0004\u001f\t\u001f\u0004 \t \u0004!\t!\u0004\"\t\"\u0004#\t#\u0004",
    "$\t$\u0004%\t%\u0004&\t&\u0004\'\t\'\u0004(\t(\u0004)\t)\u0004*\t*\u0004",
    "+\t+\u0004,\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u00041\t1\u0004",
    "2\t2\u00043\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u00048\t8\u0004",
    "9\t9\u0004:\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004?\t?\u0004",
    "@\t@\u0004A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004F\tF\u0004",
    "G\tG\u0004H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004M\tM\u0004",
    "N\tN\u0004O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004T\tT\u0004",
    "U\tU\u0004V\tV\u0004W\tW\u0004X\tX\u0004Y\tY\u0004Z\tZ\u0004[\t[\u0004",
    "\\\t\\\u0004]\t]\u0004^\t^\u0004_\t_\u0004`\t`\u0004a\ta\u0004b\tb\u0004",
    "c\tc\u0004d\td\u0004e\te\u0004f\tf\u0004g\tg\u0004h\th\u0004i\ti\u0004",
    "j\tj\u0004k\tk\u0004l\tl\u0004m\tm\u0004n\tn\u0004o\to\u0004p\tp\u0004",
    "q\tq\u0004r\tr\u0004s\ts\u0004t\tt\u0004u\tu\u0003\u0002\u0003\u0002",
    "\u0003\u0002\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004",
    "\u0005\u0004\u00f3\n\u0004\u0003\u0004\u0007\u0004\u00f6\n\u0004\f\u0004",
    "\u000e\u0004\u00f9\u000b\u0004\u0003\u0005\u0003\u0005\u0003\u0005\u0003",
    "\u0005\u0003\u0005\u0003\u0005\u0005\u0005\u0101\n\u0005\u0003\u0006",
    "\u0003\u0006\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007",
    "\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007",
    "\u0003\u0007\u0005\u0007\u0111\n\u0007\u0003\b\u0003\b\u0005\b\u0115",
    "\n\b\u0003\t\u0003\t\u0003\t\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n",
    "\u0003\u000b\u0003\u000b\u0005\u000b\u0121\n\u000b\u0003\u000b\u0003",
    "\u000b\u0003\f\u0003\f\u0003\f\u0003\r\u0003\r\u0003\r\u0003\r\u0003",
    "\r\u0003\r\u0003\r\u0007\r\u012f\n\r\f\r\u000e\r\u0132\u000b\r\u0003",
    "\r\u0003\r\u0005\r\u0136\n\r\u0003\r\u0003\r\u0005\r\u013a\n\r\u0003",
    "\r\u0003\r\u0005\r\u013e\n\r\u0003\r\u0003\r\u0005\r\u0142\n\r\u0003",
    "\r\u0005\r\u0145\n\r\u0003\r\u0003\r\u0005\r\u0149\n\r\u0003\u000e\u0003",
    "\u000e\u0003\u000e\u0005\u000e\u014e\n\u000e\u0003\u000e\u0005\u000e",
    "\u0151\n\u000e\u0003\u000f\u0003\u000f\u0005\u000f\u0155\n\u000f\u0003",
    "\u0010\u0003\u0010\u0003\u0010\u0007\u0010\u015a\n\u0010\f\u0010\u000e",
    "\u0010\u015d\u000b\u0010\u0003\u0011\u0003\u0011\u0003\u0012\u0003\u0012",
    "\u0003\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0013\u0003\u0014",
    "\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0015",
    "\u0003\u0015\u0005\u0015\u0170\n\u0015\u0003\u0015\u0003\u0015\u0003",
    "\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0016\u0003\u0016\u0003",
    "\u0016\u0003\u0016\u0003\u0017\u0003\u0017\u0003\u0017\u0003\u0017\u0003",
    "\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0007\u0018\u0184\n\u0018",
    "\f\u0018\u000e\u0018\u0187\u000b\u0018\u0003\u0018\u0003\u0018\u0003",
    "\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0007",
    "\u0019\u0191\n\u0019\f\u0019\u000e\u0019\u0194\u000b\u0019\u0003\u0019",
    "\u0003\u0019\u0005\u0019\u0198\n\u0019\u0003\u001a\u0003\u001a\u0005",
    "\u001a\u019c\n\u001a\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b",
    "\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0005\u001c\u01a6\n",
    "\u001c\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003",
    "\u001e\u0003\u001e\u0003\u001e\u0005\u001e\u01b0\n\u001e\u0003\u001e",
    "\u0003\u001e\u0005\u001e\u01b4\n\u001e\u0003\u001e\u0003\u001e\u0003",
    "\u001f\u0003\u001f\u0005\u001f\u01ba\n\u001f\u0003\u001f\u0003\u001f",
    "\u0005\u001f\u01be\n\u001f\u0003\u001f\u0003\u001f\u0005\u001f\u01c2",
    "\n\u001f\u0003\u001f\u0005\u001f\u01c5\n\u001f\u0003\u001f\u0003\u001f",
    "\u0003\u001f\u0003 \u0003 \u0003 \u0003 \u0005 \u01ce\n \u0003 \u0003",
    " \u0005 \u01d2\n \u0003 \u0003 \u0003 \u0003 \u0003 \u0005 \u01d9\n",
    " \u0003!\u0003!\u0003!\u0003!\u0003!\u0005!\u01e0\n!\u0003\"\u0003\"",
    "\u0003\"\u0003\"\u0003#\u0003#\u0003#\u0003$\u0003$\u0003$\u0003$\u0003",
    "$\u0003%\u0003%\u0003%\u0003%\u0005%\u01f2\n%\u0003%\u0003%\u0005%\u01f6",
    "\n%\u0003%\u0003%\u0003%\u0003%\u0003%\u0005%\u01fd\n%\u0003&\u0003",
    "&\u0003&\u0005&\u0202\n&\u0003&\u0003&\u0003\'\u0003\'\u0003\'\u0005",
    "\'\u0209\n\'\u0003\'\u0003\'\u0005\'\u020d\n\'\u0003(\u0003(\u0005(",
    "\u0211\n(\u0003(\u0003(\u0005(\u0215\n(\u0003(\u0003(\u0003)\u0003)",
    "\u0003)\u0003)\u0005)\u021d\n)\u0003)\u0003)\u0005)\u0221\n)\u0003)",
    "\u0003)\u0003*\u0003*\u0003*\u0003*\u0005*\u0229\n*\u0003*\u0003*\u0005",
    "*\u022d\n*\u0003+\u0003+\u0003+\u0003,\u0003,\u0003,\u0003,\u0007,\u0236",
    "\n,\f,\u000e,\u0239\u000b,\u0003-\u0003-\u0003-\u0003-\u0007-\u023f",
    "\n-\f-\u000e-\u0242\u000b-\u0003-\u0003-\u0003.\u0003.\u0003.\u0003",
    ".\u0003.\u0003.\u0003.\u0003.\u0005.\u024e\n.\u0003.\u0005.\u0251\n",
    ".\u0003.\u0003.\u0005.\u0255\n.\u0003.\u0005.\u0258\n.\u0005.\u025a",
    "\n.\u0003.\u0003.\u0003.\u0005.\u025f\n.\u0003.\u0003.\u0005.\u0263",
    "\n.\u0003.\u0005.\u0266\n.\u0007.\u0268\n.\f.\u000e.\u026b\u000b.\u0003",
    "/\u0003/\u0003/\u0003/\u0007/\u0271\n/\f/\u000e/\u0274\u000b/\u0003",
    "0\u00030\u00030\u00050\u0279\n0\u00030\u00050\u027c\n0\u00030\u0005",
    "0\u027f\n0\u00030\u00050\u0282\n0\u00031\u00031\u00051\u0286\n1\u0003",
    "1\u00031\u00031\u00031\u00071\u028c\n1\f1\u000e1\u028f\u000b1\u0005",
    "1\u0291\n1\u00032\u00032\u00052\u0295\n2\u00032\u00052\u0298\n2\u0003",
    "3\u00033\u00033\u00034\u00034\u00034\u00034\u00074\u02a1\n4\f4\u000e",
    "4\u02a4\u000b4\u00034\u00034\u00054\u02a8\n4\u00034\u00054\u02ab\n4",
    "\u00034\u00034\u00034\u00054\u02b0\n4\u00074\u02b2\n4\f4\u000e4\u02b5",
    "\u000b4\u00035\u00035\u00055\u02b9\n5\u00036\u00056\u02bc\n6\u00036",
    "\u00036\u00036\u00036\u00036\u00036\u00036\u00036\u00036\u00076\u02c7",
    "\n6\f6\u000e6\u02ca\u000b6\u00036\u00036\u00036\u00036\u00036\u0003",
    "6\u00036\u00036\u00056\u02d4\n6\u00037\u00037\u00037\u00037\u00037\u0003",
    "7\u00037\u00077\u02dd\n7\f7\u000e7\u02e0\u000b7\u00037\u00037\u0005",
    "7\u02e4\n7\u00038\u00038\u00038\u00039\u00039\u00039\u00039\u00039\u0007",
    "9\u02ee\n9\f9\u000e9\u02f1\u000b9\u0003:\u0003:\u0003:\u0003:\u0003",
    ":\u0003:\u0003:\u0007:\u02fa\n:\f:\u000e:\u02fd\u000b:\u0003:\u0003",
    ":\u0003:\u0003:\u0003:\u0003:\u0003:\u0007:\u0306\n:\f:\u000e:\u0309",
    "\u000b:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003:\u0007:\u0312",
    "\n:\f:\u000e:\u0315\u000b:\u0003:\u0003:\u0003:\u0003:\u0003:\u0003",
    ":\u0003:\u0003:\u0007:\u031f\n:\f:\u000e:\u0322\u000b:\u0003:\u0003",
    ":\u0005:\u0326\n:\u0003;\u0003;\u0003;\u0003<\u0003<\u0003<\u0003<\u0003",
    "<\u0007<\u0330\n<\f<\u000e<\u0333\u000b<\u0003=\u0003=\u0005=\u0337",
    "\n=\u0003>\u0003>\u0003>\u0005>\u033c\n>\u0003?\u0003?\u0003?\u0003",
    "?\u0007?\u0342\n?\f?\u000e?\u0345\u000b?\u0003@\u0003@\u0003@\u0003",
    "@\u0003A\u0005A\u034c\nA\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0007",
    "A\u0354\nA\fA\u000eA\u0357\u000bA\u0005A\u0359\nA\u0003A\u0003A\u0003",
    "A\u0003A\u0003A\u0007A\u0360\nA\fA\u000eA\u0363\u000bA\u0005A\u0365",
    "\nA\u0003A\u0005A\u0368\nA\u0003A\u0003A\u0003B\u0003B\u0005B\u036e",
    "\nB\u0003B\u0003B\u0005B\u0372\nB\u0003C\u0003C\u0003C\u0003C\u0005",
    "C\u0378\nC\u0003D\u0003D\u0003D\u0003E\u0003E\u0003F\u0003F\u0003F\u0003",
    "F\u0003F\u0003F\u0003F\u0003F\u0003F\u0003F\u0005F\u0389\nF\u0005F\u038b",
    "\nF\u0003F\u0003F\u0003F\u0003F\u0003F\u0003F\u0007F\u0393\nF\fF\u000e",
    "F\u0396\u000bF\u0003G\u0005G\u0399\nG\u0003G\u0003G\u0003G\u0003G\u0003",
    "G\u0003G\u0005G\u03a1\nG\u0003G\u0003G\u0003G\u0003G\u0003G\u0007G\u03a8",
    "\nG\fG\u000eG\u03ab\u000bG\u0003G\u0003G\u0003G\u0005G\u03b0\nG\u0003",
    "G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003",
    "G\u0005G\u03bd\nG\u0003G\u0003G\u0003G\u0005G\u03c2\nG\u0003G\u0003",
    "G\u0003G\u0003G\u0003G\u0003G\u0003G\u0003G\u0007G\u03cc\nG\fG\u000e",
    "G\u03cf\u000bG\u0003G\u0003G\u0005G\u03d3\nG\u0003G\u0005G\u03d6\nG",
    "\u0003G\u0003G\u0003G\u0003G\u0005G\u03dc\nG\u0003G\u0003G\u0003G\u0005",
    "G\u03e1\nG\u0003G\u0003G\u0003G\u0005G\u03e6\nG\u0003G\u0003G\u0003",
    "G\u0005G\u03eb\nG\u0003H\u0003H\u0003H\u0003H\u0005H\u03f1\nH\u0003",
    "H\u0003H\u0003H\u0003H\u0003H\u0003H\u0003H\u0003H\u0003H\u0003H\u0003",
    "H\u0003H\u0003H\u0003H\u0003H\u0003H\u0003H\u0003H\u0003H\u0007H\u0406",
    "\nH\fH\u000eH\u0409\u000bH\u0003I\u0003I\u0003I\u0006I\u040e\nI\rI\u000e",
    "I\u040f\u0003I\u0003I\u0005I\u0414\nI\u0003I\u0003I\u0003I\u0003I\u0003",
    "I\u0006I\u041b\nI\rI\u000eI\u041c\u0003I\u0003I\u0005I\u0421\nI\u0003",
    "I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003",
    "I\u0003I\u0003I\u0003I\u0005I\u0431\nI\u0003I\u0003I\u0003I\u0003I\u0003",
    "I\u0003I\u0003I\u0005I\u043a\nI\u0003I\u0003I\u0003I\u0003I\u0003I\u0003",
    "I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003",
    "I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0005I\u0452\nI\u0003I\u0003",
    "I\u0003I\u0007I\u0457\nI\fI\u000eI\u045a\u000bI\u0005I\u045c\nI\u0003",
    "I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0003I\u0005I\u0466\nI\u0003",
    "I\u0003I\u0003I\u0003I\u0003I\u0007I\u046d\nI\fI\u000eI\u0470\u000b",
    "I\u0003J\u0003J\u0003K\u0003K\u0003L\u0003L\u0005L\u0478\nL\u0003M\u0003",
    "M\u0003M\u0005M\u047d\nM\u0003N\u0003N\u0005N\u0481\nN\u0003O\u0003",
    "O\u0003O\u0006O\u0486\nO\rO\u000eO\u0487\u0003P\u0003P\u0003P\u0005",
    "P\u048d\nP\u0003Q\u0003Q\u0003Q\u0003Q\u0003Q\u0003R\u0005R\u0495\n",
    "R\u0003R\u0003R\u0005R\u0499\nR\u0003S\u0005S\u049c\nS\u0003S\u0003",
    "S\u0005S\u04a0\nS\u0003T\u0005T\u04a3\nT\u0003T\u0003T\u0005T\u04a7",
    "\nT\u0003U\u0003U\u0003U\u0003V\u0003V\u0006V\u04ae\nV\rV\u000eV\u04af",
    "\u0003V\u0005V\u04b3\nV\u0003W\u0003W\u0003W\u0003W\u0003X\u0003X\u0003",
    "X\u0007X\u04bc\nX\fX\u000eX\u04bf\u000bX\u0003Y\u0003Y\u0005Y\u04c3",
    "\nY\u0003Z\u0003Z\u0003Z\u0003Z\u0005Z\u04c9\nZ\u0003[\u0003[\u0003",
    "\\\u0003\\\u0003]\u0003]\u0003]\u0003]\u0003]\u0003^\u0003^\u0003^\u0007",
    "^\u04d7\n^\f^\u000e^\u04da\u000b^\u0003_\u0003_\u0007_\u04de\n_\f_\u000e",
    "_\u04e1\u000b_\u0003`\u0003`\u0007`\u04e5\n`\f`\u000e`\u04e8\u000b`",
    "\u0003a\u0003a\u0003a\u0003b\u0003b\u0003b\u0003b\u0003c\u0003c\u0003",
    "c\u0003d\u0003d\u0003d\u0003d\u0007d\u04f8\nd\fd\u000ed\u04fb\u000b",
    "d\u0003d\u0003d\u0003e\u0003e\u0005e\u0501\ne\u0003e\u0005e\u0504\n",
    "e\u0003f\u0003f\u0003f\u0005f\u0509\nf\u0003g\u0003g\u0003g\u0003g\u0005",
    "g\u050f\ng\u0003h\u0003h\u0003h\u0003h\u0003h\u0003h\u0005h\u0517\n",
    "h\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003i\u0003",
    "i\u0003i\u0003i\u0003i\u0003i\u0005i\u0527\ni\u0003j\u0003j\u0003j\u0003",
    "j\u0003j\u0003j\u0003j\u0005j\u0530\nj\u0003k\u0003k\u0003l\u0003l\u0003",
    "m\u0003m\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003n\u0003",
    "n\u0005n\u0541\nn\u0003n\u0005n\u0544\nn\u0003o\u0003o\u0003p\u0003",
    "p\u0003q\u0003q\u0003r\u0003r\u0003s\u0003s\u0003t\u0003t\u0003u\u0003",
    "u\u0003u\u0004\u04df\u04e6\u0007Zf\u008a\u008e\u0090v\u0002\u0004\u0006",
    "\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*",
    ",.02468:<>@BDFHJLNPRTVXZ\\^`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\u0002\u001d\u0006\u0002XX]]\u00b7\u00b7\u00e4\u00e5\u0003\u0002",
    "\u00ea\u0101\u0003\u0002\u00de\u00df\u0004\u0002\n\n\u00e0\u00e0\u0004",
    "\u0002\u009d\u009d\u00e1\u00e1\u0004\u0002\u00ae\u00ae\u00b0\u00b0\u0004",
    "\u0002OO\u0082\u0082\u0004\u0002_`bb\u0004\u00021245\u0003\u0002%&\u0004",
    "\u0002CCEE\u0003\u0002\n\u000b\u0003\u0002\"#\u0004\u0002\u0106\u0106",
    "\u0118\u0119\u0006\u0002zz\u0116\u0116\u011a\u011a\u011d\u011d\u0004",
    "\u0002\u0118\u0119\u011b\u011b\u0003\u0002\u0118\u0119\u0003\u0002\u0121",
    "\u0122\u0004\u0002\u0121\u0121\u0124\u0124\u0003\u0002\u0124\u0125\u0003",
    "\u0002\u011e\u011f\u0006\u0002zz\u0116\u0116\u0118\u011a\u011c\u011d",
    "\u0005\u0002\u001b\u001b\u0105\u0106\u0118\u0119\u0004\u0002\n\n\f\f",
    "\u0017\u0002\b\b\u000f\u0013\u0016\u0017\u001c \"\"$&((338EGGJNPUWY",
    "[^aadrv\u0084\u0086\u00ae\u00b0\u00c1\u00c3\u00e5\u00e7\u0101\u0007",
    "\u0002./17_b\u0085\u0085\u00d4\u00d4\t\u0002\u0006-008^c\u0084\u0086",
    "\u00a6\u00a8\u00d3\u00d5\u0101\u0002\u05c3\u0002\u00ea\u0003\u0002\u0002",
    "\u0002\u0004\u00ed\u0003\u0002\u0002\u0002\u0006\u00f7\u0003\u0002\u0002",
    "\u0002\b\u0100\u0003\u0002\u0002\u0002\n\u0102\u0003\u0002\u0002\u0002",
    "\f\u0110\u0003\u0002\u0002\u0002\u000e\u0114\u0003\u0002\u0002\u0002",
    "\u0010\u0116\u0003\u0002\u0002\u0002\u0012\u0119\u0003\u0002\u0002\u0002",
    "\u0014\u011e\u0003\u0002\u0002\u0002\u0016\u0124\u0003\u0002\u0002\u0002",
    "\u0018\u0127\u0003\u0002\u0002\u0002\u001a\u014a\u0003\u0002\u0002\u0002",
    "\u001c\u0154\u0003\u0002\u0002\u0002\u001e\u0156\u0003\u0002\u0002\u0002",
    " \u015e\u0003\u0002\u0002\u0002\"\u0160\u0003\u0002\u0002\u0002$\u0164",
    "\u0003\u0002\u0002\u0002&\u0167\u0003\u0002\u0002\u0002(\u016f\u0003",
    "\u0002\u0002\u0002*\u0177\u0003\u0002\u0002\u0002,\u017b\u0003\u0002",
    "\u0002\u0002.\u017f\u0003\u0002\u0002\u00020\u0197\u0003\u0002\u0002",
    "\u00022\u019b\u0003\u0002\u0002\u00024\u019d\u0003\u0002\u0002\u0002",
    "6\u01a5\u0003\u0002\u0002\u00028\u01a7\u0003\u0002\u0002\u0002:\u01ac",
    "\u0003\u0002\u0002\u0002<\u01b7\u0003\u0002\u0002\u0002>\u01c9\u0003",
    "\u0002\u0002\u0002@\u01da\u0003\u0002\u0002\u0002B\u01e1\u0003\u0002",
    "\u0002\u0002D\u01e5\u0003\u0002\u0002\u0002F\u01e8\u0003\u0002\u0002",
    "\u0002H\u01ed\u0003\u0002\u0002\u0002J\u01fe\u0003\u0002\u0002\u0002",
    "L\u0205\u0003\u0002\u0002\u0002N\u020e\u0003\u0002\u0002\u0002P\u0218",
    "\u0003\u0002\u0002\u0002R\u0224\u0003\u0002\u0002\u0002T\u022e\u0003",
    "\u0002\u0002\u0002V\u0231\u0003\u0002\u0002\u0002X\u023a\u0003\u0002",
    "\u0002\u0002Z\u0259\u0003\u0002\u0002\u0002\\\u026c\u0003\u0002\u0002",
    "\u0002^\u0275\u0003\u0002\u0002\u0002`\u0283\u0003\u0002\u0002\u0002",
    "b\u0292\u0003\u0002\u0002\u0002d\u0299\u0003\u0002\u0002\u0002f\u029c",
    "\u0003\u0002\u0002\u0002h\u02b6\u0003\u0002\u0002\u0002j\u02d3\u0003",
    "\u0002\u0002\u0002l\u02e3\u0003\u0002\u0002\u0002n\u02e5\u0003\u0002",
    "\u0002\u0002p\u02e8\u0003\u0002\u0002\u0002r\u0325\u0003\u0002\u0002",
    "\u0002t\u0327\u0003\u0002\u0002\u0002v\u032a\u0003\u0002\u0002\u0002",
    "x\u0334\u0003\u0002\u0002\u0002z\u0338\u0003\u0002\u0002\u0002|\u033d",
    "\u0003\u0002\u0002\u0002~\u0346\u0003\u0002\u0002\u0002\u0080\u034b",
    "\u0003\u0002\u0002\u0002\u0082\u036b\u0003\u0002\u0002\u0002\u0084\u0377",
    "\u0003\u0002\u0002\u0002\u0086\u0379\u0003\u0002\u0002\u0002\u0088\u037c",
    "\u0003\u0002\u0002\u0002\u008a\u038a\u0003\u0002\u0002\u0002\u008c\u03ea",
    "\u0003\u0002\u0002\u0002\u008e\u03f0\u0003\u0002\u0002\u0002\u0090\u0465",
    "\u0003\u0002\u0002\u0002\u0092\u0471\u0003\u0002\u0002\u0002\u0094\u0473",
    "\u0003\u0002\u0002\u0002\u0096\u0477\u0003\u0002\u0002\u0002\u0098\u0479",
    "\u0003\u0002\u0002\u0002\u009a\u047e\u0003\u0002\u0002\u0002\u009c\u0485",
    "\u0003\u0002\u0002\u0002\u009e\u0489\u0003\u0002\u0002\u0002\u00a0\u048e",
    "\u0003\u0002\u0002\u0002\u00a2\u0498\u0003\u0002\u0002\u0002\u00a4\u049b",
    "\u0003\u0002\u0002\u0002\u00a6\u04a2\u0003\u0002\u0002\u0002\u00a8\u04a8",
    "\u0003\u0002\u0002\u0002\u00aa\u04b2\u0003\u0002\u0002\u0002\u00ac\u04b4",
    "\u0003\u0002\u0002\u0002\u00ae\u04b8\u0003\u0002\u0002\u0002\u00b0\u04c2",
    "\u0003\u0002\u0002\u0002\u00b2\u04c8\u0003\u0002\u0002\u0002\u00b4\u04ca",
    "\u0003\u0002\u0002\u0002\u00b6\u04cc\u0003\u0002\u0002\u0002\u00b8\u04ce",
    "\u0003\u0002\u0002\u0002\u00ba\u04d3\u0003\u0002\u0002\u0002\u00bc\u04db",
    "\u0003\u0002\u0002\u0002\u00be\u04e2\u0003\u0002\u0002\u0002\u00c0\u04e9",
    "\u0003\u0002\u0002\u0002\u00c2\u04ec\u0003\u0002\u0002\u0002\u00c4\u04f0",
    "\u0003\u0002\u0002\u0002\u00c6\u04f3\u0003\u0002\u0002\u0002\u00c8\u04fe",
    "\u0003\u0002\u0002\u0002\u00ca\u0508\u0003\u0002\u0002\u0002\u00cc\u050e",
    "\u0003\u0002\u0002\u0002\u00ce\u0516\u0003\u0002\u0002\u0002\u00d0\u0526",
    "\u0003\u0002\u0002\u0002\u00d2\u052f\u0003\u0002\u0002\u0002\u00d4\u0531",
    "\u0003\u0002\u0002\u0002\u00d6\u0533\u0003\u0002\u0002\u0002\u00d8\u0535",
    "\u0003\u0002\u0002\u0002\u00da\u0543\u0003\u0002\u0002\u0002\u00dc\u0545",
    "\u0003\u0002\u0002\u0002\u00de\u0547\u0003\u0002\u0002\u0002\u00e0\u0549",
    "\u0003\u0002\u0002\u0002\u00e2\u054b\u0003\u0002\u0002\u0002\u00e4\u054d",
    "\u0003\u0002\u0002\u0002\u00e6\u054f\u0003\u0002\u0002\u0002\u00e8\u0551",
    "\u0003\u0002\u0002\u0002\u00ea\u00eb\u0005\u0004\u0003\u0002\u00eb\u00ec",
    "\u0007\u0002\u0002\u0003\u00ec\u0003\u0003\u0002\u0002\u0002\u00ed\u00ee",
    "\u0005\u0006\u0004\u0002\u00ee\u00ef\u0007\u0002\u0002\u0003\u00ef\u0005",
    "\u0003\u0002\u0002\u0002\u00f0\u00f2\u0005\b\u0005\u0002\u00f1\u00f3",
    "\u0007\u0110\u0002\u0002\u00f2\u00f1\u0003\u0002\u0002\u0002\u00f2\u00f3",
    "\u0003\u0002\u0002\u0002\u00f3\u00f6\u0003\u0002\u0002\u0002\u00f4\u00f6",
    "\u0005\n\u0006\u0002\u00f5\u00f0\u0003\u0002\u0002\u0002\u00f5\u00f4",
    "\u0003\u0002\u0002\u0002\u00f6\u00f9\u0003\u0002\u0002\u0002\u00f7\u00f5",
    "\u0003\u0002\u0002\u0002\u00f7\u00f8\u0003\u0002\u0002\u0002\u00f8\u0007",
    "\u0003\u0002\u0002\u0002\u00f9\u00f7\u0003\u0002\u0002\u0002\u00fa\u0101",
    "\u0005\f\u0007\u0002\u00fb\u0101\u0005\u000e\b\u0002\u00fc\u0101\u0005",
    "\u0010\t\u0002\u00fd\u0101\u0005\u0012\n\u0002\u00fe\u0101\u0005\u0014",
    "\u000b\u0002\u00ff\u0101\u0005\u0016\f\u0002\u0100\u00fa\u0003\u0002",
    "\u0002\u0002\u0100\u00fb\u0003\u0002\u0002\u0002\u0100\u00fc\u0003\u0002",
    "\u0002\u0002\u0100\u00fd\u0003\u0002\u0002\u0002\u0100\u00fe\u0003\u0002",
    "\u0002\u0002\u0100\u00ff\u0003\u0002\u0002\u0002\u0101\t\u0003\u0002",
    "\u0002\u0002\u0102\u0103\u0007\u0110\u0002\u0002\u0103\u000b\u0003\u0002",
    "\u0002\u0002\u0104\u0111\u0005\u0018\r\u0002\u0105\u0111\u0005:\u001e",
    "\u0002\u0106\u0111\u0005<\u001f\u0002\u0107\u0111\u0005> \u0002\u0108",
    "\u0111\u00058\u001d\u0002\u0109\u0111\u0005@!\u0002\u010a\u0111\u0005",
    "F$\u0002\u010b\u0111\u0005H%\u0002\u010c\u0111\u0005J&\u0002\u010d\u0111",
    "\u0005L\'\u0002\u010e\u0111\u0005N(\u0002\u010f\u0111\u0005P)\u0002",
    "\u0110\u0104\u0003\u0002\u0002\u0002\u0110\u0105\u0003\u0002\u0002\u0002",
    "\u0110\u0106\u0003\u0002\u0002\u0002\u0110\u0107\u0003\u0002\u0002\u0002",
    "\u0110\u0108\u0003\u0002\u0002\u0002\u0110\u0109\u0003\u0002\u0002\u0002",
    "\u0110\u010a\u0003\u0002\u0002\u0002\u0110\u010b\u0003\u0002\u0002\u0002",
    "\u0110\u010c\u0003\u0002\u0002\u0002\u0110\u010d\u0003\u0002\u0002\u0002",
    "\u0110\u010e\u0003\u0002\u0002\u0002\u0110\u010f\u0003\u0002\u0002\u0002",
    "\u0111\r\u0003\u0002\u0002\u0002\u0112\u0115\u0005Z.\u0002\u0113\u0115",
    "\u0005R*\u0002\u0114\u0112\u0003\u0002\u0002\u0002\u0114\u0113\u0003",
    "\u0002\u0002\u0002\u0115\u000f\u0003\u0002\u0002\u0002\u0116\u0117\u0007",
    "P\u0002\u0002\u0117\u0118\u0005\u00bc_\u0002\u0118\u0011\u0003\u0002",
    "\u0002\u0002\u0119\u011a\u0007Q\u0002\u0002\u011a\u011b\u0005\u00b0",
    "Y\u0002\u011b\u011c\u0007\'\u0002\u0002\u011c\u011d\u0005\u000e\b\u0002",
    "\u011d\u0013\u0003\u0002\u0002\u0002\u011e\u0120\u0007[\u0002\u0002",
    "\u011f\u0121\u0007\u00e2\u0002\u0002\u0120\u011f\u0003\u0002\u0002\u0002",
    "\u0120\u0121\u0003\u0002\u0002\u0002\u0121\u0122\u0003\u0002\u0002\u0002",
    "\u0122\u0123\u0005\u00bc_\u0002\u0123\u0015\u0003\u0002\u0002\u0002",
    "\u0124\u0125\u0007W\u0002\u0002\u0125\u0126\t\u0002\u0002\u0002\u0126",
    "\u0017\u0003\u0002\u0002\u0002\u0127\u0128\u0007H\u0002\u0002\u0128",
    "\u0129\u0007I\u0002\u0002\u0129\u012a\u0005\u00bc_\u0002\u012a\u012b",
    "\u0007\u010d\u0002\u0002\u012b\u0130\u0005\u001a\u000e\u0002\u012c\u012d",
    "\u0007\u010f\u0002\u0002\u012d\u012f\u0005\u001a\u000e\u0002\u012e\u012c",
    "\u0003\u0002\u0002\u0002\u012f\u0132\u0003\u0002\u0002\u0002\u0130\u012e",
    "\u0003\u0002\u0002\u0002\u0130\u0131\u0003\u0002\u0002\u0002\u0131\u0135",
    "\u0003\u0002\u0002\u0002\u0132\u0130\u0003\u0002\u0002\u0002\u0133\u0134",
    "\u0007\u010f\u0002\u0002\u0134\u0136\u0005&\u0014\u0002\u0135\u0133",
    "\u0003\u0002\u0002\u0002\u0135\u0136\u0003\u0002\u0002\u0002\u0136\u0139",
    "\u0003\u0002\u0002\u0002\u0137\u0138\u0007\u010f\u0002\u0002\u0138\u013a",
    "\u0005(\u0015\u0002\u0139\u0137\u0003\u0002\u0002\u0002\u0139\u013a",
    "\u0003\u0002\u0002\u0002\u013a\u013d\u0003\u0002\u0002\u0002\u013b\u013c",
    "\u0007\u010f\u0002\u0002\u013c\u013e\u0005*\u0016\u0002\u013d\u013b",
    "\u0003\u0002\u0002\u0002\u013d\u013e\u0003\u0002\u0002\u0002\u013e\u013f",
    "\u0003\u0002\u0002\u0002\u013f\u0141\u0007\u010e\u0002\u0002\u0140\u0142",
    "\u0005$\u0013\u0002\u0141\u0140\u0003\u0002\u0002\u0002\u0141\u0142",
    "\u0003\u0002\u0002\u0002\u0142\u0144\u0003\u0002\u0002\u0002\u0143\u0145",
    "\u0005,\u0017\u0002\u0144\u0143\u0003\u0002\u0002\u0002\u0144\u0145",
    "\u0003\u0002\u0002\u0002\u0145\u0146\u0003\u0002\u0002\u0002\u0146\u0148",
    "\u0005\u00c0a\u0002\u0147\u0149\u00054\u001b\u0002\u0148\u0147\u0003",
    "\u0002\u0002\u0002\u0148\u0149\u0003\u0002\u0002\u0002\u0149\u0019\u0003",
    "\u0002\u0002\u0002\u014a\u014b\u0005\u001c\u000f\u0002\u014b\u014d\u0005",
    " \u0011\u0002\u014c\u014e\u0005\"\u0012\u0002\u014d\u014c\u0003\u0002",
    "\u0002\u0002\u014d\u014e\u0003\u0002\u0002\u0002\u014e\u0150\u0003\u0002",
    "\u0002\u0002\u014f\u0151\u0005\u00a4S\u0002\u0150\u014f\u0003\u0002",
    "\u0002\u0002\u0150\u0151\u0003\u0002\u0002\u0002\u0151\u001b\u0003\u0002",
    "\u0002\u0002\u0152\u0155\u0005\u00be`\u0002\u0153\u0155\u0005\u0088",
    "E\u0002\u0154\u0152\u0003\u0002\u0002\u0002\u0154\u0153\u0003\u0002",
    "\u0002\u0002\u0155\u001d\u0003\u0002\u0002\u0002\u0156\u015b\u0005\u001c",
    "\u000f\u0002\u0157\u0158\u0007\u010f\u0002\u0002\u0158\u015a\u0005\u001c",
    "\u000f\u0002\u0159\u0157\u0003\u0002\u0002\u0002\u015a\u015d\u0003\u0002",
    "\u0002\u0002\u015b\u0159\u0003\u0002\u0002\u0002\u015b\u015c\u0003\u0002",
    "\u0002\u0002\u015c\u001f\u0003\u0002\u0002\u0002\u015d\u015b\u0003\u0002",
    "\u0002\u0002\u015e\u015f\t\u0003\u0002\u0002\u015f!\u0003\u0002\u0002",
    "\u0002\u0160\u0161\u0007\u010d\u0002\u0002\u0161\u0162\u0005\u00dep",
    "\u0002\u0162\u0163\u0007\u010e\u0002\u0002\u0163#\u0003\u0002\u0002",
    "\u0002\u0164\u0165\u0007i\u0002\u0002\u0165\u0166\u0007\u0120\u0002",
    "\u0002\u0166%\u0003\u0002\u0002\u0002\u0167\u0168\u0007\u00d7\u0002",
    "\u0002\u0168\u0169\u0007\'\u0002\u0002\u0169\u016a\u0005\u0088E\u0002",
    "\u016a\u016b\u0007\t\u0002\u0002\u016b\u016c\u0005\u0088E\u0002\u016c",
    "\'\u0003\u0002\u0002\u0002\u016d\u016e\u0007\u00af\u0002\u0002\u016e",
    "\u0170\u0005\u00b0Y\u0002\u016f\u016d\u0003\u0002\u0002\u0002\u016f",
    "\u0170\u0003\u0002\u0002\u0002\u0170\u0171\u0003\u0002\u0002\u0002\u0171",
    "\u0172\u0007\u00e6\u0002\u0002\u0172\u0173\u0007\u00e7\u0002\u0002\u0173",
    "\u0174\u0007\u010d\u0002\u0002\u0174\u0175\u0005\u001e\u0010\u0002\u0175",
    "\u0176\u0007\u010e\u0002\u0002\u0176)\u0003\u0002\u0002\u0002\u0177",
    "\u0178\u0007\u00e8\u0002\u0002\u0178\u0179\u0007\'\u0002\u0002\u0179",
    "\u017a\u0007\u00e9\u0002\u0002\u017a+\u0003\u0002\u0002\u0002\u017b",
    "\u017c\u0007\u00be\u0002\u0002\u017c\u017d\u0007\u000f\u0002\u0002\u017d",
    "\u017e\u0005.\u0018\u0002\u017e-\u0003\u0002\u0002\u0002\u017f\u0180",
    "\u0007\u010d\u0002\u0002\u0180\u0185\u00050\u0019\u0002\u0181\u0182",
    "\u0007\u010f\u0002\u0002\u0182\u0184\u00050\u0019\u0002\u0183\u0181",
    "\u0003\u0002\u0002\u0002\u0184\u0187\u0003\u0002\u0002\u0002\u0185\u0183",
    "\u0003\u0002\u0002\u0002\u0185\u0186\u0003\u0002\u0002\u0002\u0186\u0188",
    "\u0003\u0002\u0002\u0002\u0187\u0185\u0003\u0002\u0002\u0002\u0188\u0189",
    "\u0007\u010e\u0002\u0002\u0189/\u0003\u0002\u0002\u0002\u018a\u0198",
    "\u0005\u0096L\u0002\u018b\u018c\u0005\u00b0Y\u0002\u018c\u018d\u0007",
    "\u010d\u0002\u0002\u018d\u0192\u00052\u001a\u0002\u018e\u018f\u0007",
    "\u010f\u0002\u0002\u018f\u0191\u00052\u001a\u0002\u0190\u018e\u0003",
    "\u0002\u0002\u0002\u0191\u0194\u0003\u0002\u0002\u0002\u0192\u0190\u0003",
    "\u0002\u0002\u0002\u0192\u0193\u0003\u0002\u0002\u0002\u0193\u0195\u0003",
    "\u0002\u0002\u0002\u0194\u0192\u0003\u0002\u0002\u0002\u0195\u0196\u0007",
    "\u010e\u0002\u0002\u0196\u0198\u0003\u0002\u0002\u0002\u0197\u018a\u0003",
    "\u0002\u0002\u0002\u0197\u018b\u0003\u0002\u0002\u0002\u01981\u0003",
    "\u0002\u0002\u0002\u0199\u019c\u0005\u0096L\u0002\u019a\u019c\u0005",
    "\u00dan\u0002\u019b\u0199\u0003\u0002\u0002\u0002\u019b\u019a\u0003",
    "\u0002\u0002\u0002\u019c3\u0003\u0002\u0002\u0002\u019d\u019e\u0007",
    "\u001f\u0002\u0002\u019e\u019f\u0005\u00b0Y\u0002\u019f\u01a0\u0005",
    "6\u001c\u0002\u01a05\u0003\u0002\u0002\u0002\u01a1\u01a2\t\u0004\u0002",
    "\u0002\u01a2\u01a6\t\u0005\u0002\u0002\u01a3\u01a4\t\u0004\u0002\u0002",
    "\u01a4\u01a6\t\u0006\u0002\u0002\u01a5\u01a1\u0003\u0002\u0002\u0002",
    "\u01a5\u01a3\u0003\u0002\u0002\u0002\u01a67\u0003\u0002\u0002\u0002",
    "\u01a7\u01a8\u0007H\u0002\u0002\u01a8\u01a9\u0007\u00e2\u0002\u0002",
    "\u01a9\u01aa\u0005\u00bc_\u0002\u01aa\u01ab\u0005\u00c0a\u0002\u01ab",
    "9\u0003\u0002\u0002\u0002\u01ac\u01ad\u0007H\u0002\u0002\u01ad\u01af",
    "\u0007\u00b6\u0002\u0002\u01ae\u01b0\u0005\u00c2b\u0002\u01af\u01ae",
    "\u0003\u0002\u0002\u0002\u01af\u01b0\u0003\u0002\u0002\u0002\u01b0\u01b1",
    "\u0003\u0002\u0002\u0002\u01b1\u01b3\u0005\u00bc_\u0002\u01b2\u01b4",
    "\u0005$\u0013\u0002\u01b3\u01b2\u0003\u0002\u0002\u0002\u01b3\u01b4",
    "\u0003\u0002\u0002\u0002\u01b4\u01b5\u0003\u0002\u0002\u0002\u01b5\u01b6",
    "\u0005\u00c0a\u0002\u01b6;\u0003\u0002\u0002\u0002\u01b7\u01b9\u0007",
    "H\u0002\u0002\u01b8\u01ba\u0007\u009c\u0002\u0002\u01b9\u01b8\u0003",
    "\u0002\u0002\u0002\u01b9\u01ba\u0003\u0002\u0002\u0002\u01ba\u01bb\u0003",
    "\u0002\u0002\u0002\u01bb\u01bd\u0007K\u0002\u0002\u01bc\u01be\u0005",
    "\u00c2b\u0002\u01bd\u01bc\u0003\u0002\u0002\u0002\u01bd\u01be\u0003",
    "\u0002\u0002\u0002\u01be\u01bf\u0003\u0002\u0002\u0002\u01bf\u01c1\u0005",
    "\u00bc_\u0002\u01c0\u01c2\u0005\u001e\u0010\u0002\u01c1\u01c0\u0003",
    "\u0002\u0002\u0002\u01c1\u01c2\u0003\u0002\u0002\u0002\u01c2\u01c4\u0003",
    "\u0002\u0002\u0002\u01c3\u01c5\u0005$\u0013\u0002\u01c4\u01c3\u0003",
    "\u0002\u0002\u0002\u01c4\u01c5\u0003\u0002\u0002\u0002\u01c5\u01c6\u0003",
    "\u0002\u0002\u0002\u01c6\u01c7\u0007\t\u0002\u0002\u01c7\u01c8\u0005",
    "Z.\u0002\u01c8=\u0003\u0002\u0002\u0002\u01c9\u01cd\u0007H\u0002\u0002",
    "\u01ca\u01ce\u0007\u009c\u0002\u0002\u01cb\u01cc\u0007\u009c\u0002\u0002",
    "\u01cc\u01ce\u0007\u00dd\u0002\u0002\u01cd\u01ca\u0003\u0002\u0002\u0002",
    "\u01cd\u01cb\u0003\u0002\u0002\u0002\u01ce\u01cf\u0003\u0002\u0002\u0002",
    "\u01cf\u01d1\u0007\u0093\u0002\u0002\u01d0\u01d2\u0005\u00c2b\u0002",
    "\u01d1\u01d0\u0003\u0002\u0002\u0002\u01d1\u01d2\u0003\u0002\u0002\u0002",
    "\u01d2\u01d3\u0003\u0002\u0002\u0002\u01d3\u01d4\u0005\u00bc_\u0002",
    "\u01d4\u01d5\u0007\t\u0002\u0002\u01d5\u01d8\u0005\u00b0Y\u0002\u01d6",
    "\u01d7\u0007\u00e3\u0002\u0002\u01d7\u01d9\u0005\u00b0Y\u0002\u01d8",
    "\u01d6\u0003\u0002\u0002\u0002\u01d8\u01d9\u0003\u0002\u0002\u0002\u01d9",
    "?\u0003\u0002\u0002\u0002\u01da\u01db\u0007f\u0002\u0002\u01db\u01dc",
    "\u0007I\u0002\u0002\u01dc\u01df\u0005\u00bc_\u0002\u01dd\u01e0\u0005",
    "B\"\u0002\u01de\u01e0\u0005D#\u0002\u01df\u01dd\u0003\u0002\u0002\u0002",
    "\u01df\u01de\u0003\u0002\u0002\u0002\u01e0A\u0003\u0002\u0002\u0002",
    "\u01e1\u01e2\u0007g\u0002\u0002\u01e2\u01e3\u0007c\u0002\u0002\u01e3",
    "\u01e4\u0005\u00bc_\u0002\u01e4C\u0003\u0002\u0002\u0002\u01e5\u01e6",
    "\u0007j\u0002\u0002\u01e6\u01e7\u0005\u00c6d\u0002\u01e7E\u0003\u0002",
    "\u0002\u0002\u01e8\u01e9\u0007f\u0002\u0002\u01e9\u01ea\u0007\u00b6",
    "\u0002\u0002\u01ea\u01eb\u0005\u00bc_\u0002\u01eb\u01ec\u0005D#\u0002",
    "\u01ecG\u0003\u0002\u0002\u0002\u01ed\u01f1\u0007f\u0002\u0002\u01ee",
    "\u01f2\u0007\u009c\u0002\u0002\u01ef\u01f0\u0007\u009c\u0002\u0002\u01f0",
    "\u01f2\u0007\u00dd\u0002\u0002\u01f1\u01ee\u0003\u0002\u0002\u0002\u01f1",
    "\u01ef\u0003\u0002\u0002\u0002\u01f2\u01f3\u0003\u0002\u0002\u0002\u01f3",
    "\u01f5\u0007\u0093\u0002\u0002\u01f4\u01f6\u0005\u00c4c\u0002\u01f5",
    "\u01f4\u0003\u0002\u0002\u0002\u01f5\u01f6\u0003\u0002\u0002\u0002\u01f6",
    "\u01f7\u0003\u0002\u0002\u0002\u01f7\u01f8\u0005\u00bc_\u0002\u01f8",
    "\u01f9\u0007\t\u0002\u0002\u01f9\u01fc\u0005\u00b0Y\u0002\u01fa\u01fb",
    "\u0007\u00e3\u0002\u0002\u01fb\u01fd\u0005\u00b0Y\u0002\u01fc\u01fa",
    "\u0003\u0002\u0002\u0002\u01fc\u01fd\u0003\u0002\u0002\u0002\u01fdI",
    "\u0003\u0002\u0002\u0002\u01fe\u01ff\u0007^\u0002\u0002\u01ff\u0201",
    "\u0007I\u0002\u0002\u0200\u0202\u0005\u00c4c\u0002\u0201\u0200\u0003",
    "\u0002\u0002\u0002\u0201\u0202\u0003\u0002\u0002\u0002\u0202\u0203\u0003",
    "\u0002\u0002\u0002\u0203\u0204\u0005\u00bc_\u0002\u0204K\u0003\u0002",
    "\u0002\u0002\u0205\u0206\u0007^\u0002\u0002\u0206\u0208\u0007\u00b6",
    "\u0002\u0002\u0207\u0209\u0005\u00c4c\u0002\u0208\u0207\u0003\u0002",
    "\u0002\u0002\u0208\u0209\u0003\u0002\u0002\u0002\u0209\u020a\u0003\u0002",
    "\u0002\u0002\u020a\u020c\u0005\u00bc_\u0002\u020b\u020d\t\u0007\u0002",
    "\u0002\u020c\u020b\u0003\u0002\u0002\u0002\u020c\u020d\u0003\u0002\u0002",
    "\u0002\u020dM\u0003\u0002\u0002\u0002\u020e\u0210\u0007^\u0002\u0002",
    "\u020f\u0211\u0007\u009c\u0002\u0002\u0210\u020f\u0003\u0002\u0002\u0002",
    "\u0210\u0211\u0003\u0002\u0002\u0002\u0211\u0212\u0003\u0002\u0002\u0002",
    "\u0212\u0214\u0007K\u0002\u0002\u0213\u0215\u0005\u00c4c\u0002\u0214",
    "\u0213\u0003\u0002\u0002\u0002\u0214\u0215\u0003\u0002\u0002\u0002\u0215",
    "\u0216\u0003\u0002\u0002\u0002\u0216\u0217\u0005\u00bc_\u0002\u0217",
    "O\u0003\u0002\u0002\u0002\u0218\u021c\u0007^\u0002\u0002\u0219\u021d",
    "\u0007\u009c\u0002\u0002\u021a\u021b\u0007\u009c\u0002\u0002\u021b\u021d",
    "\u0007\u00dd\u0002\u0002\u021c\u0219\u0003\u0002\u0002\u0002\u021c\u021a",
    "\u0003\u0002\u0002\u0002\u021c\u021d\u0003\u0002\u0002\u0002\u021d\u021e",
    "\u0003\u0002\u0002\u0002\u021e\u0220\u0007\u0093\u0002\u0002\u021f\u0221",
    "\u0005\u00c4c\u0002\u0220\u021f\u0003\u0002\u0002\u0002\u0220\u0221",
    "\u0003\u0002\u0002\u0002\u0221\u0222\u0003\u0002\u0002\u0002\u0222\u0223",
    "\u0005\u00bc_\u0002\u0223Q\u0003\u0002\u0002\u0002\u0224\u0225\u0007",
    "M\u0002\u0002\u0225\u0226\t\b\u0002\u0002\u0226\u022c\u0005\u00bc_\u0002",
    "\u0227\u0229\u0005T+\u0002\u0228\u0227\u0003\u0002\u0002\u0002\u0228",
    "\u0229\u0003\u0002\u0002\u0002\u0229\u022a\u0003\u0002\u0002\u0002\u022a",
    "\u022d\u0005Z.\u0002\u022b\u022d\u0005V,\u0002\u022c\u0228\u0003\u0002",
    "\u0002\u0002\u022c\u022b\u0003\u0002\u0002\u0002\u022dS\u0003\u0002",
    "\u0002\u0002\u022e\u022f\u0007<\u0002\u0002\u022f\u0230\u0005\u00c6",
    "d\u0002\u0230U\u0003\u0002\u0002\u0002\u0231\u0232\u0007G\u0002\u0002",
    "\u0232\u0237\u0005X-\u0002\u0233\u0234\u0007\u010f\u0002\u0002\u0234",
    "\u0236\u0005X-\u0002\u0235\u0233\u0003\u0002\u0002\u0002\u0236\u0239",
    "\u0003\u0002\u0002\u0002\u0237\u0235\u0003\u0002\u0002\u0002\u0237\u0238",
    "\u0003\u0002\u0002\u0002\u0238W\u0003\u0002\u0002\u0002\u0239\u0237",
    "\u0003\u0002\u0002\u0002\u023a\u023b\u0007\u010d\u0002\u0002\u023b\u0240",
    "\u0005\u00dan\u0002\u023c\u023d\u0007\u010f\u0002\u0002\u023d\u023f",
    "\u0005\u00dan\u0002\u023e\u023c\u0003\u0002\u0002\u0002\u023f\u0242",
    "\u0003\u0002\u0002\u0002\u0240\u023e\u0003\u0002\u0002\u0002\u0240\u0241",
    "\u0003\u0002\u0002\u0002\u0241\u0243\u0003\u0002\u0002\u0002\u0242\u0240",
    "\u0003\u0002\u0002\u0002\u0243\u0244\u0007\u010e\u0002\u0002\u0244Y",
    "\u0003\u0002\u0002\u0002\u0245\u0246\b.\u0001\u0002\u0246\u025a\u0005",
    "\\/\u0002\u0247\u0248\u0007\u010d\u0002\u0002\u0248\u0249\u0005Z.\u0002",
    "\u0249\u024a\u0007\u010e\u0002\u0002\u024a\u025a\u0003\u0002\u0002\u0002",
    "\u024b\u024d\u0005`1\u0002\u024c\u024e\u0005v<\u0002\u024d\u024c\u0003",
    "\u0002\u0002\u0002\u024d\u024e\u0003\u0002\u0002\u0002\u024e\u0250\u0003",
    "\u0002\u0002\u0002\u024f\u0251\u0005z>\u0002\u0250\u024f\u0003\u0002",
    "\u0002\u0002\u0250\u0251\u0003\u0002\u0002\u0002\u0251\u025a\u0003\u0002",
    "\u0002\u0002\u0252\u0254\u0005^0\u0002\u0253\u0255\u0005v<\u0002\u0254",
    "\u0253\u0003\u0002\u0002\u0002\u0254\u0255\u0003\u0002\u0002\u0002\u0255",
    "\u0257\u0003\u0002\u0002\u0002\u0256\u0258\u0005z>\u0002\u0257\u0256",
    "\u0003\u0002\u0002\u0002\u0257\u0258\u0003\u0002\u0002\u0002\u0258\u025a",
    "\u0003\u0002\u0002\u0002\u0259\u0245\u0003\u0002\u0002\u0002\u0259\u0247",
    "\u0003\u0002\u0002\u0002\u0259\u024b\u0003\u0002\u0002\u0002\u0259\u0252",
    "\u0003\u0002\u0002\u0002\u025a\u0269\u0003\u0002\u0002\u0002\u025b\u025c",
    "\f\u0005\u0002\u0002\u025c\u025e\t\t\u0002\u0002\u025d\u025f\u0007\n",
    "\u0002\u0002\u025e\u025d\u0003\u0002\u0002\u0002\u025e\u025f\u0003\u0002",
    "\u0002\u0002\u025f\u0260\u0003\u0002\u0002\u0002\u0260\u0262\u0005Z",
    ".\u0002\u0261\u0263\u0005v<\u0002\u0262\u0261\u0003\u0002\u0002\u0002",
    "\u0262\u0263\u0003\u0002\u0002\u0002\u0263\u0265\u0003\u0002\u0002\u0002",
    "\u0264\u0266\u0005z>\u0002\u0265\u0264\u0003\u0002\u0002\u0002\u0265",
    "\u0266\u0003\u0002\u0002\u0002\u0266\u0268\u0003\u0002\u0002\u0002\u0267",
    "\u025b\u0003\u0002\u0002\u0002\u0268\u026b\u0003\u0002\u0002\u0002\u0269",
    "\u0267\u0003\u0002\u0002\u0002\u0269\u026a\u0003\u0002\u0002\u0002\u026a",
    "[\u0003\u0002\u0002\u0002\u026b\u0269\u0003\u0002\u0002\u0002\u026c",
    "\u026d\u0007G\u0002\u0002\u026d\u0272\u0005\u0088E\u0002\u026e\u026f",
    "\u0007\u010f\u0002\u0002\u026f\u0271\u0005\u0088E\u0002\u0270\u026e",
    "\u0003\u0002\u0002\u0002\u0271\u0274\u0003\u0002\u0002\u0002\u0272\u0270",
    "\u0003\u0002\u0002\u0002\u0272\u0273\u0003\u0002\u0002\u0002\u0273]",
    "\u0003\u0002\u0002\u0002\u0274\u0272\u0003\u0002\u0002\u0002\u0275\u0276",
    "\u0005`1\u0002\u0276\u0278\u0005d3\u0002\u0277\u0279\u0005n8\u0002\u0278",
    "\u0277\u0003\u0002\u0002\u0002\u0278\u0279\u0003\u0002\u0002\u0002\u0279",
    "\u027b\u0003\u0002\u0002\u0002\u027a\u027c\u0005p9\u0002\u027b\u027a",
    "\u0003\u0002\u0002\u0002\u027b\u027c\u0003\u0002\u0002\u0002\u027c\u027e",
    "\u0003\u0002\u0002\u0002\u027d\u027f\u0005t;\u0002\u027e\u027d\u0003",
    "\u0002\u0002\u0002\u027e\u027f\u0003\u0002\u0002\u0002\u027f\u0281\u0003",
    "\u0002\u0002\u0002\u0280\u0282\u0005|?\u0002\u0281\u0280\u0003\u0002",
    "\u0002\u0002\u0281\u0282\u0003\u0002\u0002\u0002\u0282_\u0003\u0002",
    "\u0002\u0002\u0283\u0285\u0007\u0006\u0002\u0002\u0284\u0286\u0005\u00e2",
    "r\u0002\u0285\u0284\u0003\u0002\u0002\u0002\u0285\u0286\u0003\u0002",
    "\u0002\u0002\u0286\u0290\u0003\u0002\u0002\u0002\u0287\u0291\u0007\u0116",
    "\u0002\u0002\u0288\u028d\u0005b2\u0002\u0289\u028a\u0007\u010f\u0002",
    "\u0002\u028a\u028c\u0005b2\u0002\u028b\u0289\u0003\u0002\u0002\u0002",
    "\u028c\u028f\u0003\u0002\u0002\u0002\u028d\u028b\u0003\u0002\u0002\u0002",
    "\u028d\u028e\u0003\u0002\u0002\u0002\u028e\u0291\u0003\u0002\u0002\u0002",
    "\u028f\u028d\u0003\u0002\u0002\u0002\u0290\u0287\u0003\u0002\u0002\u0002",
    "\u0290\u0288\u0003\u0002\u0002\u0002\u0291a\u0003\u0002\u0002\u0002",
    "\u0292\u0297\u0005\u0088E\u0002\u0293\u0295\u0007\t\u0002\u0002\u0294",
    "\u0293\u0003\u0002\u0002\u0002\u0294\u0295\u0003\u0002\u0002\u0002\u0295",
    "\u0296\u0003\u0002\u0002\u0002\u0296\u0298\u0005\u0088E\u0002\u0297",
    "\u0294\u0003\u0002\u0002\u0002\u0297\u0298\u0003\u0002\u0002\u0002\u0298",
    "c\u0003\u0002\u0002\u0002\u0299\u029a\u0007\u0007\u0002\u0002\u029a",
    "\u029b\u0005f4\u0002\u029be\u0003\u0002\u0002\u0002\u029c\u029d\b4\u0001",
    "\u0002\u029d\u02a2\u0005h5\u0002\u029e\u029f\u0007\u010f\u0002\u0002",
    "\u029f\u02a1\u0005h5\u0002\u02a0\u029e\u0003\u0002\u0002\u0002\u02a1",
    "\u02a4\u0003\u0002\u0002\u0002\u02a2\u02a0\u0003\u0002\u0002\u0002\u02a2",
    "\u02a3\u0003\u0002\u0002\u0002\u02a3\u02b3\u0003\u0002\u0002\u0002\u02a4",
    "\u02a2\u0003\u0002\u0002\u0002\u02a5\u02a7\f\u0003\u0002\u0002\u02a6",
    "\u02a8\u00076\u0002\u0002\u02a7\u02a6\u0003\u0002\u0002\u0002\u02a7",
    "\u02a8\u0003\u0002\u0002\u0002\u02a8\u02aa\u0003\u0002\u0002\u0002\u02a9",
    "\u02ab\t\n\u0002\u0002\u02aa\u02a9\u0003\u0002\u0002\u0002\u02aa\u02ab",
    "\u0003\u0002\u0002\u0002\u02ab\u02ac\u0003\u0002\u0002\u0002\u02ac\u02ad",
    "\u0007.\u0002\u0002\u02ad\u02af\u0005f4\u0002\u02ae\u02b0\u0005l7\u0002",
    "\u02af\u02ae\u0003\u0002\u0002\u0002\u02af\u02b0\u0003\u0002\u0002\u0002",
    "\u02b0\u02b2\u0003\u0002\u0002\u0002\u02b1\u02a5\u0003\u0002\u0002\u0002",
    "\u02b2\u02b5\u0003\u0002\u0002\u0002\u02b3\u02b1\u0003\u0002\u0002\u0002",
    "\u02b3\u02b4\u0003\u0002\u0002\u0002\u02b4g\u0003\u0002\u0002\u0002",
    "\u02b5\u02b3\u0003\u0002\u0002\u0002\u02b6\u02b8\u0005j6\u0002\u02b7",
    "\u02b9\u0005\u00a6T\u0002\u02b8\u02b7\u0003\u0002\u0002\u0002\u02b8",
    "\u02b9\u0003\u0002\u0002\u0002\u02b9i\u0003\u0002\u0002\u0002\u02ba",
    "\u02bc\u0007I\u0002\u0002\u02bb\u02ba\u0003\u0002\u0002\u0002\u02bb",
    "\u02bc\u0003\u0002\u0002\u0002\u02bc\u02bd\u0003\u0002\u0002\u0002\u02bd",
    "\u02d4\u0005\u0088E\u0002\u02be\u02bf\u00079\u0002\u0002\u02bf\u02c0",
    "\u0007I\u0002\u0002\u02c0\u02c1\u0007\u010d\u0002\u0002\u02c1\u02c2",
    "\u0005\u00bc_\u0002\u02c2\u02c3\u0007\u010d\u0002\u0002\u02c3\u02c8",
    "\u0005\u0088E\u0002\u02c4\u02c5\u0007\u010f\u0002\u0002\u02c5\u02c7",
    "\u0005\u0088E\u0002\u02c6\u02c4\u0003\u0002\u0002\u0002\u02c7\u02ca",
    "\u0003\u0002\u0002\u0002\u02c8\u02c6\u0003\u0002\u0002\u0002\u02c8\u02c9",
    "\u0003\u0002\u0002\u0002\u02c9\u02cb\u0003\u0002\u0002\u0002\u02ca\u02c8",
    "\u0003\u0002\u0002\u0002\u02cb\u02cc\u0007\u010e\u0002\u0002\u02cc\u02cd",
    "\u0007\u010e\u0002\u0002\u02cd\u02d4\u0003\u0002\u0002\u0002\u02ce\u02cf",
    "\u0007\u00d8\u0002\u0002\u02cf\u02d0\u0007\u010d\u0002\u0002\u02d0\u02d1",
    "\u0005\u0088E\u0002\u02d1\u02d2\u0007\u010e\u0002\u0002\u02d2\u02d4",
    "\u0003\u0002\u0002\u0002\u02d3\u02bb\u0003\u0002\u0002\u0002\u02d3\u02be",
    "\u0003\u0002\u0002\u0002\u02d3\u02ce\u0003\u0002\u0002\u0002\u02d4k",
    "\u0003\u0002\u0002\u0002\u02d5\u02d6\u00077\u0002\u0002\u02d6\u02e4",
    "\u0005\u008aF\u0002\u02d7\u02d8\u0007\u0085\u0002\u0002\u02d8\u02d9",
    "\u0007\u010d\u0002\u0002\u02d9\u02de\u0005\u00bc_\u0002\u02da\u02db",
    "\u0007\u010f\u0002\u0002\u02db\u02dd\u0005\u00bc_\u0002\u02dc\u02da",
    "\u0003\u0002\u0002\u0002\u02dd\u02e0\u0003\u0002\u0002\u0002\u02de\u02dc",
    "\u0003\u0002\u0002\u0002\u02de\u02df\u0003\u0002\u0002\u0002\u02df\u02e1",
    "\u0003\u0002\u0002\u0002\u02e0\u02de\u0003\u0002\u0002\u0002\u02e1\u02e2",
    "\u0007\u010e\u0002\u0002\u02e2\u02e4\u0003\u0002\u0002\u0002\u02e3\u02d5",
    "\u0003\u0002\u0002\u0002\u02e3\u02d7\u0003\u0002\u0002\u0002\u02e4m",
    "\u0003\u0002\u0002\u0002\u02e5\u02e6\u0007\r\u0002\u0002\u02e6\u02e7",
    "\u0005\u008aF\u0002\u02e7o\u0003\u0002\u0002\u0002\u02e8\u02e9\u0007",
    "\u000e\u0002\u0002\u02e9\u02ea\u0007\u000f\u0002\u0002\u02ea\u02ef\u0005",
    "r:\u0002\u02eb\u02ec\u0007\u010f\u0002\u0002\u02ec\u02ee\u0005r:\u0002",
    "\u02ed\u02eb\u0003\u0002\u0002\u0002\u02ee\u02f1\u0003\u0002\u0002\u0002",
    "\u02ef\u02ed\u0003\u0002\u0002\u0002\u02ef\u02f0\u0003\u0002\u0002\u0002",
    "\u02f0q\u0003\u0002\u0002\u0002\u02f1\u02ef\u0003\u0002\u0002\u0002",
    "\u02f2\u0326\u0005\u0088E\u0002\u02f3\u02f4\u0007\u010d\u0002\u0002",
    "\u02f4\u0326\u0007\u010e\u0002\u0002\u02f5\u02f6\u0007\u010d\u0002\u0002",
    "\u02f6\u02fb\u0005\u0088E\u0002\u02f7\u02f8\u0007\u010f\u0002\u0002",
    "\u02f8\u02fa\u0005\u0088E\u0002\u02f9\u02f7\u0003\u0002\u0002\u0002",
    "\u02fa\u02fd\u0003\u0002\u0002\u0002\u02fb\u02f9\u0003\u0002\u0002\u0002",
    "\u02fb\u02fc\u0003\u0002\u0002\u0002\u02fc\u02fe\u0003\u0002\u0002\u0002",
    "\u02fd\u02fb\u0003\u0002\u0002\u0002\u02fe\u02ff\u0007\u010e\u0002\u0002",
    "\u02ff\u0326\u0003\u0002\u0002\u0002\u0300\u0301\u0007\u0012\u0002\u0002",
    "\u0301\u0302\u0007\u010d\u0002\u0002\u0302\u0307\u0005\u0088E\u0002",
    "\u0303\u0304\u0007\u010f\u0002\u0002\u0304\u0306\u0005\u0088E\u0002",
    "\u0305\u0303\u0003\u0002\u0002\u0002\u0306\u0309\u0003\u0002\u0002\u0002",
    "\u0307\u0305\u0003\u0002\u0002\u0002\u0307\u0308\u0003\u0002\u0002\u0002",
    "\u0308\u030a\u0003\u0002\u0002\u0002\u0309\u0307\u0003\u0002\u0002\u0002",
    "\u030a\u030b\u0007\u010e\u0002\u0002\u030b\u0326\u0003\u0002\u0002\u0002",
    "\u030c\u030d\u0007\u0013\u0002\u0002\u030d\u030e\u0007\u010d\u0002\u0002",
    "\u030e\u0313\u0005\u0088E\u0002\u030f\u0310\u0007\u010f\u0002\u0002",
    "\u0310\u0312\u0005\u0088E\u0002\u0311\u030f\u0003\u0002\u0002\u0002",
    "\u0312\u0315\u0003\u0002\u0002\u0002\u0313\u0311\u0003\u0002\u0002\u0002",
    "\u0313\u0314\u0003\u0002\u0002\u0002\u0314\u0316\u0003\u0002\u0002\u0002",
    "\u0315\u0313\u0003\u0002\u0002\u0002\u0316\u0317\u0007\u010e\u0002\u0002",
    "\u0317\u0326\u0003\u0002\u0002\u0002\u0318\u0319\u0007\u0010\u0002\u0002",
    "\u0319\u031a\u0007\u0011\u0002\u0002\u031a\u031b\u0007\u010d\u0002\u0002",
    "\u031b\u0320\u0005r:\u0002\u031c\u031d\u0007\u010f\u0002\u0002\u031d",
    "\u031f\u0005r:\u0002\u031e\u031c\u0003\u0002\u0002\u0002\u031f\u0322",
    "\u0003\u0002\u0002\u0002\u0320\u031e\u0003\u0002\u0002\u0002\u0320\u0321",
    "\u0003\u0002\u0002\u0002\u0321\u0323\u0003\u0002\u0002\u0002\u0322\u0320",
    "\u0003\u0002\u0002\u0002\u0323\u0324\u0007\u010e\u0002\u0002\u0324\u0326",
    "\u0003\u0002\u0002\u0002\u0325\u02f2\u0003\u0002\u0002\u0002\u0325\u02f3",
    "\u0003\u0002\u0002\u0002\u0325\u02f5\u0003\u0002\u0002\u0002\u0325\u0300",
    "\u0003\u0002\u0002\u0002\u0325\u030c\u0003\u0002\u0002\u0002\u0325\u0318",
    "\u0003\u0002\u0002\u0002\u0326s\u0003\u0002\u0002\u0002\u0327\u0328",
    "\u0007\u0015\u0002\u0002\u0328\u0329\u0005\u008aF\u0002\u0329u\u0003",
    "\u0002\u0002\u0002\u032a\u032b\u0007\u0014\u0002\u0002\u032b\u032c\u0007",
    "\u000f\u0002\u0002\u032c\u0331\u0005x=\u0002\u032d\u032e\u0007\u010f",
    "\u0002\u0002\u032e\u0330\u0005x=\u0002\u032f\u032d\u0003\u0002\u0002",
    "\u0002\u0330\u0333\u0003\u0002\u0002\u0002\u0331\u032f\u0003\u0002\u0002",
    "\u0002\u0331\u0332\u0003\u0002\u0002\u0002\u0332w\u0003\u0002\u0002",
    "\u0002\u0333\u0331\u0003\u0002\u0002\u0002\u0334\u0336\u0005\u0088E",
    "\u0002\u0335\u0337\t\u000b\u0002\u0002\u0336\u0335\u0003\u0002\u0002",
    "\u0002\u0336\u0337\u0003\u0002\u0002\u0002\u0337y\u0003\u0002\u0002",
    "\u0002\u0338\u033b\u0007\u0016\u0002\u0002\u0339\u033c\u0007\n\u0002",
    "\u0002\u033a\u033c\u0005\u0088E\u0002\u033b\u0339\u0003\u0002\u0002",
    "\u0002\u033b\u033a\u0003\u0002\u0002\u0002\u033c{\u0003\u0002\u0002",
    "\u0002\u033d\u033e\u0007:\u0002\u0002\u033e\u0343\u0005~@\u0002\u033f",
    "\u0340\u0007\u010f\u0002\u0002\u0340\u0342\u0005~@\u0002\u0341\u033f",
    "\u0003\u0002\u0002\u0002\u0342\u0345\u0003\u0002\u0002\u0002\u0343\u0341",
    "\u0003\u0002\u0002\u0002\u0343\u0344\u0003\u0002\u0002\u0002\u0344}",
    "\u0003\u0002\u0002\u0002\u0345\u0343\u0003\u0002\u0002\u0002\u0346\u0347",
    "\u0005\u00a8U\u0002\u0347\u0348\u0007\t\u0002\u0002\u0348\u0349\u0005",
    "\u0080A\u0002\u0349\u007f\u0003\u0002\u0002\u0002\u034a\u034c\u0005",
    "\u00a8U\u0002\u034b\u034a\u0003\u0002\u0002\u0002\u034b\u034c\u0003",
    "\u0002\u0002\u0002\u034c\u034d\u0003\u0002\u0002\u0002\u034d\u0358\u0007",
    "\u010d\u0002\u0002\u034e\u034f\u0007\u0014\u0002\u0002\u034f\u0350\u0007",
    "\u000f\u0002\u0002\u0350\u0355\u0005\u0082B\u0002\u0351\u0352\u0007",
    "\u010f\u0002\u0002\u0352\u0354\u0005\u0082B\u0002\u0353\u0351\u0003",
    "\u0002\u0002\u0002\u0354\u0357\u0003\u0002\u0002\u0002\u0355\u0353\u0003",
    "\u0002\u0002\u0002\u0355\u0356\u0003\u0002\u0002\u0002\u0356\u0359\u0003",
    "\u0002\u0002\u0002\u0357\u0355\u0003\u0002\u0002\u0002\u0358\u034e\u0003",
    "\u0002\u0002\u0002\u0358\u0359\u0003\u0002\u0002\u0002\u0359\u0364\u0003",
    "\u0002\u0002\u0002\u035a\u035b\u0007<\u0002\u0002\u035b\u035c\u0007",
    "\u000f\u0002\u0002\u035c\u0361\u0005\u0088E\u0002\u035d\u035e\u0007",
    "\u010f\u0002\u0002\u035e\u0360\u0005\u0088E\u0002\u035f\u035d\u0003",
    "\u0002\u0002\u0002\u0360\u0363\u0003\u0002\u0002\u0002\u0361\u035f\u0003",
    "\u0002\u0002\u0002\u0361\u0362\u0003\u0002\u0002\u0002\u0362\u0365\u0003",
    "\u0002\u0002\u0002\u0363\u0361\u0003\u0002\u0002\u0002\u0364\u035a\u0003",
    "\u0002\u0002\u0002\u0364\u0365\u0003\u0002\u0002\u0002\u0365\u0367\u0003",
    "\u0002\u0002\u0002\u0366\u0368\u0005\u0084C\u0002\u0367\u0366\u0003",
    "\u0002\u0002\u0002\u0367\u0368\u0003\u0002\u0002\u0002\u0368\u0369\u0003",
    "\u0002\u0002\u0002\u0369\u036a\u0007\u010e\u0002\u0002\u036a\u0081\u0003",
    "\u0002\u0002\u0002\u036b\u036d\u0005\u0088E\u0002\u036c\u036e\t\u000b",
    "\u0002\u0002\u036d\u036c\u0003\u0002\u0002\u0002\u036d\u036e\u0003\u0002",
    "\u0002\u0002\u036e\u0371\u0003\u0002\u0002\u0002\u036f\u0370\u0007$",
    "\u0002\u0002\u0370\u0372\t\f\u0002\u0002\u0371\u036f\u0003\u0002\u0002",
    "\u0002\u0371\u0372\u0003\u0002\u0002\u0002\u0372\u0083\u0003\u0002\u0002",
    "\u0002\u0373\u0374\u0007=\u0002\u0002\u0374\u0378\u0005\u0086D\u0002",
    "\u0375\u0376\u0007>\u0002\u0002\u0376\u0378\u0005\u0086D\u0002\u0377",
    "\u0373\u0003\u0002\u0002\u0002\u0377\u0375\u0003\u0002\u0002\u0002\u0378",
    "\u0085\u0003\u0002\u0002\u0002\u0379\u037a\u0005\u0088E\u0002\u037a",
    "\u037b\u0007@\u0002\u0002\u037b\u0087\u0003\u0002\u0002\u0002\u037c",
    "\u037d\u0005\u008aF\u0002\u037d\u0089\u0003\u0002\u0002\u0002\u037e",
    "\u037f\bF\u0001\u0002\u037f\u0380\u0007\u001b\u0002\u0002\u0380\u038b",
    "\u0005\u008aF\u0007\u0381\u0382\u0007\u001d\u0002\u0002\u0382\u0383",
    "\u0007\u010d\u0002\u0002\u0383\u0384\u0005Z.\u0002\u0384\u0385\u0007",
    "\u010e\u0002\u0002\u0385\u038b\u0003\u0002\u0002\u0002\u0386\u0388\u0005",
    "\u008eH\u0002\u0387\u0389\u0005\u008cG\u0002\u0388\u0387\u0003\u0002",
    "\u0002\u0002\u0388\u0389\u0003\u0002\u0002\u0002\u0389\u038b\u0003\u0002",
    "\u0002\u0002\u038a\u037e\u0003\u0002\u0002\u0002\u038a\u0381\u0003\u0002",
    "\u0002\u0002\u038a\u0386\u0003\u0002\u0002\u0002\u038b\u0394\u0003\u0002",
    "\u0002\u0002\u038c\u038d\f\u0004\u0002\u0002\u038d\u038e\u0007\u0019",
    "\u0002\u0002\u038e\u0393\u0005\u008aF\u0005\u038f\u0390\f\u0003\u0002",
    "\u0002\u0390\u0391\u0007\u0018\u0002\u0002\u0391\u0393\u0005\u008aF",
    "\u0004\u0392\u038c\u0003\u0002\u0002\u0002\u0392\u038f\u0003\u0002\u0002",
    "\u0002\u0393\u0396\u0003\u0002\u0002\u0002\u0394\u0392\u0003\u0002\u0002",
    "\u0002\u0394\u0395\u0003\u0002\u0002\u0002\u0395\u008b\u0003\u0002\u0002",
    "\u0002\u0396\u0394\u0003\u0002\u0002\u0002\u0397\u0399\u0007\u001b\u0002",
    "\u0002\u0398\u0397\u0003\u0002\u0002\u0002\u0398\u0399\u0003\u0002\u0002",
    "\u0002\u0399\u039a\u0003\u0002\u0002\u0002\u039a\u039b\u0007\u001e\u0002",
    "\u0002\u039b\u039c\u0005\u008eH\u0002\u039c\u039d\u0007\u0019\u0002",
    "\u0002\u039d\u039e\u0005\u008eH\u0002\u039e\u03eb\u0003\u0002\u0002",
    "\u0002\u039f\u03a1\u0007\u001b\u0002\u0002\u03a0\u039f\u0003\u0002\u0002",
    "\u0002\u03a0\u03a1\u0003\u0002\u0002\u0002\u03a1\u03a2\u0003\u0002\u0002",
    "\u0002\u03a2\u03a3\u0007\u001a\u0002\u0002\u03a3\u03a4\u0007\u010d\u0002",
    "\u0002\u03a4\u03a9\u0005\u0088E\u0002\u03a5\u03a6\u0007\u010f\u0002",
    "\u0002\u03a6\u03a8\u0005\u0088E\u0002\u03a7\u03a5\u0003\u0002\u0002",
    "\u0002\u03a8\u03ab\u0003\u0002\u0002\u0002\u03a9\u03a7\u0003\u0002\u0002",
    "\u0002\u03a9\u03aa\u0003\u0002\u0002\u0002\u03aa\u03ac\u0003\u0002\u0002",
    "\u0002\u03ab\u03a9\u0003\u0002\u0002\u0002\u03ac\u03ad\u0007\u010e\u0002",
    "\u0002\u03ad\u03eb\u0003\u0002\u0002\u0002\u03ae\u03b0\u0007\u001b\u0002",
    "\u0002\u03af\u03ae\u0003\u0002\u0002\u0002\u03af\u03b0\u0003\u0002\u0002",
    "\u0002\u03b0\u03b1\u0003\u0002\u0002\u0002\u03b1\u03b2\u0007\u001a\u0002",
    "\u0002\u03b2\u03b3\u0007\u010d\u0002\u0002\u03b3\u03b4\u0005Z.\u0002",
    "\u03b4\u03b5\u0007\u010e\u0002\u0002\u03b5\u03eb\u0003\u0002\u0002\u0002",
    "\u03b6\u03b7\u0007\u001d\u0002\u0002\u03b7\u03b8\u0007\u010d\u0002\u0002",
    "\u03b8\u03b9\u0005Z.\u0002\u03b9\u03ba\u0007\u010e\u0002\u0002\u03ba",
    "\u03eb\u0003\u0002\u0002\u0002\u03bb\u03bd\u0007\u001b\u0002\u0002\u03bc",
    "\u03bb\u0003\u0002\u0002\u0002\u03bc\u03bd\u0003\u0002\u0002\u0002\u03bd",
    "\u03be\u0003\u0002\u0002\u0002\u03be\u03bf\u0007 \u0002\u0002\u03bf",
    "\u03eb\u0005\u008eH\u0002\u03c0\u03c2\u0007\u001b\u0002\u0002\u03c1",
    "\u03c0\u0003\u0002\u0002\u0002\u03c1\u03c2\u0003\u0002\u0002\u0002\u03c2",
    "\u03c3\u0003\u0002\u0002\u0002\u03c3\u03c4\u0007\u001f\u0002\u0002\u03c4",
    "\u03d2\t\r\u0002\u0002\u03c5\u03c6\u0007\u010d\u0002\u0002\u03c6\u03d3",
    "\u0007\u010e\u0002\u0002\u03c7\u03c8\u0007\u010d\u0002\u0002\u03c8\u03cd",
    "\u0005\u0088E\u0002\u03c9\u03ca\u0007\u010f\u0002\u0002\u03ca\u03cc",
    "\u0005\u0088E\u0002\u03cb\u03c9\u0003\u0002\u0002\u0002\u03cc\u03cf",
    "\u0003\u0002\u0002\u0002\u03cd\u03cb\u0003\u0002\u0002\u0002\u03cd\u03ce",
    "\u0003\u0002\u0002\u0002\u03ce\u03d0\u0003\u0002\u0002\u0002\u03cf\u03cd",
    "\u0003\u0002\u0002\u0002\u03d0\u03d1\u0007\u010e\u0002\u0002\u03d1\u03d3",
    "\u0003\u0002\u0002\u0002\u03d2\u03c5\u0003\u0002\u0002\u0002\u03d2\u03c7",
    "\u0003\u0002\u0002\u0002\u03d3\u03eb\u0003\u0002\u0002\u0002\u03d4\u03d6",
    "\u0007\u001b\u0002\u0002\u03d5\u03d4\u0003\u0002\u0002\u0002\u03d5\u03d6",
    "\u0003\u0002\u0002\u0002\u03d6\u03d7\u0003\u0002\u0002\u0002\u03d7\u03d8",
    "\u0007\u001f\u0002\u0002\u03d8\u03eb\u0005\u008eH\u0002\u03d9\u03db",
    "\u0007!\u0002\u0002\u03da\u03dc\u0007\u001b\u0002\u0002\u03db\u03da",
    "\u0003\u0002\u0002\u0002\u03db\u03dc\u0003\u0002\u0002\u0002\u03dc\u03dd",
    "\u0003\u0002\u0002\u0002\u03dd\u03eb\u0007\u0100\u0002\u0002\u03de\u03e0",
    "\u0007!\u0002\u0002\u03df\u03e1\u0007\u001b\u0002\u0002\u03e0\u03df",
    "\u0003\u0002\u0002\u0002\u03e0\u03e1\u0003\u0002\u0002\u0002\u03e1\u03e2",
    "\u0003\u0002\u0002\u0002\u03e2\u03eb\t\u000e\u0002\u0002\u03e3\u03e5",
    "\u0007!\u0002\u0002\u03e4\u03e6\u0007\u001b\u0002\u0002\u03e5\u03e4",
    "\u0003\u0002\u0002\u0002\u03e5\u03e6\u0003\u0002\u0002\u0002\u03e6\u03e7",
    "\u0003\u0002\u0002\u0002\u03e7\u03e8\u0007\f\u0002\u0002\u03e8\u03e9",
    "\u0007\u0007\u0002\u0002\u03e9\u03eb\u0005\u008eH\u0002\u03ea\u0398",
    "\u0003\u0002\u0002\u0002\u03ea\u03a0\u0003\u0002\u0002\u0002\u03ea\u03af",
    "\u0003\u0002\u0002\u0002\u03ea\u03b6\u0003\u0002\u0002\u0002\u03ea\u03bc",
    "\u0003\u0002\u0002\u0002\u03ea\u03c1\u0003\u0002\u0002\u0002\u03ea\u03d5",
    "\u0003\u0002\u0002\u0002\u03ea\u03d9\u0003\u0002\u0002\u0002\u03ea\u03de",
    "\u0003\u0002\u0002\u0002\u03ea\u03e3\u0003\u0002\u0002\u0002\u03eb\u008d",
    "\u0003\u0002\u0002\u0002\u03ec\u03ed\bH\u0001\u0002\u03ed\u03f1\u0005",
    "\u0090I\u0002\u03ee\u03ef\t\u000f\u0002\u0002\u03ef\u03f1\u0005\u008e",
    "H\t\u03f0\u03ec\u0003\u0002\u0002\u0002\u03f0\u03ee\u0003\u0002\u0002",
    "\u0002\u03f1\u0407\u0003\u0002\u0002\u0002\u03f2\u03f3\f\b\u0002\u0002",
    "\u03f3\u03f4\t\u0010\u0002\u0002\u03f4\u0406\u0005\u008eH\t\u03f5\u03f6",
    "\f\u0007\u0002\u0002\u03f6\u03f7\t\u0011\u0002\u0002\u03f7\u0406\u0005",
    "\u008eH\b\u03f8\u03f9\f\u0006\u0002\u0002\u03f9\u03fa\u0007\u0108\u0002",
    "\u0002\u03fa\u0406\u0005\u008eH\u0007\u03fb\u03fc\f\u0005\u0002\u0002",
    "\u03fc\u03fd\u0007\u0109\u0002\u0002\u03fd\u0406\u0005\u008eH\u0006",
    "\u03fe\u03ff\f\u0004\u0002\u0002\u03ff\u0400\u0007\u0107\u0002\u0002",
    "\u0400\u0406\u0005\u008eH\u0005\u0401\u0402\f\u0003\u0002\u0002\u0402",
    "\u0403\u0005\u00d0i\u0002\u0403\u0404\u0005\u008eH\u0004\u0404\u0406",
    "\u0003\u0002\u0002\u0002\u0405\u03f2\u0003\u0002\u0002\u0002\u0405\u03f5",
    "\u0003\u0002\u0002\u0002\u0405\u03f8\u0003\u0002\u0002\u0002\u0405\u03fb",
    "\u0003\u0002\u0002\u0002\u0405\u03fe\u0003\u0002\u0002\u0002\u0405\u0401",
    "\u0003\u0002\u0002\u0002\u0406\u0409\u0003\u0002\u0002\u0002\u0407\u0405",
    "\u0003\u0002\u0002\u0002\u0407\u0408\u0003\u0002\u0002\u0002\u0408\u008f",
    "\u0003\u0002\u0002\u0002\u0409\u0407\u0003\u0002\u0002\u0002\u040a\u040b",
    "\bI\u0001\u0002\u040b\u040d\u0007)\u0002\u0002\u040c\u040e\u0005\u00b8",
    "]\u0002\u040d\u040c\u0003\u0002\u0002\u0002\u040e\u040f\u0003\u0002",
    "\u0002\u0002\u040f\u040d\u0003\u0002\u0002\u0002\u040f\u0410\u0003\u0002",
    "\u0002\u0002\u0410\u0413\u0003\u0002\u0002\u0002\u0411\u0412\u0007,",
    "\u0002\u0002\u0412\u0414\u0005\u0088E\u0002\u0413\u0411\u0003\u0002",
    "\u0002\u0002\u0413\u0414\u0003\u0002\u0002\u0002\u0414\u0415\u0003\u0002",
    "\u0002\u0002\u0415\u0416\u0007-\u0002\u0002\u0416\u0466\u0003\u0002",
    "\u0002\u0002\u0417\u0418\u0007)\u0002\u0002\u0418\u041a\u0005\u0088",
    "E\u0002\u0419\u041b\u0005\u00b8]\u0002\u041a\u0419\u0003\u0002\u0002",
    "\u0002\u041b\u041c\u0003\u0002\u0002\u0002\u041c\u041a\u0003\u0002\u0002",
    "\u0002\u041c\u041d\u0003\u0002\u0002\u0002\u041d\u0420\u0003\u0002\u0002",
    "\u0002\u041e\u041f\u0007,\u0002\u0002\u041f\u0421\u0005\u0088E\u0002",
    "\u0420\u041e\u0003\u0002\u0002\u0002\u0420\u0421\u0003\u0002\u0002\u0002",
    "\u0421\u0422\u0003\u0002\u0002\u0002\u0422\u0423\u0007-\u0002\u0002",
    "\u0423\u0466\u0003\u0002\u0002\u0002\u0424\u0425\u0007V\u0002\u0002",
    "\u0425\u0426\u0007\u010d\u0002\u0002\u0426\u0427\u0005\u0088E\u0002",
    "\u0427\u0428\u0007\t\u0002\u0002\u0428\u0429\u0005 \u0011\u0002\u0429",
    "\u042a\u0007\u010e\u0002\u0002\u042a\u0466\u0003\u0002\u0002\u0002\u042b",
    "\u042c\u0007C\u0002\u0002\u042c\u042d\u0007\u010d\u0002\u0002\u042d",
    "\u0430\u0005\u0088E\u0002\u042e\u042f\u0007r\u0002\u0002\u042f\u0431",
    "\u0007$\u0002\u0002\u0430\u042e\u0003\u0002\u0002\u0002\u0430\u0431",
    "\u0003\u0002\u0002\u0002\u0431\u0432\u0003\u0002\u0002\u0002\u0432\u0433",
    "\u0007\u010e\u0002\u0002\u0433\u0466\u0003\u0002\u0002\u0002\u0434\u0435",
    "\u0007E\u0002\u0002\u0435\u0436\u0007\u010d\u0002\u0002\u0436\u0439",
    "\u0005\u0088E\u0002\u0437\u0438\u0007r\u0002\u0002\u0438\u043a\u0007",
    "$\u0002\u0002\u0439\u0437\u0003\u0002\u0002\u0002\u0439\u043a\u0003",
    "\u0002\u0002\u0002\u043a\u043b\u0003\u0002\u0002\u0002\u043b\u043c\u0007",
    "\u010e\u0002\u0002\u043c\u0466\u0003\u0002\u0002\u0002\u043d\u043e\u0007",
    "w\u0002\u0002\u043e\u043f\u0007\u010d\u0002\u0002\u043f\u0440\u0005",
    "\u008eH\u0002\u0440\u0441\u0007\u001a\u0002\u0002\u0441\u0442\u0005",
    "\u008eH\u0002\u0442\u0443\u0007\u010e\u0002\u0002\u0443\u0466\u0003",
    "\u0002\u0002\u0002\u0444\u0466\u0005\u00dan\u0002\u0445\u0466\u0007",
    "\u0116\u0002\u0002\u0446\u0447\u0005\u00bc_\u0002\u0447\u0448\u0007",
    "\u010a\u0002\u0002\u0448\u0449\u0007\u0116\u0002\u0002\u0449\u0466\u0003",
    "\u0002\u0002\u0002\u044a\u044b\u0007\u010d\u0002\u0002\u044b\u044c\u0005",
    "Z.\u0002\u044c\u044d\u0007\u010e\u0002\u0002\u044d\u0466\u0003\u0002",
    "\u0002\u0002\u044e\u044f\u0005\u0092J\u0002\u044f\u045b\u0007\u010d",
    "\u0002\u0002\u0450\u0452\u0005\u00e2r\u0002\u0451\u0450\u0003\u0002",
    "\u0002\u0002\u0451\u0452\u0003\u0002\u0002\u0002\u0452\u0453\u0003\u0002",
    "\u0002\u0002\u0453\u0458\u0005\u0088E\u0002\u0454\u0455\u0007\u010f",
    "\u0002\u0002\u0455\u0457\u0005\u0088E\u0002\u0456\u0454\u0003\u0002",
    "\u0002\u0002\u0457\u045a\u0003\u0002\u0002\u0002\u0458\u0456\u0003\u0002",
    "\u0002\u0002\u0458\u0459\u0003\u0002\u0002\u0002\u0459\u045c\u0003\u0002",
    "\u0002\u0002\u045a\u0458\u0003\u0002\u0002\u0002\u045b\u0451\u0003\u0002",
    "\u0002\u0002\u045b\u045c\u0003\u0002\u0002\u0002\u045c\u045d\u0003\u0002",
    "\u0002\u0002\u045d\u045e\u0007\u010e\u0002\u0002\u045e\u0466\u0003\u0002",
    "\u0002\u0002\u045f\u0466\u0005\u00b0Y\u0002\u0460\u0466\u0005\u0094",
    "K\u0002\u0461\u0462\u0007\u010d\u0002\u0002\u0462\u0463\u0005\u0088",
    "E\u0002\u0463\u0464\u0007\u010e\u0002\u0002\u0464\u0466\u0003\u0002",
    "\u0002\u0002\u0465\u040a\u0003\u0002\u0002\u0002\u0465\u0417\u0003\u0002",
    "\u0002\u0002\u0465\u0424\u0003\u0002\u0002\u0002\u0465\u042b\u0003\u0002",
    "\u0002\u0002\u0465\u0434\u0003\u0002\u0002\u0002\u0465\u043d\u0003\u0002",
    "\u0002\u0002\u0465\u0444\u0003\u0002\u0002\u0002\u0465\u0445\u0003\u0002",
    "\u0002\u0002\u0465\u0446\u0003\u0002\u0002\u0002\u0465\u044a\u0003\u0002",
    "\u0002\u0002\u0465\u044e\u0003\u0002\u0002\u0002\u0465\u045f\u0003\u0002",
    "\u0002\u0002\u0465\u0460\u0003\u0002\u0002\u0002\u0465\u0461\u0003\u0002",
    "\u0002\u0002\u0466\u046e\u0003\u0002\u0002\u0002\u0467\u0468\f\u0006",
    "\u0002\u0002\u0468\u0469\u0007\u010b\u0002\u0002\u0469\u046a\u0005\u008e",
    "H\u0002\u046a\u046b\u0007\u010c\u0002\u0002\u046b\u046d\u0003\u0002",
    "\u0002\u0002\u046c\u0467\u0003\u0002\u0002\u0002\u046d\u0470\u0003\u0002",
    "\u0002\u0002\u046e\u046c\u0003\u0002\u0002\u0002\u046e\u046f\u0003\u0002",
    "\u0002\u0002\u046f\u0091\u0003\u0002\u0002\u0002\u0470\u046e\u0003\u0002",
    "\u0002\u0002\u0471\u0472\u0005\u00bc_\u0002\u0472\u0093\u0003\u0002",
    "\u0002\u0002\u0473\u0474\u0005\u00bc_\u0002\u0474\u0095\u0003\u0002",
    "\u0002\u0002\u0475\u0478\u0005\u00b0Y\u0002\u0476\u0478\u0005\u0094",
    "K\u0002\u0477\u0475\u0003\u0002\u0002\u0002\u0477\u0476\u0003\u0002",
    "\u0002\u0002\u0478\u0097\u0003\u0002\u0002\u0002\u0479\u047c\u0007(",
    "\u0002\u0002\u047a\u047d\u0005\u009aN\u0002\u047b\u047d\u0005\u009e",
    "P\u0002\u047c\u047a\u0003\u0002\u0002\u0002\u047c\u047b\u0003\u0002",
    "\u0002\u0002\u047c\u047d\u0003\u0002\u0002\u0002\u047d\u0099\u0003\u0002",
    "\u0002\u0002\u047e\u0480\u0005\u009cO\u0002\u047f\u0481\u0005\u00a0",
    "Q\u0002\u0480\u047f\u0003\u0002\u0002\u0002\u0480\u0481\u0003\u0002",
    "\u0002\u0002\u0481\u009b\u0003\u0002\u0002\u0002\u0482\u0483\u0005\u00a2",
    "R\u0002\u0483\u0484\u0005\u00b0Y\u0002\u0484\u0486\u0003\u0002\u0002",
    "\u0002\u0485\u0482\u0003\u0002\u0002\u0002\u0486\u0487\u0003\u0002\u0002",
    "\u0002\u0487\u0485\u0003\u0002\u0002\u0002\u0487\u0488\u0003\u0002\u0002",
    "\u0002\u0488\u009d\u0003\u0002\u0002\u0002\u0489\u048c\u0005\u00a0Q",
    "\u0002\u048a\u048d\u0005\u009cO\u0002\u048b\u048d\u0005\u00a0Q\u0002",
    "\u048c\u048a\u0003\u0002\u0002\u0002\u048c\u048b\u0003\u0002\u0002\u0002",
    "\u048c\u048d\u0003\u0002\u0002\u0002\u048d\u009f\u0003\u0002\u0002\u0002",
    "\u048e\u048f\u0005\u00a2R\u0002\u048f\u0490\u0005\u00b0Y\u0002\u0490",
    "\u0491\u0007c\u0002\u0002\u0491\u0492\u0005\u00b0Y\u0002\u0492\u00a1",
    "\u0003\u0002\u0002\u0002\u0493\u0495\t\u0012\u0002\u0002\u0494\u0493",
    "\u0003\u0002\u0002\u0002\u0494\u0495\u0003\u0002\u0002\u0002\u0495\u0496",
    "\u0003\u0002\u0002\u0002\u0496\u0499\t\u0013\u0002\u0002\u0497\u0499",
    "\u0007\u0120\u0002\u0002\u0498\u0494\u0003\u0002\u0002\u0002\u0498\u0497",
    "\u0003\u0002\u0002\u0002\u0499\u00a3\u0003\u0002\u0002\u0002\u049a\u049c",
    "\u0007\t\u0002\u0002\u049b\u049a\u0003\u0002\u0002\u0002\u049b\u049c",
    "\u0003\u0002\u0002\u0002\u049c\u049d\u0003\u0002\u0002\u0002\u049d\u049f",
    "\u0005\u00b2Z\u0002\u049e\u04a0\u0005\u00acW\u0002\u049f\u049e\u0003",
    "\u0002\u0002\u0002\u049f\u04a0\u0003\u0002\u0002\u0002\u04a0\u00a5\u0003",
    "\u0002\u0002\u0002\u04a1\u04a3\u0007\t\u0002\u0002\u04a2\u04a1\u0003",
    "\u0002\u0002\u0002\u04a2\u04a3\u0003\u0002\u0002\u0002\u04a3\u04a4\u0003",
    "\u0002\u0002\u0002\u04a4\u04a6\u0005\u00b2Z\u0002\u04a5\u04a7\u0005",
    "\u00acW\u0002\u04a6\u04a5\u0003\u0002\u0002\u0002\u04a6\u04a7\u0003",
    "\u0002\u0002\u0002\u04a7\u00a7\u0003\u0002\u0002\u0002\u04a8\u04a9\u0005",
    "\u00b0Y\u0002\u04a9\u04aa\u0005\u00aaV\u0002\u04aa\u00a9\u0003\u0002",
    "\u0002\u0002\u04ab\u04ac\u0007y\u0002\u0002\u04ac\u04ae\u0005\u00b0",
    "Y\u0002\u04ad\u04ab\u0003\u0002\u0002\u0002\u04ae\u04af\u0003\u0002",
    "\u0002\u0002\u04af\u04ad\u0003\u0002\u0002\u0002\u04af\u04b0\u0003\u0002",
    "\u0002\u0002\u04b0\u04b3\u0003\u0002\u0002\u0002\u04b1\u04b3\u0003\u0002",
    "\u0002\u0002\u04b2\u04ad\u0003\u0002\u0002\u0002\u04b2\u04b1\u0003\u0002",
    "\u0002\u0002\u04b3\u00ab\u0003\u0002\u0002\u0002\u04b4\u04b5\u0007\u010d",
    "\u0002\u0002\u04b5\u04b6\u0005\u00aeX\u0002\u04b6\u04b7\u0007\u010e",
    "\u0002\u0002\u04b7\u00ad\u0003\u0002\u0002\u0002\u04b8\u04bd\u0005\u00b0",
    "Y\u0002\u04b9\u04ba\u0007\u010f\u0002\u0002\u04ba\u04bc\u0005\u00b0",
    "Y\u0002\u04bb\u04b9\u0003\u0002\u0002\u0002\u04bc\u04bf\u0003\u0002",
    "\u0002\u0002\u04bd\u04bb\u0003\u0002\u0002\u0002\u04bd\u04be\u0003\u0002",
    "\u0002\u0002\u04be\u00af\u0003\u0002\u0002\u0002\u04bf\u04bd\u0003\u0002",
    "\u0002\u0002\u04c0\u04c3\u0005\u00b2Z\u0002\u04c1\u04c3\u0005\u00e6",
    "t\u0002\u04c2\u04c0\u0003\u0002\u0002\u0002\u04c2\u04c1\u0003\u0002",
    "\u0002\u0002\u04c3\u00b1\u0003\u0002\u0002\u0002\u04c4\u04c9\u0005\u00b4",
    "[\u0002\u04c5\u04c9\u0005\u00b6\\\u0002\u04c6\u04c9\u0005\u00e4s\u0002",
    "\u04c7\u04c9\u0005\u00e8u\u0002\u04c8\u04c4\u0003\u0002\u0002\u0002",
    "\u04c8\u04c5\u0003\u0002\u0002\u0002\u04c8\u04c6\u0003\u0002\u0002\u0002",
    "\u04c8\u04c7\u0003\u0002\u0002\u0002\u04c9\u00b3\u0003\u0002\u0002\u0002",
    "\u04ca\u04cb\t\u0014\u0002\u0002\u04cb\u00b5\u0003\u0002\u0002\u0002",
    "\u04cc\u04cd\u0007\u0120\u0002\u0002\u04cd\u00b7\u0003\u0002\u0002\u0002",
    "\u04ce\u04cf\u0007*\u0002\u0002\u04cf\u04d0\u0005\u0088E\u0002\u04d0",
    "\u04d1\u0007+\u0002\u0002\u04d1\u04d2\u0005\u0088E\u0002\u04d2\u00b9",
    "\u0003\u0002\u0002\u0002\u04d3\u04d8\u0005\u00bc_\u0002\u04d4\u04d5",
    "\u0007\u010f\u0002\u0002\u04d5\u04d7\u0005\u00bc_\u0002\u04d6\u04d4",
    "\u0003\u0002\u0002\u0002\u04d7\u04da\u0003\u0002\u0002\u0002\u04d8\u04d6",
    "\u0003\u0002\u0002\u0002\u04d8\u04d9\u0003\u0002\u0002\u0002\u04d9\u00bb",
    "\u0003\u0002\u0002\u0002\u04da\u04d8\u0003\u0002\u0002\u0002\u04db\u04df",
    "\u0007\u0124\u0002\u0002\u04dc\u04de\u0007\u011e\u0002\u0002\u04dd\u04dc",
    "\u0003\u0002\u0002\u0002\u04de\u04e1\u0003\u0002\u0002\u0002\u04df\u04e0",
    "\u0003\u0002\u0002\u0002\u04df\u04dd\u0003\u0002\u0002\u0002\u04e0\u00bd",
    "\u0003\u0002\u0002\u0002\u04e1\u04df\u0003\u0002\u0002\u0002\u04e2\u04e6",
    "\t\u0015\u0002\u0002\u04e3\u04e5\t\u0016\u0002\u0002\u04e4\u04e3\u0003",
    "\u0002\u0002\u0002\u04e5\u04e8\u0003\u0002\u0002\u0002\u04e6\u04e7\u0003",
    "\u0002\u0002\u0002\u04e6\u04e4\u0003\u0002\u0002\u0002\u04e7\u00bf\u0003",
    "\u0002\u0002\u0002\u04e8\u04e6\u0003\u0002\u0002\u0002\u04e9\u04ea\u0007",
    "F\u0002\u0002\u04ea\u04eb\u0005\u00c6d\u0002\u04eb\u00c1\u0003\u0002",
    "\u0002\u0002\u04ec\u04ed\u0007v\u0002\u0002\u04ed\u04ee\u0007\u001b",
    "\u0002\u0002\u04ee\u04ef\u0007\u001d\u0002\u0002\u04ef\u00c3\u0003\u0002",
    "\u0002\u0002\u04f0\u04f1\u0007v\u0002\u0002\u04f1\u04f2\u0007\u001d",
    "\u0002\u0002\u04f2\u00c5\u0003\u0002\u0002\u0002\u04f3\u04f4\u0007\u010d",
    "\u0002\u0002\u04f4\u04f9\u0005\u00c8e\u0002\u04f5\u04f6\u0007\u010f",
    "\u0002\u0002\u04f6\u04f8\u0005\u00c8e\u0002\u04f7\u04f5\u0003\u0002",
    "\u0002\u0002\u04f8\u04fb\u0003\u0002\u0002\u0002\u04f9\u04f7\u0003\u0002",
    "\u0002\u0002\u04f9\u04fa\u0003\u0002\u0002\u0002\u04fa\u04fc\u0003\u0002",
    "\u0002\u0002\u04fb\u04f9\u0003\u0002\u0002\u0002\u04fc\u04fd\u0007\u010e",
    "\u0002\u0002\u04fd\u00c7\u0003\u0002\u0002\u0002\u04fe\u0503\u0005\u00ca",
    "f\u0002\u04ff\u0501\u0007\u0102\u0002\u0002\u0500\u04ff\u0003\u0002",
    "\u0002\u0002\u0500\u0501\u0003\u0002\u0002\u0002\u0501\u0502\u0003\u0002",
    "\u0002\u0002\u0502\u0504\u0005\u00ccg\u0002\u0503\u0500\u0003\u0002",
    "\u0002\u0002\u0503\u0504\u0003\u0002\u0002\u0002\u0504\u00c9\u0003\u0002",
    "\u0002\u0002\u0505\u0509\u0005\u00b0Y\u0002\u0506\u0509\u0005\u0094",
    "K\u0002\u0507\u0509\u0007\u0120\u0002\u0002\u0508\u0505\u0003\u0002",
    "\u0002\u0002\u0508\u0506\u0003\u0002\u0002\u0002\u0508\u0507\u0003\u0002",
    "\u0002\u0002\u0509\u00cb\u0003\u0002\u0002\u0002\u050a\u050f\u0007\u0121",
    "\u0002\u0002\u050b\u050f\u0007\u0122\u0002\u0002\u050c\u050f\u0005\u00e0",
    "q\u0002\u050d\u050f\u0007\u0120\u0002\u0002\u050e\u050a\u0003\u0002",
    "\u0002\u0002\u050e\u050b\u0003\u0002\u0002\u0002\u050e\u050c\u0003\u0002",
    "\u0002\u0002\u050e\u050d\u0003\u0002\u0002\u0002\u050f\u00cd\u0003\u0002",
    "\u0002\u0002\u0510\u0517\u0007\u0019\u0002\u0002\u0511\u0512\u0007\u0108",
    "\u0002\u0002\u0512\u0517\u0007\u0108\u0002\u0002\u0513\u0517\u0007\u0018",
    "\u0002\u0002\u0514\u0515\u0007\u0107\u0002\u0002\u0515\u0517\u0007\u0107",
    "\u0002\u0002\u0516\u0510\u0003\u0002\u0002\u0002\u0516\u0511\u0003\u0002",
    "\u0002\u0002\u0516\u0513\u0003\u0002\u0002\u0002\u0516\u0514\u0003\u0002",
    "\u0002\u0002\u0517\u00cf\u0003\u0002\u0002\u0002\u0518\u0527\u0007\u0102",
    "\u0002\u0002\u0519\u0527\u0007\u0103\u0002\u0002\u051a\u0527\u0007\u0104",
    "\u0002\u0002\u051b\u051c\u0007\u0104\u0002\u0002\u051c\u0527\u0007\u0102",
    "\u0002\u0002\u051d\u051e\u0007\u0103\u0002\u0002\u051e\u0527\u0007\u0102",
    "\u0002\u0002\u051f\u0520\u0007\u0104\u0002\u0002\u0520\u0527\u0007\u0103",
    "\u0002\u0002\u0521\u0522\u0007\u0105\u0002\u0002\u0522\u0527\u0007\u0102",
    "\u0002\u0002\u0523\u0524\u0007\u0104\u0002\u0002\u0524\u0525\u0007\u0102",
    "\u0002\u0002\u0525\u0527\u0007\u0103\u0002\u0002\u0526\u0518\u0003\u0002",
    "\u0002\u0002\u0526\u0519\u0003\u0002\u0002\u0002\u0526\u051a\u0003\u0002",
    "\u0002\u0002\u0526\u051b\u0003\u0002\u0002\u0002\u0526\u051d\u0003\u0002",
    "\u0002\u0002\u0526\u051f\u0003\u0002\u0002\u0002\u0526\u0521\u0003\u0002",
    "\u0002\u0002\u0526\u0523\u0003\u0002\u0002\u0002\u0527\u00d1\u0003\u0002",
    "\u0002\u0002\u0528\u0529\u0007\u0104\u0002\u0002\u0529\u0530\u0007\u0104",
    "\u0002\u0002\u052a\u052b\u0007\u0103\u0002\u0002\u052b\u0530\u0007\u0103",
    "\u0002\u0002\u052c\u0530\u0007\u0108\u0002\u0002\u052d\u0530\u0007\u0109",
    "\u0002\u0002\u052e\u0530\u0007\u0107\u0002\u0002\u052f\u0528\u0003\u0002",
    "\u0002\u0002\u052f\u052a\u0003\u0002\u0002\u0002\u052f\u052c\u0003\u0002",
    "\u0002\u0002\u052f\u052d\u0003\u0002\u0002\u0002\u052f\u052e\u0003\u0002",
    "\u0002\u0002\u0530\u00d3\u0003\u0002\u0002\u0002\u0531\u0532\t\u0017",
    "\u0002\u0002\u0532\u00d5\u0003\u0002\u0002\u0002\u0533\u0534\t\u0018",
    "\u0002\u0002\u0534\u00d7\u0003\u0002\u0002\u0002\u0535\u0536\u0005\u00bc",
    "_\u0002\u0536\u00d9\u0003\u0002\u0002\u0002\u0537\u0544\u0005\u00dc",
    "o\u0002\u0538\u0544\u0005\u00dep\u0002\u0539\u0544\u0005\u0098M\u0002",
    "\u053a\u053b\u0007\u0118\u0002\u0002\u053b\u0544\u0005\u00dep\u0002",
    "\u053c\u0544\u0005\u00e0q\u0002\u053d\u0544\u0007\u0122\u0002\u0002",
    "\u053e\u0544\u0007\u0123\u0002\u0002\u053f\u0541\u0007\u001b\u0002\u0002",
    "\u0540\u053f\u0003\u0002\u0002\u0002\u0540\u0541\u0003\u0002\u0002\u0002",
    "\u0541\u0542\u0003\u0002\u0002\u0002\u0542\u0544\u0007\u0100\u0002\u0002",
    "\u0543\u0537\u0003\u0002\u0002\u0002\u0543\u0538\u0003\u0002\u0002\u0002",
    "\u0543\u0539\u0003\u0002\u0002\u0002\u0543\u053a\u0003\u0002\u0002\u0002",
    "\u0543\u053c\u0003\u0002\u0002\u0002\u0543\u053d\u0003\u0002\u0002\u0002",
    "\u0543\u053e\u0003\u0002\u0002\u0002\u0543\u0540\u0003\u0002\u0002\u0002",
    "\u0544\u00db\u0003\u0002\u0002\u0002\u0545\u0546\u0007\u0120\u0002\u0002",
    "\u0546\u00dd\u0003\u0002\u0002\u0002\u0547\u0548\u0007\u0121\u0002\u0002",
    "\u0548\u00df\u0003\u0002\u0002\u0002\u0549\u054a\t\u000e\u0002\u0002",
    "\u054a\u00e1\u0003\u0002\u0002\u0002\u054b\u054c\t\u0019\u0002\u0002",
    "\u054c\u00e3\u0003\u0002\u0002\u0002\u054d\u054e\t\u001a\u0002\u0002",
    "\u054e\u00e5\u0003\u0002\u0002\u0002\u054f\u0550\t\u001b\u0002\u0002",
    "\u0550\u00e7\u0003\u0002\u0002\u0002\u0551\u0552\t\u001c\u0002\u0002",
    "\u0552\u00e9\u0003\u0002\u0002\u0002\u009f\u00f2\u00f5\u00f7\u0100\u0110",
    "\u0114\u0120\u0130\u0135\u0139\u013d\u0141\u0144\u0148\u014d\u0150\u0154",
    "\u015b\u016f\u0185\u0192\u0197\u019b\u01a5\u01af\u01b3\u01b9\u01bd\u01c1",
    "\u01c4\u01cd\u01d1\u01d8\u01df\u01f1\u01f5\u01fc\u0201\u0208\u020c\u0210",
    "\u0214\u021c\u0220\u0228\u022c\u0237\u0240\u024d\u0250\u0254\u0257\u0259",
    "\u025e\u0262\u0265\u0269\u0272\u0278\u027b\u027e\u0281\u0285\u028d\u0290",
    "\u0294\u0297\u02a2\u02a7\u02aa\u02af\u02b3\u02b8\u02bb\u02c8\u02d3\u02de",
    "\u02e3\u02ef\u02fb\u0307\u0313\u0320\u0325\u0331\u0336\u033b\u0343\u034b",
    "\u0355\u0358\u0361\u0364\u0367\u036d\u0371\u0377\u0388\u038a\u0392\u0394",
    "\u0398\u03a0\u03a9\u03af\u03bc\u03c1\u03cd\u03d2\u03d5\u03db\u03e0\u03e5",
    "\u03ea\u03f0\u0405\u0407\u040f\u0413\u041c\u0420\u0430\u0439\u0451\u0458",
    "\u045b\u0465\u046e\u0477\u047c\u0480\u0487\u048c\u0494\u0498\u049b\u049f",
    "\u04a2\u04a6\u04af\u04b2\u04bd\u04c2\u04c8\u04d8\u04df\u04e6\u04f9\u0500",
    "\u0503\u0508\u050e\u0516\u0526\u052f\u0540\u0543"].join("");


var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);

var decisionsToDFA = atn.decisionToState.map( function(ds, index) { return new antlr4.dfa.DFA(ds, index); });

var sharedContextCache = new antlr4.PredictionContextCache();

var literalNames = [ null, null, null, null, "'SELECT'", "'FROM'", "'ADD'", 
                     "'AS'", "'ALL'", "'ANY'", "'DISTINCT'", "'WHERE'", 
                     "'GROUP'", "'BY'", "'GROUPING'", "'SETS'", "'CUBE'", 
                     "'ROLLUP'", "'ORDER'", "'HAVING'", "'LIMIT'", "'AT'", 
                     "'OR'", "'AND'", "'IN'", "'NOT'", "'NO'", "'EXISTS'", 
                     "'BETWEEN'", "'LIKE'", "'RLIKE'", "'IS'", "'TRUE'", 
                     "'FALSE'", "'NULLS'", "'ASC'", "'DESC'", "'FOR'", "'INTERVAL'", 
                     "'CASE'", "'WHEN'", "'THEN'", "'ELSE'", "'END'", "'JOIN'", 
                     "'CROSS'", "'OUTER'", "'INNER'", "'LEFT'", "'SEMI'", 
                     "'RIGHT'", "'FULL'", "'NATURAL'", "'ON'", "'PIVOT'", 
                     "'LATERAL'", "'WINDOW'", "'OVER'", "'PARTITION'", "'RANGE'", 
                     "'ROWS'", "'UNBOUNDED'", "'PRECEDING'", "'FOLLOWING'", 
                     "'CURRENT'", "'FIRST'", "'AFTER'", "'LAST'", "'WITH'", 
                     "'VALUES'", "'CREATE'", "'TABLE'", "'DIRECTORY'", "'VIEW'", 
                     "'REPLACE'", "'INSERT'", "'DELETE'", "'INTO'", "'DESCRIBE'", 
                     "'EXPLAIN'", "'FORMAT'", "'LOGICAL'", "'CODEGEN'", 
                     "'COST'", "'CAST'", "'SHOW'", "'TABLES'", "'COLUMNS'", 
                     "'COLUMN'", "'USE'", "'PARTITIONS'", "'FUNCTIONS'", 
                     "'DROP'", "'UNION'", "'EXCEPT'", "'SETMINUS'", "'INTERSECT'", 
                     "'TO'", "'TABLESAMPLE'", "'STRATIFY'", "'ALTER'", "'RENAME'", 
                     "'STRUCT'", "'COMMENT'", "'SET'", "'RESET'", "'DATA'", 
                     "'START'", "'TRANSACTION'", "'COMMIT'", "'ROLLBACK'", 
                     "'MACRO'", "'IGNORE'", "'BOTH'", "'LEADING'", "'TRAILING'", 
                     "'IF'", "'POSITION'", "'EXTRACT'", "'MINUS'", "'DIV'", 
                     "'PERCENTLIT'", "'BUCKET'", "'OUT'", "'OF'", "'SORT'", 
                     "'CLUSTER'", "'DISTRIBUTE'", "'OVERWRITE'", "'TRANSFORM'", 
                     "'REDUCE'", "'USING'", "'SERDE'", "'SERDEPROPERTIES'", 
                     "'RECORDREADER'", "'RECORDWRITER'", "'DELIMITED'", 
                     "'FIELDS'", "'TERMINATED'", "'COLLECTION'", "'ITEMS'", 
                     "'KEYS'", "'ESCAPED'", "'LINES'", "'SEPARATED'", "'FUNCTION'", 
                     "'EXTENDED'", "'REFRESH'", "'CLEAR'", "'CACHE'", "'UNCACHE'", 
                     "'LAZY'", "'FORMATTED'", "'GLOBAL'", "'TEMPORARY'", 
                     "'OPTIONS'", "'UNSET'", "'TBLPROPERTIES'", "'DBPROPERTIES'", 
                     "'BUCKETS'", "'SKEWED'", "'STORED'", "'DIRECTORIES'", 
                     "'LOCATION'", "'EXCHANGE'", "'ARCHIVE'", "'UNARCHIVE'", 
                     "'FILEFORMAT'", "'TOUCH'", "'COMPACT'", "'CONCATENATE'", 
                     "'CHANGE'", "'CASCADE'", "'CONSTRAINT'", "'RESTRICT'", 
                     "'CLUSTERED'", "'SORTED'", "'PURGE'", "'INPUTFORMAT'", 
                     "'OUTPUTFORMAT'", "'DATABASE'", "'DATABASES'", "'DFS'", 
                     "'TRUNCATE'", "'ANALYZE'", "'COMPUTE'", "'LIST'", "'STATISTICS'", 
                     "'PARTITIONED'", "'EXTERNAL'", "'DEFINED'", "'REVOKE'", 
                     "'GRANT'", "'LOCK'", "'UNLOCK'", "'MSCK'", "'REPAIR'", 
                     "'RECOVER'", "'EXPORT'", "'IMPORT'", "'LOAD'", "'ROLE'", 
                     "'ROLES'", "'COMPACTIONS'", "'PRINCIPALS'", "'TRANSACTIONS'", 
                     "'INDEX'", "'INDEXES'", "'LOCKS'", "'OPTION'", "'ANTI'", 
                     "'LOCAL'", "'INPATH'", "'WATERMARK'", "'UNNEST'", "'MATCH'", 
                     "'NEXT'", "'WITHIN'", "'WS'", "'SYSTEM'", "'INCLUDING'", 
                     "'EXCLUDING'", "'CONSTRAINTS'", "'GENERATED'", "'CATALOG'", 
                     "'LANGUAGE'", "'CATALOGS'", "'VIEWS'", "'PRIMARY'", 
                     "'KEY'", "'PERIOD'", "'SYSTEM_TIME'", "'STRING'", "'ARRAY'", 
                     "'MAP'", "'CHAR'", "'VARCHAR'", "'BINARY'", "'VARBINARY'", 
                     "'BYTES'", "'DECIMAL'", "'TINYINT'", "'SMALLINT'", 
                     "'INT'", "'BIGINT'", "'FLOAT'", "'DOUBLE'", "'DATE'", 
                     "'TIME'", "'TIMESTAMP'", "'MULTISET'", "'BOOLEAN'", 
                     "'RAW'", "'ROW'", "'NULL'", "'DATETIME'", "'='", "'>'", 
                     "'<'", "'!'", "'~'", "'|'", "'&'", "'^'", "'.'", "'['", 
                     "']'", "'('", "')'", "','", "';'", "'@'", "'''", "'\"'", 
                     "'`'", "':'", "'*'", "'_'", "'-'", "'+'", "'%'", "'||'", 
                     "'--'", "'/'" ];

var symbolicNames = [ null, "SPACE", "COMMENT_INPUT", "LINE_COMMENT", "SELECT", 
                      "FROM", "ADD", "AS", "ALL", "ANY", "DISTINCT", "WHERE", 
                      "GROUP", "BY", "GROUPING", "SETS", "CUBE", "ROLLUP", 
                      "ORDER", "HAVING", "LIMIT", "AT", "OR", "AND", "IN", 
                      "NOT", "NO", "EXISTS", "BETWEEN", "LIKE", "RLIKE", 
                      "IS", "TRUE", "FALSE", "NULLS", "ASC", "DESC", "FOR", 
                      "INTERVAL", "CASE", "WHEN", "THEN", "ELSE", "END", 
                      "JOIN", "CROSS", "OUTER", "INNER", "LEFT", "SEMI", 
                      "RIGHT", "FULL", "NATURAL", "ON", "PIVOT", "LATERAL", 
                      "WINDOW", "OVER", "PARTITION", "RANGE", "ROWS", "UNBOUNDED", 
                      "PRECEDING", "FOLLOWING", "CURRENT", "FIRST", "AFTER", 
                      "LAST", "WITH", "VALUES", "CREATE", "TABLE", "DIRECTORY", 
                      "VIEW", "REPLACE", "INSERT", "DELETE", "INTO", "DESCRIBE", 
                      "EXPLAIN", "FORMAT", "LOGICAL", "CODEGEN", "COST", 
                      "CAST", "SHOW", "TABLES", "COLUMNS", "COLUMN", "USE", 
                      "PARTITIONS", "FUNCTIONS", "DROP", "UNION", "EXCEPT", 
                      "SETMINUS", "INTERSECT", "TO", "TABLESAMPLE", "STRATIFY", 
                      "ALTER", "RENAME", "STRUCT", "COMMENT", "SET", "RESET", 
                      "DATA", "START", "TRANSACTION", "COMMIT", "ROLLBACK", 
                      "MACRO", "IGNORE", "BOTH", "LEADING", "TRAILING", 
                      "IF", "POSITION", "EXTRACT", "MINUS", "DIV", "PERCENTLIT", 
                      "BUCKET", "OUT", "OF", "SORT", "CLUSTER", "DISTRIBUTE", 
                      "OVERWRITE", "TRANSFORM", "REDUCE", "USING", "SERDE", 
                      "SERDEPROPERTIES", "RECORDREADER", "RECORDWRITER", 
                      "DELIMITED", "FIELDS", "TERMINATED", "COLLECTION", 
                      "ITEMS", "KEYS", "ESCAPED", "LINES", "SEPARATED", 
                      "FUNCTION", "EXTENDED", "REFRESH", "CLEAR", "CACHE", 
                      "UNCACHE", "LAZY", "FORMATTED", "GLOBAL", "TEMPORARY", 
                      "OPTIONS", "UNSET", "TBLPROPERTIES", "DBPROPERTIES", 
                      "BUCKETS", "SKEWED", "STORED", "DIRECTORIES", "LOCATION", 
                      "EXCHANGE", "ARCHIVE", "UNARCHIVE", "FILEFORMAT", 
                      "TOUCH", "COMPACT", "CONCATENATE", "CHANGE", "CASCADE", 
                      "CONSTRAINT", "RESTRICT", "CLUSTERED", "SORTED", "PURGE", 
                      "INPUTFORMAT", "OUTPUTFORMAT", "DATABASE", "DATABASES", 
                      "DFS", "TRUNCATE", "ANALYZE", "COMPUTE", "LIST", "STATISTICS", 
                      "PARTITIONED", "EXTERNAL", "DEFINED", "REVOKE", "GRANT", 
                      "LOCK", "UNLOCK", "MSCK", "REPAIR", "RECOVER", "EXPORT", 
                      "IMPORT", "LOAD", "ROLE", "ROLES", "COMPACTIONS", 
                      "PRINCIPALS", "TRANSACTIONS", "INDEX", "INDEXES", 
                      "LOCKS", "OPTION", "ANTI", "LOCAL", "INPATH", "WATERMARK", 
                      "UNNEST", "MATCH", "NEXT", "WITHIN", "WS", "SYSTEM", 
                      "INCLUDING", "EXCLUDING", "CONSTRAINTS", "GENERATED", 
                      "CATALOG", "LANGUAGE", "CATALOGS", "VIEWS", "PRIMARY", 
                      "KEY", "PERIOD", "SYSTEM_TIME", "STRING", "ARRAY", 
                      "MAP", "CHAR", "VARCHAR", "BINARY", "VARBINARY", "BYTES", 
                      "DECIMAL", "TINYINT", "SMALLINT", "INT", "BIGINT", 
                      "FLOAT", "DOUBLE", "DATE", "TIME", "TIMESTAMP", "MULTISET", 
                      "BOOLEAN", "RAW", "ROW", "NULL", "DATETIME", "EQUAL_SYMBOL", 
                      "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", 
                      "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", 
                      "DOT", "LS_BRACKET", "RS_BRACKET", "LR_BRACKET", "RR_BRACKET", 
                      "COMMA", "SEMICOLON", "AT_SIGN", "SINGLE_QUOTE_SYMB", 
                      "DOUBLE_QUOTE_SYMB", "REVERSE_QUOTE_SYMB", "COLON_SYMB", 
                      "ASTERISK_SIGN", "UNDERLINE_SIGN", "HYPNEN_SIGN", 
                      "ADD_SIGN", "PENCENT_SIGN", "DOUBLE_VERTICAL_SIGN", 
                      "DOUBLE_HYPNEN_SIGN", "SLASH_SIGN", "DOT_ID", "PLUS_DOT_ID", 
                      "STRING_LITERAL", "DIG_LITERAL", "REAL_LITERAL", "BIT_STRING", 
                      "ID_LITERAL", "PLUS_ID_LITERAL" ];

var ruleNames =  [ "program", "statement", "sqlStatements", "sqlStatement", 
                   "emptyStatement", "ddlStatement", "dmlStatement", "describeStatement", 
                   "explainStatement", "useStatement", "showStatememt", 
                   "createTable", "columnOptionDefinition", "columnName", 
                   "columnNameList", "columnType", "lengthOneDimension", 
                   "commentSpec", "watermarkDefinition", "tableConstraint", 
                   "selfDefinitionClause", "partitionDefinition", "transformList", 
                   "transform", "transformArgument", "likeDefinition", "likeOption", 
                   "createCatalog", "createDatabase", "createView", "createFunction", 
                   "alterTable", "renameDefinition", "setKeyValueDefinition", 
                   "alterDatabase", "alterFunction", "dropTable", "dropDatabase", 
                   "dropView", "dropFunction", "insertStatement", "insertPartitionDefinition", 
                   "valuesDefinition", "valuesRowDefinition", "queryStatement", 
                   "valuesCaluse", "selectStatement", "selectClause", "projectItemDefinition", 
                   "fromClause", "tableExpression", "tableReference", "tablePrimary", 
                   "joinCondition", "whereClause", "groupByClause", "groupItemDefinition", 
                   "havingClause", "orderByCaluse", "orderItemDefition", 
                   "limitClause", "windowClause", "namedWindow", "windowSpec", 
                   "sortItem", "windowFrame", "frameBound", "expression", 
                   "booleanExpression", "predicate", "valueExpression", 
                   "primaryExpression", "functionName", "dereferenceDefinition", 
                   "qualifiedName", "interval", "errorCapturingMultiUnitsInterval", 
                   "multiUnitsInterval", "errorCapturingUnitToUnitInterval", 
                   "unitToUnitInterval", "intervalValue", "columnAlias", 
                   "tableAlias", "errorCapturingIdentifier", "errorCapturingIdentifierExtra", 
                   "identifierList", "identifierSeq", "identifier", "strictIdentifier", 
                   "unquotedIdentifier", "quotedIdentifier", "whenClause", 
                   "uidList", "uid", "plusUid", "withOption", "ifNotExists", 
                   "ifExists", "tablePropertyList", "tableProperty", "tablePropertyKey", 
                   "tablePropertyValue", "logicalOperator", "comparisonOperator", 
                   "bitOperator", "mathOperator", "unaryOperator", "fullColumnName", 
                   "constant", "stringLiteral", "decimalLiteral", "booleanLiteral", 
                   "setQuantifier", "ansiNonReserved", "strictNonReserved", 
                   "nonReserved" ];

function FlinkSqlParser (input) {
	antlr4.Parser.call(this, input);
    this._interp = new antlr4.atn.ParserATNSimulator(this, atn, decisionsToDFA, sharedContextCache);
    this.ruleNames = ruleNames;
    this.literalNames = literalNames;
    this.symbolicNames = symbolicNames;
    return this;
}

FlinkSqlParser.prototype = Object.create(antlr4.Parser.prototype);
FlinkSqlParser.prototype.constructor = FlinkSqlParser;

Object.defineProperty(FlinkSqlParser.prototype, "atn", {
	get : function() {
		return atn;
	}
});

FlinkSqlParser.EOF = antlr4.Token.EOF;
FlinkSqlParser.SPACE = 1;
FlinkSqlParser.COMMENT_INPUT = 2;
FlinkSqlParser.LINE_COMMENT = 3;
FlinkSqlParser.SELECT = 4;
FlinkSqlParser.FROM = 5;
FlinkSqlParser.ADD = 6;
FlinkSqlParser.AS = 7;
FlinkSqlParser.ALL = 8;
FlinkSqlParser.ANY = 9;
FlinkSqlParser.DISTINCT = 10;
FlinkSqlParser.WHERE = 11;
FlinkSqlParser.GROUP = 12;
FlinkSqlParser.BY = 13;
FlinkSqlParser.GROUPING = 14;
FlinkSqlParser.SETS = 15;
FlinkSqlParser.CUBE = 16;
FlinkSqlParser.ROLLUP = 17;
FlinkSqlParser.ORDER = 18;
FlinkSqlParser.HAVING = 19;
FlinkSqlParser.LIMIT = 20;
FlinkSqlParser.AT = 21;
FlinkSqlParser.OR = 22;
FlinkSqlParser.AND = 23;
FlinkSqlParser.IN = 24;
FlinkSqlParser.NOT = 25;
FlinkSqlParser.NO = 26;
FlinkSqlParser.EXISTS = 27;
FlinkSqlParser.BETWEEN = 28;
FlinkSqlParser.LIKE = 29;
FlinkSqlParser.RLIKE = 30;
FlinkSqlParser.IS = 31;
FlinkSqlParser.TRUE = 32;
FlinkSqlParser.FALSE = 33;
FlinkSqlParser.NULLS = 34;
FlinkSqlParser.ASC = 35;
FlinkSqlParser.DESC = 36;
FlinkSqlParser.FOR = 37;
FlinkSqlParser.INTERVAL = 38;
FlinkSqlParser.CASE = 39;
FlinkSqlParser.WHEN = 40;
FlinkSqlParser.THEN = 41;
FlinkSqlParser.ELSE = 42;
FlinkSqlParser.END = 43;
FlinkSqlParser.JOIN = 44;
FlinkSqlParser.CROSS = 45;
FlinkSqlParser.OUTER = 46;
FlinkSqlParser.INNER = 47;
FlinkSqlParser.LEFT = 48;
FlinkSqlParser.SEMI = 49;
FlinkSqlParser.RIGHT = 50;
FlinkSqlParser.FULL = 51;
FlinkSqlParser.NATURAL = 52;
FlinkSqlParser.ON = 53;
FlinkSqlParser.PIVOT = 54;
FlinkSqlParser.LATERAL = 55;
FlinkSqlParser.WINDOW = 56;
FlinkSqlParser.OVER = 57;
FlinkSqlParser.PARTITION = 58;
FlinkSqlParser.RANGE = 59;
FlinkSqlParser.ROWS = 60;
FlinkSqlParser.UNBOUNDED = 61;
FlinkSqlParser.PRECEDING = 62;
FlinkSqlParser.FOLLOWING = 63;
FlinkSqlParser.CURRENT = 64;
FlinkSqlParser.FIRST = 65;
FlinkSqlParser.AFTER = 66;
FlinkSqlParser.LAST = 67;
FlinkSqlParser.WITH = 68;
FlinkSqlParser.VALUES = 69;
FlinkSqlParser.CREATE = 70;
FlinkSqlParser.TABLE = 71;
FlinkSqlParser.DIRECTORY = 72;
FlinkSqlParser.VIEW = 73;
FlinkSqlParser.REPLACE = 74;
FlinkSqlParser.INSERT = 75;
FlinkSqlParser.DELETE = 76;
FlinkSqlParser.INTO = 77;
FlinkSqlParser.DESCRIBE = 78;
FlinkSqlParser.EXPLAIN = 79;
FlinkSqlParser.FORMAT = 80;
FlinkSqlParser.LOGICAL = 81;
FlinkSqlParser.CODEGEN = 82;
FlinkSqlParser.COST = 83;
FlinkSqlParser.CAST = 84;
FlinkSqlParser.SHOW = 85;
FlinkSqlParser.TABLES = 86;
FlinkSqlParser.COLUMNS = 87;
FlinkSqlParser.COLUMN = 88;
FlinkSqlParser.USE = 89;
FlinkSqlParser.PARTITIONS = 90;
FlinkSqlParser.FUNCTIONS = 91;
FlinkSqlParser.DROP = 92;
FlinkSqlParser.UNION = 93;
FlinkSqlParser.EXCEPT = 94;
FlinkSqlParser.SETMINUS = 95;
FlinkSqlParser.INTERSECT = 96;
FlinkSqlParser.TO = 97;
FlinkSqlParser.TABLESAMPLE = 98;
FlinkSqlParser.STRATIFY = 99;
FlinkSqlParser.ALTER = 100;
FlinkSqlParser.RENAME = 101;
FlinkSqlParser.STRUCT = 102;
FlinkSqlParser.COMMENT = 103;
FlinkSqlParser.SET = 104;
FlinkSqlParser.RESET = 105;
FlinkSqlParser.DATA = 106;
FlinkSqlParser.START = 107;
FlinkSqlParser.TRANSACTION = 108;
FlinkSqlParser.COMMIT = 109;
FlinkSqlParser.ROLLBACK = 110;
FlinkSqlParser.MACRO = 111;
FlinkSqlParser.IGNORE = 112;
FlinkSqlParser.BOTH = 113;
FlinkSqlParser.LEADING = 114;
FlinkSqlParser.TRAILING = 115;
FlinkSqlParser.IF = 116;
FlinkSqlParser.POSITION = 117;
FlinkSqlParser.EXTRACT = 118;
FlinkSqlParser.MINUS = 119;
FlinkSqlParser.DIV = 120;
FlinkSqlParser.PERCENTLIT = 121;
FlinkSqlParser.BUCKET = 122;
FlinkSqlParser.OUT = 123;
FlinkSqlParser.OF = 124;
FlinkSqlParser.SORT = 125;
FlinkSqlParser.CLUSTER = 126;
FlinkSqlParser.DISTRIBUTE = 127;
FlinkSqlParser.OVERWRITE = 128;
FlinkSqlParser.TRANSFORM = 129;
FlinkSqlParser.REDUCE = 130;
FlinkSqlParser.USING = 131;
FlinkSqlParser.SERDE = 132;
FlinkSqlParser.SERDEPROPERTIES = 133;
FlinkSqlParser.RECORDREADER = 134;
FlinkSqlParser.RECORDWRITER = 135;
FlinkSqlParser.DELIMITED = 136;
FlinkSqlParser.FIELDS = 137;
FlinkSqlParser.TERMINATED = 138;
FlinkSqlParser.COLLECTION = 139;
FlinkSqlParser.ITEMS = 140;
FlinkSqlParser.KEYS = 141;
FlinkSqlParser.ESCAPED = 142;
FlinkSqlParser.LINES = 143;
FlinkSqlParser.SEPARATED = 144;
FlinkSqlParser.FUNCTION = 145;
FlinkSqlParser.EXTENDED = 146;
FlinkSqlParser.REFRESH = 147;
FlinkSqlParser.CLEAR = 148;
FlinkSqlParser.CACHE = 149;
FlinkSqlParser.UNCACHE = 150;
FlinkSqlParser.LAZY = 151;
FlinkSqlParser.FORMATTED = 152;
FlinkSqlParser.GLOBAL = 153;
FlinkSqlParser.TEMPORARY = 154;
FlinkSqlParser.OPTIONS = 155;
FlinkSqlParser.UNSET = 156;
FlinkSqlParser.TBLPROPERTIES = 157;
FlinkSqlParser.DBPROPERTIES = 158;
FlinkSqlParser.BUCKETS = 159;
FlinkSqlParser.SKEWED = 160;
FlinkSqlParser.STORED = 161;
FlinkSqlParser.DIRECTORIES = 162;
FlinkSqlParser.LOCATION = 163;
FlinkSqlParser.EXCHANGE = 164;
FlinkSqlParser.ARCHIVE = 165;
FlinkSqlParser.UNARCHIVE = 166;
FlinkSqlParser.FILEFORMAT = 167;
FlinkSqlParser.TOUCH = 168;
FlinkSqlParser.COMPACT = 169;
FlinkSqlParser.CONCATENATE = 170;
FlinkSqlParser.CHANGE = 171;
FlinkSqlParser.CASCADE = 172;
FlinkSqlParser.CONSTRAINT = 173;
FlinkSqlParser.RESTRICT = 174;
FlinkSqlParser.CLUSTERED = 175;
FlinkSqlParser.SORTED = 176;
FlinkSqlParser.PURGE = 177;
FlinkSqlParser.INPUTFORMAT = 178;
FlinkSqlParser.OUTPUTFORMAT = 179;
FlinkSqlParser.DATABASE = 180;
FlinkSqlParser.DATABASES = 181;
FlinkSqlParser.DFS = 182;
FlinkSqlParser.TRUNCATE = 183;
FlinkSqlParser.ANALYZE = 184;
FlinkSqlParser.COMPUTE = 185;
FlinkSqlParser.LIST = 186;
FlinkSqlParser.STATISTICS = 187;
FlinkSqlParser.PARTITIONED = 188;
FlinkSqlParser.EXTERNAL = 189;
FlinkSqlParser.DEFINED = 190;
FlinkSqlParser.REVOKE = 191;
FlinkSqlParser.GRANT = 192;
FlinkSqlParser.LOCK = 193;
FlinkSqlParser.UNLOCK = 194;
FlinkSqlParser.MSCK = 195;
FlinkSqlParser.REPAIR = 196;
FlinkSqlParser.RECOVER = 197;
FlinkSqlParser.EXPORT = 198;
FlinkSqlParser.IMPORT = 199;
FlinkSqlParser.LOAD = 200;
FlinkSqlParser.ROLE = 201;
FlinkSqlParser.ROLES = 202;
FlinkSqlParser.COMPACTIONS = 203;
FlinkSqlParser.PRINCIPALS = 204;
FlinkSqlParser.TRANSACTIONS = 205;
FlinkSqlParser.INDEX = 206;
FlinkSqlParser.INDEXES = 207;
FlinkSqlParser.LOCKS = 208;
FlinkSqlParser.OPTION = 209;
FlinkSqlParser.ANTI = 210;
FlinkSqlParser.LOCAL = 211;
FlinkSqlParser.INPATH = 212;
FlinkSqlParser.WATERMARK = 213;
FlinkSqlParser.UNNEST = 214;
FlinkSqlParser.MATCH = 215;
FlinkSqlParser.NEXT = 216;
FlinkSqlParser.WITHIN = 217;
FlinkSqlParser.WS = 218;
FlinkSqlParser.SYSTEM = 219;
FlinkSqlParser.INCLUDING = 220;
FlinkSqlParser.EXCLUDING = 221;
FlinkSqlParser.CONSTRAINTS = 222;
FlinkSqlParser.GENERATED = 223;
FlinkSqlParser.CATALOG = 224;
FlinkSqlParser.LANGUAGE = 225;
FlinkSqlParser.CATALOGS = 226;
FlinkSqlParser.VIEWS = 227;
FlinkSqlParser.PRIMARY = 228;
FlinkSqlParser.KEY = 229;
FlinkSqlParser.PERIOD = 230;
FlinkSqlParser.SYSTEM_TIME = 231;
FlinkSqlParser.STRING = 232;
FlinkSqlParser.ARRAY = 233;
FlinkSqlParser.MAP = 234;
FlinkSqlParser.CHAR = 235;
FlinkSqlParser.VARCHAR = 236;
FlinkSqlParser.BINARY = 237;
FlinkSqlParser.VARBINARY = 238;
FlinkSqlParser.BYTES = 239;
FlinkSqlParser.DECIMAL = 240;
FlinkSqlParser.TINYINT = 241;
FlinkSqlParser.SMALLINT = 242;
FlinkSqlParser.INT = 243;
FlinkSqlParser.BIGINT = 244;
FlinkSqlParser.FLOAT = 245;
FlinkSqlParser.DOUBLE = 246;
FlinkSqlParser.DATE = 247;
FlinkSqlParser.TIME = 248;
FlinkSqlParser.TIMESTAMP = 249;
FlinkSqlParser.MULTISET = 250;
FlinkSqlParser.BOOLEAN = 251;
FlinkSqlParser.RAW = 252;
FlinkSqlParser.ROW = 253;
FlinkSqlParser.NULL = 254;
FlinkSqlParser.DATETIME = 255;
FlinkSqlParser.EQUAL_SYMBOL = 256;
FlinkSqlParser.GREATER_SYMBOL = 257;
FlinkSqlParser.LESS_SYMBOL = 258;
FlinkSqlParser.EXCLAMATION_SYMBOL = 259;
FlinkSqlParser.BIT_NOT_OP = 260;
FlinkSqlParser.BIT_OR_OP = 261;
FlinkSqlParser.BIT_AND_OP = 262;
FlinkSqlParser.BIT_XOR_OP = 263;
FlinkSqlParser.DOT = 264;
FlinkSqlParser.LS_BRACKET = 265;
FlinkSqlParser.RS_BRACKET = 266;
FlinkSqlParser.LR_BRACKET = 267;
FlinkSqlParser.RR_BRACKET = 268;
FlinkSqlParser.COMMA = 269;
FlinkSqlParser.SEMICOLON = 270;
FlinkSqlParser.AT_SIGN = 271;
FlinkSqlParser.SINGLE_QUOTE_SYMB = 272;
FlinkSqlParser.DOUBLE_QUOTE_SYMB = 273;
FlinkSqlParser.REVERSE_QUOTE_SYMB = 274;
FlinkSqlParser.COLON_SYMB = 275;
FlinkSqlParser.ASTERISK_SIGN = 276;
FlinkSqlParser.UNDERLINE_SIGN = 277;
FlinkSqlParser.HYPNEN_SIGN = 278;
FlinkSqlParser.ADD_SIGN = 279;
FlinkSqlParser.PENCENT_SIGN = 280;
FlinkSqlParser.DOUBLE_VERTICAL_SIGN = 281;
FlinkSqlParser.DOUBLE_HYPNEN_SIGN = 282;
FlinkSqlParser.SLASH_SIGN = 283;
FlinkSqlParser.DOT_ID = 284;
FlinkSqlParser.PLUS_DOT_ID = 285;
FlinkSqlParser.STRING_LITERAL = 286;
FlinkSqlParser.DIG_LITERAL = 287;
FlinkSqlParser.REAL_LITERAL = 288;
FlinkSqlParser.BIT_STRING = 289;
FlinkSqlParser.ID_LITERAL = 290;
FlinkSqlParser.PLUS_ID_LITERAL = 291;

FlinkSqlParser.RULE_program = 0;
FlinkSqlParser.RULE_statement = 1;
FlinkSqlParser.RULE_sqlStatements = 2;
FlinkSqlParser.RULE_sqlStatement = 3;
FlinkSqlParser.RULE_emptyStatement = 4;
FlinkSqlParser.RULE_ddlStatement = 5;
FlinkSqlParser.RULE_dmlStatement = 6;
FlinkSqlParser.RULE_describeStatement = 7;
FlinkSqlParser.RULE_explainStatement = 8;
FlinkSqlParser.RULE_useStatement = 9;
FlinkSqlParser.RULE_showStatememt = 10;
FlinkSqlParser.RULE_createTable = 11;
FlinkSqlParser.RULE_columnOptionDefinition = 12;
FlinkSqlParser.RULE_columnName = 13;
FlinkSqlParser.RULE_columnNameList = 14;
FlinkSqlParser.RULE_columnType = 15;
FlinkSqlParser.RULE_lengthOneDimension = 16;
FlinkSqlParser.RULE_commentSpec = 17;
FlinkSqlParser.RULE_watermarkDefinition = 18;
FlinkSqlParser.RULE_tableConstraint = 19;
FlinkSqlParser.RULE_selfDefinitionClause = 20;
FlinkSqlParser.RULE_partitionDefinition = 21;
FlinkSqlParser.RULE_transformList = 22;
FlinkSqlParser.RULE_transform = 23;
FlinkSqlParser.RULE_transformArgument = 24;
FlinkSqlParser.RULE_likeDefinition = 25;
FlinkSqlParser.RULE_likeOption = 26;
FlinkSqlParser.RULE_createCatalog = 27;
FlinkSqlParser.RULE_createDatabase = 28;
FlinkSqlParser.RULE_createView = 29;
FlinkSqlParser.RULE_createFunction = 30;
FlinkSqlParser.RULE_alterTable = 31;
FlinkSqlParser.RULE_renameDefinition = 32;
FlinkSqlParser.RULE_setKeyValueDefinition = 33;
FlinkSqlParser.RULE_alterDatabase = 34;
FlinkSqlParser.RULE_alterFunction = 35;
FlinkSqlParser.RULE_dropTable = 36;
FlinkSqlParser.RULE_dropDatabase = 37;
FlinkSqlParser.RULE_dropView = 38;
FlinkSqlParser.RULE_dropFunction = 39;
FlinkSqlParser.RULE_insertStatement = 40;
FlinkSqlParser.RULE_insertPartitionDefinition = 41;
FlinkSqlParser.RULE_valuesDefinition = 42;
FlinkSqlParser.RULE_valuesRowDefinition = 43;
FlinkSqlParser.RULE_queryStatement = 44;
FlinkSqlParser.RULE_valuesCaluse = 45;
FlinkSqlParser.RULE_selectStatement = 46;
FlinkSqlParser.RULE_selectClause = 47;
FlinkSqlParser.RULE_projectItemDefinition = 48;
FlinkSqlParser.RULE_fromClause = 49;
FlinkSqlParser.RULE_tableExpression = 50;
FlinkSqlParser.RULE_tableReference = 51;
FlinkSqlParser.RULE_tablePrimary = 52;
FlinkSqlParser.RULE_joinCondition = 53;
FlinkSqlParser.RULE_whereClause = 54;
FlinkSqlParser.RULE_groupByClause = 55;
FlinkSqlParser.RULE_groupItemDefinition = 56;
FlinkSqlParser.RULE_havingClause = 57;
FlinkSqlParser.RULE_orderByCaluse = 58;
FlinkSqlParser.RULE_orderItemDefition = 59;
FlinkSqlParser.RULE_limitClause = 60;
FlinkSqlParser.RULE_windowClause = 61;
FlinkSqlParser.RULE_namedWindow = 62;
FlinkSqlParser.RULE_windowSpec = 63;
FlinkSqlParser.RULE_sortItem = 64;
FlinkSqlParser.RULE_windowFrame = 65;
FlinkSqlParser.RULE_frameBound = 66;
FlinkSqlParser.RULE_expression = 67;
FlinkSqlParser.RULE_booleanExpression = 68;
FlinkSqlParser.RULE_predicate = 69;
FlinkSqlParser.RULE_valueExpression = 70;
FlinkSqlParser.RULE_primaryExpression = 71;
FlinkSqlParser.RULE_functionName = 72;
FlinkSqlParser.RULE_dereferenceDefinition = 73;
FlinkSqlParser.RULE_qualifiedName = 74;
FlinkSqlParser.RULE_interval = 75;
FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval = 76;
FlinkSqlParser.RULE_multiUnitsInterval = 77;
FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval = 78;
FlinkSqlParser.RULE_unitToUnitInterval = 79;
FlinkSqlParser.RULE_intervalValue = 80;
FlinkSqlParser.RULE_columnAlias = 81;
FlinkSqlParser.RULE_tableAlias = 82;
FlinkSqlParser.RULE_errorCapturingIdentifier = 83;
FlinkSqlParser.RULE_errorCapturingIdentifierExtra = 84;
FlinkSqlParser.RULE_identifierList = 85;
FlinkSqlParser.RULE_identifierSeq = 86;
FlinkSqlParser.RULE_identifier = 87;
FlinkSqlParser.RULE_strictIdentifier = 88;
FlinkSqlParser.RULE_unquotedIdentifier = 89;
FlinkSqlParser.RULE_quotedIdentifier = 90;
FlinkSqlParser.RULE_whenClause = 91;
FlinkSqlParser.RULE_uidList = 92;
FlinkSqlParser.RULE_uid = 93;
FlinkSqlParser.RULE_plusUid = 94;
FlinkSqlParser.RULE_withOption = 95;
FlinkSqlParser.RULE_ifNotExists = 96;
FlinkSqlParser.RULE_ifExists = 97;
FlinkSqlParser.RULE_tablePropertyList = 98;
FlinkSqlParser.RULE_tableProperty = 99;
FlinkSqlParser.RULE_tablePropertyKey = 100;
FlinkSqlParser.RULE_tablePropertyValue = 101;
FlinkSqlParser.RULE_logicalOperator = 102;
FlinkSqlParser.RULE_comparisonOperator = 103;
FlinkSqlParser.RULE_bitOperator = 104;
FlinkSqlParser.RULE_mathOperator = 105;
FlinkSqlParser.RULE_unaryOperator = 106;
FlinkSqlParser.RULE_fullColumnName = 107;
FlinkSqlParser.RULE_constant = 108;
FlinkSqlParser.RULE_stringLiteral = 109;
FlinkSqlParser.RULE_decimalLiteral = 110;
FlinkSqlParser.RULE_booleanLiteral = 111;
FlinkSqlParser.RULE_setQuantifier = 112;
FlinkSqlParser.RULE_ansiNonReserved = 113;
FlinkSqlParser.RULE_strictNonReserved = 114;
FlinkSqlParser.RULE_nonReserved = 115;


function ProgramContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_program;
    return this;
}

ProgramContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ProgramContext.prototype.constructor = ProgramContext;

ProgramContext.prototype.statement = function() {
    return this.getTypedRuleContext(StatementContext,0);
};

ProgramContext.prototype.EOF = function() {
    return this.getToken(FlinkSqlParser.EOF, 0);
};

ProgramContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterProgram(this);
	}
};

ProgramContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitProgram(this);
	}
};

ProgramContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitProgram(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ProgramContext = ProgramContext;

FlinkSqlParser.prototype.program = function() {

    var localctx = new ProgramContext(this, this._ctx, this.state);
    this.enterRule(localctx, 0, FlinkSqlParser.RULE_program);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 232;
        this.statement();
        this.state = 233;
        this.match(FlinkSqlParser.EOF);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function StatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_statement;
    return this;
}

StatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StatementContext.prototype.constructor = StatementContext;

StatementContext.prototype.sqlStatements = function() {
    return this.getTypedRuleContext(SqlStatementsContext,0);
};

StatementContext.prototype.EOF = function() {
    return this.getToken(FlinkSqlParser.EOF, 0);
};

StatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterStatement(this);
	}
};

StatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitStatement(this);
	}
};

StatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.StatementContext = StatementContext;

FlinkSqlParser.prototype.statement = function() {

    var localctx = new StatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 2, FlinkSqlParser.RULE_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 235;
        this.sqlStatements();
        this.state = 236;
        this.match(FlinkSqlParser.EOF);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SqlStatementsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_sqlStatements;
    return this;
}

SqlStatementsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SqlStatementsContext.prototype.constructor = SqlStatementsContext;

SqlStatementsContext.prototype.sqlStatement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(SqlStatementContext);
    } else {
        return this.getTypedRuleContext(SqlStatementContext,i);
    }
};

SqlStatementsContext.prototype.emptyStatement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(EmptyStatementContext);
    } else {
        return this.getTypedRuleContext(EmptyStatementContext,i);
    }
};

SqlStatementsContext.prototype.SEMICOLON = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.SEMICOLON);
    } else {
        return this.getToken(FlinkSqlParser.SEMICOLON, i);
    }
};


SqlStatementsContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSqlStatements(this);
	}
};

SqlStatementsContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSqlStatements(this);
	}
};

SqlStatementsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSqlStatements(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.SqlStatementsContext = SqlStatementsContext;

FlinkSqlParser.prototype.sqlStatements = function() {

    var localctx = new SqlStatementsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 4, FlinkSqlParser.RULE_sqlStatements);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 245;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===FlinkSqlParser.SELECT || ((((_la - 69)) & ~0x1f) == 0 && ((1 << (_la - 69)) & ((1 << (FlinkSqlParser.VALUES - 69)) | (1 << (FlinkSqlParser.CREATE - 69)) | (1 << (FlinkSqlParser.INSERT - 69)) | (1 << (FlinkSqlParser.DESCRIBE - 69)) | (1 << (FlinkSqlParser.EXPLAIN - 69)) | (1 << (FlinkSqlParser.SHOW - 69)) | (1 << (FlinkSqlParser.USE - 69)) | (1 << (FlinkSqlParser.DROP - 69)) | (1 << (FlinkSqlParser.ALTER - 69)))) !== 0) || _la===FlinkSqlParser.LR_BRACKET || _la===FlinkSqlParser.SEMICOLON) {
            this.state = 243;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case FlinkSqlParser.SELECT:
            case FlinkSqlParser.VALUES:
            case FlinkSqlParser.CREATE:
            case FlinkSqlParser.INSERT:
            case FlinkSqlParser.DESCRIBE:
            case FlinkSqlParser.EXPLAIN:
            case FlinkSqlParser.SHOW:
            case FlinkSqlParser.USE:
            case FlinkSqlParser.DROP:
            case FlinkSqlParser.ALTER:
            case FlinkSqlParser.LR_BRACKET:
                this.state = 238;
                this.sqlStatement();
                this.state = 240;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,0,this._ctx);
                if(la_===1) {
                    this.state = 239;
                    this.match(FlinkSqlParser.SEMICOLON);

                }
                break;
            case FlinkSqlParser.SEMICOLON:
                this.state = 242;
                this.emptyStatement();
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 247;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SqlStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_sqlStatement;
    return this;
}

SqlStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SqlStatementContext.prototype.constructor = SqlStatementContext;

SqlStatementContext.prototype.ddlStatement = function() {
    return this.getTypedRuleContext(DdlStatementContext,0);
};

SqlStatementContext.prototype.dmlStatement = function() {
    return this.getTypedRuleContext(DmlStatementContext,0);
};

SqlStatementContext.prototype.describeStatement = function() {
    return this.getTypedRuleContext(DescribeStatementContext,0);
};

SqlStatementContext.prototype.explainStatement = function() {
    return this.getTypedRuleContext(ExplainStatementContext,0);
};

SqlStatementContext.prototype.useStatement = function() {
    return this.getTypedRuleContext(UseStatementContext,0);
};

SqlStatementContext.prototype.showStatememt = function() {
    return this.getTypedRuleContext(ShowStatememtContext,0);
};

SqlStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSqlStatement(this);
	}
};

SqlStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSqlStatement(this);
	}
};

SqlStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSqlStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.SqlStatementContext = SqlStatementContext;

FlinkSqlParser.prototype.sqlStatement = function() {

    var localctx = new SqlStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 6, FlinkSqlParser.RULE_sqlStatement);
    try {
        this.state = 254;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.CREATE:
        case FlinkSqlParser.DROP:
        case FlinkSqlParser.ALTER:
            this.enterOuterAlt(localctx, 1);
            this.state = 248;
            this.ddlStatement();
            break;
        case FlinkSqlParser.SELECT:
        case FlinkSqlParser.VALUES:
        case FlinkSqlParser.INSERT:
        case FlinkSqlParser.LR_BRACKET:
            this.enterOuterAlt(localctx, 2);
            this.state = 249;
            this.dmlStatement();
            break;
        case FlinkSqlParser.DESCRIBE:
            this.enterOuterAlt(localctx, 3);
            this.state = 250;
            this.describeStatement();
            break;
        case FlinkSqlParser.EXPLAIN:
            this.enterOuterAlt(localctx, 4);
            this.state = 251;
            this.explainStatement();
            break;
        case FlinkSqlParser.USE:
            this.enterOuterAlt(localctx, 5);
            this.state = 252;
            this.useStatement();
            break;
        case FlinkSqlParser.SHOW:
            this.enterOuterAlt(localctx, 6);
            this.state = 253;
            this.showStatememt();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function EmptyStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_emptyStatement;
    return this;
}

EmptyStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EmptyStatementContext.prototype.constructor = EmptyStatementContext;

EmptyStatementContext.prototype.SEMICOLON = function() {
    return this.getToken(FlinkSqlParser.SEMICOLON, 0);
};

EmptyStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterEmptyStatement(this);
	}
};

EmptyStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitEmptyStatement(this);
	}
};

EmptyStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitEmptyStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.EmptyStatementContext = EmptyStatementContext;

FlinkSqlParser.prototype.emptyStatement = function() {

    var localctx = new EmptyStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 8, FlinkSqlParser.RULE_emptyStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 256;
        this.match(FlinkSqlParser.SEMICOLON);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DdlStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_ddlStatement;
    return this;
}

DdlStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DdlStatementContext.prototype.constructor = DdlStatementContext;

DdlStatementContext.prototype.createTable = function() {
    return this.getTypedRuleContext(CreateTableContext,0);
};

DdlStatementContext.prototype.createDatabase = function() {
    return this.getTypedRuleContext(CreateDatabaseContext,0);
};

DdlStatementContext.prototype.createView = function() {
    return this.getTypedRuleContext(CreateViewContext,0);
};

DdlStatementContext.prototype.createFunction = function() {
    return this.getTypedRuleContext(CreateFunctionContext,0);
};

DdlStatementContext.prototype.createCatalog = function() {
    return this.getTypedRuleContext(CreateCatalogContext,0);
};

DdlStatementContext.prototype.alterTable = function() {
    return this.getTypedRuleContext(AlterTableContext,0);
};

DdlStatementContext.prototype.alterDatabase = function() {
    return this.getTypedRuleContext(AlterDatabaseContext,0);
};

DdlStatementContext.prototype.alterFunction = function() {
    return this.getTypedRuleContext(AlterFunctionContext,0);
};

DdlStatementContext.prototype.dropTable = function() {
    return this.getTypedRuleContext(DropTableContext,0);
};

DdlStatementContext.prototype.dropDatabase = function() {
    return this.getTypedRuleContext(DropDatabaseContext,0);
};

DdlStatementContext.prototype.dropView = function() {
    return this.getTypedRuleContext(DropViewContext,0);
};

DdlStatementContext.prototype.dropFunction = function() {
    return this.getTypedRuleContext(DropFunctionContext,0);
};

DdlStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDdlStatement(this);
	}
};

DdlStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDdlStatement(this);
	}
};

DdlStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDdlStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.DdlStatementContext = DdlStatementContext;

FlinkSqlParser.prototype.ddlStatement = function() {

    var localctx = new DdlStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 10, FlinkSqlParser.RULE_ddlStatement);
    try {
        this.state = 270;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,4,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 258;
            this.createTable();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 259;
            this.createDatabase();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 260;
            this.createView();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 261;
            this.createFunction();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 262;
            this.createCatalog();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 263;
            this.alterTable();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 264;
            this.alterDatabase();
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 265;
            this.alterFunction();
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 266;
            this.dropTable();
            break;

        case 10:
            this.enterOuterAlt(localctx, 10);
            this.state = 267;
            this.dropDatabase();
            break;

        case 11:
            this.enterOuterAlt(localctx, 11);
            this.state = 268;
            this.dropView();
            break;

        case 12:
            this.enterOuterAlt(localctx, 12);
            this.state = 269;
            this.dropFunction();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DmlStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_dmlStatement;
    return this;
}

DmlStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DmlStatementContext.prototype.constructor = DmlStatementContext;

DmlStatementContext.prototype.queryStatement = function() {
    return this.getTypedRuleContext(QueryStatementContext,0);
};

DmlStatementContext.prototype.insertStatement = function() {
    return this.getTypedRuleContext(InsertStatementContext,0);
};

DmlStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDmlStatement(this);
	}
};

DmlStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDmlStatement(this);
	}
};

DmlStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDmlStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.DmlStatementContext = DmlStatementContext;

FlinkSqlParser.prototype.dmlStatement = function() {

    var localctx = new DmlStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 12, FlinkSqlParser.RULE_dmlStatement);
    try {
        this.state = 274;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.SELECT:
        case FlinkSqlParser.VALUES:
        case FlinkSqlParser.LR_BRACKET:
            this.enterOuterAlt(localctx, 1);
            this.state = 272;
            this.queryStatement(0);
            break;
        case FlinkSqlParser.INSERT:
            this.enterOuterAlt(localctx, 2);
            this.state = 273;
            this.insertStatement();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DescribeStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_describeStatement;
    return this;
}

DescribeStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DescribeStatementContext.prototype.constructor = DescribeStatementContext;

DescribeStatementContext.prototype.DESCRIBE = function() {
    return this.getToken(FlinkSqlParser.DESCRIBE, 0);
};

DescribeStatementContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

DescribeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDescribeStatement(this);
	}
};

DescribeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDescribeStatement(this);
	}
};

DescribeStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDescribeStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.DescribeStatementContext = DescribeStatementContext;

FlinkSqlParser.prototype.describeStatement = function() {

    var localctx = new DescribeStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 14, FlinkSqlParser.RULE_describeStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 276;
        this.match(FlinkSqlParser.DESCRIBE);
        this.state = 277;
        this.uid();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ExplainStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_explainStatement;
    return this;
}

ExplainStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExplainStatementContext.prototype.constructor = ExplainStatementContext;

ExplainStatementContext.prototype.EXPLAIN = function() {
    return this.getToken(FlinkSqlParser.EXPLAIN, 0);
};

ExplainStatementContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

ExplainStatementContext.prototype.FOR = function() {
    return this.getToken(FlinkSqlParser.FOR, 0);
};

ExplainStatementContext.prototype.dmlStatement = function() {
    return this.getTypedRuleContext(DmlStatementContext,0);
};

ExplainStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterExplainStatement(this);
	}
};

ExplainStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitExplainStatement(this);
	}
};

ExplainStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitExplainStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ExplainStatementContext = ExplainStatementContext;

FlinkSqlParser.prototype.explainStatement = function() {

    var localctx = new ExplainStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 16, FlinkSqlParser.RULE_explainStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 279;
        this.match(FlinkSqlParser.EXPLAIN);
        this.state = 280;
        this.identifier();
        this.state = 281;
        this.match(FlinkSqlParser.FOR);
        this.state = 282;
        this.dmlStatement();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function UseStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_useStatement;
    return this;
}

UseStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UseStatementContext.prototype.constructor = UseStatementContext;

UseStatementContext.prototype.USE = function() {
    return this.getToken(FlinkSqlParser.USE, 0);
};

UseStatementContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

UseStatementContext.prototype.CATALOG = function() {
    return this.getToken(FlinkSqlParser.CATALOG, 0);
};

UseStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterUseStatement(this);
	}
};

UseStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitUseStatement(this);
	}
};

UseStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitUseStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.UseStatementContext = UseStatementContext;

FlinkSqlParser.prototype.useStatement = function() {

    var localctx = new UseStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 18, FlinkSqlParser.RULE_useStatement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 284;
        this.match(FlinkSqlParser.USE);
        this.state = 286;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.CATALOG) {
            this.state = 285;
            this.match(FlinkSqlParser.CATALOG);
        }

        this.state = 288;
        this.uid();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ShowStatememtContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_showStatememt;
    return this;
}

ShowStatememtContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ShowStatememtContext.prototype.constructor = ShowStatememtContext;

ShowStatememtContext.prototype.SHOW = function() {
    return this.getToken(FlinkSqlParser.SHOW, 0);
};

ShowStatememtContext.prototype.CATALOGS = function() {
    return this.getToken(FlinkSqlParser.CATALOGS, 0);
};

ShowStatememtContext.prototype.DATABASES = function() {
    return this.getToken(FlinkSqlParser.DATABASES, 0);
};

ShowStatememtContext.prototype.TABLES = function() {
    return this.getToken(FlinkSqlParser.TABLES, 0);
};

ShowStatememtContext.prototype.FUNCTIONS = function() {
    return this.getToken(FlinkSqlParser.FUNCTIONS, 0);
};

ShowStatememtContext.prototype.VIEWS = function() {
    return this.getToken(FlinkSqlParser.VIEWS, 0);
};

ShowStatememtContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterShowStatememt(this);
	}
};

ShowStatememtContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitShowStatememt(this);
	}
};

ShowStatememtContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitShowStatememt(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ShowStatememtContext = ShowStatememtContext;

FlinkSqlParser.prototype.showStatememt = function() {

    var localctx = new ShowStatememtContext(this, this._ctx, this.state);
    this.enterRule(localctx, 20, FlinkSqlParser.RULE_showStatememt);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 290;
        this.match(FlinkSqlParser.SHOW);
        this.state = 291;
        _la = this._input.LA(1);
        if(!(_la===FlinkSqlParser.TABLES || _la===FlinkSqlParser.FUNCTIONS || _la===FlinkSqlParser.DATABASES || _la===FlinkSqlParser.CATALOGS || _la===FlinkSqlParser.VIEWS)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function CreateTableContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_createTable;
    return this;
}

CreateTableContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CreateTableContext.prototype.constructor = CreateTableContext;

CreateTableContext.prototype.CREATE = function() {
    return this.getToken(FlinkSqlParser.CREATE, 0);
};

CreateTableContext.prototype.TABLE = function() {
    return this.getToken(FlinkSqlParser.TABLE, 0);
};

CreateTableContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

CreateTableContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

CreateTableContext.prototype.columnOptionDefinition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ColumnOptionDefinitionContext);
    } else {
        return this.getTypedRuleContext(ColumnOptionDefinitionContext,i);
    }
};

CreateTableContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

CreateTableContext.prototype.withOption = function() {
    return this.getTypedRuleContext(WithOptionContext,0);
};

CreateTableContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


CreateTableContext.prototype.watermarkDefinition = function() {
    return this.getTypedRuleContext(WatermarkDefinitionContext,0);
};

CreateTableContext.prototype.tableConstraint = function() {
    return this.getTypedRuleContext(TableConstraintContext,0);
};

CreateTableContext.prototype.selfDefinitionClause = function() {
    return this.getTypedRuleContext(SelfDefinitionClauseContext,0);
};

CreateTableContext.prototype.commentSpec = function() {
    return this.getTypedRuleContext(CommentSpecContext,0);
};

CreateTableContext.prototype.partitionDefinition = function() {
    return this.getTypedRuleContext(PartitionDefinitionContext,0);
};

CreateTableContext.prototype.likeDefinition = function() {
    return this.getTypedRuleContext(LikeDefinitionContext,0);
};

CreateTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterCreateTable(this);
	}
};

CreateTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitCreateTable(this);
	}
};

CreateTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitCreateTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.CreateTableContext = CreateTableContext;

FlinkSqlParser.prototype.createTable = function() {

    var localctx = new CreateTableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 22, FlinkSqlParser.RULE_createTable);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 293;
        this.match(FlinkSqlParser.CREATE);
        this.state = 294;
        this.match(FlinkSqlParser.TABLE);
        this.state = 295;
        this.uid();
        this.state = 296;
        this.match(FlinkSqlParser.LR_BRACKET);
        this.state = 297;
        this.columnOptionDefinition();
        this.state = 302;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,7,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 298;
                this.match(FlinkSqlParser.COMMA);
                this.state = 299;
                this.columnOptionDefinition(); 
            }
            this.state = 304;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,7,this._ctx);
        }

        this.state = 307;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,8,this._ctx);
        if(la_===1) {
            this.state = 305;
            this.match(FlinkSqlParser.COMMA);
            this.state = 306;
            this.watermarkDefinition();

        }
        this.state = 311;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,9,this._ctx);
        if(la_===1) {
            this.state = 309;
            this.match(FlinkSqlParser.COMMA);
            this.state = 310;
            this.tableConstraint();

        }
        this.state = 315;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.COMMA) {
            this.state = 313;
            this.match(FlinkSqlParser.COMMA);
            this.state = 314;
            this.selfDefinitionClause();
        }

        this.state = 317;
        this.match(FlinkSqlParser.RR_BRACKET);
        this.state = 319;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.COMMENT) {
            this.state = 318;
            this.commentSpec();
        }

        this.state = 322;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.PARTITIONED) {
            this.state = 321;
            this.partitionDefinition();
        }

        this.state = 324;
        this.withOption();
        this.state = 326;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.LIKE) {
            this.state = 325;
            this.likeDefinition();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ColumnOptionDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_columnOptionDefinition;
    return this;
}

ColumnOptionDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ColumnOptionDefinitionContext.prototype.constructor = ColumnOptionDefinitionContext;

ColumnOptionDefinitionContext.prototype.columnName = function() {
    return this.getTypedRuleContext(ColumnNameContext,0);
};

ColumnOptionDefinitionContext.prototype.columnType = function() {
    return this.getTypedRuleContext(ColumnTypeContext,0);
};

ColumnOptionDefinitionContext.prototype.lengthOneDimension = function() {
    return this.getTypedRuleContext(LengthOneDimensionContext,0);
};

ColumnOptionDefinitionContext.prototype.columnAlias = function() {
    return this.getTypedRuleContext(ColumnAliasContext,0);
};

ColumnOptionDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterColumnOptionDefinition(this);
	}
};

ColumnOptionDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitColumnOptionDefinition(this);
	}
};

ColumnOptionDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitColumnOptionDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ColumnOptionDefinitionContext = ColumnOptionDefinitionContext;

FlinkSqlParser.prototype.columnOptionDefinition = function() {

    var localctx = new ColumnOptionDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 24, FlinkSqlParser.RULE_columnOptionDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 328;
        this.columnName();
        this.state = 329;
        this.columnType();
        this.state = 331;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.LR_BRACKET) {
            this.state = 330;
            this.lengthOneDimension();
        }

        this.state = 334;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FlinkSqlParser.SELECT) | (1 << FlinkSqlParser.FROM) | (1 << FlinkSqlParser.ADD) | (1 << FlinkSqlParser.AS) | (1 << FlinkSqlParser.ALL) | (1 << FlinkSqlParser.ANY) | (1 << FlinkSqlParser.DISTINCT) | (1 << FlinkSqlParser.WHERE) | (1 << FlinkSqlParser.GROUP) | (1 << FlinkSqlParser.BY) | (1 << FlinkSqlParser.GROUPING) | (1 << FlinkSqlParser.SETS) | (1 << FlinkSqlParser.CUBE) | (1 << FlinkSqlParser.ROLLUP) | (1 << FlinkSqlParser.ORDER) | (1 << FlinkSqlParser.HAVING) | (1 << FlinkSqlParser.LIMIT) | (1 << FlinkSqlParser.AT) | (1 << FlinkSqlParser.OR) | (1 << FlinkSqlParser.AND) | (1 << FlinkSqlParser.IN) | (1 << FlinkSqlParser.NOT) | (1 << FlinkSqlParser.NO) | (1 << FlinkSqlParser.EXISTS) | (1 << FlinkSqlParser.BETWEEN) | (1 << FlinkSqlParser.LIKE) | (1 << FlinkSqlParser.RLIKE) | (1 << FlinkSqlParser.IS))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (FlinkSqlParser.TRUE - 32)) | (1 << (FlinkSqlParser.FALSE - 32)) | (1 << (FlinkSqlParser.NULLS - 32)) | (1 << (FlinkSqlParser.ASC - 32)) | (1 << (FlinkSqlParser.DESC - 32)) | (1 << (FlinkSqlParser.FOR - 32)) | (1 << (FlinkSqlParser.INTERVAL - 32)) | (1 << (FlinkSqlParser.CASE - 32)) | (1 << (FlinkSqlParser.WHEN - 32)) | (1 << (FlinkSqlParser.THEN - 32)) | (1 << (FlinkSqlParser.ELSE - 32)) | (1 << (FlinkSqlParser.END - 32)) | (1 << (FlinkSqlParser.OUTER - 32)) | (1 << (FlinkSqlParser.SEMI - 32)) | (1 << (FlinkSqlParser.PIVOT - 32)) | (1 << (FlinkSqlParser.LATERAL - 32)) | (1 << (FlinkSqlParser.WINDOW - 32)) | (1 << (FlinkSqlParser.OVER - 32)) | (1 << (FlinkSqlParser.PARTITION - 32)) | (1 << (FlinkSqlParser.RANGE - 32)) | (1 << (FlinkSqlParser.ROWS - 32)) | (1 << (FlinkSqlParser.UNBOUNDED - 32)) | (1 << (FlinkSqlParser.PRECEDING - 32)) | (1 << (FlinkSqlParser.FOLLOWING - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (FlinkSqlParser.CURRENT - 64)) | (1 << (FlinkSqlParser.FIRST - 64)) | (1 << (FlinkSqlParser.AFTER - 64)) | (1 << (FlinkSqlParser.LAST - 64)) | (1 << (FlinkSqlParser.WITH - 64)) | (1 << (FlinkSqlParser.VALUES - 64)) | (1 << (FlinkSqlParser.CREATE - 64)) | (1 << (FlinkSqlParser.TABLE - 64)) | (1 << (FlinkSqlParser.DIRECTORY - 64)) | (1 << (FlinkSqlParser.VIEW - 64)) | (1 << (FlinkSqlParser.REPLACE - 64)) | (1 << (FlinkSqlParser.INSERT - 64)) | (1 << (FlinkSqlParser.DELETE - 64)) | (1 << (FlinkSqlParser.INTO - 64)) | (1 << (FlinkSqlParser.DESCRIBE - 64)) | (1 << (FlinkSqlParser.EXPLAIN - 64)) | (1 << (FlinkSqlParser.FORMAT - 64)) | (1 << (FlinkSqlParser.LOGICAL - 64)) | (1 << (FlinkSqlParser.CODEGEN - 64)) | (1 << (FlinkSqlParser.COST - 64)) | (1 << (FlinkSqlParser.CAST - 64)) | (1 << (FlinkSqlParser.SHOW - 64)) | (1 << (FlinkSqlParser.TABLES - 64)) | (1 << (FlinkSqlParser.COLUMNS - 64)) | (1 << (FlinkSqlParser.COLUMN - 64)) | (1 << (FlinkSqlParser.USE - 64)) | (1 << (FlinkSqlParser.PARTITIONS - 64)) | (1 << (FlinkSqlParser.FUNCTIONS - 64)) | (1 << (FlinkSqlParser.DROP - 64)) | (1 << (FlinkSqlParser.SETMINUS - 64)))) !== 0) || ((((_la - 97)) & ~0x1f) == 0 && ((1 << (_la - 97)) & ((1 << (FlinkSqlParser.TO - 97)) | (1 << (FlinkSqlParser.TABLESAMPLE - 97)) | (1 << (FlinkSqlParser.STRATIFY - 97)) | (1 << (FlinkSqlParser.ALTER - 97)) | (1 << (FlinkSqlParser.RENAME - 97)) | (1 << (FlinkSqlParser.STRUCT - 97)) | (1 << (FlinkSqlParser.COMMENT - 97)) | (1 << (FlinkSqlParser.SET - 97)) | (1 << (FlinkSqlParser.RESET - 97)) | (1 << (FlinkSqlParser.DATA - 97)) | (1 << (FlinkSqlParser.START - 97)) | (1 << (FlinkSqlParser.TRANSACTION - 97)) | (1 << (FlinkSqlParser.COMMIT - 97)) | (1 << (FlinkSqlParser.ROLLBACK - 97)) | (1 << (FlinkSqlParser.MACRO - 97)) | (1 << (FlinkSqlParser.IGNORE - 97)) | (1 << (FlinkSqlParser.BOTH - 97)) | (1 << (FlinkSqlParser.LEADING - 97)) | (1 << (FlinkSqlParser.TRAILING - 97)) | (1 << (FlinkSqlParser.IF - 97)) | (1 << (FlinkSqlParser.POSITION - 97)) | (1 << (FlinkSqlParser.EXTRACT - 97)) | (1 << (FlinkSqlParser.MINUS - 97)) | (1 << (FlinkSqlParser.DIV - 97)) | (1 << (FlinkSqlParser.PERCENTLIT - 97)) | (1 << (FlinkSqlParser.BUCKET - 97)) | (1 << (FlinkSqlParser.OUT - 97)) | (1 << (FlinkSqlParser.OF - 97)) | (1 << (FlinkSqlParser.SORT - 97)) | (1 << (FlinkSqlParser.CLUSTER - 97)) | (1 << (FlinkSqlParser.DISTRIBUTE - 97)) | (1 << (FlinkSqlParser.OVERWRITE - 97)))) !== 0) || ((((_la - 129)) & ~0x1f) == 0 && ((1 << (_la - 129)) & ((1 << (FlinkSqlParser.TRANSFORM - 129)) | (1 << (FlinkSqlParser.REDUCE - 129)) | (1 << (FlinkSqlParser.SERDE - 129)) | (1 << (FlinkSqlParser.SERDEPROPERTIES - 129)) | (1 << (FlinkSqlParser.RECORDREADER - 129)) | (1 << (FlinkSqlParser.RECORDWRITER - 129)) | (1 << (FlinkSqlParser.DELIMITED - 129)) | (1 << (FlinkSqlParser.FIELDS - 129)) | (1 << (FlinkSqlParser.TERMINATED - 129)) | (1 << (FlinkSqlParser.COLLECTION - 129)) | (1 << (FlinkSqlParser.ITEMS - 129)) | (1 << (FlinkSqlParser.KEYS - 129)) | (1 << (FlinkSqlParser.ESCAPED - 129)) | (1 << (FlinkSqlParser.LINES - 129)) | (1 << (FlinkSqlParser.SEPARATED - 129)) | (1 << (FlinkSqlParser.FUNCTION - 129)) | (1 << (FlinkSqlParser.EXTENDED - 129)) | (1 << (FlinkSqlParser.REFRESH - 129)) | (1 << (FlinkSqlParser.CLEAR - 129)) | (1 << (FlinkSqlParser.CACHE - 129)) | (1 << (FlinkSqlParser.UNCACHE - 129)) | (1 << (FlinkSqlParser.LAZY - 129)) | (1 << (FlinkSqlParser.FORMATTED - 129)) | (1 << (FlinkSqlParser.GLOBAL - 129)) | (1 << (FlinkSqlParser.TEMPORARY - 129)) | (1 << (FlinkSqlParser.OPTIONS - 129)) | (1 << (FlinkSqlParser.UNSET - 129)) | (1 << (FlinkSqlParser.TBLPROPERTIES - 129)) | (1 << (FlinkSqlParser.DBPROPERTIES - 129)) | (1 << (FlinkSqlParser.BUCKETS - 129)) | (1 << (FlinkSqlParser.SKEWED - 129)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (FlinkSqlParser.STORED - 161)) | (1 << (FlinkSqlParser.DIRECTORIES - 161)) | (1 << (FlinkSqlParser.LOCATION - 161)) | (1 << (FlinkSqlParser.EXCHANGE - 161)) | (1 << (FlinkSqlParser.ARCHIVE - 161)) | (1 << (FlinkSqlParser.UNARCHIVE - 161)) | (1 << (FlinkSqlParser.FILEFORMAT - 161)) | (1 << (FlinkSqlParser.TOUCH - 161)) | (1 << (FlinkSqlParser.COMPACT - 161)) | (1 << (FlinkSqlParser.CONCATENATE - 161)) | (1 << (FlinkSqlParser.CHANGE - 161)) | (1 << (FlinkSqlParser.CASCADE - 161)) | (1 << (FlinkSqlParser.CONSTRAINT - 161)) | (1 << (FlinkSqlParser.RESTRICT - 161)) | (1 << (FlinkSqlParser.CLUSTERED - 161)) | (1 << (FlinkSqlParser.SORTED - 161)) | (1 << (FlinkSqlParser.PURGE - 161)) | (1 << (FlinkSqlParser.INPUTFORMAT - 161)) | (1 << (FlinkSqlParser.OUTPUTFORMAT - 161)) | (1 << (FlinkSqlParser.DATABASE - 161)) | (1 << (FlinkSqlParser.DATABASES - 161)) | (1 << (FlinkSqlParser.DFS - 161)) | (1 << (FlinkSqlParser.TRUNCATE - 161)) | (1 << (FlinkSqlParser.ANALYZE - 161)) | (1 << (FlinkSqlParser.COMPUTE - 161)) | (1 << (FlinkSqlParser.LIST - 161)) | (1 << (FlinkSqlParser.STATISTICS - 161)) | (1 << (FlinkSqlParser.PARTITIONED - 161)) | (1 << (FlinkSqlParser.EXTERNAL - 161)) | (1 << (FlinkSqlParser.DEFINED - 161)) | (1 << (FlinkSqlParser.REVOKE - 161)) | (1 << (FlinkSqlParser.GRANT - 161)))) !== 0) || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (FlinkSqlParser.LOCK - 193)) | (1 << (FlinkSqlParser.UNLOCK - 193)) | (1 << (FlinkSqlParser.MSCK - 193)) | (1 << (FlinkSqlParser.REPAIR - 193)) | (1 << (FlinkSqlParser.RECOVER - 193)) | (1 << (FlinkSqlParser.EXPORT - 193)) | (1 << (FlinkSqlParser.IMPORT - 193)) | (1 << (FlinkSqlParser.LOAD - 193)) | (1 << (FlinkSqlParser.ROLE - 193)) | (1 << (FlinkSqlParser.ROLES - 193)) | (1 << (FlinkSqlParser.COMPACTIONS - 193)) | (1 << (FlinkSqlParser.PRINCIPALS - 193)) | (1 << (FlinkSqlParser.TRANSACTIONS - 193)) | (1 << (FlinkSqlParser.INDEX - 193)) | (1 << (FlinkSqlParser.INDEXES - 193)) | (1 << (FlinkSqlParser.LOCKS - 193)) | (1 << (FlinkSqlParser.OPTION - 193)) | (1 << (FlinkSqlParser.ANTI - 193)) | (1 << (FlinkSqlParser.LOCAL - 193)) | (1 << (FlinkSqlParser.INPATH - 193)) | (1 << (FlinkSqlParser.WATERMARK - 193)) | (1 << (FlinkSqlParser.UNNEST - 193)) | (1 << (FlinkSqlParser.MATCH - 193)) | (1 << (FlinkSqlParser.NEXT - 193)) | (1 << (FlinkSqlParser.WITHIN - 193)) | (1 << (FlinkSqlParser.WS - 193)) | (1 << (FlinkSqlParser.SYSTEM - 193)) | (1 << (FlinkSqlParser.INCLUDING - 193)) | (1 << (FlinkSqlParser.EXCLUDING - 193)) | (1 << (FlinkSqlParser.CONSTRAINTS - 193)) | (1 << (FlinkSqlParser.GENERATED - 193)) | (1 << (FlinkSqlParser.CATALOG - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (FlinkSqlParser.LANGUAGE - 225)) | (1 << (FlinkSqlParser.CATALOGS - 225)) | (1 << (FlinkSqlParser.VIEWS - 225)) | (1 << (FlinkSqlParser.PRIMARY - 225)) | (1 << (FlinkSqlParser.KEY - 225)) | (1 << (FlinkSqlParser.PERIOD - 225)) | (1 << (FlinkSqlParser.SYSTEM_TIME - 225)) | (1 << (FlinkSqlParser.STRING - 225)) | (1 << (FlinkSqlParser.ARRAY - 225)) | (1 << (FlinkSqlParser.MAP - 225)) | (1 << (FlinkSqlParser.CHAR - 225)) | (1 << (FlinkSqlParser.VARCHAR - 225)) | (1 << (FlinkSqlParser.BINARY - 225)) | (1 << (FlinkSqlParser.VARBINARY - 225)) | (1 << (FlinkSqlParser.BYTES - 225)) | (1 << (FlinkSqlParser.DECIMAL - 225)) | (1 << (FlinkSqlParser.TINYINT - 225)) | (1 << (FlinkSqlParser.SMALLINT - 225)) | (1 << (FlinkSqlParser.INT - 225)) | (1 << (FlinkSqlParser.BIGINT - 225)) | (1 << (FlinkSqlParser.FLOAT - 225)) | (1 << (FlinkSqlParser.DOUBLE - 225)) | (1 << (FlinkSqlParser.DATE - 225)) | (1 << (FlinkSqlParser.TIME - 225)) | (1 << (FlinkSqlParser.TIMESTAMP - 225)) | (1 << (FlinkSqlParser.MULTISET - 225)) | (1 << (FlinkSqlParser.BOOLEAN - 225)) | (1 << (FlinkSqlParser.RAW - 225)) | (1 << (FlinkSqlParser.ROW - 225)) | (1 << (FlinkSqlParser.NULL - 225)) | (1 << (FlinkSqlParser.DATETIME - 225)))) !== 0) || ((((_la - 286)) & ~0x1f) == 0 && ((1 << (_la - 286)) & ((1 << (FlinkSqlParser.STRING_LITERAL - 286)) | (1 << (FlinkSqlParser.DIG_LITERAL - 286)) | (1 << (FlinkSqlParser.ID_LITERAL - 286)))) !== 0)) {
            this.state = 333;
            this.columnAlias();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ColumnNameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_columnName;
    return this;
}

ColumnNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ColumnNameContext.prototype.constructor = ColumnNameContext;

ColumnNameContext.prototype.plusUid = function() {
    return this.getTypedRuleContext(PlusUidContext,0);
};

ColumnNameContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

ColumnNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterColumnName(this);
	}
};

ColumnNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitColumnName(this);
	}
};

ColumnNameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitColumnName(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ColumnNameContext = ColumnNameContext;

FlinkSqlParser.prototype.columnName = function() {

    var localctx = new ColumnNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 26, FlinkSqlParser.RULE_columnName);
    try {
        this.state = 338;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,16,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 336;
            this.plusUid();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 337;
            this.expression();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ColumnNameListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_columnNameList;
    return this;
}

ColumnNameListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ColumnNameListContext.prototype.constructor = ColumnNameListContext;

ColumnNameListContext.prototype.columnName = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ColumnNameContext);
    } else {
        return this.getTypedRuleContext(ColumnNameContext,i);
    }
};

ColumnNameListContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


ColumnNameListContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterColumnNameList(this);
	}
};

ColumnNameListContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitColumnNameList(this);
	}
};

ColumnNameListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitColumnNameList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ColumnNameListContext = ColumnNameListContext;

FlinkSqlParser.prototype.columnNameList = function() {

    var localctx = new ColumnNameListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 28, FlinkSqlParser.RULE_columnNameList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 340;
        this.columnName();
        this.state = 345;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===FlinkSqlParser.COMMA) {
            this.state = 341;
            this.match(FlinkSqlParser.COMMA);
            this.state = 342;
            this.columnName();
            this.state = 347;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ColumnTypeContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_columnType;
    this.typeName = null; // Token
    return this;
}

ColumnTypeContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ColumnTypeContext.prototype.constructor = ColumnTypeContext;

ColumnTypeContext.prototype.CHAR = function() {
    return this.getToken(FlinkSqlParser.CHAR, 0);
};

ColumnTypeContext.prototype.VARCHAR = function() {
    return this.getToken(FlinkSqlParser.VARCHAR, 0);
};

ColumnTypeContext.prototype.STRING = function() {
    return this.getToken(FlinkSqlParser.STRING, 0);
};

ColumnTypeContext.prototype.BINARY = function() {
    return this.getToken(FlinkSqlParser.BINARY, 0);
};

ColumnTypeContext.prototype.VARBINARY = function() {
    return this.getToken(FlinkSqlParser.VARBINARY, 0);
};

ColumnTypeContext.prototype.BYTES = function() {
    return this.getToken(FlinkSqlParser.BYTES, 0);
};

ColumnTypeContext.prototype.DECIMAL = function() {
    return this.getToken(FlinkSqlParser.DECIMAL, 0);
};

ColumnTypeContext.prototype.TINYINT = function() {
    return this.getToken(FlinkSqlParser.TINYINT, 0);
};

ColumnTypeContext.prototype.SMALLINT = function() {
    return this.getToken(FlinkSqlParser.SMALLINT, 0);
};

ColumnTypeContext.prototype.INT = function() {
    return this.getToken(FlinkSqlParser.INT, 0);
};

ColumnTypeContext.prototype.BIGINT = function() {
    return this.getToken(FlinkSqlParser.BIGINT, 0);
};

ColumnTypeContext.prototype.FLOAT = function() {
    return this.getToken(FlinkSqlParser.FLOAT, 0);
};

ColumnTypeContext.prototype.DOUBLE = function() {
    return this.getToken(FlinkSqlParser.DOUBLE, 0);
};

ColumnTypeContext.prototype.DATE = function() {
    return this.getToken(FlinkSqlParser.DATE, 0);
};

ColumnTypeContext.prototype.TIME = function() {
    return this.getToken(FlinkSqlParser.TIME, 0);
};

ColumnTypeContext.prototype.TIMESTAMP = function() {
    return this.getToken(FlinkSqlParser.TIMESTAMP, 0);
};

ColumnTypeContext.prototype.ARRAY = function() {
    return this.getToken(FlinkSqlParser.ARRAY, 0);
};

ColumnTypeContext.prototype.MAP = function() {
    return this.getToken(FlinkSqlParser.MAP, 0);
};

ColumnTypeContext.prototype.MULTISET = function() {
    return this.getToken(FlinkSqlParser.MULTISET, 0);
};

ColumnTypeContext.prototype.ROW = function() {
    return this.getToken(FlinkSqlParser.ROW, 0);
};

ColumnTypeContext.prototype.BOOLEAN = function() {
    return this.getToken(FlinkSqlParser.BOOLEAN, 0);
};

ColumnTypeContext.prototype.RAW = function() {
    return this.getToken(FlinkSqlParser.RAW, 0);
};

ColumnTypeContext.prototype.NULL = function() {
    return this.getToken(FlinkSqlParser.NULL, 0);
};

ColumnTypeContext.prototype.DATETIME = function() {
    return this.getToken(FlinkSqlParser.DATETIME, 0);
};

ColumnTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterColumnType(this);
	}
};

ColumnTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitColumnType(this);
	}
};

ColumnTypeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitColumnType(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ColumnTypeContext = ColumnTypeContext;

FlinkSqlParser.prototype.columnType = function() {

    var localctx = new ColumnTypeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 30, FlinkSqlParser.RULE_columnType);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 348;
        localctx.typeName = this._input.LT(1);
        _la = this._input.LA(1);
        if(!(((((_la - 232)) & ~0x1f) == 0 && ((1 << (_la - 232)) & ((1 << (FlinkSqlParser.STRING - 232)) | (1 << (FlinkSqlParser.ARRAY - 232)) | (1 << (FlinkSqlParser.MAP - 232)) | (1 << (FlinkSqlParser.CHAR - 232)) | (1 << (FlinkSqlParser.VARCHAR - 232)) | (1 << (FlinkSqlParser.BINARY - 232)) | (1 << (FlinkSqlParser.VARBINARY - 232)) | (1 << (FlinkSqlParser.BYTES - 232)) | (1 << (FlinkSqlParser.DECIMAL - 232)) | (1 << (FlinkSqlParser.TINYINT - 232)) | (1 << (FlinkSqlParser.SMALLINT - 232)) | (1 << (FlinkSqlParser.INT - 232)) | (1 << (FlinkSqlParser.BIGINT - 232)) | (1 << (FlinkSqlParser.FLOAT - 232)) | (1 << (FlinkSqlParser.DOUBLE - 232)) | (1 << (FlinkSqlParser.DATE - 232)) | (1 << (FlinkSqlParser.TIME - 232)) | (1 << (FlinkSqlParser.TIMESTAMP - 232)) | (1 << (FlinkSqlParser.MULTISET - 232)) | (1 << (FlinkSqlParser.BOOLEAN - 232)) | (1 << (FlinkSqlParser.RAW - 232)) | (1 << (FlinkSqlParser.ROW - 232)) | (1 << (FlinkSqlParser.NULL - 232)) | (1 << (FlinkSqlParser.DATETIME - 232)))) !== 0))) {
            localctx.typeName = this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function LengthOneDimensionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_lengthOneDimension;
    return this;
}

LengthOneDimensionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LengthOneDimensionContext.prototype.constructor = LengthOneDimensionContext;

LengthOneDimensionContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

LengthOneDimensionContext.prototype.decimalLiteral = function() {
    return this.getTypedRuleContext(DecimalLiteralContext,0);
};

LengthOneDimensionContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

LengthOneDimensionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterLengthOneDimension(this);
	}
};

LengthOneDimensionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitLengthOneDimension(this);
	}
};

LengthOneDimensionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitLengthOneDimension(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.LengthOneDimensionContext = LengthOneDimensionContext;

FlinkSqlParser.prototype.lengthOneDimension = function() {

    var localctx = new LengthOneDimensionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 32, FlinkSqlParser.RULE_lengthOneDimension);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 350;
        this.match(FlinkSqlParser.LR_BRACKET);
        this.state = 351;
        this.decimalLiteral();
        this.state = 352;
        this.match(FlinkSqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function CommentSpecContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_commentSpec;
    return this;
}

CommentSpecContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CommentSpecContext.prototype.constructor = CommentSpecContext;

CommentSpecContext.prototype.COMMENT = function() {
    return this.getToken(FlinkSqlParser.COMMENT, 0);
};

CommentSpecContext.prototype.STRING_LITERAL = function() {
    return this.getToken(FlinkSqlParser.STRING_LITERAL, 0);
};

CommentSpecContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterCommentSpec(this);
	}
};

CommentSpecContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitCommentSpec(this);
	}
};

CommentSpecContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitCommentSpec(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.CommentSpecContext = CommentSpecContext;

FlinkSqlParser.prototype.commentSpec = function() {

    var localctx = new CommentSpecContext(this, this._ctx, this.state);
    this.enterRule(localctx, 34, FlinkSqlParser.RULE_commentSpec);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 354;
        this.match(FlinkSqlParser.COMMENT);
        this.state = 355;
        this.match(FlinkSqlParser.STRING_LITERAL);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function WatermarkDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_watermarkDefinition;
    return this;
}

WatermarkDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
WatermarkDefinitionContext.prototype.constructor = WatermarkDefinitionContext;

WatermarkDefinitionContext.prototype.WATERMARK = function() {
    return this.getToken(FlinkSqlParser.WATERMARK, 0);
};

WatermarkDefinitionContext.prototype.FOR = function() {
    return this.getToken(FlinkSqlParser.FOR, 0);
};

WatermarkDefinitionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

WatermarkDefinitionContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

WatermarkDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterWatermarkDefinition(this);
	}
};

WatermarkDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitWatermarkDefinition(this);
	}
};

WatermarkDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitWatermarkDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.WatermarkDefinitionContext = WatermarkDefinitionContext;

FlinkSqlParser.prototype.watermarkDefinition = function() {

    var localctx = new WatermarkDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 36, FlinkSqlParser.RULE_watermarkDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 357;
        this.match(FlinkSqlParser.WATERMARK);
        this.state = 358;
        this.match(FlinkSqlParser.FOR);
        this.state = 359;
        this.expression();
        this.state = 360;
        this.match(FlinkSqlParser.AS);
        this.state = 361;
        this.expression();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TableConstraintContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_tableConstraint;
    return this;
}

TableConstraintContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TableConstraintContext.prototype.constructor = TableConstraintContext;

TableConstraintContext.prototype.PRIMARY = function() {
    return this.getToken(FlinkSqlParser.PRIMARY, 0);
};

TableConstraintContext.prototype.KEY = function() {
    return this.getToken(FlinkSqlParser.KEY, 0);
};

TableConstraintContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

TableConstraintContext.prototype.columnNameList = function() {
    return this.getTypedRuleContext(ColumnNameListContext,0);
};

TableConstraintContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

TableConstraintContext.prototype.CONSTRAINT = function() {
    return this.getToken(FlinkSqlParser.CONSTRAINT, 0);
};

TableConstraintContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

TableConstraintContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTableConstraint(this);
	}
};

TableConstraintContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTableConstraint(this);
	}
};

TableConstraintContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTableConstraint(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TableConstraintContext = TableConstraintContext;

FlinkSqlParser.prototype.tableConstraint = function() {

    var localctx = new TableConstraintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 38, FlinkSqlParser.RULE_tableConstraint);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 365;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.CONSTRAINT) {
            this.state = 363;
            this.match(FlinkSqlParser.CONSTRAINT);
            this.state = 364;
            this.identifier();
        }

        this.state = 367;
        this.match(FlinkSqlParser.PRIMARY);
        this.state = 368;
        this.match(FlinkSqlParser.KEY);
        this.state = 369;
        this.match(FlinkSqlParser.LR_BRACKET);
        this.state = 370;
        this.columnNameList();
        this.state = 371;
        this.match(FlinkSqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SelfDefinitionClauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_selfDefinitionClause;
    return this;
}

SelfDefinitionClauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SelfDefinitionClauseContext.prototype.constructor = SelfDefinitionClauseContext;

SelfDefinitionClauseContext.prototype.PERIOD = function() {
    return this.getToken(FlinkSqlParser.PERIOD, 0);
};

SelfDefinitionClauseContext.prototype.FOR = function() {
    return this.getToken(FlinkSqlParser.FOR, 0);
};

SelfDefinitionClauseContext.prototype.SYSTEM_TIME = function() {
    return this.getToken(FlinkSqlParser.SYSTEM_TIME, 0);
};

SelfDefinitionClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSelfDefinitionClause(this);
	}
};

SelfDefinitionClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSelfDefinitionClause(this);
	}
};

SelfDefinitionClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSelfDefinitionClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.SelfDefinitionClauseContext = SelfDefinitionClauseContext;

FlinkSqlParser.prototype.selfDefinitionClause = function() {

    var localctx = new SelfDefinitionClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 40, FlinkSqlParser.RULE_selfDefinitionClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 373;
        this.match(FlinkSqlParser.PERIOD);
        this.state = 374;
        this.match(FlinkSqlParser.FOR);
        this.state = 375;
        this.match(FlinkSqlParser.SYSTEM_TIME);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function PartitionDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_partitionDefinition;
    return this;
}

PartitionDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PartitionDefinitionContext.prototype.constructor = PartitionDefinitionContext;

PartitionDefinitionContext.prototype.PARTITIONED = function() {
    return this.getToken(FlinkSqlParser.PARTITIONED, 0);
};

PartitionDefinitionContext.prototype.BY = function() {
    return this.getToken(FlinkSqlParser.BY, 0);
};

PartitionDefinitionContext.prototype.transformList = function() {
    return this.getTypedRuleContext(TransformListContext,0);
};

PartitionDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterPartitionDefinition(this);
	}
};

PartitionDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitPartitionDefinition(this);
	}
};

PartitionDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitPartitionDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.PartitionDefinitionContext = PartitionDefinitionContext;

FlinkSqlParser.prototype.partitionDefinition = function() {

    var localctx = new PartitionDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 42, FlinkSqlParser.RULE_partitionDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 377;
        this.match(FlinkSqlParser.PARTITIONED);
        this.state = 378;
        this.match(FlinkSqlParser.BY);
        this.state = 379;
        this.transformList();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TransformListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_transformList;
    return this;
}

TransformListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TransformListContext.prototype.constructor = TransformListContext;

TransformListContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

TransformListContext.prototype.transform = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TransformContext);
    } else {
        return this.getTypedRuleContext(TransformContext,i);
    }
};

TransformListContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

TransformListContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


TransformListContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTransformList(this);
	}
};

TransformListContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTransformList(this);
	}
};

TransformListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTransformList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TransformListContext = TransformListContext;

FlinkSqlParser.prototype.transformList = function() {

    var localctx = new TransformListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 44, FlinkSqlParser.RULE_transformList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 381;
        this.match(FlinkSqlParser.LR_BRACKET);
        this.state = 382;
        this.transform();
        this.state = 387;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===FlinkSqlParser.COMMA) {
            this.state = 383;
            this.match(FlinkSqlParser.COMMA);
            this.state = 384;
            this.transform();
            this.state = 389;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 390;
        this.match(FlinkSqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TransformContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_transform;
    return this;
}

TransformContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TransformContext.prototype.constructor = TransformContext;


 
TransformContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};


function IdentityTransformContext(parser, ctx) {
	TransformContext.call(this, parser);
    TransformContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IdentityTransformContext.prototype = Object.create(TransformContext.prototype);
IdentityTransformContext.prototype.constructor = IdentityTransformContext;

FlinkSqlParser.IdentityTransformContext = IdentityTransformContext;

IdentityTransformContext.prototype.qualifiedName = function() {
    return this.getTypedRuleContext(QualifiedNameContext,0);
};
IdentityTransformContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterIdentityTransform(this);
	}
};

IdentityTransformContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitIdentityTransform(this);
	}
};

IdentityTransformContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitIdentityTransform(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ApplyTransformContext(parser, ctx) {
	TransformContext.call(this, parser);
    this.transformName = null; // IdentifierContext;
    TransformContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ApplyTransformContext.prototype = Object.create(TransformContext.prototype);
ApplyTransformContext.prototype.constructor = ApplyTransformContext;

FlinkSqlParser.ApplyTransformContext = ApplyTransformContext;

ApplyTransformContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

ApplyTransformContext.prototype.transformArgument = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TransformArgumentContext);
    } else {
        return this.getTypedRuleContext(TransformArgumentContext,i);
    }
};

ApplyTransformContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

ApplyTransformContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

ApplyTransformContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};

ApplyTransformContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterApplyTransform(this);
	}
};

ApplyTransformContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitApplyTransform(this);
	}
};

ApplyTransformContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitApplyTransform(this);
    } else {
        return visitor.visitChildren(this);
    }
};



FlinkSqlParser.TransformContext = TransformContext;

FlinkSqlParser.prototype.transform = function() {

    var localctx = new TransformContext(this, this._ctx, this.state);
    this.enterRule(localctx, 46, FlinkSqlParser.RULE_transform);
    var _la = 0; // Token type
    try {
        this.state = 405;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,21,this._ctx);
        switch(la_) {
        case 1:
            localctx = new IdentityTransformContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 392;
            this.qualifiedName();
            break;

        case 2:
            localctx = new ApplyTransformContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 393;
            localctx.transformName = this.identifier();
            this.state = 394;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 395;
            this.transformArgument();
            this.state = 400;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 396;
                this.match(FlinkSqlParser.COMMA);
                this.state = 397;
                this.transformArgument();
                this.state = 402;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 403;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TransformArgumentContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_transformArgument;
    return this;
}

TransformArgumentContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TransformArgumentContext.prototype.constructor = TransformArgumentContext;

TransformArgumentContext.prototype.qualifiedName = function() {
    return this.getTypedRuleContext(QualifiedNameContext,0);
};

TransformArgumentContext.prototype.constant = function() {
    return this.getTypedRuleContext(ConstantContext,0);
};

TransformArgumentContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTransformArgument(this);
	}
};

TransformArgumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTransformArgument(this);
	}
};

TransformArgumentContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTransformArgument(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TransformArgumentContext = TransformArgumentContext;

FlinkSqlParser.prototype.transformArgument = function() {

    var localctx = new TransformArgumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 48, FlinkSqlParser.RULE_transformArgument);
    try {
        this.state = 409;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,22,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 407;
            this.qualifiedName();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 408;
            this.constant();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function LikeDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_likeDefinition;
    return this;
}

LikeDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LikeDefinitionContext.prototype.constructor = LikeDefinitionContext;

LikeDefinitionContext.prototype.LIKE = function() {
    return this.getToken(FlinkSqlParser.LIKE, 0);
};

LikeDefinitionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

LikeDefinitionContext.prototype.likeOption = function() {
    return this.getTypedRuleContext(LikeOptionContext,0);
};

LikeDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterLikeDefinition(this);
	}
};

LikeDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitLikeDefinition(this);
	}
};

LikeDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitLikeDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.LikeDefinitionContext = LikeDefinitionContext;

FlinkSqlParser.prototype.likeDefinition = function() {

    var localctx = new LikeDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 50, FlinkSqlParser.RULE_likeDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 411;
        this.match(FlinkSqlParser.LIKE);
        this.state = 412;
        this.identifier();
        this.state = 413;
        this.likeOption();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function LikeOptionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_likeOption;
    return this;
}

LikeOptionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LikeOptionContext.prototype.constructor = LikeOptionContext;

LikeOptionContext.prototype.INCLUDING = function() {
    return this.getToken(FlinkSqlParser.INCLUDING, 0);
};

LikeOptionContext.prototype.EXCLUDING = function() {
    return this.getToken(FlinkSqlParser.EXCLUDING, 0);
};

LikeOptionContext.prototype.ALL = function() {
    return this.getToken(FlinkSqlParser.ALL, 0);
};

LikeOptionContext.prototype.CONSTRAINTS = function() {
    return this.getToken(FlinkSqlParser.CONSTRAINTS, 0);
};

LikeOptionContext.prototype.GENERATED = function() {
    return this.getToken(FlinkSqlParser.GENERATED, 0);
};

LikeOptionContext.prototype.OPTIONS = function() {
    return this.getToken(FlinkSqlParser.OPTIONS, 0);
};

LikeOptionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterLikeOption(this);
	}
};

LikeOptionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitLikeOption(this);
	}
};

LikeOptionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitLikeOption(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.LikeOptionContext = LikeOptionContext;

FlinkSqlParser.prototype.likeOption = function() {

    var localctx = new LikeOptionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 52, FlinkSqlParser.RULE_likeOption);
    var _la = 0; // Token type
    try {
        this.state = 419;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,23,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 415;
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.INCLUDING || _la===FlinkSqlParser.EXCLUDING)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 416;
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.ALL || _la===FlinkSqlParser.CONSTRAINTS)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 417;
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.INCLUDING || _la===FlinkSqlParser.EXCLUDING)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 418;
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.OPTIONS || _la===FlinkSqlParser.GENERATED)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function CreateCatalogContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_createCatalog;
    return this;
}

CreateCatalogContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CreateCatalogContext.prototype.constructor = CreateCatalogContext;

CreateCatalogContext.prototype.CREATE = function() {
    return this.getToken(FlinkSqlParser.CREATE, 0);
};

CreateCatalogContext.prototype.CATALOG = function() {
    return this.getToken(FlinkSqlParser.CATALOG, 0);
};

CreateCatalogContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

CreateCatalogContext.prototype.withOption = function() {
    return this.getTypedRuleContext(WithOptionContext,0);
};

CreateCatalogContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterCreateCatalog(this);
	}
};

CreateCatalogContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitCreateCatalog(this);
	}
};

CreateCatalogContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitCreateCatalog(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.CreateCatalogContext = CreateCatalogContext;

FlinkSqlParser.prototype.createCatalog = function() {

    var localctx = new CreateCatalogContext(this, this._ctx, this.state);
    this.enterRule(localctx, 54, FlinkSqlParser.RULE_createCatalog);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 421;
        this.match(FlinkSqlParser.CREATE);
        this.state = 422;
        this.match(FlinkSqlParser.CATALOG);
        this.state = 423;
        this.uid();
        this.state = 424;
        this.withOption();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function CreateDatabaseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_createDatabase;
    return this;
}

CreateDatabaseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CreateDatabaseContext.prototype.constructor = CreateDatabaseContext;

CreateDatabaseContext.prototype.CREATE = function() {
    return this.getToken(FlinkSqlParser.CREATE, 0);
};

CreateDatabaseContext.prototype.DATABASE = function() {
    return this.getToken(FlinkSqlParser.DATABASE, 0);
};

CreateDatabaseContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

CreateDatabaseContext.prototype.withOption = function() {
    return this.getTypedRuleContext(WithOptionContext,0);
};

CreateDatabaseContext.prototype.ifNotExists = function() {
    return this.getTypedRuleContext(IfNotExistsContext,0);
};

CreateDatabaseContext.prototype.commentSpec = function() {
    return this.getTypedRuleContext(CommentSpecContext,0);
};

CreateDatabaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterCreateDatabase(this);
	}
};

CreateDatabaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitCreateDatabase(this);
	}
};

CreateDatabaseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitCreateDatabase(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.CreateDatabaseContext = CreateDatabaseContext;

FlinkSqlParser.prototype.createDatabase = function() {

    var localctx = new CreateDatabaseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 56, FlinkSqlParser.RULE_createDatabase);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 426;
        this.match(FlinkSqlParser.CREATE);
        this.state = 427;
        this.match(FlinkSqlParser.DATABASE);
        this.state = 429;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.IF) {
            this.state = 428;
            this.ifNotExists();
        }

        this.state = 431;
        this.uid();
        this.state = 433;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.COMMENT) {
            this.state = 432;
            this.commentSpec();
        }

        this.state = 435;
        this.withOption();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function CreateViewContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_createView;
    return this;
}

CreateViewContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CreateViewContext.prototype.constructor = CreateViewContext;

CreateViewContext.prototype.CREATE = function() {
    return this.getToken(FlinkSqlParser.CREATE, 0);
};

CreateViewContext.prototype.VIEW = function() {
    return this.getToken(FlinkSqlParser.VIEW, 0);
};

CreateViewContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

CreateViewContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

CreateViewContext.prototype.queryStatement = function() {
    return this.getTypedRuleContext(QueryStatementContext,0);
};

CreateViewContext.prototype.TEMPORARY = function() {
    return this.getToken(FlinkSqlParser.TEMPORARY, 0);
};

CreateViewContext.prototype.ifNotExists = function() {
    return this.getTypedRuleContext(IfNotExistsContext,0);
};

CreateViewContext.prototype.columnNameList = function() {
    return this.getTypedRuleContext(ColumnNameListContext,0);
};

CreateViewContext.prototype.commentSpec = function() {
    return this.getTypedRuleContext(CommentSpecContext,0);
};

CreateViewContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterCreateView(this);
	}
};

CreateViewContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitCreateView(this);
	}
};

CreateViewContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitCreateView(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.CreateViewContext = CreateViewContext;

FlinkSqlParser.prototype.createView = function() {

    var localctx = new CreateViewContext(this, this._ctx, this.state);
    this.enterRule(localctx, 58, FlinkSqlParser.RULE_createView);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 437;
        this.match(FlinkSqlParser.CREATE);
        this.state = 439;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.TEMPORARY) {
            this.state = 438;
            this.match(FlinkSqlParser.TEMPORARY);
        }

        this.state = 441;
        this.match(FlinkSqlParser.VIEW);
        this.state = 443;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.IF) {
            this.state = 442;
            this.ifNotExists();
        }

        this.state = 445;
        this.uid();
        this.state = 447;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,28,this._ctx);
        if(la_===1) {
            this.state = 446;
            this.columnNameList();

        }
        this.state = 450;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.COMMENT) {
            this.state = 449;
            this.commentSpec();
        }

        this.state = 452;
        this.match(FlinkSqlParser.AS);
        this.state = 453;
        this.queryStatement(0);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function CreateFunctionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_createFunction;
    return this;
}

CreateFunctionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
CreateFunctionContext.prototype.constructor = CreateFunctionContext;

CreateFunctionContext.prototype.CREATE = function() {
    return this.getToken(FlinkSqlParser.CREATE, 0);
};

CreateFunctionContext.prototype.FUNCTION = function() {
    return this.getToken(FlinkSqlParser.FUNCTION, 0);
};

CreateFunctionContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

CreateFunctionContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

CreateFunctionContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

CreateFunctionContext.prototype.TEMPORARY = function() {
    return this.getToken(FlinkSqlParser.TEMPORARY, 0);
};

CreateFunctionContext.prototype.SYSTEM = function() {
    return this.getToken(FlinkSqlParser.SYSTEM, 0);
};

CreateFunctionContext.prototype.ifNotExists = function() {
    return this.getTypedRuleContext(IfNotExistsContext,0);
};

CreateFunctionContext.prototype.LANGUAGE = function() {
    return this.getToken(FlinkSqlParser.LANGUAGE, 0);
};

CreateFunctionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterCreateFunction(this);
	}
};

CreateFunctionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitCreateFunction(this);
	}
};

CreateFunctionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitCreateFunction(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.CreateFunctionContext = CreateFunctionContext;

FlinkSqlParser.prototype.createFunction = function() {

    var localctx = new CreateFunctionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 60, FlinkSqlParser.RULE_createFunction);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 455;
        this.match(FlinkSqlParser.CREATE);
        this.state = 459;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,30,this._ctx);
        switch(la_) {
        case 1:
            this.state = 456;
            this.match(FlinkSqlParser.TEMPORARY);
            break;

        case 2:
            this.state = 457;
            this.match(FlinkSqlParser.TEMPORARY);
            this.state = 458;
            this.match(FlinkSqlParser.SYSTEM);
            break;

        }
        this.state = 461;
        this.match(FlinkSqlParser.FUNCTION);
        this.state = 463;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.IF) {
            this.state = 462;
            this.ifNotExists();
        }

        this.state = 465;
        this.uid();
        this.state = 466;
        this.match(FlinkSqlParser.AS);
        this.state = 467;
        this.identifier();
        this.state = 470;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.LANGUAGE) {
            this.state = 468;
            this.match(FlinkSqlParser.LANGUAGE);
            this.state = 469;
            this.identifier();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AlterTableContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_alterTable;
    return this;
}

AlterTableContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AlterTableContext.prototype.constructor = AlterTableContext;

AlterTableContext.prototype.ALTER = function() {
    return this.getToken(FlinkSqlParser.ALTER, 0);
};

AlterTableContext.prototype.TABLE = function() {
    return this.getToken(FlinkSqlParser.TABLE, 0);
};

AlterTableContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

AlterTableContext.prototype.renameDefinition = function() {
    return this.getTypedRuleContext(RenameDefinitionContext,0);
};

AlterTableContext.prototype.setKeyValueDefinition = function() {
    return this.getTypedRuleContext(SetKeyValueDefinitionContext,0);
};

AlterTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterAlterTable(this);
	}
};

AlterTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitAlterTable(this);
	}
};

AlterTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitAlterTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.AlterTableContext = AlterTableContext;

FlinkSqlParser.prototype.alterTable = function() {

    var localctx = new AlterTableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 62, FlinkSqlParser.RULE_alterTable);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 472;
        this.match(FlinkSqlParser.ALTER);
        this.state = 473;
        this.match(FlinkSqlParser.TABLE);
        this.state = 474;
        this.uid();
        this.state = 477;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.RENAME:
            this.state = 475;
            this.renameDefinition();
            break;
        case FlinkSqlParser.SET:
            this.state = 476;
            this.setKeyValueDefinition();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function RenameDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_renameDefinition;
    return this;
}

RenameDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
RenameDefinitionContext.prototype.constructor = RenameDefinitionContext;

RenameDefinitionContext.prototype.RENAME = function() {
    return this.getToken(FlinkSqlParser.RENAME, 0);
};

RenameDefinitionContext.prototype.TO = function() {
    return this.getToken(FlinkSqlParser.TO, 0);
};

RenameDefinitionContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

RenameDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterRenameDefinition(this);
	}
};

RenameDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitRenameDefinition(this);
	}
};

RenameDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitRenameDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.RenameDefinitionContext = RenameDefinitionContext;

FlinkSqlParser.prototype.renameDefinition = function() {

    var localctx = new RenameDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 64, FlinkSqlParser.RULE_renameDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 479;
        this.match(FlinkSqlParser.RENAME);
        this.state = 480;
        this.match(FlinkSqlParser.TO);
        this.state = 481;
        this.uid();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SetKeyValueDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_setKeyValueDefinition;
    return this;
}

SetKeyValueDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SetKeyValueDefinitionContext.prototype.constructor = SetKeyValueDefinitionContext;

SetKeyValueDefinitionContext.prototype.SET = function() {
    return this.getToken(FlinkSqlParser.SET, 0);
};

SetKeyValueDefinitionContext.prototype.tablePropertyList = function() {
    return this.getTypedRuleContext(TablePropertyListContext,0);
};

SetKeyValueDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSetKeyValueDefinition(this);
	}
};

SetKeyValueDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSetKeyValueDefinition(this);
	}
};

SetKeyValueDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSetKeyValueDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.SetKeyValueDefinitionContext = SetKeyValueDefinitionContext;

FlinkSqlParser.prototype.setKeyValueDefinition = function() {

    var localctx = new SetKeyValueDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 66, FlinkSqlParser.RULE_setKeyValueDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 483;
        this.match(FlinkSqlParser.SET);
        this.state = 484;
        this.tablePropertyList();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AlterDatabaseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_alterDatabase;
    return this;
}

AlterDatabaseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AlterDatabaseContext.prototype.constructor = AlterDatabaseContext;

AlterDatabaseContext.prototype.ALTER = function() {
    return this.getToken(FlinkSqlParser.ALTER, 0);
};

AlterDatabaseContext.prototype.DATABASE = function() {
    return this.getToken(FlinkSqlParser.DATABASE, 0);
};

AlterDatabaseContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

AlterDatabaseContext.prototype.setKeyValueDefinition = function() {
    return this.getTypedRuleContext(SetKeyValueDefinitionContext,0);
};

AlterDatabaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterAlterDatabase(this);
	}
};

AlterDatabaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitAlterDatabase(this);
	}
};

AlterDatabaseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitAlterDatabase(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.AlterDatabaseContext = AlterDatabaseContext;

FlinkSqlParser.prototype.alterDatabase = function() {

    var localctx = new AlterDatabaseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 68, FlinkSqlParser.RULE_alterDatabase);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 486;
        this.match(FlinkSqlParser.ALTER);
        this.state = 487;
        this.match(FlinkSqlParser.DATABASE);
        this.state = 488;
        this.uid();
        this.state = 489;
        this.setKeyValueDefinition();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AlterFunctionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_alterFunction;
    return this;
}

AlterFunctionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AlterFunctionContext.prototype.constructor = AlterFunctionContext;

AlterFunctionContext.prototype.ALTER = function() {
    return this.getToken(FlinkSqlParser.ALTER, 0);
};

AlterFunctionContext.prototype.FUNCTION = function() {
    return this.getToken(FlinkSqlParser.FUNCTION, 0);
};

AlterFunctionContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

AlterFunctionContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

AlterFunctionContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

AlterFunctionContext.prototype.TEMPORARY = function() {
    return this.getToken(FlinkSqlParser.TEMPORARY, 0);
};

AlterFunctionContext.prototype.SYSTEM = function() {
    return this.getToken(FlinkSqlParser.SYSTEM, 0);
};

AlterFunctionContext.prototype.ifExists = function() {
    return this.getTypedRuleContext(IfExistsContext,0);
};

AlterFunctionContext.prototype.LANGUAGE = function() {
    return this.getToken(FlinkSqlParser.LANGUAGE, 0);
};

AlterFunctionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterAlterFunction(this);
	}
};

AlterFunctionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitAlterFunction(this);
	}
};

AlterFunctionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitAlterFunction(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.AlterFunctionContext = AlterFunctionContext;

FlinkSqlParser.prototype.alterFunction = function() {

    var localctx = new AlterFunctionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 70, FlinkSqlParser.RULE_alterFunction);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 491;
        this.match(FlinkSqlParser.ALTER);
        this.state = 495;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,34,this._ctx);
        switch(la_) {
        case 1:
            this.state = 492;
            this.match(FlinkSqlParser.TEMPORARY);
            break;

        case 2:
            this.state = 493;
            this.match(FlinkSqlParser.TEMPORARY);
            this.state = 494;
            this.match(FlinkSqlParser.SYSTEM);
            break;

        }
        this.state = 497;
        this.match(FlinkSqlParser.FUNCTION);
        this.state = 499;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.IF) {
            this.state = 498;
            this.ifExists();
        }

        this.state = 501;
        this.uid();
        this.state = 502;
        this.match(FlinkSqlParser.AS);
        this.state = 503;
        this.identifier();
        this.state = 506;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.LANGUAGE) {
            this.state = 504;
            this.match(FlinkSqlParser.LANGUAGE);
            this.state = 505;
            this.identifier();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DropTableContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_dropTable;
    return this;
}

DropTableContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DropTableContext.prototype.constructor = DropTableContext;

DropTableContext.prototype.DROP = function() {
    return this.getToken(FlinkSqlParser.DROP, 0);
};

DropTableContext.prototype.TABLE = function() {
    return this.getToken(FlinkSqlParser.TABLE, 0);
};

DropTableContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

DropTableContext.prototype.ifExists = function() {
    return this.getTypedRuleContext(IfExistsContext,0);
};

DropTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDropTable(this);
	}
};

DropTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDropTable(this);
	}
};

DropTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDropTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.DropTableContext = DropTableContext;

FlinkSqlParser.prototype.dropTable = function() {

    var localctx = new DropTableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 72, FlinkSqlParser.RULE_dropTable);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 508;
        this.match(FlinkSqlParser.DROP);
        this.state = 509;
        this.match(FlinkSqlParser.TABLE);
        this.state = 511;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.IF) {
            this.state = 510;
            this.ifExists();
        }

        this.state = 513;
        this.uid();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DropDatabaseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_dropDatabase;
    this.dropType = null; // Token
    return this;
}

DropDatabaseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DropDatabaseContext.prototype.constructor = DropDatabaseContext;

DropDatabaseContext.prototype.DROP = function() {
    return this.getToken(FlinkSqlParser.DROP, 0);
};

DropDatabaseContext.prototype.DATABASE = function() {
    return this.getToken(FlinkSqlParser.DATABASE, 0);
};

DropDatabaseContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

DropDatabaseContext.prototype.ifExists = function() {
    return this.getTypedRuleContext(IfExistsContext,0);
};

DropDatabaseContext.prototype.RESTRICT = function() {
    return this.getToken(FlinkSqlParser.RESTRICT, 0);
};

DropDatabaseContext.prototype.CASCADE = function() {
    return this.getToken(FlinkSqlParser.CASCADE, 0);
};

DropDatabaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDropDatabase(this);
	}
};

DropDatabaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDropDatabase(this);
	}
};

DropDatabaseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDropDatabase(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.DropDatabaseContext = DropDatabaseContext;

FlinkSqlParser.prototype.dropDatabase = function() {

    var localctx = new DropDatabaseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 74, FlinkSqlParser.RULE_dropDatabase);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 515;
        this.match(FlinkSqlParser.DROP);
        this.state = 516;
        this.match(FlinkSqlParser.DATABASE);
        this.state = 518;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.IF) {
            this.state = 517;
            this.ifExists();
        }

        this.state = 520;
        this.uid();
        this.state = 522;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.CASCADE || _la===FlinkSqlParser.RESTRICT) {
            this.state = 521;
            localctx.dropType = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.CASCADE || _la===FlinkSqlParser.RESTRICT)) {
                localctx.dropType = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DropViewContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_dropView;
    return this;
}

DropViewContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DropViewContext.prototype.constructor = DropViewContext;

DropViewContext.prototype.DROP = function() {
    return this.getToken(FlinkSqlParser.DROP, 0);
};

DropViewContext.prototype.VIEW = function() {
    return this.getToken(FlinkSqlParser.VIEW, 0);
};

DropViewContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

DropViewContext.prototype.TEMPORARY = function() {
    return this.getToken(FlinkSqlParser.TEMPORARY, 0);
};

DropViewContext.prototype.ifExists = function() {
    return this.getTypedRuleContext(IfExistsContext,0);
};

DropViewContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDropView(this);
	}
};

DropViewContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDropView(this);
	}
};

DropViewContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDropView(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.DropViewContext = DropViewContext;

FlinkSqlParser.prototype.dropView = function() {

    var localctx = new DropViewContext(this, this._ctx, this.state);
    this.enterRule(localctx, 76, FlinkSqlParser.RULE_dropView);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 524;
        this.match(FlinkSqlParser.DROP);
        this.state = 526;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.TEMPORARY) {
            this.state = 525;
            this.match(FlinkSqlParser.TEMPORARY);
        }

        this.state = 528;
        this.match(FlinkSqlParser.VIEW);
        this.state = 530;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.IF) {
            this.state = 529;
            this.ifExists();
        }

        this.state = 532;
        this.uid();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DropFunctionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_dropFunction;
    return this;
}

DropFunctionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DropFunctionContext.prototype.constructor = DropFunctionContext;

DropFunctionContext.prototype.DROP = function() {
    return this.getToken(FlinkSqlParser.DROP, 0);
};

DropFunctionContext.prototype.FUNCTION = function() {
    return this.getToken(FlinkSqlParser.FUNCTION, 0);
};

DropFunctionContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

DropFunctionContext.prototype.TEMPORARY = function() {
    return this.getToken(FlinkSqlParser.TEMPORARY, 0);
};

DropFunctionContext.prototype.SYSTEM = function() {
    return this.getToken(FlinkSqlParser.SYSTEM, 0);
};

DropFunctionContext.prototype.ifExists = function() {
    return this.getTypedRuleContext(IfExistsContext,0);
};

DropFunctionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDropFunction(this);
	}
};

DropFunctionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDropFunction(this);
	}
};

DropFunctionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDropFunction(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.DropFunctionContext = DropFunctionContext;

FlinkSqlParser.prototype.dropFunction = function() {

    var localctx = new DropFunctionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 78, FlinkSqlParser.RULE_dropFunction);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 534;
        this.match(FlinkSqlParser.DROP);
        this.state = 538;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,42,this._ctx);
        if(la_===1) {
            this.state = 535;
            this.match(FlinkSqlParser.TEMPORARY);

        } else if(la_===2) {
            this.state = 536;
            this.match(FlinkSqlParser.TEMPORARY);
            this.state = 537;
            this.match(FlinkSqlParser.SYSTEM);

        }
        this.state = 540;
        this.match(FlinkSqlParser.FUNCTION);
        this.state = 542;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.IF) {
            this.state = 541;
            this.ifExists();
        }

        this.state = 544;
        this.uid();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function InsertStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_insertStatement;
    return this;
}

InsertStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InsertStatementContext.prototype.constructor = InsertStatementContext;

InsertStatementContext.prototype.INSERT = function() {
    return this.getToken(FlinkSqlParser.INSERT, 0);
};

InsertStatementContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

InsertStatementContext.prototype.INTO = function() {
    return this.getToken(FlinkSqlParser.INTO, 0);
};

InsertStatementContext.prototype.OVERWRITE = function() {
    return this.getToken(FlinkSqlParser.OVERWRITE, 0);
};

InsertStatementContext.prototype.queryStatement = function() {
    return this.getTypedRuleContext(QueryStatementContext,0);
};

InsertStatementContext.prototype.valuesDefinition = function() {
    return this.getTypedRuleContext(ValuesDefinitionContext,0);
};

InsertStatementContext.prototype.insertPartitionDefinition = function() {
    return this.getTypedRuleContext(InsertPartitionDefinitionContext,0);
};

InsertStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterInsertStatement(this);
	}
};

InsertStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitInsertStatement(this);
	}
};

InsertStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitInsertStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.InsertStatementContext = InsertStatementContext;

FlinkSqlParser.prototype.insertStatement = function() {

    var localctx = new InsertStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 80, FlinkSqlParser.RULE_insertStatement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 546;
        this.match(FlinkSqlParser.INSERT);
        this.state = 547;
        _la = this._input.LA(1);
        if(!(_la===FlinkSqlParser.INTO || _la===FlinkSqlParser.OVERWRITE)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
        this.state = 548;
        this.uid();
        this.state = 554;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,45,this._ctx);
        switch(la_) {
        case 1:
            this.state = 550;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.PARTITION) {
                this.state = 549;
                this.insertPartitionDefinition();
            }

            this.state = 552;
            this.queryStatement(0);
            break;

        case 2:
            this.state = 553;
            this.valuesDefinition();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function InsertPartitionDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_insertPartitionDefinition;
    return this;
}

InsertPartitionDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InsertPartitionDefinitionContext.prototype.constructor = InsertPartitionDefinitionContext;

InsertPartitionDefinitionContext.prototype.PARTITION = function() {
    return this.getToken(FlinkSqlParser.PARTITION, 0);
};

InsertPartitionDefinitionContext.prototype.tablePropertyList = function() {
    return this.getTypedRuleContext(TablePropertyListContext,0);
};

InsertPartitionDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterInsertPartitionDefinition(this);
	}
};

InsertPartitionDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitInsertPartitionDefinition(this);
	}
};

InsertPartitionDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitInsertPartitionDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.InsertPartitionDefinitionContext = InsertPartitionDefinitionContext;

FlinkSqlParser.prototype.insertPartitionDefinition = function() {

    var localctx = new InsertPartitionDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 82, FlinkSqlParser.RULE_insertPartitionDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 556;
        this.match(FlinkSqlParser.PARTITION);
        this.state = 557;
        this.tablePropertyList();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ValuesDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_valuesDefinition;
    return this;
}

ValuesDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ValuesDefinitionContext.prototype.constructor = ValuesDefinitionContext;

ValuesDefinitionContext.prototype.VALUES = function() {
    return this.getToken(FlinkSqlParser.VALUES, 0);
};

ValuesDefinitionContext.prototype.valuesRowDefinition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ValuesRowDefinitionContext);
    } else {
        return this.getTypedRuleContext(ValuesRowDefinitionContext,i);
    }
};

ValuesDefinitionContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


ValuesDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterValuesDefinition(this);
	}
};

ValuesDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitValuesDefinition(this);
	}
};

ValuesDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitValuesDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ValuesDefinitionContext = ValuesDefinitionContext;

FlinkSqlParser.prototype.valuesDefinition = function() {

    var localctx = new ValuesDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 84, FlinkSqlParser.RULE_valuesDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 559;
        this.match(FlinkSqlParser.VALUES);
        this.state = 560;
        this.valuesRowDefinition();
        this.state = 565;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===FlinkSqlParser.COMMA) {
            this.state = 561;
            this.match(FlinkSqlParser.COMMA);
            this.state = 562;
            this.valuesRowDefinition();
            this.state = 567;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ValuesRowDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_valuesRowDefinition;
    return this;
}

ValuesRowDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ValuesRowDefinitionContext.prototype.constructor = ValuesRowDefinitionContext;

ValuesRowDefinitionContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

ValuesRowDefinitionContext.prototype.constant = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ConstantContext);
    } else {
        return this.getTypedRuleContext(ConstantContext,i);
    }
};

ValuesRowDefinitionContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

ValuesRowDefinitionContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


ValuesRowDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterValuesRowDefinition(this);
	}
};

ValuesRowDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitValuesRowDefinition(this);
	}
};

ValuesRowDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitValuesRowDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ValuesRowDefinitionContext = ValuesRowDefinitionContext;

FlinkSqlParser.prototype.valuesRowDefinition = function() {

    var localctx = new ValuesRowDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 86, FlinkSqlParser.RULE_valuesRowDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 568;
        this.match(FlinkSqlParser.LR_BRACKET);
        this.state = 569;
        this.constant();
        this.state = 574;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===FlinkSqlParser.COMMA) {
            this.state = 570;
            this.match(FlinkSqlParser.COMMA);
            this.state = 571;
            this.constant();
            this.state = 576;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 577;
        this.match(FlinkSqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function QueryStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_queryStatement;
    this.left = null; // QueryStatementContext
    this.operator = null; // Token
    this.right = null; // QueryStatementContext
    return this;
}

QueryStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
QueryStatementContext.prototype.constructor = QueryStatementContext;

QueryStatementContext.prototype.valuesCaluse = function() {
    return this.getTypedRuleContext(ValuesCaluseContext,0);
};

QueryStatementContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

QueryStatementContext.prototype.queryStatement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(QueryStatementContext);
    } else {
        return this.getTypedRuleContext(QueryStatementContext,i);
    }
};

QueryStatementContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

QueryStatementContext.prototype.selectClause = function() {
    return this.getTypedRuleContext(SelectClauseContext,0);
};

QueryStatementContext.prototype.orderByCaluse = function() {
    return this.getTypedRuleContext(OrderByCaluseContext,0);
};

QueryStatementContext.prototype.limitClause = function() {
    return this.getTypedRuleContext(LimitClauseContext,0);
};

QueryStatementContext.prototype.selectStatement = function() {
    return this.getTypedRuleContext(SelectStatementContext,0);
};

QueryStatementContext.prototype.INTERSECT = function() {
    return this.getToken(FlinkSqlParser.INTERSECT, 0);
};

QueryStatementContext.prototype.UNION = function() {
    return this.getToken(FlinkSqlParser.UNION, 0);
};

QueryStatementContext.prototype.EXCEPT = function() {
    return this.getToken(FlinkSqlParser.EXCEPT, 0);
};

QueryStatementContext.prototype.ALL = function() {
    return this.getToken(FlinkSqlParser.ALL, 0);
};

QueryStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterQueryStatement(this);
	}
};

QueryStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitQueryStatement(this);
	}
};

QueryStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitQueryStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};



FlinkSqlParser.prototype.queryStatement = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new QueryStatementContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 88;
    this.enterRecursionRule(localctx, 88, FlinkSqlParser.RULE_queryStatement, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 599;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,52,this._ctx);
        switch(la_) {
        case 1:
            this.state = 580;
            this.valuesCaluse();
            break;

        case 2:
            this.state = 581;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 582;
            this.queryStatement(0);
            this.state = 583;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 3:
            this.state = 585;
            this.selectClause();
            this.state = 587;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,48,this._ctx);
            if(la_===1) {
                this.state = 586;
                this.orderByCaluse();

            }
            this.state = 590;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,49,this._ctx);
            if(la_===1) {
                this.state = 589;
                this.limitClause();

            }
            break;

        case 4:
            this.state = 592;
            this.selectStatement();
            this.state = 594;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,50,this._ctx);
            if(la_===1) {
                this.state = 593;
                this.orderByCaluse();

            }
            this.state = 597;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,51,this._ctx);
            if(la_===1) {
                this.state = 596;
                this.limitClause();

            }
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 615;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,56,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new QueryStatementContext(this, _parentctx, _parentState);
                localctx.left = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_queryStatement);
                this.state = 601;
                if (!( this.precpred(this._ctx, 3))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                }
                this.state = 602;
                localctx.operator = this._input.LT(1);
                _la = this._input.LA(1);
                if(!(((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (FlinkSqlParser.UNION - 93)) | (1 << (FlinkSqlParser.EXCEPT - 93)) | (1 << (FlinkSqlParser.INTERSECT - 93)))) !== 0))) {
                    localctx.operator = this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 604;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===FlinkSqlParser.ALL) {
                    this.state = 603;
                    this.match(FlinkSqlParser.ALL);
                }

                this.state = 606;
                localctx.right = this.queryStatement(0);
                this.state = 608;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,54,this._ctx);
                if(la_===1) {
                    this.state = 607;
                    this.orderByCaluse();

                }
                this.state = 611;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,55,this._ctx);
                if(la_===1) {
                    this.state = 610;
                    this.limitClause();

                } 
            }
            this.state = 617;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,56,this._ctx);
        }

    } catch( error) {
        if(error instanceof antlr4.error.RecognitionException) {
	        localctx.exception = error;
	        this._errHandler.reportError(this, error);
	        this._errHandler.recover(this, error);
	    } else {
	    	throw error;
	    }
    } finally {
        this.unrollRecursionContexts(_parentctx)
    }
    return localctx;
};


function ValuesCaluseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_valuesCaluse;
    return this;
}

ValuesCaluseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ValuesCaluseContext.prototype.constructor = ValuesCaluseContext;

ValuesCaluseContext.prototype.VALUES = function() {
    return this.getToken(FlinkSqlParser.VALUES, 0);
};

ValuesCaluseContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

ValuesCaluseContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


ValuesCaluseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterValuesCaluse(this);
	}
};

ValuesCaluseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitValuesCaluse(this);
	}
};

ValuesCaluseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitValuesCaluse(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ValuesCaluseContext = ValuesCaluseContext;

FlinkSqlParser.prototype.valuesCaluse = function() {

    var localctx = new ValuesCaluseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 90, FlinkSqlParser.RULE_valuesCaluse);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 618;
        this.match(FlinkSqlParser.VALUES);
        this.state = 619;
        this.expression();
        this.state = 624;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,57,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 620;
                this.match(FlinkSqlParser.COMMA);
                this.state = 621;
                this.expression(); 
            }
            this.state = 626;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,57,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SelectStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_selectStatement;
    return this;
}

SelectStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SelectStatementContext.prototype.constructor = SelectStatementContext;

SelectStatementContext.prototype.selectClause = function() {
    return this.getTypedRuleContext(SelectClauseContext,0);
};

SelectStatementContext.prototype.fromClause = function() {
    return this.getTypedRuleContext(FromClauseContext,0);
};

SelectStatementContext.prototype.whereClause = function() {
    return this.getTypedRuleContext(WhereClauseContext,0);
};

SelectStatementContext.prototype.groupByClause = function() {
    return this.getTypedRuleContext(GroupByClauseContext,0);
};

SelectStatementContext.prototype.havingClause = function() {
    return this.getTypedRuleContext(HavingClauseContext,0);
};

SelectStatementContext.prototype.windowClause = function() {
    return this.getTypedRuleContext(WindowClauseContext,0);
};

SelectStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSelectStatement(this);
	}
};

SelectStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSelectStatement(this);
	}
};

SelectStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSelectStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.SelectStatementContext = SelectStatementContext;

FlinkSqlParser.prototype.selectStatement = function() {

    var localctx = new SelectStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 92, FlinkSqlParser.RULE_selectStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 627;
        this.selectClause();
        this.state = 628;
        this.fromClause();
        this.state = 630;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,58,this._ctx);
        if(la_===1) {
            this.state = 629;
            this.whereClause();

        }
        this.state = 633;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,59,this._ctx);
        if(la_===1) {
            this.state = 632;
            this.groupByClause();

        }
        this.state = 636;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,60,this._ctx);
        if(la_===1) {
            this.state = 635;
            this.havingClause();

        }
        this.state = 639;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,61,this._ctx);
        if(la_===1) {
            this.state = 638;
            this.windowClause();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SelectClauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_selectClause;
    return this;
}

SelectClauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SelectClauseContext.prototype.constructor = SelectClauseContext;

SelectClauseContext.prototype.SELECT = function() {
    return this.getToken(FlinkSqlParser.SELECT, 0);
};

SelectClauseContext.prototype.ASTERISK_SIGN = function() {
    return this.getToken(FlinkSqlParser.ASTERISK_SIGN, 0);
};

SelectClauseContext.prototype.projectItemDefinition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ProjectItemDefinitionContext);
    } else {
        return this.getTypedRuleContext(ProjectItemDefinitionContext,i);
    }
};

SelectClauseContext.prototype.setQuantifier = function() {
    return this.getTypedRuleContext(SetQuantifierContext,0);
};

SelectClauseContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


SelectClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSelectClause(this);
	}
};

SelectClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSelectClause(this);
	}
};

SelectClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSelectClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.SelectClauseContext = SelectClauseContext;

FlinkSqlParser.prototype.selectClause = function() {

    var localctx = new SelectClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 94, FlinkSqlParser.RULE_selectClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 641;
        this.match(FlinkSqlParser.SELECT);
        this.state = 643;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,62,this._ctx);
        if(la_===1) {
            this.state = 642;
            this.setQuantifier();

        }
        this.state = 654;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,64,this._ctx);
        switch(la_) {
        case 1:
            this.state = 645;
            this.match(FlinkSqlParser.ASTERISK_SIGN);
            break;

        case 2:
            this.state = 646;
            this.projectItemDefinition();
            this.state = 651;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,63,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 647;
                    this.match(FlinkSqlParser.COMMA);
                    this.state = 648;
                    this.projectItemDefinition(); 
                }
                this.state = 653;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,63,this._ctx);
            }

            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ProjectItemDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_projectItemDefinition;
    return this;
}

ProjectItemDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ProjectItemDefinitionContext.prototype.constructor = ProjectItemDefinitionContext;

ProjectItemDefinitionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

ProjectItemDefinitionContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

ProjectItemDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterProjectItemDefinition(this);
	}
};

ProjectItemDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitProjectItemDefinition(this);
	}
};

ProjectItemDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitProjectItemDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ProjectItemDefinitionContext = ProjectItemDefinitionContext;

FlinkSqlParser.prototype.projectItemDefinition = function() {

    var localctx = new ProjectItemDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 96, FlinkSqlParser.RULE_projectItemDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 656;
        this.expression();
        this.state = 661;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,66,this._ctx);
        if(la_===1) {
            this.state = 658;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,65,this._ctx);
            if(la_===1) {
                this.state = 657;
                this.match(FlinkSqlParser.AS);

            }
            this.state = 660;
            this.expression();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function FromClauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_fromClause;
    return this;
}

FromClauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FromClauseContext.prototype.constructor = FromClauseContext;

FromClauseContext.prototype.FROM = function() {
    return this.getToken(FlinkSqlParser.FROM, 0);
};

FromClauseContext.prototype.tableExpression = function() {
    return this.getTypedRuleContext(TableExpressionContext,0);
};

FromClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterFromClause(this);
	}
};

FromClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitFromClause(this);
	}
};

FromClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitFromClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.FromClauseContext = FromClauseContext;

FlinkSqlParser.prototype.fromClause = function() {

    var localctx = new FromClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 98, FlinkSqlParser.RULE_fromClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 663;
        this.match(FlinkSqlParser.FROM);
        this.state = 664;
        this.tableExpression(0);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TableExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_tableExpression;
    return this;
}

TableExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TableExpressionContext.prototype.constructor = TableExpressionContext;

TableExpressionContext.prototype.tableReference = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TableReferenceContext);
    } else {
        return this.getTypedRuleContext(TableReferenceContext,i);
    }
};

TableExpressionContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


TableExpressionContext.prototype.tableExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TableExpressionContext);
    } else {
        return this.getTypedRuleContext(TableExpressionContext,i);
    }
};

TableExpressionContext.prototype.JOIN = function() {
    return this.getToken(FlinkSqlParser.JOIN, 0);
};

TableExpressionContext.prototype.NATURAL = function() {
    return this.getToken(FlinkSqlParser.NATURAL, 0);
};

TableExpressionContext.prototype.joinCondition = function() {
    return this.getTypedRuleContext(JoinConditionContext,0);
};

TableExpressionContext.prototype.LEFT = function() {
    return this.getToken(FlinkSqlParser.LEFT, 0);
};

TableExpressionContext.prototype.RIGHT = function() {
    return this.getToken(FlinkSqlParser.RIGHT, 0);
};

TableExpressionContext.prototype.FULL = function() {
    return this.getToken(FlinkSqlParser.FULL, 0);
};

TableExpressionContext.prototype.INNER = function() {
    return this.getToken(FlinkSqlParser.INNER, 0);
};

TableExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTableExpression(this);
	}
};

TableExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTableExpression(this);
	}
};

TableExpressionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTableExpression(this);
    } else {
        return visitor.visitChildren(this);
    }
};



FlinkSqlParser.prototype.tableExpression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new TableExpressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 100;
    this.enterRecursionRule(localctx, 100, FlinkSqlParser.RULE_tableExpression, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 667;
        this.tableReference();
        this.state = 672;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,67,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 668;
                this.match(FlinkSqlParser.COMMA);
                this.state = 669;
                this.tableReference(); 
            }
            this.state = 674;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,67,this._ctx);
        }

        this._ctx.stop = this._input.LT(-1);
        this.state = 689;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,71,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new TableExpressionContext(this, _parentctx, _parentState);
                this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_tableExpression);
                this.state = 675;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 677;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===FlinkSqlParser.NATURAL) {
                    this.state = 676;
                    this.match(FlinkSqlParser.NATURAL);
                }

                this.state = 680;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(((((_la - 47)) & ~0x1f) == 0 && ((1 << (_la - 47)) & ((1 << (FlinkSqlParser.INNER - 47)) | (1 << (FlinkSqlParser.LEFT - 47)) | (1 << (FlinkSqlParser.RIGHT - 47)) | (1 << (FlinkSqlParser.FULL - 47)))) !== 0)) {
                    this.state = 679;
                    _la = this._input.LA(1);
                    if(!(((((_la - 47)) & ~0x1f) == 0 && ((1 << (_la - 47)) & ((1 << (FlinkSqlParser.INNER - 47)) | (1 << (FlinkSqlParser.LEFT - 47)) | (1 << (FlinkSqlParser.RIGHT - 47)) | (1 << (FlinkSqlParser.FULL - 47)))) !== 0))) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                }

                this.state = 682;
                this.match(FlinkSqlParser.JOIN);
                this.state = 683;
                this.tableExpression(0);
                this.state = 685;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,70,this._ctx);
                if(la_===1) {
                    this.state = 684;
                    this.joinCondition();

                } 
            }
            this.state = 691;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,71,this._ctx);
        }

    } catch( error) {
        if(error instanceof antlr4.error.RecognitionException) {
	        localctx.exception = error;
	        this._errHandler.reportError(this, error);
	        this._errHandler.recover(this, error);
	    } else {
	    	throw error;
	    }
    } finally {
        this.unrollRecursionContexts(_parentctx)
    }
    return localctx;
};


function TableReferenceContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_tableReference;
    return this;
}

TableReferenceContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TableReferenceContext.prototype.constructor = TableReferenceContext;

TableReferenceContext.prototype.tablePrimary = function() {
    return this.getTypedRuleContext(TablePrimaryContext,0);
};

TableReferenceContext.prototype.tableAlias = function() {
    return this.getTypedRuleContext(TableAliasContext,0);
};

TableReferenceContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTableReference(this);
	}
};

TableReferenceContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTableReference(this);
	}
};

TableReferenceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTableReference(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TableReferenceContext = TableReferenceContext;

FlinkSqlParser.prototype.tableReference = function() {

    var localctx = new TableReferenceContext(this, this._ctx, this.state);
    this.enterRule(localctx, 102, FlinkSqlParser.RULE_tableReference);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 692;
        this.tablePrimary();
        this.state = 694;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,72,this._ctx);
        if(la_===1) {
            this.state = 693;
            this.tableAlias();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TablePrimaryContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_tablePrimary;
    return this;
}

TablePrimaryContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TablePrimaryContext.prototype.constructor = TablePrimaryContext;

TablePrimaryContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

TablePrimaryContext.prototype.TABLE = function() {
    return this.getToken(FlinkSqlParser.TABLE, 0);
};

TablePrimaryContext.prototype.LATERAL = function() {
    return this.getToken(FlinkSqlParser.LATERAL, 0);
};

TablePrimaryContext.prototype.LR_BRACKET = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.LR_BRACKET);
    } else {
        return this.getToken(FlinkSqlParser.LR_BRACKET, i);
    }
};


TablePrimaryContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

TablePrimaryContext.prototype.RR_BRACKET = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.RR_BRACKET);
    } else {
        return this.getToken(FlinkSqlParser.RR_BRACKET, i);
    }
};


TablePrimaryContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


TablePrimaryContext.prototype.UNNEST = function() {
    return this.getToken(FlinkSqlParser.UNNEST, 0);
};

TablePrimaryContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTablePrimary(this);
	}
};

TablePrimaryContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTablePrimary(this);
	}
};

TablePrimaryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTablePrimary(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TablePrimaryContext = TablePrimaryContext;

FlinkSqlParser.prototype.tablePrimary = function() {

    var localctx = new TablePrimaryContext(this, this._ctx, this.state);
    this.enterRule(localctx, 104, FlinkSqlParser.RULE_tablePrimary);
    var _la = 0; // Token type
    try {
        this.state = 721;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,75,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 697;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,73,this._ctx);
            if(la_===1) {
                this.state = 696;
                this.match(FlinkSqlParser.TABLE);

            }
            this.state = 699;
            this.expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 700;
            this.match(FlinkSqlParser.LATERAL);
            this.state = 701;
            this.match(FlinkSqlParser.TABLE);
            this.state = 702;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 703;
            this.uid();
            this.state = 704;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 705;
            this.expression();
            this.state = 710;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 706;
                this.match(FlinkSqlParser.COMMA);
                this.state = 707;
                this.expression();
                this.state = 712;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 713;
            this.match(FlinkSqlParser.RR_BRACKET);
            this.state = 714;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 716;
            this.match(FlinkSqlParser.UNNEST);
            this.state = 717;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 718;
            this.expression();
            this.state = 719;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function JoinConditionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_joinCondition;
    return this;
}

JoinConditionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
JoinConditionContext.prototype.constructor = JoinConditionContext;

JoinConditionContext.prototype.ON = function() {
    return this.getToken(FlinkSqlParser.ON, 0);
};

JoinConditionContext.prototype.booleanExpression = function() {
    return this.getTypedRuleContext(BooleanExpressionContext,0);
};

JoinConditionContext.prototype.USING = function() {
    return this.getToken(FlinkSqlParser.USING, 0);
};

JoinConditionContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

JoinConditionContext.prototype.uid = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(UidContext);
    } else {
        return this.getTypedRuleContext(UidContext,i);
    }
};

JoinConditionContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

JoinConditionContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


JoinConditionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterJoinCondition(this);
	}
};

JoinConditionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitJoinCondition(this);
	}
};

JoinConditionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitJoinCondition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.JoinConditionContext = JoinConditionContext;

FlinkSqlParser.prototype.joinCondition = function() {

    var localctx = new JoinConditionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 106, FlinkSqlParser.RULE_joinCondition);
    var _la = 0; // Token type
    try {
        this.state = 737;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.ON:
            this.enterOuterAlt(localctx, 1);
            this.state = 723;
            this.match(FlinkSqlParser.ON);
            this.state = 724;
            this.booleanExpression(0);
            break;
        case FlinkSqlParser.USING:
            this.enterOuterAlt(localctx, 2);
            this.state = 725;
            this.match(FlinkSqlParser.USING);
            this.state = 726;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 727;
            this.uid();
            this.state = 732;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 728;
                this.match(FlinkSqlParser.COMMA);
                this.state = 729;
                this.uid();
                this.state = 734;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 735;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function WhereClauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_whereClause;
    return this;
}

WhereClauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
WhereClauseContext.prototype.constructor = WhereClauseContext;

WhereClauseContext.prototype.WHERE = function() {
    return this.getToken(FlinkSqlParser.WHERE, 0);
};

WhereClauseContext.prototype.booleanExpression = function() {
    return this.getTypedRuleContext(BooleanExpressionContext,0);
};

WhereClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterWhereClause(this);
	}
};

WhereClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitWhereClause(this);
	}
};

WhereClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitWhereClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.WhereClauseContext = WhereClauseContext;

FlinkSqlParser.prototype.whereClause = function() {

    var localctx = new WhereClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 108, FlinkSqlParser.RULE_whereClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 739;
        this.match(FlinkSqlParser.WHERE);
        this.state = 740;
        this.booleanExpression(0);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function GroupByClauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_groupByClause;
    return this;
}

GroupByClauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GroupByClauseContext.prototype.constructor = GroupByClauseContext;

GroupByClauseContext.prototype.GROUP = function() {
    return this.getToken(FlinkSqlParser.GROUP, 0);
};

GroupByClauseContext.prototype.BY = function() {
    return this.getToken(FlinkSqlParser.BY, 0);
};

GroupByClauseContext.prototype.groupItemDefinition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(GroupItemDefinitionContext);
    } else {
        return this.getTypedRuleContext(GroupItemDefinitionContext,i);
    }
};

GroupByClauseContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


GroupByClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterGroupByClause(this);
	}
};

GroupByClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitGroupByClause(this);
	}
};

GroupByClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitGroupByClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.GroupByClauseContext = GroupByClauseContext;

FlinkSqlParser.prototype.groupByClause = function() {

    var localctx = new GroupByClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 110, FlinkSqlParser.RULE_groupByClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 742;
        this.match(FlinkSqlParser.GROUP);
        this.state = 743;
        this.match(FlinkSqlParser.BY);
        this.state = 744;
        this.groupItemDefinition();
        this.state = 749;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,78,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 745;
                this.match(FlinkSqlParser.COMMA);
                this.state = 746;
                this.groupItemDefinition(); 
            }
            this.state = 751;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,78,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function GroupItemDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_groupItemDefinition;
    return this;
}

GroupItemDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
GroupItemDefinitionContext.prototype.constructor = GroupItemDefinitionContext;

GroupItemDefinitionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

GroupItemDefinitionContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

GroupItemDefinitionContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

GroupItemDefinitionContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


GroupItemDefinitionContext.prototype.CUBE = function() {
    return this.getToken(FlinkSqlParser.CUBE, 0);
};

GroupItemDefinitionContext.prototype.ROLLUP = function() {
    return this.getToken(FlinkSqlParser.ROLLUP, 0);
};

GroupItemDefinitionContext.prototype.GROUPING = function() {
    return this.getToken(FlinkSqlParser.GROUPING, 0);
};

GroupItemDefinitionContext.prototype.SETS = function() {
    return this.getToken(FlinkSqlParser.SETS, 0);
};

GroupItemDefinitionContext.prototype.groupItemDefinition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(GroupItemDefinitionContext);
    } else {
        return this.getTypedRuleContext(GroupItemDefinitionContext,i);
    }
};

GroupItemDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterGroupItemDefinition(this);
	}
};

GroupItemDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitGroupItemDefinition(this);
	}
};

GroupItemDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitGroupItemDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.GroupItemDefinitionContext = GroupItemDefinitionContext;

FlinkSqlParser.prototype.groupItemDefinition = function() {

    var localctx = new GroupItemDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 112, FlinkSqlParser.RULE_groupItemDefinition);
    var _la = 0; // Token type
    try {
        this.state = 803;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,83,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 752;
            this.expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 753;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 754;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 755;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 756;
            this.expression();
            this.state = 761;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 757;
                this.match(FlinkSqlParser.COMMA);
                this.state = 758;
                this.expression();
                this.state = 763;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 764;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 766;
            this.match(FlinkSqlParser.CUBE);
            this.state = 767;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 768;
            this.expression();
            this.state = 773;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 769;
                this.match(FlinkSqlParser.COMMA);
                this.state = 770;
                this.expression();
                this.state = 775;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 776;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 778;
            this.match(FlinkSqlParser.ROLLUP);
            this.state = 779;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 780;
            this.expression();
            this.state = 785;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 781;
                this.match(FlinkSqlParser.COMMA);
                this.state = 782;
                this.expression();
                this.state = 787;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 788;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 790;
            this.match(FlinkSqlParser.GROUPING);
            this.state = 791;
            this.match(FlinkSqlParser.SETS);
            this.state = 792;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 793;
            this.groupItemDefinition();
            this.state = 798;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 794;
                this.match(FlinkSqlParser.COMMA);
                this.state = 795;
                this.groupItemDefinition();
                this.state = 800;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 801;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function HavingClauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_havingClause;
    return this;
}

HavingClauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
HavingClauseContext.prototype.constructor = HavingClauseContext;

HavingClauseContext.prototype.HAVING = function() {
    return this.getToken(FlinkSqlParser.HAVING, 0);
};

HavingClauseContext.prototype.booleanExpression = function() {
    return this.getTypedRuleContext(BooleanExpressionContext,0);
};

HavingClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterHavingClause(this);
	}
};

HavingClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitHavingClause(this);
	}
};

HavingClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitHavingClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.HavingClauseContext = HavingClauseContext;

FlinkSqlParser.prototype.havingClause = function() {

    var localctx = new HavingClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 114, FlinkSqlParser.RULE_havingClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 805;
        this.match(FlinkSqlParser.HAVING);
        this.state = 806;
        this.booleanExpression(0);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function OrderByCaluseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_orderByCaluse;
    return this;
}

OrderByCaluseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
OrderByCaluseContext.prototype.constructor = OrderByCaluseContext;

OrderByCaluseContext.prototype.ORDER = function() {
    return this.getToken(FlinkSqlParser.ORDER, 0);
};

OrderByCaluseContext.prototype.BY = function() {
    return this.getToken(FlinkSqlParser.BY, 0);
};

OrderByCaluseContext.prototype.orderItemDefition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(OrderItemDefitionContext);
    } else {
        return this.getTypedRuleContext(OrderItemDefitionContext,i);
    }
};

OrderByCaluseContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


OrderByCaluseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterOrderByCaluse(this);
	}
};

OrderByCaluseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitOrderByCaluse(this);
	}
};

OrderByCaluseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitOrderByCaluse(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.OrderByCaluseContext = OrderByCaluseContext;

FlinkSqlParser.prototype.orderByCaluse = function() {

    var localctx = new OrderByCaluseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 116, FlinkSqlParser.RULE_orderByCaluse);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 808;
        this.match(FlinkSqlParser.ORDER);
        this.state = 809;
        this.match(FlinkSqlParser.BY);
        this.state = 810;
        this.orderItemDefition();
        this.state = 815;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,84,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 811;
                this.match(FlinkSqlParser.COMMA);
                this.state = 812;
                this.orderItemDefition(); 
            }
            this.state = 817;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,84,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function OrderItemDefitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_orderItemDefition;
    return this;
}

OrderItemDefitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
OrderItemDefitionContext.prototype.constructor = OrderItemDefitionContext;

OrderItemDefitionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

OrderItemDefitionContext.prototype.ASC = function() {
    return this.getToken(FlinkSqlParser.ASC, 0);
};

OrderItemDefitionContext.prototype.DESC = function() {
    return this.getToken(FlinkSqlParser.DESC, 0);
};

OrderItemDefitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterOrderItemDefition(this);
	}
};

OrderItemDefitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitOrderItemDefition(this);
	}
};

OrderItemDefitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitOrderItemDefition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.OrderItemDefitionContext = OrderItemDefitionContext;

FlinkSqlParser.prototype.orderItemDefition = function() {

    var localctx = new OrderItemDefitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 118, FlinkSqlParser.RULE_orderItemDefition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 818;
        this.expression();
        this.state = 820;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,85,this._ctx);
        if(la_===1) {
            this.state = 819;
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.ASC || _la===FlinkSqlParser.DESC)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function LimitClauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_limitClause;
    this.limit = null; // ExpressionContext
    return this;
}

LimitClauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LimitClauseContext.prototype.constructor = LimitClauseContext;

LimitClauseContext.prototype.LIMIT = function() {
    return this.getToken(FlinkSqlParser.LIMIT, 0);
};

LimitClauseContext.prototype.ALL = function() {
    return this.getToken(FlinkSqlParser.ALL, 0);
};

LimitClauseContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

LimitClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterLimitClause(this);
	}
};

LimitClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitLimitClause(this);
	}
};

LimitClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitLimitClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.LimitClauseContext = LimitClauseContext;

FlinkSqlParser.prototype.limitClause = function() {

    var localctx = new LimitClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 120, FlinkSqlParser.RULE_limitClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 822;
        this.match(FlinkSqlParser.LIMIT);
        this.state = 825;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,86,this._ctx);
        switch(la_) {
        case 1:
            this.state = 823;
            this.match(FlinkSqlParser.ALL);
            break;

        case 2:
            this.state = 824;
            localctx.limit = this.expression();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function WindowClauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_windowClause;
    return this;
}

WindowClauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
WindowClauseContext.prototype.constructor = WindowClauseContext;

WindowClauseContext.prototype.WINDOW = function() {
    return this.getToken(FlinkSqlParser.WINDOW, 0);
};

WindowClauseContext.prototype.namedWindow = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(NamedWindowContext);
    } else {
        return this.getTypedRuleContext(NamedWindowContext,i);
    }
};

WindowClauseContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


WindowClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterWindowClause(this);
	}
};

WindowClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitWindowClause(this);
	}
};

WindowClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitWindowClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.WindowClauseContext = WindowClauseContext;

FlinkSqlParser.prototype.windowClause = function() {

    var localctx = new WindowClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 122, FlinkSqlParser.RULE_windowClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 827;
        this.match(FlinkSqlParser.WINDOW);
        this.state = 828;
        this.namedWindow();
        this.state = 833;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,87,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 829;
                this.match(FlinkSqlParser.COMMA);
                this.state = 830;
                this.namedWindow(); 
            }
            this.state = 835;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,87,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function NamedWindowContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_namedWindow;
    this.name = null; // ErrorCapturingIdentifierContext
    return this;
}

NamedWindowContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
NamedWindowContext.prototype.constructor = NamedWindowContext;

NamedWindowContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

NamedWindowContext.prototype.windowSpec = function() {
    return this.getTypedRuleContext(WindowSpecContext,0);
};

NamedWindowContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};

NamedWindowContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterNamedWindow(this);
	}
};

NamedWindowContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitNamedWindow(this);
	}
};

NamedWindowContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitNamedWindow(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.NamedWindowContext = NamedWindowContext;

FlinkSqlParser.prototype.namedWindow = function() {

    var localctx = new NamedWindowContext(this, this._ctx, this.state);
    this.enterRule(localctx, 124, FlinkSqlParser.RULE_namedWindow);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 836;
        localctx.name = this.errorCapturingIdentifier();
        this.state = 837;
        this.match(FlinkSqlParser.AS);
        this.state = 838;
        this.windowSpec();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function WindowSpecContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_windowSpec;
    this.name = null; // ErrorCapturingIdentifierContext
    return this;
}

WindowSpecContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
WindowSpecContext.prototype.constructor = WindowSpecContext;

WindowSpecContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

WindowSpecContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

WindowSpecContext.prototype.ORDER = function() {
    return this.getToken(FlinkSqlParser.ORDER, 0);
};

WindowSpecContext.prototype.BY = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.BY);
    } else {
        return this.getToken(FlinkSqlParser.BY, i);
    }
};


WindowSpecContext.prototype.sortItem = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(SortItemContext);
    } else {
        return this.getTypedRuleContext(SortItemContext,i);
    }
};

WindowSpecContext.prototype.PARTITION = function() {
    return this.getToken(FlinkSqlParser.PARTITION, 0);
};

WindowSpecContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

WindowSpecContext.prototype.windowFrame = function() {
    return this.getTypedRuleContext(WindowFrameContext,0);
};

WindowSpecContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};

WindowSpecContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


WindowSpecContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterWindowSpec(this);
	}
};

WindowSpecContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitWindowSpec(this);
	}
};

WindowSpecContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitWindowSpec(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.WindowSpecContext = WindowSpecContext;

FlinkSqlParser.prototype.windowSpec = function() {

    var localctx = new WindowSpecContext(this, this._ctx, this.state);
    this.enterRule(localctx, 126, FlinkSqlParser.RULE_windowSpec);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 841;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FlinkSqlParser.SELECT) | (1 << FlinkSqlParser.FROM) | (1 << FlinkSqlParser.ADD) | (1 << FlinkSqlParser.AS) | (1 << FlinkSqlParser.ALL) | (1 << FlinkSqlParser.ANY) | (1 << FlinkSqlParser.DISTINCT) | (1 << FlinkSqlParser.WHERE) | (1 << FlinkSqlParser.GROUP) | (1 << FlinkSqlParser.BY) | (1 << FlinkSqlParser.GROUPING) | (1 << FlinkSqlParser.SETS) | (1 << FlinkSqlParser.CUBE) | (1 << FlinkSqlParser.ROLLUP) | (1 << FlinkSqlParser.ORDER) | (1 << FlinkSqlParser.HAVING) | (1 << FlinkSqlParser.LIMIT) | (1 << FlinkSqlParser.AT) | (1 << FlinkSqlParser.OR) | (1 << FlinkSqlParser.AND) | (1 << FlinkSqlParser.IN) | (1 << FlinkSqlParser.NOT) | (1 << FlinkSqlParser.NO) | (1 << FlinkSqlParser.EXISTS) | (1 << FlinkSqlParser.BETWEEN) | (1 << FlinkSqlParser.LIKE) | (1 << FlinkSqlParser.RLIKE) | (1 << FlinkSqlParser.IS))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (FlinkSqlParser.TRUE - 32)) | (1 << (FlinkSqlParser.FALSE - 32)) | (1 << (FlinkSqlParser.NULLS - 32)) | (1 << (FlinkSqlParser.ASC - 32)) | (1 << (FlinkSqlParser.DESC - 32)) | (1 << (FlinkSqlParser.FOR - 32)) | (1 << (FlinkSqlParser.INTERVAL - 32)) | (1 << (FlinkSqlParser.CASE - 32)) | (1 << (FlinkSqlParser.WHEN - 32)) | (1 << (FlinkSqlParser.THEN - 32)) | (1 << (FlinkSqlParser.ELSE - 32)) | (1 << (FlinkSqlParser.END - 32)) | (1 << (FlinkSqlParser.JOIN - 32)) | (1 << (FlinkSqlParser.CROSS - 32)) | (1 << (FlinkSqlParser.OUTER - 32)) | (1 << (FlinkSqlParser.INNER - 32)) | (1 << (FlinkSqlParser.LEFT - 32)) | (1 << (FlinkSqlParser.SEMI - 32)) | (1 << (FlinkSqlParser.RIGHT - 32)) | (1 << (FlinkSqlParser.FULL - 32)) | (1 << (FlinkSqlParser.NATURAL - 32)) | (1 << (FlinkSqlParser.ON - 32)) | (1 << (FlinkSqlParser.PIVOT - 32)) | (1 << (FlinkSqlParser.LATERAL - 32)) | (1 << (FlinkSqlParser.WINDOW - 32)) | (1 << (FlinkSqlParser.OVER - 32)) | (1 << (FlinkSqlParser.PARTITION - 32)) | (1 << (FlinkSqlParser.RANGE - 32)) | (1 << (FlinkSqlParser.ROWS - 32)) | (1 << (FlinkSqlParser.UNBOUNDED - 32)) | (1 << (FlinkSqlParser.PRECEDING - 32)) | (1 << (FlinkSqlParser.FOLLOWING - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (FlinkSqlParser.CURRENT - 64)) | (1 << (FlinkSqlParser.FIRST - 64)) | (1 << (FlinkSqlParser.AFTER - 64)) | (1 << (FlinkSqlParser.LAST - 64)) | (1 << (FlinkSqlParser.WITH - 64)) | (1 << (FlinkSqlParser.VALUES - 64)) | (1 << (FlinkSqlParser.CREATE - 64)) | (1 << (FlinkSqlParser.TABLE - 64)) | (1 << (FlinkSqlParser.DIRECTORY - 64)) | (1 << (FlinkSqlParser.VIEW - 64)) | (1 << (FlinkSqlParser.REPLACE - 64)) | (1 << (FlinkSqlParser.INSERT - 64)) | (1 << (FlinkSqlParser.DELETE - 64)) | (1 << (FlinkSqlParser.INTO - 64)) | (1 << (FlinkSqlParser.DESCRIBE - 64)) | (1 << (FlinkSqlParser.EXPLAIN - 64)) | (1 << (FlinkSqlParser.FORMAT - 64)) | (1 << (FlinkSqlParser.LOGICAL - 64)) | (1 << (FlinkSqlParser.CODEGEN - 64)) | (1 << (FlinkSqlParser.COST - 64)) | (1 << (FlinkSqlParser.CAST - 64)) | (1 << (FlinkSqlParser.SHOW - 64)) | (1 << (FlinkSqlParser.TABLES - 64)) | (1 << (FlinkSqlParser.COLUMNS - 64)) | (1 << (FlinkSqlParser.COLUMN - 64)) | (1 << (FlinkSqlParser.USE - 64)) | (1 << (FlinkSqlParser.PARTITIONS - 64)) | (1 << (FlinkSqlParser.FUNCTIONS - 64)) | (1 << (FlinkSqlParser.DROP - 64)) | (1 << (FlinkSqlParser.UNION - 64)) | (1 << (FlinkSqlParser.EXCEPT - 64)) | (1 << (FlinkSqlParser.SETMINUS - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (FlinkSqlParser.INTERSECT - 96)) | (1 << (FlinkSqlParser.TO - 96)) | (1 << (FlinkSqlParser.TABLESAMPLE - 96)) | (1 << (FlinkSqlParser.STRATIFY - 96)) | (1 << (FlinkSqlParser.ALTER - 96)) | (1 << (FlinkSqlParser.RENAME - 96)) | (1 << (FlinkSqlParser.STRUCT - 96)) | (1 << (FlinkSqlParser.COMMENT - 96)) | (1 << (FlinkSqlParser.SET - 96)) | (1 << (FlinkSqlParser.RESET - 96)) | (1 << (FlinkSqlParser.DATA - 96)) | (1 << (FlinkSqlParser.START - 96)) | (1 << (FlinkSqlParser.TRANSACTION - 96)) | (1 << (FlinkSqlParser.COMMIT - 96)) | (1 << (FlinkSqlParser.ROLLBACK - 96)) | (1 << (FlinkSqlParser.MACRO - 96)) | (1 << (FlinkSqlParser.IGNORE - 96)) | (1 << (FlinkSqlParser.BOTH - 96)) | (1 << (FlinkSqlParser.LEADING - 96)) | (1 << (FlinkSqlParser.TRAILING - 96)) | (1 << (FlinkSqlParser.IF - 96)) | (1 << (FlinkSqlParser.POSITION - 96)) | (1 << (FlinkSqlParser.EXTRACT - 96)) | (1 << (FlinkSqlParser.MINUS - 96)) | (1 << (FlinkSqlParser.DIV - 96)) | (1 << (FlinkSqlParser.PERCENTLIT - 96)) | (1 << (FlinkSqlParser.BUCKET - 96)) | (1 << (FlinkSqlParser.OUT - 96)) | (1 << (FlinkSqlParser.OF - 96)) | (1 << (FlinkSqlParser.SORT - 96)) | (1 << (FlinkSqlParser.CLUSTER - 96)) | (1 << (FlinkSqlParser.DISTRIBUTE - 96)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (FlinkSqlParser.OVERWRITE - 128)) | (1 << (FlinkSqlParser.TRANSFORM - 128)) | (1 << (FlinkSqlParser.REDUCE - 128)) | (1 << (FlinkSqlParser.USING - 128)) | (1 << (FlinkSqlParser.SERDE - 128)) | (1 << (FlinkSqlParser.SERDEPROPERTIES - 128)) | (1 << (FlinkSqlParser.RECORDREADER - 128)) | (1 << (FlinkSqlParser.RECORDWRITER - 128)) | (1 << (FlinkSqlParser.DELIMITED - 128)) | (1 << (FlinkSqlParser.FIELDS - 128)) | (1 << (FlinkSqlParser.TERMINATED - 128)) | (1 << (FlinkSqlParser.COLLECTION - 128)) | (1 << (FlinkSqlParser.ITEMS - 128)) | (1 << (FlinkSqlParser.KEYS - 128)) | (1 << (FlinkSqlParser.ESCAPED - 128)) | (1 << (FlinkSqlParser.LINES - 128)) | (1 << (FlinkSqlParser.SEPARATED - 128)) | (1 << (FlinkSqlParser.FUNCTION - 128)) | (1 << (FlinkSqlParser.EXTENDED - 128)) | (1 << (FlinkSqlParser.REFRESH - 128)) | (1 << (FlinkSqlParser.CLEAR - 128)) | (1 << (FlinkSqlParser.CACHE - 128)) | (1 << (FlinkSqlParser.UNCACHE - 128)) | (1 << (FlinkSqlParser.LAZY - 128)) | (1 << (FlinkSqlParser.FORMATTED - 128)) | (1 << (FlinkSqlParser.GLOBAL - 128)) | (1 << (FlinkSqlParser.TEMPORARY - 128)) | (1 << (FlinkSqlParser.OPTIONS - 128)) | (1 << (FlinkSqlParser.UNSET - 128)) | (1 << (FlinkSqlParser.TBLPROPERTIES - 128)) | (1 << (FlinkSqlParser.DBPROPERTIES - 128)) | (1 << (FlinkSqlParser.BUCKETS - 128)))) !== 0) || ((((_la - 160)) & ~0x1f) == 0 && ((1 << (_la - 160)) & ((1 << (FlinkSqlParser.SKEWED - 160)) | (1 << (FlinkSqlParser.STORED - 160)) | (1 << (FlinkSqlParser.DIRECTORIES - 160)) | (1 << (FlinkSqlParser.LOCATION - 160)) | (1 << (FlinkSqlParser.EXCHANGE - 160)) | (1 << (FlinkSqlParser.ARCHIVE - 160)) | (1 << (FlinkSqlParser.UNARCHIVE - 160)) | (1 << (FlinkSqlParser.FILEFORMAT - 160)) | (1 << (FlinkSqlParser.TOUCH - 160)) | (1 << (FlinkSqlParser.COMPACT - 160)) | (1 << (FlinkSqlParser.CONCATENATE - 160)) | (1 << (FlinkSqlParser.CHANGE - 160)) | (1 << (FlinkSqlParser.CASCADE - 160)) | (1 << (FlinkSqlParser.CONSTRAINT - 160)) | (1 << (FlinkSqlParser.RESTRICT - 160)) | (1 << (FlinkSqlParser.CLUSTERED - 160)) | (1 << (FlinkSqlParser.SORTED - 160)) | (1 << (FlinkSqlParser.PURGE - 160)) | (1 << (FlinkSqlParser.INPUTFORMAT - 160)) | (1 << (FlinkSqlParser.OUTPUTFORMAT - 160)) | (1 << (FlinkSqlParser.DATABASE - 160)) | (1 << (FlinkSqlParser.DATABASES - 160)) | (1 << (FlinkSqlParser.DFS - 160)) | (1 << (FlinkSqlParser.TRUNCATE - 160)) | (1 << (FlinkSqlParser.ANALYZE - 160)) | (1 << (FlinkSqlParser.COMPUTE - 160)) | (1 << (FlinkSqlParser.LIST - 160)) | (1 << (FlinkSqlParser.STATISTICS - 160)) | (1 << (FlinkSqlParser.PARTITIONED - 160)) | (1 << (FlinkSqlParser.EXTERNAL - 160)) | (1 << (FlinkSqlParser.DEFINED - 160)) | (1 << (FlinkSqlParser.REVOKE - 160)))) !== 0) || ((((_la - 192)) & ~0x1f) == 0 && ((1 << (_la - 192)) & ((1 << (FlinkSqlParser.GRANT - 192)) | (1 << (FlinkSqlParser.LOCK - 192)) | (1 << (FlinkSqlParser.UNLOCK - 192)) | (1 << (FlinkSqlParser.MSCK - 192)) | (1 << (FlinkSqlParser.REPAIR - 192)) | (1 << (FlinkSqlParser.RECOVER - 192)) | (1 << (FlinkSqlParser.EXPORT - 192)) | (1 << (FlinkSqlParser.IMPORT - 192)) | (1 << (FlinkSqlParser.LOAD - 192)) | (1 << (FlinkSqlParser.ROLE - 192)) | (1 << (FlinkSqlParser.ROLES - 192)) | (1 << (FlinkSqlParser.COMPACTIONS - 192)) | (1 << (FlinkSqlParser.PRINCIPALS - 192)) | (1 << (FlinkSqlParser.TRANSACTIONS - 192)) | (1 << (FlinkSqlParser.INDEX - 192)) | (1 << (FlinkSqlParser.INDEXES - 192)) | (1 << (FlinkSqlParser.LOCKS - 192)) | (1 << (FlinkSqlParser.OPTION - 192)) | (1 << (FlinkSqlParser.ANTI - 192)) | (1 << (FlinkSqlParser.LOCAL - 192)) | (1 << (FlinkSqlParser.INPATH - 192)) | (1 << (FlinkSqlParser.WATERMARK - 192)) | (1 << (FlinkSqlParser.UNNEST - 192)) | (1 << (FlinkSqlParser.MATCH - 192)) | (1 << (FlinkSqlParser.NEXT - 192)) | (1 << (FlinkSqlParser.WITHIN - 192)) | (1 << (FlinkSqlParser.WS - 192)) | (1 << (FlinkSqlParser.SYSTEM - 192)) | (1 << (FlinkSqlParser.INCLUDING - 192)) | (1 << (FlinkSqlParser.EXCLUDING - 192)) | (1 << (FlinkSqlParser.CONSTRAINTS - 192)) | (1 << (FlinkSqlParser.GENERATED - 192)))) !== 0) || ((((_la - 224)) & ~0x1f) == 0 && ((1 << (_la - 224)) & ((1 << (FlinkSqlParser.CATALOG - 224)) | (1 << (FlinkSqlParser.LANGUAGE - 224)) | (1 << (FlinkSqlParser.CATALOGS - 224)) | (1 << (FlinkSqlParser.VIEWS - 224)) | (1 << (FlinkSqlParser.PRIMARY - 224)) | (1 << (FlinkSqlParser.KEY - 224)) | (1 << (FlinkSqlParser.PERIOD - 224)) | (1 << (FlinkSqlParser.SYSTEM_TIME - 224)) | (1 << (FlinkSqlParser.STRING - 224)) | (1 << (FlinkSqlParser.ARRAY - 224)) | (1 << (FlinkSqlParser.MAP - 224)) | (1 << (FlinkSqlParser.CHAR - 224)) | (1 << (FlinkSqlParser.VARCHAR - 224)) | (1 << (FlinkSqlParser.BINARY - 224)) | (1 << (FlinkSqlParser.VARBINARY - 224)) | (1 << (FlinkSqlParser.BYTES - 224)) | (1 << (FlinkSqlParser.DECIMAL - 224)) | (1 << (FlinkSqlParser.TINYINT - 224)) | (1 << (FlinkSqlParser.SMALLINT - 224)) | (1 << (FlinkSqlParser.INT - 224)) | (1 << (FlinkSqlParser.BIGINT - 224)) | (1 << (FlinkSqlParser.FLOAT - 224)) | (1 << (FlinkSqlParser.DOUBLE - 224)) | (1 << (FlinkSqlParser.DATE - 224)) | (1 << (FlinkSqlParser.TIME - 224)) | (1 << (FlinkSqlParser.TIMESTAMP - 224)) | (1 << (FlinkSqlParser.MULTISET - 224)) | (1 << (FlinkSqlParser.BOOLEAN - 224)) | (1 << (FlinkSqlParser.RAW - 224)) | (1 << (FlinkSqlParser.ROW - 224)) | (1 << (FlinkSqlParser.NULL - 224)) | (1 << (FlinkSqlParser.DATETIME - 224)))) !== 0) || ((((_la - 286)) & ~0x1f) == 0 && ((1 << (_la - 286)) & ((1 << (FlinkSqlParser.STRING_LITERAL - 286)) | (1 << (FlinkSqlParser.DIG_LITERAL - 286)) | (1 << (FlinkSqlParser.ID_LITERAL - 286)))) !== 0)) {
            this.state = 840;
            localctx.name = this.errorCapturingIdentifier();
        }

        this.state = 843;
        this.match(FlinkSqlParser.LR_BRACKET);
        this.state = 854;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.ORDER) {
            this.state = 844;
            this.match(FlinkSqlParser.ORDER);
            this.state = 845;
            this.match(FlinkSqlParser.BY);
            this.state = 846;
            this.sortItem();
            this.state = 851;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 847;
                this.match(FlinkSqlParser.COMMA);
                this.state = 848;
                this.sortItem();
                this.state = 853;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 866;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.PARTITION) {
            this.state = 856;
            this.match(FlinkSqlParser.PARTITION);
            this.state = 857;
            this.match(FlinkSqlParser.BY);
            this.state = 858;
            this.expression();
            this.state = 863;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 859;
                this.match(FlinkSqlParser.COMMA);
                this.state = 860;
                this.expression();
                this.state = 865;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 869;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.RANGE || _la===FlinkSqlParser.ROWS) {
            this.state = 868;
            this.windowFrame();
        }

        this.state = 871;
        this.match(FlinkSqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SortItemContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_sortItem;
    this.ordering = null; // Token
    this.nullOrder = null; // Token
    return this;
}

SortItemContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SortItemContext.prototype.constructor = SortItemContext;

SortItemContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

SortItemContext.prototype.NULLS = function() {
    return this.getToken(FlinkSqlParser.NULLS, 0);
};

SortItemContext.prototype.ASC = function() {
    return this.getToken(FlinkSqlParser.ASC, 0);
};

SortItemContext.prototype.DESC = function() {
    return this.getToken(FlinkSqlParser.DESC, 0);
};

SortItemContext.prototype.LAST = function() {
    return this.getToken(FlinkSqlParser.LAST, 0);
};

SortItemContext.prototype.FIRST = function() {
    return this.getToken(FlinkSqlParser.FIRST, 0);
};

SortItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSortItem(this);
	}
};

SortItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSortItem(this);
	}
};

SortItemContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSortItem(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.SortItemContext = SortItemContext;

FlinkSqlParser.prototype.sortItem = function() {

    var localctx = new SortItemContext(this, this._ctx, this.state);
    this.enterRule(localctx, 128, FlinkSqlParser.RULE_sortItem);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 873;
        this.expression();
        this.state = 875;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.ASC || _la===FlinkSqlParser.DESC) {
            this.state = 874;
            localctx.ordering = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.ASC || _la===FlinkSqlParser.DESC)) {
                localctx.ordering = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

        this.state = 879;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.NULLS) {
            this.state = 877;
            this.match(FlinkSqlParser.NULLS);
            this.state = 878;
            localctx.nullOrder = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.FIRST || _la===FlinkSqlParser.LAST)) {
                localctx.nullOrder = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function WindowFrameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_windowFrame;
    return this;
}

WindowFrameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
WindowFrameContext.prototype.constructor = WindowFrameContext;

WindowFrameContext.prototype.RANGE = function() {
    return this.getToken(FlinkSqlParser.RANGE, 0);
};

WindowFrameContext.prototype.frameBound = function() {
    return this.getTypedRuleContext(FrameBoundContext,0);
};

WindowFrameContext.prototype.ROWS = function() {
    return this.getToken(FlinkSqlParser.ROWS, 0);
};

WindowFrameContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterWindowFrame(this);
	}
};

WindowFrameContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitWindowFrame(this);
	}
};

WindowFrameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitWindowFrame(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.WindowFrameContext = WindowFrameContext;

FlinkSqlParser.prototype.windowFrame = function() {

    var localctx = new WindowFrameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 130, FlinkSqlParser.RULE_windowFrame);
    try {
        this.state = 885;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.RANGE:
            this.enterOuterAlt(localctx, 1);
            this.state = 881;
            this.match(FlinkSqlParser.RANGE);
            this.state = 882;
            this.frameBound();
            break;
        case FlinkSqlParser.ROWS:
            this.enterOuterAlt(localctx, 2);
            this.state = 883;
            this.match(FlinkSqlParser.ROWS);
            this.state = 884;
            this.frameBound();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function FrameBoundContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_frameBound;
    return this;
}

FrameBoundContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FrameBoundContext.prototype.constructor = FrameBoundContext;

FrameBoundContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

FrameBoundContext.prototype.PRECEDING = function() {
    return this.getToken(FlinkSqlParser.PRECEDING, 0);
};

FrameBoundContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterFrameBound(this);
	}
};

FrameBoundContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitFrameBound(this);
	}
};

FrameBoundContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitFrameBound(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.FrameBoundContext = FrameBoundContext;

FlinkSqlParser.prototype.frameBound = function() {

    var localctx = new FrameBoundContext(this, this._ctx, this.state);
    this.enterRule(localctx, 132, FlinkSqlParser.RULE_frameBound);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 887;
        this.expression();
        this.state = 888;
        this.match(FlinkSqlParser.PRECEDING);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_expression;
    return this;
}

ExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExpressionContext.prototype.constructor = ExpressionContext;

ExpressionContext.prototype.booleanExpression = function() {
    return this.getTypedRuleContext(BooleanExpressionContext,0);
};

ExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterExpression(this);
	}
};

ExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitExpression(this);
	}
};

ExpressionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitExpression(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ExpressionContext = ExpressionContext;

FlinkSqlParser.prototype.expression = function() {

    var localctx = new ExpressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 134, FlinkSqlParser.RULE_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 890;
        this.booleanExpression(0);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function BooleanExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_booleanExpression;
    return this;
}

BooleanExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BooleanExpressionContext.prototype.constructor = BooleanExpressionContext;


 
BooleanExpressionContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};

function LogicalNotContext(parser, ctx) {
	BooleanExpressionContext.call(this, parser);
    BooleanExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LogicalNotContext.prototype = Object.create(BooleanExpressionContext.prototype);
LogicalNotContext.prototype.constructor = LogicalNotContext;

FlinkSqlParser.LogicalNotContext = LogicalNotContext;

LogicalNotContext.prototype.NOT = function() {
    return this.getToken(FlinkSqlParser.NOT, 0);
};

LogicalNotContext.prototype.booleanExpression = function() {
    return this.getTypedRuleContext(BooleanExpressionContext,0);
};
LogicalNotContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterLogicalNot(this);
	}
};

LogicalNotContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitLogicalNot(this);
	}
};

LogicalNotContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitLogicalNot(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function PredicatedContext(parser, ctx) {
	BooleanExpressionContext.call(this, parser);
    BooleanExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PredicatedContext.prototype = Object.create(BooleanExpressionContext.prototype);
PredicatedContext.prototype.constructor = PredicatedContext;

FlinkSqlParser.PredicatedContext = PredicatedContext;

PredicatedContext.prototype.valueExpression = function() {
    return this.getTypedRuleContext(ValueExpressionContext,0);
};

PredicatedContext.prototype.predicate = function() {
    return this.getTypedRuleContext(PredicateContext,0);
};
PredicatedContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterPredicated(this);
	}
};

PredicatedContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitPredicated(this);
	}
};

PredicatedContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitPredicated(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ExistsContext(parser, ctx) {
	BooleanExpressionContext.call(this, parser);
    BooleanExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ExistsContext.prototype = Object.create(BooleanExpressionContext.prototype);
ExistsContext.prototype.constructor = ExistsContext;

FlinkSqlParser.ExistsContext = ExistsContext;

ExistsContext.prototype.EXISTS = function() {
    return this.getToken(FlinkSqlParser.EXISTS, 0);
};

ExistsContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

ExistsContext.prototype.queryStatement = function() {
    return this.getTypedRuleContext(QueryStatementContext,0);
};

ExistsContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};
ExistsContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterExists(this);
	}
};

ExistsContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitExists(this);
	}
};

ExistsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitExists(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function LogicalBinaryContext(parser, ctx) {
	BooleanExpressionContext.call(this, parser);
    this.left = null; // BooleanExpressionContext;
    this.operator = null; // Token;
    this.right = null; // BooleanExpressionContext;
    BooleanExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LogicalBinaryContext.prototype = Object.create(BooleanExpressionContext.prototype);
LogicalBinaryContext.prototype.constructor = LogicalBinaryContext;

FlinkSqlParser.LogicalBinaryContext = LogicalBinaryContext;

LogicalBinaryContext.prototype.booleanExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(BooleanExpressionContext);
    } else {
        return this.getTypedRuleContext(BooleanExpressionContext,i);
    }
};

LogicalBinaryContext.prototype.AND = function() {
    return this.getToken(FlinkSqlParser.AND, 0);
};

LogicalBinaryContext.prototype.OR = function() {
    return this.getToken(FlinkSqlParser.OR, 0);
};
LogicalBinaryContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterLogicalBinary(this);
	}
};

LogicalBinaryContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitLogicalBinary(this);
	}
};

LogicalBinaryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitLogicalBinary(this);
    } else {
        return visitor.visitChildren(this);
    }
};



FlinkSqlParser.prototype.booleanExpression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new BooleanExpressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 136;
    this.enterRecursionRule(localctx, 136, FlinkSqlParser.RULE_booleanExpression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 904;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,98,this._ctx);
        switch(la_) {
        case 1:
            localctx = new LogicalNotContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 893;
            this.match(FlinkSqlParser.NOT);
            this.state = 894;
            this.booleanExpression(5);
            break;

        case 2:
            localctx = new ExistsContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 895;
            this.match(FlinkSqlParser.EXISTS);
            this.state = 896;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 897;
            this.queryStatement(0);
            this.state = 898;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 3:
            localctx = new PredicatedContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 900;
            this.valueExpression(0);
            this.state = 902;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,97,this._ctx);
            if(la_===1) {
                this.state = 901;
                this.predicate();

            }
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 914;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,100,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                this.state = 912;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,99,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_booleanExpression);
                    this.state = 906;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 907;
                    localctx.operator = this.match(FlinkSqlParser.AND);
                    this.state = 908;
                    localctx.right = this.booleanExpression(3);
                    break;

                case 2:
                    localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_booleanExpression);
                    this.state = 909;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 910;
                    localctx.operator = this.match(FlinkSqlParser.OR);
                    this.state = 911;
                    localctx.right = this.booleanExpression(2);
                    break;

                } 
            }
            this.state = 916;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,100,this._ctx);
        }

    } catch( error) {
        if(error instanceof antlr4.error.RecognitionException) {
	        localctx.exception = error;
	        this._errHandler.reportError(this, error);
	        this._errHandler.recover(this, error);
	    } else {
	    	throw error;
	    }
    } finally {
        this.unrollRecursionContexts(_parentctx)
    }
    return localctx;
};


function PredicateContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_predicate;
    this.kind = null; // Token
    this.lower = null; // ValueExpressionContext
    this.upper = null; // ValueExpressionContext
    this.pattern = null; // ValueExpressionContext
    this.quantifier = null; // Token
    this.right = null; // ValueExpressionContext
    return this;
}

PredicateContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PredicateContext.prototype.constructor = PredicateContext;

PredicateContext.prototype.AND = function() {
    return this.getToken(FlinkSqlParser.AND, 0);
};

PredicateContext.prototype.BETWEEN = function() {
    return this.getToken(FlinkSqlParser.BETWEEN, 0);
};

PredicateContext.prototype.valueExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ValueExpressionContext);
    } else {
        return this.getTypedRuleContext(ValueExpressionContext,i);
    }
};

PredicateContext.prototype.NOT = function() {
    return this.getToken(FlinkSqlParser.NOT, 0);
};

PredicateContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

PredicateContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

PredicateContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

PredicateContext.prototype.IN = function() {
    return this.getToken(FlinkSqlParser.IN, 0);
};

PredicateContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


PredicateContext.prototype.queryStatement = function() {
    return this.getTypedRuleContext(QueryStatementContext,0);
};

PredicateContext.prototype.EXISTS = function() {
    return this.getToken(FlinkSqlParser.EXISTS, 0);
};

PredicateContext.prototype.RLIKE = function() {
    return this.getToken(FlinkSqlParser.RLIKE, 0);
};

PredicateContext.prototype.LIKE = function() {
    return this.getToken(FlinkSqlParser.LIKE, 0);
};

PredicateContext.prototype.ANY = function() {
    return this.getToken(FlinkSqlParser.ANY, 0);
};

PredicateContext.prototype.ALL = function() {
    return this.getToken(FlinkSqlParser.ALL, 0);
};

PredicateContext.prototype.IS = function() {
    return this.getToken(FlinkSqlParser.IS, 0);
};

PredicateContext.prototype.NULL = function() {
    return this.getToken(FlinkSqlParser.NULL, 0);
};

PredicateContext.prototype.TRUE = function() {
    return this.getToken(FlinkSqlParser.TRUE, 0);
};

PredicateContext.prototype.FALSE = function() {
    return this.getToken(FlinkSqlParser.FALSE, 0);
};

PredicateContext.prototype.FROM = function() {
    return this.getToken(FlinkSqlParser.FROM, 0);
};

PredicateContext.prototype.DISTINCT = function() {
    return this.getToken(FlinkSqlParser.DISTINCT, 0);
};

PredicateContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterPredicate(this);
	}
};

PredicateContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitPredicate(this);
	}
};

PredicateContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitPredicate(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.PredicateContext = PredicateContext;

FlinkSqlParser.prototype.predicate = function() {

    var localctx = new PredicateContext(this, this._ctx, this.state);
    this.enterRule(localctx, 138, FlinkSqlParser.RULE_predicate);
    var _la = 0; // Token type
    try {
        this.state = 1000;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,113,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 918;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 917;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 920;
            localctx.kind = this.match(FlinkSqlParser.BETWEEN);
            this.state = 921;
            localctx.lower = this.valueExpression(0);
            this.state = 922;
            this.match(FlinkSqlParser.AND);
            this.state = 923;
            localctx.upper = this.valueExpression(0);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 926;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 925;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 928;
            localctx.kind = this.match(FlinkSqlParser.IN);
            this.state = 929;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 930;
            this.expression();
            this.state = 935;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===FlinkSqlParser.COMMA) {
                this.state = 931;
                this.match(FlinkSqlParser.COMMA);
                this.state = 932;
                this.expression();
                this.state = 937;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 938;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 941;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 940;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 943;
            localctx.kind = this.match(FlinkSqlParser.IN);
            this.state = 944;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 945;
            this.queryStatement(0);
            this.state = 946;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 948;
            localctx.kind = this.match(FlinkSqlParser.EXISTS);
            this.state = 949;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 950;
            this.queryStatement(0);
            this.state = 951;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 954;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 953;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 956;
            localctx.kind = this.match(FlinkSqlParser.RLIKE);
            this.state = 957;
            localctx.pattern = this.valueExpression(0);
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 959;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 958;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 961;
            localctx.kind = this.match(FlinkSqlParser.LIKE);
            this.state = 962;
            localctx.quantifier = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.ALL || _la===FlinkSqlParser.ANY)) {
                localctx.quantifier = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 976;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,108,this._ctx);
            switch(la_) {
            case 1:
                this.state = 963;
                this.match(FlinkSqlParser.LR_BRACKET);
                this.state = 964;
                this.match(FlinkSqlParser.RR_BRACKET);
                break;

            case 2:
                this.state = 965;
                this.match(FlinkSqlParser.LR_BRACKET);
                this.state = 966;
                this.expression();
                this.state = 971;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===FlinkSqlParser.COMMA) {
                    this.state = 967;
                    this.match(FlinkSqlParser.COMMA);
                    this.state = 968;
                    this.expression();
                    this.state = 973;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
                this.state = 974;
                this.match(FlinkSqlParser.RR_BRACKET);
                break;

            }
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 979;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 978;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 981;
            localctx.kind = this.match(FlinkSqlParser.LIKE);
            this.state = 982;
            localctx.pattern = this.valueExpression(0);
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 983;
            this.match(FlinkSqlParser.IS);
            this.state = 985;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 984;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 987;
            localctx.kind = this.match(FlinkSqlParser.NULL);
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 988;
            this.match(FlinkSqlParser.IS);
            this.state = 990;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 989;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 992;
            localctx.kind = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.TRUE || _la===FlinkSqlParser.FALSE)) {
                localctx.kind = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 10:
            this.enterOuterAlt(localctx, 10);
            this.state = 993;
            this.match(FlinkSqlParser.IS);
            this.state = 995;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 994;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 997;
            localctx.kind = this.match(FlinkSqlParser.DISTINCT);
            this.state = 998;
            this.match(FlinkSqlParser.FROM);
            this.state = 999;
            localctx.right = this.valueExpression(0);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ValueExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_valueExpression;
    return this;
}

ValueExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ValueExpressionContext.prototype.constructor = ValueExpressionContext;


 
ValueExpressionContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};

function ValueExpressionDefaultContext(parser, ctx) {
	ValueExpressionContext.call(this, parser);
    ValueExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ValueExpressionDefaultContext.prototype = Object.create(ValueExpressionContext.prototype);
ValueExpressionDefaultContext.prototype.constructor = ValueExpressionDefaultContext;

FlinkSqlParser.ValueExpressionDefaultContext = ValueExpressionDefaultContext;

ValueExpressionDefaultContext.prototype.primaryExpression = function() {
    return this.getTypedRuleContext(PrimaryExpressionContext,0);
};
ValueExpressionDefaultContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterValueExpressionDefault(this);
	}
};

ValueExpressionDefaultContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitValueExpressionDefault(this);
	}
};

ValueExpressionDefaultContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitValueExpressionDefault(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ComparisonContext(parser, ctx) {
	ValueExpressionContext.call(this, parser);
    this.left = null; // ValueExpressionContext;
    this.right = null; // ValueExpressionContext;
    ValueExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ComparisonContext.prototype = Object.create(ValueExpressionContext.prototype);
ComparisonContext.prototype.constructor = ComparisonContext;

FlinkSqlParser.ComparisonContext = ComparisonContext;

ComparisonContext.prototype.comparisonOperator = function() {
    return this.getTypedRuleContext(ComparisonOperatorContext,0);
};

ComparisonContext.prototype.valueExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ValueExpressionContext);
    } else {
        return this.getTypedRuleContext(ValueExpressionContext,i);
    }
};
ComparisonContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterComparison(this);
	}
};

ComparisonContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitComparison(this);
	}
};

ComparisonContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitComparison(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ArithmeticBinaryContext(parser, ctx) {
	ValueExpressionContext.call(this, parser);
    this.left = null; // ValueExpressionContext;
    this.operator = null; // Token;
    this.right = null; // ValueExpressionContext;
    ValueExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ArithmeticBinaryContext.prototype = Object.create(ValueExpressionContext.prototype);
ArithmeticBinaryContext.prototype.constructor = ArithmeticBinaryContext;

FlinkSqlParser.ArithmeticBinaryContext = ArithmeticBinaryContext;

ArithmeticBinaryContext.prototype.valueExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ValueExpressionContext);
    } else {
        return this.getTypedRuleContext(ValueExpressionContext,i);
    }
};

ArithmeticBinaryContext.prototype.ASTERISK_SIGN = function() {
    return this.getToken(FlinkSqlParser.ASTERISK_SIGN, 0);
};

ArithmeticBinaryContext.prototype.SLASH_SIGN = function() {
    return this.getToken(FlinkSqlParser.SLASH_SIGN, 0);
};

ArithmeticBinaryContext.prototype.PENCENT_SIGN = function() {
    return this.getToken(FlinkSqlParser.PENCENT_SIGN, 0);
};

ArithmeticBinaryContext.prototype.DIV = function() {
    return this.getToken(FlinkSqlParser.DIV, 0);
};

ArithmeticBinaryContext.prototype.ADD_SIGN = function() {
    return this.getToken(FlinkSqlParser.ADD_SIGN, 0);
};

ArithmeticBinaryContext.prototype.HYPNEN_SIGN = function() {
    return this.getToken(FlinkSqlParser.HYPNEN_SIGN, 0);
};

ArithmeticBinaryContext.prototype.DOUBLE_VERTICAL_SIGN = function() {
    return this.getToken(FlinkSqlParser.DOUBLE_VERTICAL_SIGN, 0);
};

ArithmeticBinaryContext.prototype.BIT_AND_OP = function() {
    return this.getToken(FlinkSqlParser.BIT_AND_OP, 0);
};

ArithmeticBinaryContext.prototype.BIT_XOR_OP = function() {
    return this.getToken(FlinkSqlParser.BIT_XOR_OP, 0);
};

ArithmeticBinaryContext.prototype.BIT_OR_OP = function() {
    return this.getToken(FlinkSqlParser.BIT_OR_OP, 0);
};
ArithmeticBinaryContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterArithmeticBinary(this);
	}
};

ArithmeticBinaryContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitArithmeticBinary(this);
	}
};

ArithmeticBinaryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitArithmeticBinary(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ArithmeticUnaryContext(parser, ctx) {
	ValueExpressionContext.call(this, parser);
    this.operator = null; // Token;
    ValueExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ArithmeticUnaryContext.prototype = Object.create(ValueExpressionContext.prototype);
ArithmeticUnaryContext.prototype.constructor = ArithmeticUnaryContext;

FlinkSqlParser.ArithmeticUnaryContext = ArithmeticUnaryContext;

ArithmeticUnaryContext.prototype.valueExpression = function() {
    return this.getTypedRuleContext(ValueExpressionContext,0);
};

ArithmeticUnaryContext.prototype.HYPNEN_SIGN = function() {
    return this.getToken(FlinkSqlParser.HYPNEN_SIGN, 0);
};

ArithmeticUnaryContext.prototype.ADD_SIGN = function() {
    return this.getToken(FlinkSqlParser.ADD_SIGN, 0);
};

ArithmeticUnaryContext.prototype.BIT_NOT_OP = function() {
    return this.getToken(FlinkSqlParser.BIT_NOT_OP, 0);
};
ArithmeticUnaryContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterArithmeticUnary(this);
	}
};

ArithmeticUnaryContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitArithmeticUnary(this);
	}
};

ArithmeticUnaryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitArithmeticUnary(this);
    } else {
        return visitor.visitChildren(this);
    }
};



FlinkSqlParser.prototype.valueExpression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new ValueExpressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 140;
    this.enterRecursionRule(localctx, 140, FlinkSqlParser.RULE_valueExpression, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1006;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,114,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ValueExpressionDefaultContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 1003;
            this.primaryExpression(0);
            break;

        case 2:
            localctx = new ArithmeticUnaryContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1004;
            localctx.operator = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(((((_la - 260)) & ~0x1f) == 0 && ((1 << (_la - 260)) & ((1 << (FlinkSqlParser.BIT_NOT_OP - 260)) | (1 << (FlinkSqlParser.HYPNEN_SIGN - 260)) | (1 << (FlinkSqlParser.ADD_SIGN - 260)))) !== 0))) {
                localctx.operator = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1005;
            this.valueExpression(7);
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1029;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,116,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                this.state = 1027;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,115,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression);
                    this.state = 1008;
                    if (!( this.precpred(this._ctx, 6))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
                    }
                    this.state = 1009;
                    localctx.operator = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(_la===FlinkSqlParser.DIV || ((((_la - 276)) & ~0x1f) == 0 && ((1 << (_la - 276)) & ((1 << (FlinkSqlParser.ASTERISK_SIGN - 276)) | (1 << (FlinkSqlParser.PENCENT_SIGN - 276)) | (1 << (FlinkSqlParser.SLASH_SIGN - 276)))) !== 0))) {
                        localctx.operator = this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 1010;
                    localctx.right = this.valueExpression(7);
                    break;

                case 2:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression);
                    this.state = 1011;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 1012;
                    localctx.operator = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(((((_la - 278)) & ~0x1f) == 0 && ((1 << (_la - 278)) & ((1 << (FlinkSqlParser.HYPNEN_SIGN - 278)) | (1 << (FlinkSqlParser.ADD_SIGN - 278)) | (1 << (FlinkSqlParser.DOUBLE_VERTICAL_SIGN - 278)))) !== 0))) {
                        localctx.operator = this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 1013;
                    localctx.right = this.valueExpression(6);
                    break;

                case 3:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression);
                    this.state = 1014;
                    if (!( this.precpred(this._ctx, 4))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
                    }
                    this.state = 1015;
                    localctx.operator = this.match(FlinkSqlParser.BIT_AND_OP);
                    this.state = 1016;
                    localctx.right = this.valueExpression(5);
                    break;

                case 4:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression);
                    this.state = 1017;
                    if (!( this.precpred(this._ctx, 3))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                    }
                    this.state = 1018;
                    localctx.operator = this.match(FlinkSqlParser.BIT_XOR_OP);
                    this.state = 1019;
                    localctx.right = this.valueExpression(4);
                    break;

                case 5:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression);
                    this.state = 1020;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 1021;
                    localctx.operator = this.match(FlinkSqlParser.BIT_OR_OP);
                    this.state = 1022;
                    localctx.right = this.valueExpression(3);
                    break;

                case 6:
                    localctx = new ComparisonContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression);
                    this.state = 1023;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 1024;
                    this.comparisonOperator();
                    this.state = 1025;
                    localctx.right = this.valueExpression(2);
                    break;

                } 
            }
            this.state = 1031;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,116,this._ctx);
        }

    } catch( error) {
        if(error instanceof antlr4.error.RecognitionException) {
	        localctx.exception = error;
	        this._errHandler.reportError(this, error);
	        this._errHandler.recover(this, error);
	    } else {
	    	throw error;
	    }
    } finally {
        this.unrollRecursionContexts(_parentctx)
    }
    return localctx;
};


function PrimaryExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_primaryExpression;
    return this;
}

PrimaryExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PrimaryExpressionContext.prototype.constructor = PrimaryExpressionContext;


 
PrimaryExpressionContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};

function DereferenceContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DereferenceContext.prototype = Object.create(PrimaryExpressionContext.prototype);
DereferenceContext.prototype.constructor = DereferenceContext;

FlinkSqlParser.DereferenceContext = DereferenceContext;

DereferenceContext.prototype.dereferenceDefinition = function() {
    return this.getTypedRuleContext(DereferenceDefinitionContext,0);
};
DereferenceContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDereference(this);
	}
};

DereferenceContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDereference(this);
	}
};

DereferenceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDereference(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SimpleCaseContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.value = null; // ExpressionContext;
    this.elseExpression = null; // ExpressionContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SimpleCaseContext.prototype = Object.create(PrimaryExpressionContext.prototype);
SimpleCaseContext.prototype.constructor = SimpleCaseContext;

FlinkSqlParser.SimpleCaseContext = SimpleCaseContext;

SimpleCaseContext.prototype.CASE = function() {
    return this.getToken(FlinkSqlParser.CASE, 0);
};

SimpleCaseContext.prototype.END = function() {
    return this.getToken(FlinkSqlParser.END, 0);
};

SimpleCaseContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

SimpleCaseContext.prototype.whenClause = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(WhenClauseContext);
    } else {
        return this.getTypedRuleContext(WhenClauseContext,i);
    }
};

SimpleCaseContext.prototype.ELSE = function() {
    return this.getToken(FlinkSqlParser.ELSE, 0);
};
SimpleCaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSimpleCase(this);
	}
};

SimpleCaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSimpleCase(this);
	}
};

SimpleCaseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSimpleCase(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ColumnReferenceContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ColumnReferenceContext.prototype = Object.create(PrimaryExpressionContext.prototype);
ColumnReferenceContext.prototype.constructor = ColumnReferenceContext;

FlinkSqlParser.ColumnReferenceContext = ColumnReferenceContext;

ColumnReferenceContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};
ColumnReferenceContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterColumnReference(this);
	}
};

ColumnReferenceContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitColumnReference(this);
	}
};

ColumnReferenceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitColumnReference(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function LastContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LastContext.prototype = Object.create(PrimaryExpressionContext.prototype);
LastContext.prototype.constructor = LastContext;

FlinkSqlParser.LastContext = LastContext;

LastContext.prototype.LAST = function() {
    return this.getToken(FlinkSqlParser.LAST, 0);
};

LastContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

LastContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

LastContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

LastContext.prototype.IGNORE = function() {
    return this.getToken(FlinkSqlParser.IGNORE, 0);
};

LastContext.prototype.NULLS = function() {
    return this.getToken(FlinkSqlParser.NULLS, 0);
};
LastContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterLast(this);
	}
};

LastContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitLast(this);
	}
};

LastContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitLast(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function StarContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

StarContext.prototype = Object.create(PrimaryExpressionContext.prototype);
StarContext.prototype.constructor = StarContext;

FlinkSqlParser.StarContext = StarContext;

StarContext.prototype.ASTERISK_SIGN = function() {
    return this.getToken(FlinkSqlParser.ASTERISK_SIGN, 0);
};

StarContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

StarContext.prototype.DOT = function() {
    return this.getToken(FlinkSqlParser.DOT, 0);
};
StarContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterStar(this);
	}
};

StarContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitStar(this);
	}
};

StarContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitStar(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SubscriptContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.value = null; // PrimaryExpressionContext;
    this.index = null; // ValueExpressionContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SubscriptContext.prototype = Object.create(PrimaryExpressionContext.prototype);
SubscriptContext.prototype.constructor = SubscriptContext;

FlinkSqlParser.SubscriptContext = SubscriptContext;

SubscriptContext.prototype.LS_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LS_BRACKET, 0);
};

SubscriptContext.prototype.RS_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RS_BRACKET, 0);
};

SubscriptContext.prototype.primaryExpression = function() {
    return this.getTypedRuleContext(PrimaryExpressionContext,0);
};

SubscriptContext.prototype.valueExpression = function() {
    return this.getTypedRuleContext(ValueExpressionContext,0);
};
SubscriptContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSubscript(this);
	}
};

SubscriptContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSubscript(this);
	}
};

SubscriptContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSubscript(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SubqueryExpressionContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SubqueryExpressionContext.prototype = Object.create(PrimaryExpressionContext.prototype);
SubqueryExpressionContext.prototype.constructor = SubqueryExpressionContext;

FlinkSqlParser.SubqueryExpressionContext = SubqueryExpressionContext;

SubqueryExpressionContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

SubqueryExpressionContext.prototype.queryStatement = function() {
    return this.getTypedRuleContext(QueryStatementContext,0);
};

SubqueryExpressionContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};
SubqueryExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSubqueryExpression(this);
	}
};

SubqueryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSubqueryExpression(this);
	}
};

SubqueryExpressionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSubqueryExpression(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CastContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CastContext.prototype = Object.create(PrimaryExpressionContext.prototype);
CastContext.prototype.constructor = CastContext;

FlinkSqlParser.CastContext = CastContext;

CastContext.prototype.CAST = function() {
    return this.getToken(FlinkSqlParser.CAST, 0);
};

CastContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

CastContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

CastContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

CastContext.prototype.columnType = function() {
    return this.getTypedRuleContext(ColumnTypeContext,0);
};

CastContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};
CastContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterCast(this);
	}
};

CastContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitCast(this);
	}
};

CastContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitCast(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ConstantDefaultContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ConstantDefaultContext.prototype = Object.create(PrimaryExpressionContext.prototype);
ConstantDefaultContext.prototype.constructor = ConstantDefaultContext;

FlinkSqlParser.ConstantDefaultContext = ConstantDefaultContext;

ConstantDefaultContext.prototype.constant = function() {
    return this.getTypedRuleContext(ConstantContext,0);
};
ConstantDefaultContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterConstantDefault(this);
	}
};

ConstantDefaultContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitConstantDefault(this);
	}
};

ConstantDefaultContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitConstantDefault(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ParenthesizedExpressionContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ParenthesizedExpressionContext.prototype = Object.create(PrimaryExpressionContext.prototype);
ParenthesizedExpressionContext.prototype.constructor = ParenthesizedExpressionContext;

FlinkSqlParser.ParenthesizedExpressionContext = ParenthesizedExpressionContext;

ParenthesizedExpressionContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

ParenthesizedExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

ParenthesizedExpressionContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};
ParenthesizedExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterParenthesizedExpression(this);
	}
};

ParenthesizedExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitParenthesizedExpression(this);
	}
};

ParenthesizedExpressionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitParenthesizedExpression(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function FunctionCallContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

FunctionCallContext.prototype = Object.create(PrimaryExpressionContext.prototype);
FunctionCallContext.prototype.constructor = FunctionCallContext;

FlinkSqlParser.FunctionCallContext = FunctionCallContext;

FunctionCallContext.prototype.functionName = function() {
    return this.getTypedRuleContext(FunctionNameContext,0);
};

FunctionCallContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

FunctionCallContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

FunctionCallContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

FunctionCallContext.prototype.setQuantifier = function() {
    return this.getTypedRuleContext(SetQuantifierContext,0);
};

FunctionCallContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};

FunctionCallContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterFunctionCall(this);
	}
};

FunctionCallContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitFunctionCall(this);
	}
};

FunctionCallContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitFunctionCall(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SearchedCaseContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.elseExpression = null; // ExpressionContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SearchedCaseContext.prototype = Object.create(PrimaryExpressionContext.prototype);
SearchedCaseContext.prototype.constructor = SearchedCaseContext;

FlinkSqlParser.SearchedCaseContext = SearchedCaseContext;

SearchedCaseContext.prototype.CASE = function() {
    return this.getToken(FlinkSqlParser.CASE, 0);
};

SearchedCaseContext.prototype.END = function() {
    return this.getToken(FlinkSqlParser.END, 0);
};

SearchedCaseContext.prototype.whenClause = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(WhenClauseContext);
    } else {
        return this.getTypedRuleContext(WhenClauseContext,i);
    }
};

SearchedCaseContext.prototype.ELSE = function() {
    return this.getToken(FlinkSqlParser.ELSE, 0);
};

SearchedCaseContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
SearchedCaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSearchedCase(this);
	}
};

SearchedCaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSearchedCase(this);
	}
};

SearchedCaseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSearchedCase(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function PositionContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.substr = null; // ValueExpressionContext;
    this.str = null; // ValueExpressionContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PositionContext.prototype = Object.create(PrimaryExpressionContext.prototype);
PositionContext.prototype.constructor = PositionContext;

FlinkSqlParser.PositionContext = PositionContext;

PositionContext.prototype.POSITION = function() {
    return this.getToken(FlinkSqlParser.POSITION, 0);
};

PositionContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

PositionContext.prototype.IN = function() {
    return this.getToken(FlinkSqlParser.IN, 0);
};

PositionContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

PositionContext.prototype.valueExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ValueExpressionContext);
    } else {
        return this.getTypedRuleContext(ValueExpressionContext,i);
    }
};
PositionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterPosition(this);
	}
};

PositionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitPosition(this);
	}
};

PositionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitPosition(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function FirstContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

FirstContext.prototype = Object.create(PrimaryExpressionContext.prototype);
FirstContext.prototype.constructor = FirstContext;

FlinkSqlParser.FirstContext = FirstContext;

FirstContext.prototype.FIRST = function() {
    return this.getToken(FlinkSqlParser.FIRST, 0);
};

FirstContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

FirstContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

FirstContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

FirstContext.prototype.IGNORE = function() {
    return this.getToken(FlinkSqlParser.IGNORE, 0);
};

FirstContext.prototype.NULLS = function() {
    return this.getToken(FlinkSqlParser.NULLS, 0);
};
FirstContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterFirst(this);
	}
};

FirstContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitFirst(this);
	}
};

FirstContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitFirst(this);
    } else {
        return visitor.visitChildren(this);
    }
};



FlinkSqlParser.prototype.primaryExpression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new PrimaryExpressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 142;
    this.enterRecursionRule(localctx, 142, FlinkSqlParser.RULE_primaryExpression, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1123;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,126,this._ctx);
        switch(la_) {
        case 1:
            localctx = new SearchedCaseContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 1033;
            this.match(FlinkSqlParser.CASE);
            this.state = 1035; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 1034;
                this.whenClause();
                this.state = 1037; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===FlinkSqlParser.WHEN);
            this.state = 1041;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.ELSE) {
                this.state = 1039;
                this.match(FlinkSqlParser.ELSE);
                this.state = 1040;
                localctx.elseExpression = this.expression();
            }

            this.state = 1043;
            this.match(FlinkSqlParser.END);
            break;

        case 2:
            localctx = new SimpleCaseContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1045;
            this.match(FlinkSqlParser.CASE);
            this.state = 1046;
            localctx.value = this.expression();
            this.state = 1048; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 1047;
                this.whenClause();
                this.state = 1050; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===FlinkSqlParser.WHEN);
            this.state = 1054;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.ELSE) {
                this.state = 1052;
                this.match(FlinkSqlParser.ELSE);
                this.state = 1053;
                localctx.elseExpression = this.expression();
            }

            this.state = 1056;
            this.match(FlinkSqlParser.END);
            break;

        case 3:
            localctx = new CastContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1058;
            this.match(FlinkSqlParser.CAST);
            this.state = 1059;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 1060;
            this.expression();
            this.state = 1061;
            this.match(FlinkSqlParser.AS);
            this.state = 1062;
            this.columnType();
            this.state = 1063;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 4:
            localctx = new FirstContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1065;
            this.match(FlinkSqlParser.FIRST);
            this.state = 1066;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 1067;
            this.expression();
            this.state = 1070;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.IGNORE) {
                this.state = 1068;
                this.match(FlinkSqlParser.IGNORE);
                this.state = 1069;
                this.match(FlinkSqlParser.NULLS);
            }

            this.state = 1072;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 5:
            localctx = new LastContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1074;
            this.match(FlinkSqlParser.LAST);
            this.state = 1075;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 1076;
            this.expression();
            this.state = 1079;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.IGNORE) {
                this.state = 1077;
                this.match(FlinkSqlParser.IGNORE);
                this.state = 1078;
                this.match(FlinkSqlParser.NULLS);
            }

            this.state = 1081;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 6:
            localctx = new PositionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1083;
            this.match(FlinkSqlParser.POSITION);
            this.state = 1084;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 1085;
            localctx.substr = this.valueExpression(0);
            this.state = 1086;
            this.match(FlinkSqlParser.IN);
            this.state = 1087;
            localctx.str = this.valueExpression(0);
            this.state = 1088;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 7:
            localctx = new ConstantDefaultContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1090;
            this.constant();
            break;

        case 8:
            localctx = new StarContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1091;
            this.match(FlinkSqlParser.ASTERISK_SIGN);
            break;

        case 9:
            localctx = new StarContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1092;
            this.uid();
            this.state = 1093;
            this.match(FlinkSqlParser.DOT);
            this.state = 1094;
            this.match(FlinkSqlParser.ASTERISK_SIGN);
            break;

        case 10:
            localctx = new SubqueryExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1096;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 1097;
            this.queryStatement(0);
            this.state = 1098;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 11:
            localctx = new FunctionCallContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1100;
            this.functionName();
            this.state = 1101;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 1113;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FlinkSqlParser.SELECT) | (1 << FlinkSqlParser.FROM) | (1 << FlinkSqlParser.ADD) | (1 << FlinkSqlParser.AS) | (1 << FlinkSqlParser.ALL) | (1 << FlinkSqlParser.ANY) | (1 << FlinkSqlParser.DISTINCT) | (1 << FlinkSqlParser.WHERE) | (1 << FlinkSqlParser.GROUP) | (1 << FlinkSqlParser.BY) | (1 << FlinkSqlParser.GROUPING) | (1 << FlinkSqlParser.SETS) | (1 << FlinkSqlParser.CUBE) | (1 << FlinkSqlParser.ROLLUP) | (1 << FlinkSqlParser.ORDER) | (1 << FlinkSqlParser.HAVING) | (1 << FlinkSqlParser.LIMIT) | (1 << FlinkSqlParser.AT) | (1 << FlinkSqlParser.OR) | (1 << FlinkSqlParser.AND) | (1 << FlinkSqlParser.IN) | (1 << FlinkSqlParser.NOT) | (1 << FlinkSqlParser.NO) | (1 << FlinkSqlParser.EXISTS) | (1 << FlinkSqlParser.BETWEEN) | (1 << FlinkSqlParser.LIKE) | (1 << FlinkSqlParser.RLIKE) | (1 << FlinkSqlParser.IS))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (FlinkSqlParser.TRUE - 32)) | (1 << (FlinkSqlParser.FALSE - 32)) | (1 << (FlinkSqlParser.NULLS - 32)) | (1 << (FlinkSqlParser.ASC - 32)) | (1 << (FlinkSqlParser.DESC - 32)) | (1 << (FlinkSqlParser.FOR - 32)) | (1 << (FlinkSqlParser.INTERVAL - 32)) | (1 << (FlinkSqlParser.CASE - 32)) | (1 << (FlinkSqlParser.WHEN - 32)) | (1 << (FlinkSqlParser.THEN - 32)) | (1 << (FlinkSqlParser.ELSE - 32)) | (1 << (FlinkSqlParser.END - 32)) | (1 << (FlinkSqlParser.JOIN - 32)) | (1 << (FlinkSqlParser.CROSS - 32)) | (1 << (FlinkSqlParser.OUTER - 32)) | (1 << (FlinkSqlParser.INNER - 32)) | (1 << (FlinkSqlParser.LEFT - 32)) | (1 << (FlinkSqlParser.SEMI - 32)) | (1 << (FlinkSqlParser.RIGHT - 32)) | (1 << (FlinkSqlParser.FULL - 32)) | (1 << (FlinkSqlParser.NATURAL - 32)) | (1 << (FlinkSqlParser.ON - 32)) | (1 << (FlinkSqlParser.PIVOT - 32)) | (1 << (FlinkSqlParser.LATERAL - 32)) | (1 << (FlinkSqlParser.WINDOW - 32)) | (1 << (FlinkSqlParser.OVER - 32)) | (1 << (FlinkSqlParser.PARTITION - 32)) | (1 << (FlinkSqlParser.RANGE - 32)) | (1 << (FlinkSqlParser.ROWS - 32)) | (1 << (FlinkSqlParser.UNBOUNDED - 32)) | (1 << (FlinkSqlParser.PRECEDING - 32)) | (1 << (FlinkSqlParser.FOLLOWING - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (FlinkSqlParser.CURRENT - 64)) | (1 << (FlinkSqlParser.FIRST - 64)) | (1 << (FlinkSqlParser.AFTER - 64)) | (1 << (FlinkSqlParser.LAST - 64)) | (1 << (FlinkSqlParser.WITH - 64)) | (1 << (FlinkSqlParser.VALUES - 64)) | (1 << (FlinkSqlParser.CREATE - 64)) | (1 << (FlinkSqlParser.TABLE - 64)) | (1 << (FlinkSqlParser.DIRECTORY - 64)) | (1 << (FlinkSqlParser.VIEW - 64)) | (1 << (FlinkSqlParser.REPLACE - 64)) | (1 << (FlinkSqlParser.INSERT - 64)) | (1 << (FlinkSqlParser.DELETE - 64)) | (1 << (FlinkSqlParser.INTO - 64)) | (1 << (FlinkSqlParser.DESCRIBE - 64)) | (1 << (FlinkSqlParser.EXPLAIN - 64)) | (1 << (FlinkSqlParser.FORMAT - 64)) | (1 << (FlinkSqlParser.LOGICAL - 64)) | (1 << (FlinkSqlParser.CODEGEN - 64)) | (1 << (FlinkSqlParser.COST - 64)) | (1 << (FlinkSqlParser.CAST - 64)) | (1 << (FlinkSqlParser.SHOW - 64)) | (1 << (FlinkSqlParser.TABLES - 64)) | (1 << (FlinkSqlParser.COLUMNS - 64)) | (1 << (FlinkSqlParser.COLUMN - 64)) | (1 << (FlinkSqlParser.USE - 64)) | (1 << (FlinkSqlParser.PARTITIONS - 64)) | (1 << (FlinkSqlParser.FUNCTIONS - 64)) | (1 << (FlinkSqlParser.DROP - 64)) | (1 << (FlinkSqlParser.UNION - 64)) | (1 << (FlinkSqlParser.EXCEPT - 64)) | (1 << (FlinkSqlParser.SETMINUS - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (FlinkSqlParser.INTERSECT - 96)) | (1 << (FlinkSqlParser.TO - 96)) | (1 << (FlinkSqlParser.TABLESAMPLE - 96)) | (1 << (FlinkSqlParser.STRATIFY - 96)) | (1 << (FlinkSqlParser.ALTER - 96)) | (1 << (FlinkSqlParser.RENAME - 96)) | (1 << (FlinkSqlParser.STRUCT - 96)) | (1 << (FlinkSqlParser.COMMENT - 96)) | (1 << (FlinkSqlParser.SET - 96)) | (1 << (FlinkSqlParser.RESET - 96)) | (1 << (FlinkSqlParser.DATA - 96)) | (1 << (FlinkSqlParser.START - 96)) | (1 << (FlinkSqlParser.TRANSACTION - 96)) | (1 << (FlinkSqlParser.COMMIT - 96)) | (1 << (FlinkSqlParser.ROLLBACK - 96)) | (1 << (FlinkSqlParser.MACRO - 96)) | (1 << (FlinkSqlParser.IGNORE - 96)) | (1 << (FlinkSqlParser.BOTH - 96)) | (1 << (FlinkSqlParser.LEADING - 96)) | (1 << (FlinkSqlParser.TRAILING - 96)) | (1 << (FlinkSqlParser.IF - 96)) | (1 << (FlinkSqlParser.POSITION - 96)) | (1 << (FlinkSqlParser.EXTRACT - 96)) | (1 << (FlinkSqlParser.MINUS - 96)) | (1 << (FlinkSqlParser.DIV - 96)) | (1 << (FlinkSqlParser.PERCENTLIT - 96)) | (1 << (FlinkSqlParser.BUCKET - 96)) | (1 << (FlinkSqlParser.OUT - 96)) | (1 << (FlinkSqlParser.OF - 96)) | (1 << (FlinkSqlParser.SORT - 96)) | (1 << (FlinkSqlParser.CLUSTER - 96)) | (1 << (FlinkSqlParser.DISTRIBUTE - 96)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (FlinkSqlParser.OVERWRITE - 128)) | (1 << (FlinkSqlParser.TRANSFORM - 128)) | (1 << (FlinkSqlParser.REDUCE - 128)) | (1 << (FlinkSqlParser.USING - 128)) | (1 << (FlinkSqlParser.SERDE - 128)) | (1 << (FlinkSqlParser.SERDEPROPERTIES - 128)) | (1 << (FlinkSqlParser.RECORDREADER - 128)) | (1 << (FlinkSqlParser.RECORDWRITER - 128)) | (1 << (FlinkSqlParser.DELIMITED - 128)) | (1 << (FlinkSqlParser.FIELDS - 128)) | (1 << (FlinkSqlParser.TERMINATED - 128)) | (1 << (FlinkSqlParser.COLLECTION - 128)) | (1 << (FlinkSqlParser.ITEMS - 128)) | (1 << (FlinkSqlParser.KEYS - 128)) | (1 << (FlinkSqlParser.ESCAPED - 128)) | (1 << (FlinkSqlParser.LINES - 128)) | (1 << (FlinkSqlParser.SEPARATED - 128)) | (1 << (FlinkSqlParser.FUNCTION - 128)) | (1 << (FlinkSqlParser.EXTENDED - 128)) | (1 << (FlinkSqlParser.REFRESH - 128)) | (1 << (FlinkSqlParser.CLEAR - 128)) | (1 << (FlinkSqlParser.CACHE - 128)) | (1 << (FlinkSqlParser.UNCACHE - 128)) | (1 << (FlinkSqlParser.LAZY - 128)) | (1 << (FlinkSqlParser.FORMATTED - 128)) | (1 << (FlinkSqlParser.GLOBAL - 128)) | (1 << (FlinkSqlParser.TEMPORARY - 128)) | (1 << (FlinkSqlParser.OPTIONS - 128)) | (1 << (FlinkSqlParser.UNSET - 128)) | (1 << (FlinkSqlParser.TBLPROPERTIES - 128)) | (1 << (FlinkSqlParser.DBPROPERTIES - 128)) | (1 << (FlinkSqlParser.BUCKETS - 128)))) !== 0) || ((((_la - 160)) & ~0x1f) == 0 && ((1 << (_la - 160)) & ((1 << (FlinkSqlParser.SKEWED - 160)) | (1 << (FlinkSqlParser.STORED - 160)) | (1 << (FlinkSqlParser.DIRECTORIES - 160)) | (1 << (FlinkSqlParser.LOCATION - 160)) | (1 << (FlinkSqlParser.EXCHANGE - 160)) | (1 << (FlinkSqlParser.ARCHIVE - 160)) | (1 << (FlinkSqlParser.UNARCHIVE - 160)) | (1 << (FlinkSqlParser.FILEFORMAT - 160)) | (1 << (FlinkSqlParser.TOUCH - 160)) | (1 << (FlinkSqlParser.COMPACT - 160)) | (1 << (FlinkSqlParser.CONCATENATE - 160)) | (1 << (FlinkSqlParser.CHANGE - 160)) | (1 << (FlinkSqlParser.CASCADE - 160)) | (1 << (FlinkSqlParser.CONSTRAINT - 160)) | (1 << (FlinkSqlParser.RESTRICT - 160)) | (1 << (FlinkSqlParser.CLUSTERED - 160)) | (1 << (FlinkSqlParser.SORTED - 160)) | (1 << (FlinkSqlParser.PURGE - 160)) | (1 << (FlinkSqlParser.INPUTFORMAT - 160)) | (1 << (FlinkSqlParser.OUTPUTFORMAT - 160)) | (1 << (FlinkSqlParser.DATABASE - 160)) | (1 << (FlinkSqlParser.DATABASES - 160)) | (1 << (FlinkSqlParser.DFS - 160)) | (1 << (FlinkSqlParser.TRUNCATE - 160)) | (1 << (FlinkSqlParser.ANALYZE - 160)) | (1 << (FlinkSqlParser.COMPUTE - 160)) | (1 << (FlinkSqlParser.LIST - 160)) | (1 << (FlinkSqlParser.STATISTICS - 160)) | (1 << (FlinkSqlParser.PARTITIONED - 160)) | (1 << (FlinkSqlParser.EXTERNAL - 160)) | (1 << (FlinkSqlParser.DEFINED - 160)) | (1 << (FlinkSqlParser.REVOKE - 160)))) !== 0) || ((((_la - 192)) & ~0x1f) == 0 && ((1 << (_la - 192)) & ((1 << (FlinkSqlParser.GRANT - 192)) | (1 << (FlinkSqlParser.LOCK - 192)) | (1 << (FlinkSqlParser.UNLOCK - 192)) | (1 << (FlinkSqlParser.MSCK - 192)) | (1 << (FlinkSqlParser.REPAIR - 192)) | (1 << (FlinkSqlParser.RECOVER - 192)) | (1 << (FlinkSqlParser.EXPORT - 192)) | (1 << (FlinkSqlParser.IMPORT - 192)) | (1 << (FlinkSqlParser.LOAD - 192)) | (1 << (FlinkSqlParser.ROLE - 192)) | (1 << (FlinkSqlParser.ROLES - 192)) | (1 << (FlinkSqlParser.COMPACTIONS - 192)) | (1 << (FlinkSqlParser.PRINCIPALS - 192)) | (1 << (FlinkSqlParser.TRANSACTIONS - 192)) | (1 << (FlinkSqlParser.INDEX - 192)) | (1 << (FlinkSqlParser.INDEXES - 192)) | (1 << (FlinkSqlParser.LOCKS - 192)) | (1 << (FlinkSqlParser.OPTION - 192)) | (1 << (FlinkSqlParser.ANTI - 192)) | (1 << (FlinkSqlParser.LOCAL - 192)) | (1 << (FlinkSqlParser.INPATH - 192)) | (1 << (FlinkSqlParser.WATERMARK - 192)) | (1 << (FlinkSqlParser.UNNEST - 192)) | (1 << (FlinkSqlParser.MATCH - 192)) | (1 << (FlinkSqlParser.NEXT - 192)) | (1 << (FlinkSqlParser.WITHIN - 192)) | (1 << (FlinkSqlParser.WS - 192)) | (1 << (FlinkSqlParser.SYSTEM - 192)) | (1 << (FlinkSqlParser.INCLUDING - 192)) | (1 << (FlinkSqlParser.EXCLUDING - 192)) | (1 << (FlinkSqlParser.CONSTRAINTS - 192)) | (1 << (FlinkSqlParser.GENERATED - 192)))) !== 0) || ((((_la - 224)) & ~0x1f) == 0 && ((1 << (_la - 224)) & ((1 << (FlinkSqlParser.CATALOG - 224)) | (1 << (FlinkSqlParser.LANGUAGE - 224)) | (1 << (FlinkSqlParser.CATALOGS - 224)) | (1 << (FlinkSqlParser.VIEWS - 224)) | (1 << (FlinkSqlParser.PRIMARY - 224)) | (1 << (FlinkSqlParser.KEY - 224)) | (1 << (FlinkSqlParser.PERIOD - 224)) | (1 << (FlinkSqlParser.SYSTEM_TIME - 224)) | (1 << (FlinkSqlParser.STRING - 224)) | (1 << (FlinkSqlParser.ARRAY - 224)) | (1 << (FlinkSqlParser.MAP - 224)) | (1 << (FlinkSqlParser.CHAR - 224)) | (1 << (FlinkSqlParser.VARCHAR - 224)) | (1 << (FlinkSqlParser.BINARY - 224)) | (1 << (FlinkSqlParser.VARBINARY - 224)) | (1 << (FlinkSqlParser.BYTES - 224)) | (1 << (FlinkSqlParser.DECIMAL - 224)) | (1 << (FlinkSqlParser.TINYINT - 224)) | (1 << (FlinkSqlParser.SMALLINT - 224)) | (1 << (FlinkSqlParser.INT - 224)) | (1 << (FlinkSqlParser.BIGINT - 224)) | (1 << (FlinkSqlParser.FLOAT - 224)) | (1 << (FlinkSqlParser.DOUBLE - 224)) | (1 << (FlinkSqlParser.DATE - 224)) | (1 << (FlinkSqlParser.TIME - 224)) | (1 << (FlinkSqlParser.TIMESTAMP - 224)) | (1 << (FlinkSqlParser.MULTISET - 224)) | (1 << (FlinkSqlParser.BOOLEAN - 224)) | (1 << (FlinkSqlParser.RAW - 224)) | (1 << (FlinkSqlParser.ROW - 224)) | (1 << (FlinkSqlParser.NULL - 224)) | (1 << (FlinkSqlParser.DATETIME - 224)))) !== 0) || ((((_la - 260)) & ~0x1f) == 0 && ((1 << (_la - 260)) & ((1 << (FlinkSqlParser.BIT_NOT_OP - 260)) | (1 << (FlinkSqlParser.LR_BRACKET - 260)) | (1 << (FlinkSqlParser.ASTERISK_SIGN - 260)) | (1 << (FlinkSqlParser.HYPNEN_SIGN - 260)) | (1 << (FlinkSqlParser.ADD_SIGN - 260)) | (1 << (FlinkSqlParser.STRING_LITERAL - 260)) | (1 << (FlinkSqlParser.DIG_LITERAL - 260)) | (1 << (FlinkSqlParser.REAL_LITERAL - 260)) | (1 << (FlinkSqlParser.BIT_STRING - 260)) | (1 << (FlinkSqlParser.ID_LITERAL - 260)))) !== 0)) {
                this.state = 1103;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,123,this._ctx);
                if(la_===1) {
                    this.state = 1102;
                    this.setQuantifier();

                }
                this.state = 1105;
                this.expression();
                this.state = 1110;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===FlinkSqlParser.COMMA) {
                    this.state = 1106;
                    this.match(FlinkSqlParser.COMMA);
                    this.state = 1107;
                    this.expression();
                    this.state = 1112;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
            }

            this.state = 1115;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        case 12:
            localctx = new ColumnReferenceContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1117;
            this.identifier();
            break;

        case 13:
            localctx = new DereferenceContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1118;
            this.dereferenceDefinition();
            break;

        case 14:
            localctx = new ParenthesizedExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1119;
            this.match(FlinkSqlParser.LR_BRACKET);
            this.state = 1120;
            this.expression();
            this.state = 1121;
            this.match(FlinkSqlParser.RR_BRACKET);
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1132;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,127,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new SubscriptContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState));
                localctx.value = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_primaryExpression);
                this.state = 1125;
                if (!( this.precpred(this._ctx, 4))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
                }
                this.state = 1126;
                this.match(FlinkSqlParser.LS_BRACKET);
                this.state = 1127;
                localctx.index = this.valueExpression(0);
                this.state = 1128;
                this.match(FlinkSqlParser.RS_BRACKET); 
            }
            this.state = 1134;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,127,this._ctx);
        }

    } catch( error) {
        if(error instanceof antlr4.error.RecognitionException) {
	        localctx.exception = error;
	        this._errHandler.reportError(this, error);
	        this._errHandler.recover(this, error);
	    } else {
	    	throw error;
	    }
    } finally {
        this.unrollRecursionContexts(_parentctx)
    }
    return localctx;
};


function FunctionNameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_functionName;
    return this;
}

FunctionNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionNameContext.prototype.constructor = FunctionNameContext;

FunctionNameContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

FunctionNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterFunctionName(this);
	}
};

FunctionNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitFunctionName(this);
	}
};

FunctionNameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitFunctionName(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.FunctionNameContext = FunctionNameContext;

FlinkSqlParser.prototype.functionName = function() {

    var localctx = new FunctionNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 144, FlinkSqlParser.RULE_functionName);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1135;
        this.uid();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DereferenceDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_dereferenceDefinition;
    return this;
}

DereferenceDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DereferenceDefinitionContext.prototype.constructor = DereferenceDefinitionContext;

DereferenceDefinitionContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

DereferenceDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDereferenceDefinition(this);
	}
};

DereferenceDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDereferenceDefinition(this);
	}
};

DereferenceDefinitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDereferenceDefinition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.DereferenceDefinitionContext = DereferenceDefinitionContext;

FlinkSqlParser.prototype.dereferenceDefinition = function() {

    var localctx = new DereferenceDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 146, FlinkSqlParser.RULE_dereferenceDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1137;
        this.uid();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function QualifiedNameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_qualifiedName;
    return this;
}

QualifiedNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
QualifiedNameContext.prototype.constructor = QualifiedNameContext;

QualifiedNameContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

QualifiedNameContext.prototype.dereferenceDefinition = function() {
    return this.getTypedRuleContext(DereferenceDefinitionContext,0);
};

QualifiedNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterQualifiedName(this);
	}
};

QualifiedNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitQualifiedName(this);
	}
};

QualifiedNameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitQualifiedName(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.QualifiedNameContext = QualifiedNameContext;

FlinkSqlParser.prototype.qualifiedName = function() {

    var localctx = new QualifiedNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 148, FlinkSqlParser.RULE_qualifiedName);
    try {
        this.state = 1141;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,128,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1139;
            this.identifier();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1140;
            this.dereferenceDefinition();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IntervalContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_interval;
    return this;
}

IntervalContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IntervalContext.prototype.constructor = IntervalContext;

IntervalContext.prototype.INTERVAL = function() {
    return this.getToken(FlinkSqlParser.INTERVAL, 0);
};

IntervalContext.prototype.errorCapturingMultiUnitsInterval = function() {
    return this.getTypedRuleContext(ErrorCapturingMultiUnitsIntervalContext,0);
};

IntervalContext.prototype.errorCapturingUnitToUnitInterval = function() {
    return this.getTypedRuleContext(ErrorCapturingUnitToUnitIntervalContext,0);
};

IntervalContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterInterval(this);
	}
};

IntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitInterval(this);
	}
};

IntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.IntervalContext = IntervalContext;

FlinkSqlParser.prototype.interval = function() {

    var localctx = new IntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 150, FlinkSqlParser.RULE_interval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1143;
        this.match(FlinkSqlParser.INTERVAL);
        this.state = 1146;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,129,this._ctx);
        if(la_===1) {
            this.state = 1144;
            this.errorCapturingMultiUnitsInterval();

        } else if(la_===2) {
            this.state = 1145;
            this.errorCapturingUnitToUnitInterval();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ErrorCapturingMultiUnitsIntervalContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval;
    return this;
}

ErrorCapturingMultiUnitsIntervalContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ErrorCapturingMultiUnitsIntervalContext.prototype.constructor = ErrorCapturingMultiUnitsIntervalContext;

ErrorCapturingMultiUnitsIntervalContext.prototype.multiUnitsInterval = function() {
    return this.getTypedRuleContext(MultiUnitsIntervalContext,0);
};

ErrorCapturingMultiUnitsIntervalContext.prototype.unitToUnitInterval = function() {
    return this.getTypedRuleContext(UnitToUnitIntervalContext,0);
};

ErrorCapturingMultiUnitsIntervalContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterErrorCapturingMultiUnitsInterval(this);
	}
};

ErrorCapturingMultiUnitsIntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitErrorCapturingMultiUnitsInterval(this);
	}
};

ErrorCapturingMultiUnitsIntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitErrorCapturingMultiUnitsInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ErrorCapturingMultiUnitsIntervalContext = ErrorCapturingMultiUnitsIntervalContext;

FlinkSqlParser.prototype.errorCapturingMultiUnitsInterval = function() {

    var localctx = new ErrorCapturingMultiUnitsIntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 152, FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1148;
        this.multiUnitsInterval();
        this.state = 1150;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,130,this._ctx);
        if(la_===1) {
            this.state = 1149;
            this.unitToUnitInterval();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function MultiUnitsIntervalContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_multiUnitsInterval;
    return this;
}

MultiUnitsIntervalContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
MultiUnitsIntervalContext.prototype.constructor = MultiUnitsIntervalContext;

MultiUnitsIntervalContext.prototype.intervalValue = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IntervalValueContext);
    } else {
        return this.getTypedRuleContext(IntervalValueContext,i);
    }
};

MultiUnitsIntervalContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

MultiUnitsIntervalContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterMultiUnitsInterval(this);
	}
};

MultiUnitsIntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitMultiUnitsInterval(this);
	}
};

MultiUnitsIntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitMultiUnitsInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.MultiUnitsIntervalContext = MultiUnitsIntervalContext;

FlinkSqlParser.prototype.multiUnitsInterval = function() {

    var localctx = new MultiUnitsIntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 154, FlinkSqlParser.RULE_multiUnitsInterval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1155; 
        this._errHandler.sync(this);
        var _alt = 1;
        do {
        	switch (_alt) {
        	case 1:
        		this.state = 1152;
        		this.intervalValue();
        		this.state = 1153;
        		this.identifier();
        		break;
        	default:
        		throw new antlr4.error.NoViableAltException(this);
        	}
        	this.state = 1157; 
        	this._errHandler.sync(this);
        	_alt = this._interp.adaptivePredict(this._input,131, this._ctx);
        } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ErrorCapturingUnitToUnitIntervalContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval;
    this.body = null; // UnitToUnitIntervalContext
    this.error1 = null; // MultiUnitsIntervalContext
    this.error2 = null; // UnitToUnitIntervalContext
    return this;
}

ErrorCapturingUnitToUnitIntervalContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ErrorCapturingUnitToUnitIntervalContext.prototype.constructor = ErrorCapturingUnitToUnitIntervalContext;

ErrorCapturingUnitToUnitIntervalContext.prototype.unitToUnitInterval = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(UnitToUnitIntervalContext);
    } else {
        return this.getTypedRuleContext(UnitToUnitIntervalContext,i);
    }
};

ErrorCapturingUnitToUnitIntervalContext.prototype.multiUnitsInterval = function() {
    return this.getTypedRuleContext(MultiUnitsIntervalContext,0);
};

ErrorCapturingUnitToUnitIntervalContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterErrorCapturingUnitToUnitInterval(this);
	}
};

ErrorCapturingUnitToUnitIntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitErrorCapturingUnitToUnitInterval(this);
	}
};

ErrorCapturingUnitToUnitIntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitErrorCapturingUnitToUnitInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ErrorCapturingUnitToUnitIntervalContext = ErrorCapturingUnitToUnitIntervalContext;

FlinkSqlParser.prototype.errorCapturingUnitToUnitInterval = function() {

    var localctx = new ErrorCapturingUnitToUnitIntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 156, FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1159;
        localctx.body = this.unitToUnitInterval();
        this.state = 1162;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,132,this._ctx);
        if(la_===1) {
            this.state = 1160;
            localctx.error1 = this.multiUnitsInterval();

        } else if(la_===2) {
            this.state = 1161;
            localctx.error2 = this.unitToUnitInterval();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function UnitToUnitIntervalContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_unitToUnitInterval;
    this.value = null; // IntervalValueContext
    this.from = null; // IdentifierContext
    this.to = null; // IdentifierContext
    return this;
}

UnitToUnitIntervalContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UnitToUnitIntervalContext.prototype.constructor = UnitToUnitIntervalContext;

UnitToUnitIntervalContext.prototype.TO = function() {
    return this.getToken(FlinkSqlParser.TO, 0);
};

UnitToUnitIntervalContext.prototype.intervalValue = function() {
    return this.getTypedRuleContext(IntervalValueContext,0);
};

UnitToUnitIntervalContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

UnitToUnitIntervalContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterUnitToUnitInterval(this);
	}
};

UnitToUnitIntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitUnitToUnitInterval(this);
	}
};

UnitToUnitIntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitUnitToUnitInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.UnitToUnitIntervalContext = UnitToUnitIntervalContext;

FlinkSqlParser.prototype.unitToUnitInterval = function() {

    var localctx = new UnitToUnitIntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 158, FlinkSqlParser.RULE_unitToUnitInterval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1164;
        localctx.value = this.intervalValue();
        this.state = 1165;
        localctx.from = this.identifier();
        this.state = 1166;
        this.match(FlinkSqlParser.TO);
        this.state = 1167;
        localctx.to = this.identifier();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IntervalValueContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_intervalValue;
    return this;
}

IntervalValueContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IntervalValueContext.prototype.constructor = IntervalValueContext;

IntervalValueContext.prototype.DIG_LITERAL = function() {
    return this.getToken(FlinkSqlParser.DIG_LITERAL, 0);
};

IntervalValueContext.prototype.REAL_LITERAL = function() {
    return this.getToken(FlinkSqlParser.REAL_LITERAL, 0);
};

IntervalValueContext.prototype.ADD_SIGN = function() {
    return this.getToken(FlinkSqlParser.ADD_SIGN, 0);
};

IntervalValueContext.prototype.HYPNEN_SIGN = function() {
    return this.getToken(FlinkSqlParser.HYPNEN_SIGN, 0);
};

IntervalValueContext.prototype.STRING_LITERAL = function() {
    return this.getToken(FlinkSqlParser.STRING_LITERAL, 0);
};

IntervalValueContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterIntervalValue(this);
	}
};

IntervalValueContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitIntervalValue(this);
	}
};

IntervalValueContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitIntervalValue(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.IntervalValueContext = IntervalValueContext;

FlinkSqlParser.prototype.intervalValue = function() {

    var localctx = new IntervalValueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 160, FlinkSqlParser.RULE_intervalValue);
    var _la = 0; // Token type
    try {
        this.state = 1174;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.HYPNEN_SIGN:
        case FlinkSqlParser.ADD_SIGN:
        case FlinkSqlParser.DIG_LITERAL:
        case FlinkSqlParser.REAL_LITERAL:
            this.enterOuterAlt(localctx, 1);
            this.state = 1170;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.HYPNEN_SIGN || _la===FlinkSqlParser.ADD_SIGN) {
                this.state = 1169;
                _la = this._input.LA(1);
                if(!(_la===FlinkSqlParser.HYPNEN_SIGN || _la===FlinkSqlParser.ADD_SIGN)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
            }

            this.state = 1172;
            _la = this._input.LA(1);
            if(!(_la===FlinkSqlParser.DIG_LITERAL || _la===FlinkSqlParser.REAL_LITERAL)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case FlinkSqlParser.STRING_LITERAL:
            this.enterOuterAlt(localctx, 2);
            this.state = 1173;
            this.match(FlinkSqlParser.STRING_LITERAL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ColumnAliasContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_columnAlias;
    return this;
}

ColumnAliasContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ColumnAliasContext.prototype.constructor = ColumnAliasContext;

ColumnAliasContext.prototype.strictIdentifier = function() {
    return this.getTypedRuleContext(StrictIdentifierContext,0);
};

ColumnAliasContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

ColumnAliasContext.prototype.identifierList = function() {
    return this.getTypedRuleContext(IdentifierListContext,0);
};

ColumnAliasContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterColumnAlias(this);
	}
};

ColumnAliasContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitColumnAlias(this);
	}
};

ColumnAliasContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitColumnAlias(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ColumnAliasContext = ColumnAliasContext;

FlinkSqlParser.prototype.columnAlias = function() {

    var localctx = new ColumnAliasContext(this, this._ctx, this.state);
    this.enterRule(localctx, 162, FlinkSqlParser.RULE_columnAlias);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1177;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,135,this._ctx);
        if(la_===1) {
            this.state = 1176;
            this.match(FlinkSqlParser.AS);

        }
        this.state = 1179;
        this.strictIdentifier();
        this.state = 1181;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.LR_BRACKET) {
            this.state = 1180;
            this.identifierList();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TableAliasContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_tableAlias;
    return this;
}

TableAliasContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TableAliasContext.prototype.constructor = TableAliasContext;

TableAliasContext.prototype.strictIdentifier = function() {
    return this.getTypedRuleContext(StrictIdentifierContext,0);
};

TableAliasContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

TableAliasContext.prototype.identifierList = function() {
    return this.getTypedRuleContext(IdentifierListContext,0);
};

TableAliasContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTableAlias(this);
	}
};

TableAliasContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTableAlias(this);
	}
};

TableAliasContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTableAlias(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TableAliasContext = TableAliasContext;

FlinkSqlParser.prototype.tableAlias = function() {

    var localctx = new TableAliasContext(this, this._ctx, this.state);
    this.enterRule(localctx, 164, FlinkSqlParser.RULE_tableAlias);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1184;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,137,this._ctx);
        if(la_===1) {
            this.state = 1183;
            this.match(FlinkSqlParser.AS);

        }
        this.state = 1186;
        this.strictIdentifier();
        this.state = 1188;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,138,this._ctx);
        if(la_===1) {
            this.state = 1187;
            this.identifierList();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ErrorCapturingIdentifierContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_errorCapturingIdentifier;
    return this;
}

ErrorCapturingIdentifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ErrorCapturingIdentifierContext.prototype.constructor = ErrorCapturingIdentifierContext;

ErrorCapturingIdentifierContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

ErrorCapturingIdentifierContext.prototype.errorCapturingIdentifierExtra = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierExtraContext,0);
};

ErrorCapturingIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterErrorCapturingIdentifier(this);
	}
};

ErrorCapturingIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitErrorCapturingIdentifier(this);
	}
};

ErrorCapturingIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitErrorCapturingIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ErrorCapturingIdentifierContext = ErrorCapturingIdentifierContext;

FlinkSqlParser.prototype.errorCapturingIdentifier = function() {

    var localctx = new ErrorCapturingIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 166, FlinkSqlParser.RULE_errorCapturingIdentifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1190;
        this.identifier();
        this.state = 1191;
        this.errorCapturingIdentifierExtra();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ErrorCapturingIdentifierExtraContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_errorCapturingIdentifierExtra;
    return this;
}

ErrorCapturingIdentifierExtraContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ErrorCapturingIdentifierExtraContext.prototype.constructor = ErrorCapturingIdentifierExtraContext;


 
ErrorCapturingIdentifierExtraContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};


function ErrorIdentContext(parser, ctx) {
	ErrorCapturingIdentifierExtraContext.call(this, parser);
    ErrorCapturingIdentifierExtraContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ErrorIdentContext.prototype = Object.create(ErrorCapturingIdentifierExtraContext.prototype);
ErrorIdentContext.prototype.constructor = ErrorIdentContext;

FlinkSqlParser.ErrorIdentContext = ErrorIdentContext;

ErrorIdentContext.prototype.MINUS = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.MINUS);
    } else {
        return this.getToken(FlinkSqlParser.MINUS, i);
    }
};


ErrorIdentContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};
ErrorIdentContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterErrorIdent(this);
	}
};

ErrorIdentContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitErrorIdent(this);
	}
};

ErrorIdentContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitErrorIdent(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RealIdentContext(parser, ctx) {
	ErrorCapturingIdentifierExtraContext.call(this, parser);
    ErrorCapturingIdentifierExtraContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RealIdentContext.prototype = Object.create(ErrorCapturingIdentifierExtraContext.prototype);
RealIdentContext.prototype.constructor = RealIdentContext;

FlinkSqlParser.RealIdentContext = RealIdentContext;

RealIdentContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterRealIdent(this);
	}
};

RealIdentContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitRealIdent(this);
	}
};

RealIdentContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitRealIdent(this);
    } else {
        return visitor.visitChildren(this);
    }
};



FlinkSqlParser.ErrorCapturingIdentifierExtraContext = ErrorCapturingIdentifierExtraContext;

FlinkSqlParser.prototype.errorCapturingIdentifierExtra = function() {

    var localctx = new ErrorCapturingIdentifierExtraContext(this, this._ctx, this.state);
    this.enterRule(localctx, 168, FlinkSqlParser.RULE_errorCapturingIdentifierExtra);
    var _la = 0; // Token type
    try {
        this.state = 1200;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.MINUS:
            localctx = new ErrorIdentContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1195; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 1193;
                this.match(FlinkSqlParser.MINUS);
                this.state = 1194;
                this.identifier();
                this.state = 1197; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===FlinkSqlParser.MINUS);
            break;
        case FlinkSqlParser.AS:
        case FlinkSqlParser.LR_BRACKET:
            localctx = new RealIdentContext(this, localctx);
            this.enterOuterAlt(localctx, 2);

            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IdentifierListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_identifierList;
    return this;
}

IdentifierListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IdentifierListContext.prototype.constructor = IdentifierListContext;

IdentifierListContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

IdentifierListContext.prototype.identifierSeq = function() {
    return this.getTypedRuleContext(IdentifierSeqContext,0);
};

IdentifierListContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

IdentifierListContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterIdentifierList(this);
	}
};

IdentifierListContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitIdentifierList(this);
	}
};

IdentifierListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitIdentifierList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.IdentifierListContext = IdentifierListContext;

FlinkSqlParser.prototype.identifierList = function() {

    var localctx = new IdentifierListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 170, FlinkSqlParser.RULE_identifierList);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1202;
        this.match(FlinkSqlParser.LR_BRACKET);
        this.state = 1203;
        this.identifierSeq();
        this.state = 1204;
        this.match(FlinkSqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IdentifierSeqContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_identifierSeq;
    return this;
}

IdentifierSeqContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IdentifierSeqContext.prototype.constructor = IdentifierSeqContext;

IdentifierSeqContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

IdentifierSeqContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


IdentifierSeqContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterIdentifierSeq(this);
	}
};

IdentifierSeqContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitIdentifierSeq(this);
	}
};

IdentifierSeqContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitIdentifierSeq(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.IdentifierSeqContext = IdentifierSeqContext;

FlinkSqlParser.prototype.identifierSeq = function() {

    var localctx = new IdentifierSeqContext(this, this._ctx, this.state);
    this.enterRule(localctx, 172, FlinkSqlParser.RULE_identifierSeq);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1206;
        this.identifier();
        this.state = 1211;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===FlinkSqlParser.COMMA) {
            this.state = 1207;
            this.match(FlinkSqlParser.COMMA);
            this.state = 1208;
            this.identifier();
            this.state = 1213;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IdentifierContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_identifier;
    return this;
}

IdentifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IdentifierContext.prototype.constructor = IdentifierContext;

IdentifierContext.prototype.strictIdentifier = function() {
    return this.getTypedRuleContext(StrictIdentifierContext,0);
};

IdentifierContext.prototype.strictNonReserved = function() {
    return this.getTypedRuleContext(StrictNonReservedContext,0);
};

IdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterIdentifier(this);
	}
};

IdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitIdentifier(this);
	}
};

IdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.IdentifierContext = IdentifierContext;

FlinkSqlParser.prototype.identifier = function() {

    var localctx = new IdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 174, FlinkSqlParser.RULE_identifier);
    try {
        this.state = 1216;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,142,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1214;
            this.strictIdentifier();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1215;
            this.strictNonReserved();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function StrictIdentifierContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_strictIdentifier;
    return this;
}

StrictIdentifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StrictIdentifierContext.prototype.constructor = StrictIdentifierContext;


 
StrictIdentifierContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};


function QuotedIdentifierAlternativeContext(parser, ctx) {
	StrictIdentifierContext.call(this, parser);
    StrictIdentifierContext.prototype.copyFrom.call(this, ctx);
    return this;
}

QuotedIdentifierAlternativeContext.prototype = Object.create(StrictIdentifierContext.prototype);
QuotedIdentifierAlternativeContext.prototype.constructor = QuotedIdentifierAlternativeContext;

FlinkSqlParser.QuotedIdentifierAlternativeContext = QuotedIdentifierAlternativeContext;

QuotedIdentifierAlternativeContext.prototype.quotedIdentifier = function() {
    return this.getTypedRuleContext(QuotedIdentifierContext,0);
};
QuotedIdentifierAlternativeContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterQuotedIdentifierAlternative(this);
	}
};

QuotedIdentifierAlternativeContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitQuotedIdentifierAlternative(this);
	}
};

QuotedIdentifierAlternativeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitQuotedIdentifierAlternative(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function NonReservedKeywordsContext(parser, ctx) {
	StrictIdentifierContext.call(this, parser);
    StrictIdentifierContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NonReservedKeywordsContext.prototype = Object.create(StrictIdentifierContext.prototype);
NonReservedKeywordsContext.prototype.constructor = NonReservedKeywordsContext;

FlinkSqlParser.NonReservedKeywordsContext = NonReservedKeywordsContext;

NonReservedKeywordsContext.prototype.nonReserved = function() {
    return this.getTypedRuleContext(NonReservedContext,0);
};
NonReservedKeywordsContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterNonReservedKeywords(this);
	}
};

NonReservedKeywordsContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitNonReservedKeywords(this);
	}
};

NonReservedKeywordsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitNonReservedKeywords(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function UnquotedIdentifierAlternativeContext(parser, ctx) {
	StrictIdentifierContext.call(this, parser);
    StrictIdentifierContext.prototype.copyFrom.call(this, ctx);
    return this;
}

UnquotedIdentifierAlternativeContext.prototype = Object.create(StrictIdentifierContext.prototype);
UnquotedIdentifierAlternativeContext.prototype.constructor = UnquotedIdentifierAlternativeContext;

FlinkSqlParser.UnquotedIdentifierAlternativeContext = UnquotedIdentifierAlternativeContext;

UnquotedIdentifierAlternativeContext.prototype.unquotedIdentifier = function() {
    return this.getTypedRuleContext(UnquotedIdentifierContext,0);
};
UnquotedIdentifierAlternativeContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterUnquotedIdentifierAlternative(this);
	}
};

UnquotedIdentifierAlternativeContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitUnquotedIdentifierAlternative(this);
	}
};

UnquotedIdentifierAlternativeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitUnquotedIdentifierAlternative(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function AnsiNonReservedKeywordsContext(parser, ctx) {
	StrictIdentifierContext.call(this, parser);
    StrictIdentifierContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AnsiNonReservedKeywordsContext.prototype = Object.create(StrictIdentifierContext.prototype);
AnsiNonReservedKeywordsContext.prototype.constructor = AnsiNonReservedKeywordsContext;

FlinkSqlParser.AnsiNonReservedKeywordsContext = AnsiNonReservedKeywordsContext;

AnsiNonReservedKeywordsContext.prototype.ansiNonReserved = function() {
    return this.getTypedRuleContext(AnsiNonReservedContext,0);
};
AnsiNonReservedKeywordsContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterAnsiNonReservedKeywords(this);
	}
};

AnsiNonReservedKeywordsContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitAnsiNonReservedKeywords(this);
	}
};

AnsiNonReservedKeywordsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitAnsiNonReservedKeywords(this);
    } else {
        return visitor.visitChildren(this);
    }
};



FlinkSqlParser.StrictIdentifierContext = StrictIdentifierContext;

FlinkSqlParser.prototype.strictIdentifier = function() {

    var localctx = new StrictIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 176, FlinkSqlParser.RULE_strictIdentifier);
    try {
        this.state = 1222;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,143,this._ctx);
        switch(la_) {
        case 1:
            localctx = new UnquotedIdentifierAlternativeContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1218;
            this.unquotedIdentifier();
            break;

        case 2:
            localctx = new QuotedIdentifierAlternativeContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1219;
            this.quotedIdentifier();
            break;

        case 3:
            localctx = new AnsiNonReservedKeywordsContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1220;
            this.ansiNonReserved();
            break;

        case 4:
            localctx = new NonReservedKeywordsContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1221;
            this.nonReserved();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function UnquotedIdentifierContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_unquotedIdentifier;
    return this;
}

UnquotedIdentifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UnquotedIdentifierContext.prototype.constructor = UnquotedIdentifierContext;

UnquotedIdentifierContext.prototype.DIG_LITERAL = function() {
    return this.getToken(FlinkSqlParser.DIG_LITERAL, 0);
};

UnquotedIdentifierContext.prototype.ID_LITERAL = function() {
    return this.getToken(FlinkSqlParser.ID_LITERAL, 0);
};

UnquotedIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterUnquotedIdentifier(this);
	}
};

UnquotedIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitUnquotedIdentifier(this);
	}
};

UnquotedIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitUnquotedIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.UnquotedIdentifierContext = UnquotedIdentifierContext;

FlinkSqlParser.prototype.unquotedIdentifier = function() {

    var localctx = new UnquotedIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 178, FlinkSqlParser.RULE_unquotedIdentifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1224;
        _la = this._input.LA(1);
        if(!(_la===FlinkSqlParser.DIG_LITERAL || _la===FlinkSqlParser.ID_LITERAL)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function QuotedIdentifierContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_quotedIdentifier;
    return this;
}

QuotedIdentifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
QuotedIdentifierContext.prototype.constructor = QuotedIdentifierContext;

QuotedIdentifierContext.prototype.STRING_LITERAL = function() {
    return this.getToken(FlinkSqlParser.STRING_LITERAL, 0);
};

QuotedIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterQuotedIdentifier(this);
	}
};

QuotedIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitQuotedIdentifier(this);
	}
};

QuotedIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitQuotedIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.QuotedIdentifierContext = QuotedIdentifierContext;

FlinkSqlParser.prototype.quotedIdentifier = function() {

    var localctx = new QuotedIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 180, FlinkSqlParser.RULE_quotedIdentifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1226;
        this.match(FlinkSqlParser.STRING_LITERAL);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function WhenClauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_whenClause;
    this.condition = null; // ExpressionContext
    this.result = null; // ExpressionContext
    return this;
}

WhenClauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
WhenClauseContext.prototype.constructor = WhenClauseContext;

WhenClauseContext.prototype.WHEN = function() {
    return this.getToken(FlinkSqlParser.WHEN, 0);
};

WhenClauseContext.prototype.THEN = function() {
    return this.getToken(FlinkSqlParser.THEN, 0);
};

WhenClauseContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

WhenClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterWhenClause(this);
	}
};

WhenClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitWhenClause(this);
	}
};

WhenClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitWhenClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.WhenClauseContext = WhenClauseContext;

FlinkSqlParser.prototype.whenClause = function() {

    var localctx = new WhenClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 182, FlinkSqlParser.RULE_whenClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1228;
        this.match(FlinkSqlParser.WHEN);
        this.state = 1229;
        localctx.condition = this.expression();
        this.state = 1230;
        this.match(FlinkSqlParser.THEN);
        this.state = 1231;
        localctx.result = this.expression();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function UidListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_uidList;
    return this;
}

UidListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UidListContext.prototype.constructor = UidListContext;

UidListContext.prototype.uid = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(UidContext);
    } else {
        return this.getTypedRuleContext(UidContext,i);
    }
};

UidListContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


UidListContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterUidList(this);
	}
};

UidListContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitUidList(this);
	}
};

UidListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitUidList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.UidListContext = UidListContext;

FlinkSqlParser.prototype.uidList = function() {

    var localctx = new UidListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 184, FlinkSqlParser.RULE_uidList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1233;
        this.uid();
        this.state = 1238;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===FlinkSqlParser.COMMA) {
            this.state = 1234;
            this.match(FlinkSqlParser.COMMA);
            this.state = 1235;
            this.uid();
            this.state = 1240;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function UidContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_uid;
    return this;
}

UidContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UidContext.prototype.constructor = UidContext;

UidContext.prototype.ID_LITERAL = function() {
    return this.getToken(FlinkSqlParser.ID_LITERAL, 0);
};

UidContext.prototype.DOT_ID = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.DOT_ID);
    } else {
        return this.getToken(FlinkSqlParser.DOT_ID, i);
    }
};


UidContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterUid(this);
	}
};

UidContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitUid(this);
	}
};

UidContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitUid(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.UidContext = UidContext;

FlinkSqlParser.prototype.uid = function() {

    var localctx = new UidContext(this, this._ctx, this.state);
    this.enterRule(localctx, 186, FlinkSqlParser.RULE_uid);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1241;
        this.match(FlinkSqlParser.ID_LITERAL);
        this.state = 1245;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,145,this._ctx)
        while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1+1) {
                this.state = 1242;
                this.match(FlinkSqlParser.DOT_ID); 
            }
            this.state = 1247;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,145,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function PlusUidContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_plusUid;
    return this;
}

PlusUidContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PlusUidContext.prototype.constructor = PlusUidContext;

PlusUidContext.prototype.ID_LITERAL = function() {
    return this.getToken(FlinkSqlParser.ID_LITERAL, 0);
};

PlusUidContext.prototype.PLUS_ID_LITERAL = function() {
    return this.getToken(FlinkSqlParser.PLUS_ID_LITERAL, 0);
};

PlusUidContext.prototype.DOT_ID = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.DOT_ID);
    } else {
        return this.getToken(FlinkSqlParser.DOT_ID, i);
    }
};


PlusUidContext.prototype.PLUS_DOT_ID = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.PLUS_DOT_ID);
    } else {
        return this.getToken(FlinkSqlParser.PLUS_DOT_ID, i);
    }
};


PlusUidContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterPlusUid(this);
	}
};

PlusUidContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitPlusUid(this);
	}
};

PlusUidContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitPlusUid(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.PlusUidContext = PlusUidContext;

FlinkSqlParser.prototype.plusUid = function() {

    var localctx = new PlusUidContext(this, this._ctx, this.state);
    this.enterRule(localctx, 188, FlinkSqlParser.RULE_plusUid);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1248;
        _la = this._input.LA(1);
        if(!(_la===FlinkSqlParser.ID_LITERAL || _la===FlinkSqlParser.PLUS_ID_LITERAL)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
        this.state = 1252;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,146,this._ctx)
        while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1+1) {
                this.state = 1249;
                _la = this._input.LA(1);
                if(!(_la===FlinkSqlParser.DOT_ID || _la===FlinkSqlParser.PLUS_DOT_ID)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                } 
            }
            this.state = 1254;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,146,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function WithOptionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_withOption;
    return this;
}

WithOptionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
WithOptionContext.prototype.constructor = WithOptionContext;

WithOptionContext.prototype.WITH = function() {
    return this.getToken(FlinkSqlParser.WITH, 0);
};

WithOptionContext.prototype.tablePropertyList = function() {
    return this.getTypedRuleContext(TablePropertyListContext,0);
};

WithOptionContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterWithOption(this);
	}
};

WithOptionContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitWithOption(this);
	}
};

WithOptionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitWithOption(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.WithOptionContext = WithOptionContext;

FlinkSqlParser.prototype.withOption = function() {

    var localctx = new WithOptionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 190, FlinkSqlParser.RULE_withOption);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1255;
        this.match(FlinkSqlParser.WITH);
        this.state = 1256;
        this.tablePropertyList();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IfNotExistsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_ifNotExists;
    return this;
}

IfNotExistsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IfNotExistsContext.prototype.constructor = IfNotExistsContext;

IfNotExistsContext.prototype.IF = function() {
    return this.getToken(FlinkSqlParser.IF, 0);
};

IfNotExistsContext.prototype.NOT = function() {
    return this.getToken(FlinkSqlParser.NOT, 0);
};

IfNotExistsContext.prototype.EXISTS = function() {
    return this.getToken(FlinkSqlParser.EXISTS, 0);
};

IfNotExistsContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterIfNotExists(this);
	}
};

IfNotExistsContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitIfNotExists(this);
	}
};

IfNotExistsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitIfNotExists(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.IfNotExistsContext = IfNotExistsContext;

FlinkSqlParser.prototype.ifNotExists = function() {

    var localctx = new IfNotExistsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 192, FlinkSqlParser.RULE_ifNotExists);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1258;
        this.match(FlinkSqlParser.IF);
        this.state = 1259;
        this.match(FlinkSqlParser.NOT);
        this.state = 1260;
        this.match(FlinkSqlParser.EXISTS);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IfExistsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_ifExists;
    return this;
}

IfExistsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IfExistsContext.prototype.constructor = IfExistsContext;

IfExistsContext.prototype.IF = function() {
    return this.getToken(FlinkSqlParser.IF, 0);
};

IfExistsContext.prototype.EXISTS = function() {
    return this.getToken(FlinkSqlParser.EXISTS, 0);
};

IfExistsContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterIfExists(this);
	}
};

IfExistsContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitIfExists(this);
	}
};

IfExistsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitIfExists(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.IfExistsContext = IfExistsContext;

FlinkSqlParser.prototype.ifExists = function() {

    var localctx = new IfExistsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 194, FlinkSqlParser.RULE_ifExists);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1262;
        this.match(FlinkSqlParser.IF);
        this.state = 1263;
        this.match(FlinkSqlParser.EXISTS);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TablePropertyListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_tablePropertyList;
    return this;
}

TablePropertyListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TablePropertyListContext.prototype.constructor = TablePropertyListContext;

TablePropertyListContext.prototype.LR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.LR_BRACKET, 0);
};

TablePropertyListContext.prototype.tableProperty = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TablePropertyContext);
    } else {
        return this.getTypedRuleContext(TablePropertyContext,i);
    }
};

TablePropertyListContext.prototype.RR_BRACKET = function() {
    return this.getToken(FlinkSqlParser.RR_BRACKET, 0);
};

TablePropertyListContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.COMMA);
    } else {
        return this.getToken(FlinkSqlParser.COMMA, i);
    }
};


TablePropertyListContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTablePropertyList(this);
	}
};

TablePropertyListContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTablePropertyList(this);
	}
};

TablePropertyListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTablePropertyList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TablePropertyListContext = TablePropertyListContext;

FlinkSqlParser.prototype.tablePropertyList = function() {

    var localctx = new TablePropertyListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 196, FlinkSqlParser.RULE_tablePropertyList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1265;
        this.match(FlinkSqlParser.LR_BRACKET);
        this.state = 1266;
        this.tableProperty();
        this.state = 1271;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===FlinkSqlParser.COMMA) {
            this.state = 1267;
            this.match(FlinkSqlParser.COMMA);
            this.state = 1268;
            this.tableProperty();
            this.state = 1273;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1274;
        this.match(FlinkSqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TablePropertyContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_tableProperty;
    this.key = null; // TablePropertyKeyContext
    this.value = null; // TablePropertyValueContext
    return this;
}

TablePropertyContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TablePropertyContext.prototype.constructor = TablePropertyContext;

TablePropertyContext.prototype.tablePropertyKey = function() {
    return this.getTypedRuleContext(TablePropertyKeyContext,0);
};

TablePropertyContext.prototype.tablePropertyValue = function() {
    return this.getTypedRuleContext(TablePropertyValueContext,0);
};

TablePropertyContext.prototype.EQUAL_SYMBOL = function() {
    return this.getToken(FlinkSqlParser.EQUAL_SYMBOL, 0);
};

TablePropertyContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTableProperty(this);
	}
};

TablePropertyContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTableProperty(this);
	}
};

TablePropertyContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTableProperty(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TablePropertyContext = TablePropertyContext;

FlinkSqlParser.prototype.tableProperty = function() {

    var localctx = new TablePropertyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 198, FlinkSqlParser.RULE_tableProperty);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1276;
        localctx.key = this.tablePropertyKey();
        this.state = 1281;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===FlinkSqlParser.TRUE || _la===FlinkSqlParser.FALSE || ((((_la - 256)) & ~0x1f) == 0 && ((1 << (_la - 256)) & ((1 << (FlinkSqlParser.EQUAL_SYMBOL - 256)) | (1 << (FlinkSqlParser.STRING_LITERAL - 256)) | (1 << (FlinkSqlParser.DIG_LITERAL - 256)))) !== 0) || _la===FlinkSqlParser.REAL_LITERAL) {
            this.state = 1278;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.EQUAL_SYMBOL) {
                this.state = 1277;
                this.match(FlinkSqlParser.EQUAL_SYMBOL);
            }

            this.state = 1280;
            localctx.value = this.tablePropertyValue();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TablePropertyKeyContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_tablePropertyKey;
    return this;
}

TablePropertyKeyContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TablePropertyKeyContext.prototype.constructor = TablePropertyKeyContext;

TablePropertyKeyContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

TablePropertyKeyContext.prototype.dereferenceDefinition = function() {
    return this.getTypedRuleContext(DereferenceDefinitionContext,0);
};

TablePropertyKeyContext.prototype.STRING_LITERAL = function() {
    return this.getToken(FlinkSqlParser.STRING_LITERAL, 0);
};

TablePropertyKeyContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTablePropertyKey(this);
	}
};

TablePropertyKeyContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTablePropertyKey(this);
	}
};

TablePropertyKeyContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTablePropertyKey(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TablePropertyKeyContext = TablePropertyKeyContext;

FlinkSqlParser.prototype.tablePropertyKey = function() {

    var localctx = new TablePropertyKeyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 200, FlinkSqlParser.RULE_tablePropertyKey);
    try {
        this.state = 1286;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,150,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1283;
            this.identifier();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1284;
            this.dereferenceDefinition();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1285;
            this.match(FlinkSqlParser.STRING_LITERAL);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TablePropertyValueContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_tablePropertyValue;
    return this;
}

TablePropertyValueContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TablePropertyValueContext.prototype.constructor = TablePropertyValueContext;

TablePropertyValueContext.prototype.DIG_LITERAL = function() {
    return this.getToken(FlinkSqlParser.DIG_LITERAL, 0);
};

TablePropertyValueContext.prototype.REAL_LITERAL = function() {
    return this.getToken(FlinkSqlParser.REAL_LITERAL, 0);
};

TablePropertyValueContext.prototype.booleanLiteral = function() {
    return this.getTypedRuleContext(BooleanLiteralContext,0);
};

TablePropertyValueContext.prototype.STRING_LITERAL = function() {
    return this.getToken(FlinkSqlParser.STRING_LITERAL, 0);
};

TablePropertyValueContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterTablePropertyValue(this);
	}
};

TablePropertyValueContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitTablePropertyValue(this);
	}
};

TablePropertyValueContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitTablePropertyValue(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.TablePropertyValueContext = TablePropertyValueContext;

FlinkSqlParser.prototype.tablePropertyValue = function() {

    var localctx = new TablePropertyValueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 202, FlinkSqlParser.RULE_tablePropertyValue);
    try {
        this.state = 1292;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.DIG_LITERAL:
            this.enterOuterAlt(localctx, 1);
            this.state = 1288;
            this.match(FlinkSqlParser.DIG_LITERAL);
            break;
        case FlinkSqlParser.REAL_LITERAL:
            this.enterOuterAlt(localctx, 2);
            this.state = 1289;
            this.match(FlinkSqlParser.REAL_LITERAL);
            break;
        case FlinkSqlParser.TRUE:
        case FlinkSqlParser.FALSE:
            this.enterOuterAlt(localctx, 3);
            this.state = 1290;
            this.booleanLiteral();
            break;
        case FlinkSqlParser.STRING_LITERAL:
            this.enterOuterAlt(localctx, 4);
            this.state = 1291;
            this.match(FlinkSqlParser.STRING_LITERAL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function LogicalOperatorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_logicalOperator;
    return this;
}

LogicalOperatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LogicalOperatorContext.prototype.constructor = LogicalOperatorContext;

LogicalOperatorContext.prototype.AND = function() {
    return this.getToken(FlinkSqlParser.AND, 0);
};

LogicalOperatorContext.prototype.BIT_AND_OP = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.BIT_AND_OP);
    } else {
        return this.getToken(FlinkSqlParser.BIT_AND_OP, i);
    }
};


LogicalOperatorContext.prototype.OR = function() {
    return this.getToken(FlinkSqlParser.OR, 0);
};

LogicalOperatorContext.prototype.BIT_OR_OP = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.BIT_OR_OP);
    } else {
        return this.getToken(FlinkSqlParser.BIT_OR_OP, i);
    }
};


LogicalOperatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterLogicalOperator(this);
	}
};

LogicalOperatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitLogicalOperator(this);
	}
};

LogicalOperatorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitLogicalOperator(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.LogicalOperatorContext = LogicalOperatorContext;

FlinkSqlParser.prototype.logicalOperator = function() {

    var localctx = new LogicalOperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 204, FlinkSqlParser.RULE_logicalOperator);
    try {
        this.state = 1300;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.AND:
            this.enterOuterAlt(localctx, 1);
            this.state = 1294;
            this.match(FlinkSqlParser.AND);
            break;
        case FlinkSqlParser.BIT_AND_OP:
            this.enterOuterAlt(localctx, 2);
            this.state = 1295;
            this.match(FlinkSqlParser.BIT_AND_OP);
            this.state = 1296;
            this.match(FlinkSqlParser.BIT_AND_OP);
            break;
        case FlinkSqlParser.OR:
            this.enterOuterAlt(localctx, 3);
            this.state = 1297;
            this.match(FlinkSqlParser.OR);
            break;
        case FlinkSqlParser.BIT_OR_OP:
            this.enterOuterAlt(localctx, 4);
            this.state = 1298;
            this.match(FlinkSqlParser.BIT_OR_OP);
            this.state = 1299;
            this.match(FlinkSqlParser.BIT_OR_OP);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ComparisonOperatorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_comparisonOperator;
    return this;
}

ComparisonOperatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ComparisonOperatorContext.prototype.constructor = ComparisonOperatorContext;

ComparisonOperatorContext.prototype.EQUAL_SYMBOL = function() {
    return this.getToken(FlinkSqlParser.EQUAL_SYMBOL, 0);
};

ComparisonOperatorContext.prototype.GREATER_SYMBOL = function() {
    return this.getToken(FlinkSqlParser.GREATER_SYMBOL, 0);
};

ComparisonOperatorContext.prototype.LESS_SYMBOL = function() {
    return this.getToken(FlinkSqlParser.LESS_SYMBOL, 0);
};

ComparisonOperatorContext.prototype.EXCLAMATION_SYMBOL = function() {
    return this.getToken(FlinkSqlParser.EXCLAMATION_SYMBOL, 0);
};

ComparisonOperatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterComparisonOperator(this);
	}
};

ComparisonOperatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitComparisonOperator(this);
	}
};

ComparisonOperatorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitComparisonOperator(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ComparisonOperatorContext = ComparisonOperatorContext;

FlinkSqlParser.prototype.comparisonOperator = function() {

    var localctx = new ComparisonOperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 206, FlinkSqlParser.RULE_comparisonOperator);
    try {
        this.state = 1316;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,153,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1302;
            this.match(FlinkSqlParser.EQUAL_SYMBOL);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1303;
            this.match(FlinkSqlParser.GREATER_SYMBOL);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1304;
            this.match(FlinkSqlParser.LESS_SYMBOL);
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1305;
            this.match(FlinkSqlParser.LESS_SYMBOL);
            this.state = 1306;
            this.match(FlinkSqlParser.EQUAL_SYMBOL);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1307;
            this.match(FlinkSqlParser.GREATER_SYMBOL);
            this.state = 1308;
            this.match(FlinkSqlParser.EQUAL_SYMBOL);
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1309;
            this.match(FlinkSqlParser.LESS_SYMBOL);
            this.state = 1310;
            this.match(FlinkSqlParser.GREATER_SYMBOL);
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 1311;
            this.match(FlinkSqlParser.EXCLAMATION_SYMBOL);
            this.state = 1312;
            this.match(FlinkSqlParser.EQUAL_SYMBOL);
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 1313;
            this.match(FlinkSqlParser.LESS_SYMBOL);
            this.state = 1314;
            this.match(FlinkSqlParser.EQUAL_SYMBOL);
            this.state = 1315;
            this.match(FlinkSqlParser.GREATER_SYMBOL);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function BitOperatorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_bitOperator;
    return this;
}

BitOperatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BitOperatorContext.prototype.constructor = BitOperatorContext;

BitOperatorContext.prototype.LESS_SYMBOL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.LESS_SYMBOL);
    } else {
        return this.getToken(FlinkSqlParser.LESS_SYMBOL, i);
    }
};


BitOperatorContext.prototype.GREATER_SYMBOL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(FlinkSqlParser.GREATER_SYMBOL);
    } else {
        return this.getToken(FlinkSqlParser.GREATER_SYMBOL, i);
    }
};


BitOperatorContext.prototype.BIT_AND_OP = function() {
    return this.getToken(FlinkSqlParser.BIT_AND_OP, 0);
};

BitOperatorContext.prototype.BIT_XOR_OP = function() {
    return this.getToken(FlinkSqlParser.BIT_XOR_OP, 0);
};

BitOperatorContext.prototype.BIT_OR_OP = function() {
    return this.getToken(FlinkSqlParser.BIT_OR_OP, 0);
};

BitOperatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterBitOperator(this);
	}
};

BitOperatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitBitOperator(this);
	}
};

BitOperatorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitBitOperator(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.BitOperatorContext = BitOperatorContext;

FlinkSqlParser.prototype.bitOperator = function() {

    var localctx = new BitOperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 208, FlinkSqlParser.RULE_bitOperator);
    try {
        this.state = 1325;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.LESS_SYMBOL:
            this.enterOuterAlt(localctx, 1);
            this.state = 1318;
            this.match(FlinkSqlParser.LESS_SYMBOL);
            this.state = 1319;
            this.match(FlinkSqlParser.LESS_SYMBOL);
            break;
        case FlinkSqlParser.GREATER_SYMBOL:
            this.enterOuterAlt(localctx, 2);
            this.state = 1320;
            this.match(FlinkSqlParser.GREATER_SYMBOL);
            this.state = 1321;
            this.match(FlinkSqlParser.GREATER_SYMBOL);
            break;
        case FlinkSqlParser.BIT_AND_OP:
            this.enterOuterAlt(localctx, 3);
            this.state = 1322;
            this.match(FlinkSqlParser.BIT_AND_OP);
            break;
        case FlinkSqlParser.BIT_XOR_OP:
            this.enterOuterAlt(localctx, 4);
            this.state = 1323;
            this.match(FlinkSqlParser.BIT_XOR_OP);
            break;
        case FlinkSqlParser.BIT_OR_OP:
            this.enterOuterAlt(localctx, 5);
            this.state = 1324;
            this.match(FlinkSqlParser.BIT_OR_OP);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function MathOperatorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_mathOperator;
    return this;
}

MathOperatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
MathOperatorContext.prototype.constructor = MathOperatorContext;

MathOperatorContext.prototype.ASTERISK_SIGN = function() {
    return this.getToken(FlinkSqlParser.ASTERISK_SIGN, 0);
};

MathOperatorContext.prototype.SLASH_SIGN = function() {
    return this.getToken(FlinkSqlParser.SLASH_SIGN, 0);
};

MathOperatorContext.prototype.PENCENT_SIGN = function() {
    return this.getToken(FlinkSqlParser.PENCENT_SIGN, 0);
};

MathOperatorContext.prototype.DIV = function() {
    return this.getToken(FlinkSqlParser.DIV, 0);
};

MathOperatorContext.prototype.ADD_SIGN = function() {
    return this.getToken(FlinkSqlParser.ADD_SIGN, 0);
};

MathOperatorContext.prototype.HYPNEN_SIGN = function() {
    return this.getToken(FlinkSqlParser.HYPNEN_SIGN, 0);
};

MathOperatorContext.prototype.DOUBLE_HYPNEN_SIGN = function() {
    return this.getToken(FlinkSqlParser.DOUBLE_HYPNEN_SIGN, 0);
};

MathOperatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterMathOperator(this);
	}
};

MathOperatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitMathOperator(this);
	}
};

MathOperatorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitMathOperator(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.MathOperatorContext = MathOperatorContext;

FlinkSqlParser.prototype.mathOperator = function() {

    var localctx = new MathOperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 210, FlinkSqlParser.RULE_mathOperator);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1327;
        _la = this._input.LA(1);
        if(!(_la===FlinkSqlParser.DIV || ((((_la - 276)) & ~0x1f) == 0 && ((1 << (_la - 276)) & ((1 << (FlinkSqlParser.ASTERISK_SIGN - 276)) | (1 << (FlinkSqlParser.HYPNEN_SIGN - 276)) | (1 << (FlinkSqlParser.ADD_SIGN - 276)) | (1 << (FlinkSqlParser.PENCENT_SIGN - 276)) | (1 << (FlinkSqlParser.DOUBLE_HYPNEN_SIGN - 276)) | (1 << (FlinkSqlParser.SLASH_SIGN - 276)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function UnaryOperatorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_unaryOperator;
    return this;
}

UnaryOperatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UnaryOperatorContext.prototype.constructor = UnaryOperatorContext;

UnaryOperatorContext.prototype.EXCLAMATION_SYMBOL = function() {
    return this.getToken(FlinkSqlParser.EXCLAMATION_SYMBOL, 0);
};

UnaryOperatorContext.prototype.BIT_NOT_OP = function() {
    return this.getToken(FlinkSqlParser.BIT_NOT_OP, 0);
};

UnaryOperatorContext.prototype.ADD_SIGN = function() {
    return this.getToken(FlinkSqlParser.ADD_SIGN, 0);
};

UnaryOperatorContext.prototype.HYPNEN_SIGN = function() {
    return this.getToken(FlinkSqlParser.HYPNEN_SIGN, 0);
};

UnaryOperatorContext.prototype.NOT = function() {
    return this.getToken(FlinkSqlParser.NOT, 0);
};

UnaryOperatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterUnaryOperator(this);
	}
};

UnaryOperatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitUnaryOperator(this);
	}
};

UnaryOperatorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitUnaryOperator(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.UnaryOperatorContext = UnaryOperatorContext;

FlinkSqlParser.prototype.unaryOperator = function() {

    var localctx = new UnaryOperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 212, FlinkSqlParser.RULE_unaryOperator);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1329;
        _la = this._input.LA(1);
        if(!(_la===FlinkSqlParser.NOT || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (FlinkSqlParser.EXCLAMATION_SYMBOL - 259)) | (1 << (FlinkSqlParser.BIT_NOT_OP - 259)) | (1 << (FlinkSqlParser.HYPNEN_SIGN - 259)) | (1 << (FlinkSqlParser.ADD_SIGN - 259)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function FullColumnNameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_fullColumnName;
    return this;
}

FullColumnNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FullColumnNameContext.prototype.constructor = FullColumnNameContext;

FullColumnNameContext.prototype.uid = function() {
    return this.getTypedRuleContext(UidContext,0);
};

FullColumnNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterFullColumnName(this);
	}
};

FullColumnNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitFullColumnName(this);
	}
};

FullColumnNameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitFullColumnName(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.FullColumnNameContext = FullColumnNameContext;

FlinkSqlParser.prototype.fullColumnName = function() {

    var localctx = new FullColumnNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 214, FlinkSqlParser.RULE_fullColumnName);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1331;
        this.uid();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ConstantContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_constant;
    return this;
}

ConstantContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ConstantContext.prototype.constructor = ConstantContext;

ConstantContext.prototype.stringLiteral = function() {
    return this.getTypedRuleContext(StringLiteralContext,0);
};

ConstantContext.prototype.decimalLiteral = function() {
    return this.getTypedRuleContext(DecimalLiteralContext,0);
};

ConstantContext.prototype.interval = function() {
    return this.getTypedRuleContext(IntervalContext,0);
};

ConstantContext.prototype.HYPNEN_SIGN = function() {
    return this.getToken(FlinkSqlParser.HYPNEN_SIGN, 0);
};

ConstantContext.prototype.booleanLiteral = function() {
    return this.getTypedRuleContext(BooleanLiteralContext,0);
};

ConstantContext.prototype.REAL_LITERAL = function() {
    return this.getToken(FlinkSqlParser.REAL_LITERAL, 0);
};

ConstantContext.prototype.BIT_STRING = function() {
    return this.getToken(FlinkSqlParser.BIT_STRING, 0);
};

ConstantContext.prototype.NULL = function() {
    return this.getToken(FlinkSqlParser.NULL, 0);
};

ConstantContext.prototype.NOT = function() {
    return this.getToken(FlinkSqlParser.NOT, 0);
};

ConstantContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterConstant(this);
	}
};

ConstantContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitConstant(this);
	}
};

ConstantContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitConstant(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.ConstantContext = ConstantContext;

FlinkSqlParser.prototype.constant = function() {

    var localctx = new ConstantContext(this, this._ctx, this.state);
    this.enterRule(localctx, 216, FlinkSqlParser.RULE_constant);
    var _la = 0; // Token type
    try {
        this.state = 1345;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case FlinkSqlParser.STRING_LITERAL:
            this.enterOuterAlt(localctx, 1);
            this.state = 1333;
            this.stringLiteral();
            break;
        case FlinkSqlParser.DIG_LITERAL:
            this.enterOuterAlt(localctx, 2);
            this.state = 1334;
            this.decimalLiteral();
            break;
        case FlinkSqlParser.INTERVAL:
            this.enterOuterAlt(localctx, 3);
            this.state = 1335;
            this.interval();
            break;
        case FlinkSqlParser.HYPNEN_SIGN:
            this.enterOuterAlt(localctx, 4);
            this.state = 1336;
            this.match(FlinkSqlParser.HYPNEN_SIGN);
            this.state = 1337;
            this.decimalLiteral();
            break;
        case FlinkSqlParser.TRUE:
        case FlinkSqlParser.FALSE:
            this.enterOuterAlt(localctx, 5);
            this.state = 1338;
            this.booleanLiteral();
            break;
        case FlinkSqlParser.REAL_LITERAL:
            this.enterOuterAlt(localctx, 6);
            this.state = 1339;
            this.match(FlinkSqlParser.REAL_LITERAL);
            break;
        case FlinkSqlParser.BIT_STRING:
            this.enterOuterAlt(localctx, 7);
            this.state = 1340;
            this.match(FlinkSqlParser.BIT_STRING);
            break;
        case FlinkSqlParser.NOT:
        case FlinkSqlParser.NULL:
            this.enterOuterAlt(localctx, 8);
            this.state = 1342;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===FlinkSqlParser.NOT) {
                this.state = 1341;
                this.match(FlinkSqlParser.NOT);
            }

            this.state = 1344;
            this.match(FlinkSqlParser.NULL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function StringLiteralContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_stringLiteral;
    return this;
}

StringLiteralContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StringLiteralContext.prototype.constructor = StringLiteralContext;

StringLiteralContext.prototype.STRING_LITERAL = function() {
    return this.getToken(FlinkSqlParser.STRING_LITERAL, 0);
};

StringLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterStringLiteral(this);
	}
};

StringLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitStringLiteral(this);
	}
};

StringLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitStringLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.StringLiteralContext = StringLiteralContext;

FlinkSqlParser.prototype.stringLiteral = function() {

    var localctx = new StringLiteralContext(this, this._ctx, this.state);
    this.enterRule(localctx, 218, FlinkSqlParser.RULE_stringLiteral);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1347;
        this.match(FlinkSqlParser.STRING_LITERAL);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DecimalLiteralContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_decimalLiteral;
    return this;
}

DecimalLiteralContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DecimalLiteralContext.prototype.constructor = DecimalLiteralContext;

DecimalLiteralContext.prototype.DIG_LITERAL = function() {
    return this.getToken(FlinkSqlParser.DIG_LITERAL, 0);
};

DecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterDecimalLiteral(this);
	}
};

DecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitDecimalLiteral(this);
	}
};

DecimalLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitDecimalLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.DecimalLiteralContext = DecimalLiteralContext;

FlinkSqlParser.prototype.decimalLiteral = function() {

    var localctx = new DecimalLiteralContext(this, this._ctx, this.state);
    this.enterRule(localctx, 220, FlinkSqlParser.RULE_decimalLiteral);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1349;
        this.match(FlinkSqlParser.DIG_LITERAL);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function BooleanLiteralContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_booleanLiteral;
    return this;
}

BooleanLiteralContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BooleanLiteralContext.prototype.constructor = BooleanLiteralContext;

BooleanLiteralContext.prototype.TRUE = function() {
    return this.getToken(FlinkSqlParser.TRUE, 0);
};

BooleanLiteralContext.prototype.FALSE = function() {
    return this.getToken(FlinkSqlParser.FALSE, 0);
};

BooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterBooleanLiteral(this);
	}
};

BooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitBooleanLiteral(this);
	}
};

BooleanLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitBooleanLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.BooleanLiteralContext = BooleanLiteralContext;

FlinkSqlParser.prototype.booleanLiteral = function() {

    var localctx = new BooleanLiteralContext(this, this._ctx, this.state);
    this.enterRule(localctx, 222, FlinkSqlParser.RULE_booleanLiteral);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1351;
        _la = this._input.LA(1);
        if(!(_la===FlinkSqlParser.TRUE || _la===FlinkSqlParser.FALSE)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SetQuantifierContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_setQuantifier;
    return this;
}

SetQuantifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SetQuantifierContext.prototype.constructor = SetQuantifierContext;

SetQuantifierContext.prototype.DISTINCT = function() {
    return this.getToken(FlinkSqlParser.DISTINCT, 0);
};

SetQuantifierContext.prototype.ALL = function() {
    return this.getToken(FlinkSqlParser.ALL, 0);
};

SetQuantifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterSetQuantifier(this);
	}
};

SetQuantifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitSetQuantifier(this);
	}
};

SetQuantifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitSetQuantifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.SetQuantifierContext = SetQuantifierContext;

FlinkSqlParser.prototype.setQuantifier = function() {

    var localctx = new SetQuantifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 224, FlinkSqlParser.RULE_setQuantifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1353;
        _la = this._input.LA(1);
        if(!(_la===FlinkSqlParser.ALL || _la===FlinkSqlParser.DISTINCT)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AnsiNonReservedContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_ansiNonReserved;
    return this;
}

AnsiNonReservedContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AnsiNonReservedContext.prototype.constructor = AnsiNonReservedContext;

AnsiNonReservedContext.prototype.ADD = function() {
    return this.getToken(FlinkSqlParser.ADD, 0);
};

AnsiNonReservedContext.prototype.AFTER = function() {
    return this.getToken(FlinkSqlParser.AFTER, 0);
};

AnsiNonReservedContext.prototype.ALTER = function() {
    return this.getToken(FlinkSqlParser.ALTER, 0);
};

AnsiNonReservedContext.prototype.ANALYZE = function() {
    return this.getToken(FlinkSqlParser.ANALYZE, 0);
};

AnsiNonReservedContext.prototype.ANTI = function() {
    return this.getToken(FlinkSqlParser.ANTI, 0);
};

AnsiNonReservedContext.prototype.ARCHIVE = function() {
    return this.getToken(FlinkSqlParser.ARCHIVE, 0);
};

AnsiNonReservedContext.prototype.ARRAY = function() {
    return this.getToken(FlinkSqlParser.ARRAY, 0);
};

AnsiNonReservedContext.prototype.ASC = function() {
    return this.getToken(FlinkSqlParser.ASC, 0);
};

AnsiNonReservedContext.prototype.AT = function() {
    return this.getToken(FlinkSqlParser.AT, 0);
};

AnsiNonReservedContext.prototype.BETWEEN = function() {
    return this.getToken(FlinkSqlParser.BETWEEN, 0);
};

AnsiNonReservedContext.prototype.BIGINT = function() {
    return this.getToken(FlinkSqlParser.BIGINT, 0);
};

AnsiNonReservedContext.prototype.BINARY = function() {
    return this.getToken(FlinkSqlParser.BINARY, 0);
};

AnsiNonReservedContext.prototype.BOOLEAN = function() {
    return this.getToken(FlinkSqlParser.BOOLEAN, 0);
};

AnsiNonReservedContext.prototype.BUCKET = function() {
    return this.getToken(FlinkSqlParser.BUCKET, 0);
};

AnsiNonReservedContext.prototype.BUCKETS = function() {
    return this.getToken(FlinkSqlParser.BUCKETS, 0);
};

AnsiNonReservedContext.prototype.BY = function() {
    return this.getToken(FlinkSqlParser.BY, 0);
};

AnsiNonReservedContext.prototype.BYTES = function() {
    return this.getToken(FlinkSqlParser.BYTES, 0);
};

AnsiNonReservedContext.prototype.CACHE = function() {
    return this.getToken(FlinkSqlParser.CACHE, 0);
};

AnsiNonReservedContext.prototype.CASCADE = function() {
    return this.getToken(FlinkSqlParser.CASCADE, 0);
};

AnsiNonReservedContext.prototype.CATALOG = function() {
    return this.getToken(FlinkSqlParser.CATALOG, 0);
};

AnsiNonReservedContext.prototype.CATALOGS = function() {
    return this.getToken(FlinkSqlParser.CATALOGS, 0);
};

AnsiNonReservedContext.prototype.CHANGE = function() {
    return this.getToken(FlinkSqlParser.CHANGE, 0);
};

AnsiNonReservedContext.prototype.CHAR = function() {
    return this.getToken(FlinkSqlParser.CHAR, 0);
};

AnsiNonReservedContext.prototype.CLEAR = function() {
    return this.getToken(FlinkSqlParser.CLEAR, 0);
};

AnsiNonReservedContext.prototype.CLUSTER = function() {
    return this.getToken(FlinkSqlParser.CLUSTER, 0);
};

AnsiNonReservedContext.prototype.CLUSTERED = function() {
    return this.getToken(FlinkSqlParser.CLUSTERED, 0);
};

AnsiNonReservedContext.prototype.CODEGEN = function() {
    return this.getToken(FlinkSqlParser.CODEGEN, 0);
};

AnsiNonReservedContext.prototype.COLLECTION = function() {
    return this.getToken(FlinkSqlParser.COLLECTION, 0);
};

AnsiNonReservedContext.prototype.COLUMNS = function() {
    return this.getToken(FlinkSqlParser.COLUMNS, 0);
};

AnsiNonReservedContext.prototype.COMMENT = function() {
    return this.getToken(FlinkSqlParser.COMMENT, 0);
};

AnsiNonReservedContext.prototype.COMMIT = function() {
    return this.getToken(FlinkSqlParser.COMMIT, 0);
};

AnsiNonReservedContext.prototype.COMPACT = function() {
    return this.getToken(FlinkSqlParser.COMPACT, 0);
};

AnsiNonReservedContext.prototype.COMPACTIONS = function() {
    return this.getToken(FlinkSqlParser.COMPACTIONS, 0);
};

AnsiNonReservedContext.prototype.COMPUTE = function() {
    return this.getToken(FlinkSqlParser.COMPUTE, 0);
};

AnsiNonReservedContext.prototype.CONCATENATE = function() {
    return this.getToken(FlinkSqlParser.CONCATENATE, 0);
};

AnsiNonReservedContext.prototype.CONSTRAINTS = function() {
    return this.getToken(FlinkSqlParser.CONSTRAINTS, 0);
};

AnsiNonReservedContext.prototype.COST = function() {
    return this.getToken(FlinkSqlParser.COST, 0);
};

AnsiNonReservedContext.prototype.CUBE = function() {
    return this.getToken(FlinkSqlParser.CUBE, 0);
};

AnsiNonReservedContext.prototype.CURRENT = function() {
    return this.getToken(FlinkSqlParser.CURRENT, 0);
};

AnsiNonReservedContext.prototype.DATA = function() {
    return this.getToken(FlinkSqlParser.DATA, 0);
};

AnsiNonReservedContext.prototype.DATABASE = function() {
    return this.getToken(FlinkSqlParser.DATABASE, 0);
};

AnsiNonReservedContext.prototype.DATABASES = function() {
    return this.getToken(FlinkSqlParser.DATABASES, 0);
};

AnsiNonReservedContext.prototype.DATE = function() {
    return this.getToken(FlinkSqlParser.DATE, 0);
};

AnsiNonReservedContext.prototype.DATETIME = function() {
    return this.getToken(FlinkSqlParser.DATETIME, 0);
};

AnsiNonReservedContext.prototype.DBPROPERTIES = function() {
    return this.getToken(FlinkSqlParser.DBPROPERTIES, 0);
};

AnsiNonReservedContext.prototype.DECIMAL = function() {
    return this.getToken(FlinkSqlParser.DECIMAL, 0);
};

AnsiNonReservedContext.prototype.DEFINED = function() {
    return this.getToken(FlinkSqlParser.DEFINED, 0);
};

AnsiNonReservedContext.prototype.DELETE = function() {
    return this.getToken(FlinkSqlParser.DELETE, 0);
};

AnsiNonReservedContext.prototype.DELIMITED = function() {
    return this.getToken(FlinkSqlParser.DELIMITED, 0);
};

AnsiNonReservedContext.prototype.DESC = function() {
    return this.getToken(FlinkSqlParser.DESC, 0);
};

AnsiNonReservedContext.prototype.DESCRIBE = function() {
    return this.getToken(FlinkSqlParser.DESCRIBE, 0);
};

AnsiNonReservedContext.prototype.DFS = function() {
    return this.getToken(FlinkSqlParser.DFS, 0);
};

AnsiNonReservedContext.prototype.DIRECTORIES = function() {
    return this.getToken(FlinkSqlParser.DIRECTORIES, 0);
};

AnsiNonReservedContext.prototype.DIRECTORY = function() {
    return this.getToken(FlinkSqlParser.DIRECTORY, 0);
};

AnsiNonReservedContext.prototype.DISTRIBUTE = function() {
    return this.getToken(FlinkSqlParser.DISTRIBUTE, 0);
};

AnsiNonReservedContext.prototype.DIV = function() {
    return this.getToken(FlinkSqlParser.DIV, 0);
};

AnsiNonReservedContext.prototype.DOUBLE = function() {
    return this.getToken(FlinkSqlParser.DOUBLE, 0);
};

AnsiNonReservedContext.prototype.DROP = function() {
    return this.getToken(FlinkSqlParser.DROP, 0);
};

AnsiNonReservedContext.prototype.ESCAPED = function() {
    return this.getToken(FlinkSqlParser.ESCAPED, 0);
};

AnsiNonReservedContext.prototype.EXCHANGE = function() {
    return this.getToken(FlinkSqlParser.EXCHANGE, 0);
};

AnsiNonReservedContext.prototype.EXCLUDING = function() {
    return this.getToken(FlinkSqlParser.EXCLUDING, 0);
};

AnsiNonReservedContext.prototype.EXISTS = function() {
    return this.getToken(FlinkSqlParser.EXISTS, 0);
};

AnsiNonReservedContext.prototype.EXPLAIN = function() {
    return this.getToken(FlinkSqlParser.EXPLAIN, 0);
};

AnsiNonReservedContext.prototype.EXPORT = function() {
    return this.getToken(FlinkSqlParser.EXPORT, 0);
};

AnsiNonReservedContext.prototype.EXTENDED = function() {
    return this.getToken(FlinkSqlParser.EXTENDED, 0);
};

AnsiNonReservedContext.prototype.EXTERNAL = function() {
    return this.getToken(FlinkSqlParser.EXTERNAL, 0);
};

AnsiNonReservedContext.prototype.EXTRACT = function() {
    return this.getToken(FlinkSqlParser.EXTRACT, 0);
};

AnsiNonReservedContext.prototype.FIELDS = function() {
    return this.getToken(FlinkSqlParser.FIELDS, 0);
};

AnsiNonReservedContext.prototype.FILEFORMAT = function() {
    return this.getToken(FlinkSqlParser.FILEFORMAT, 0);
};

AnsiNonReservedContext.prototype.FIRST = function() {
    return this.getToken(FlinkSqlParser.FIRST, 0);
};

AnsiNonReservedContext.prototype.FLOAT = function() {
    return this.getToken(FlinkSqlParser.FLOAT, 0);
};

AnsiNonReservedContext.prototype.FOLLOWING = function() {
    return this.getToken(FlinkSqlParser.FOLLOWING, 0);
};

AnsiNonReservedContext.prototype.FORMAT = function() {
    return this.getToken(FlinkSqlParser.FORMAT, 0);
};

AnsiNonReservedContext.prototype.FORMATTED = function() {
    return this.getToken(FlinkSqlParser.FORMATTED, 0);
};

AnsiNonReservedContext.prototype.FUNCTION = function() {
    return this.getToken(FlinkSqlParser.FUNCTION, 0);
};

AnsiNonReservedContext.prototype.FUNCTIONS = function() {
    return this.getToken(FlinkSqlParser.FUNCTIONS, 0);
};

AnsiNonReservedContext.prototype.GENERATED = function() {
    return this.getToken(FlinkSqlParser.GENERATED, 0);
};

AnsiNonReservedContext.prototype.GLOBAL = function() {
    return this.getToken(FlinkSqlParser.GLOBAL, 0);
};

AnsiNonReservedContext.prototype.GROUPING = function() {
    return this.getToken(FlinkSqlParser.GROUPING, 0);
};

AnsiNonReservedContext.prototype.IF = function() {
    return this.getToken(FlinkSqlParser.IF, 0);
};

AnsiNonReservedContext.prototype.IGNORE = function() {
    return this.getToken(FlinkSqlParser.IGNORE, 0);
};

AnsiNonReservedContext.prototype.IMPORT = function() {
    return this.getToken(FlinkSqlParser.IMPORT, 0);
};

AnsiNonReservedContext.prototype.INCLUDING = function() {
    return this.getToken(FlinkSqlParser.INCLUDING, 0);
};

AnsiNonReservedContext.prototype.INDEX = function() {
    return this.getToken(FlinkSqlParser.INDEX, 0);
};

AnsiNonReservedContext.prototype.INDEXES = function() {
    return this.getToken(FlinkSqlParser.INDEXES, 0);
};

AnsiNonReservedContext.prototype.INPATH = function() {
    return this.getToken(FlinkSqlParser.INPATH, 0);
};

AnsiNonReservedContext.prototype.INPUTFORMAT = function() {
    return this.getToken(FlinkSqlParser.INPUTFORMAT, 0);
};

AnsiNonReservedContext.prototype.INSERT = function() {
    return this.getToken(FlinkSqlParser.INSERT, 0);
};

AnsiNonReservedContext.prototype.INT = function() {
    return this.getToken(FlinkSqlParser.INT, 0);
};

AnsiNonReservedContext.prototype.INTERVAL = function() {
    return this.getToken(FlinkSqlParser.INTERVAL, 0);
};

AnsiNonReservedContext.prototype.ITEMS = function() {
    return this.getToken(FlinkSqlParser.ITEMS, 0);
};

AnsiNonReservedContext.prototype.KEY = function() {
    return this.getToken(FlinkSqlParser.KEY, 0);
};

AnsiNonReservedContext.prototype.KEYS = function() {
    return this.getToken(FlinkSqlParser.KEYS, 0);
};

AnsiNonReservedContext.prototype.LANGUAGE = function() {
    return this.getToken(FlinkSqlParser.LANGUAGE, 0);
};

AnsiNonReservedContext.prototype.LAST = function() {
    return this.getToken(FlinkSqlParser.LAST, 0);
};

AnsiNonReservedContext.prototype.LATERAL = function() {
    return this.getToken(FlinkSqlParser.LATERAL, 0);
};

AnsiNonReservedContext.prototype.LAZY = function() {
    return this.getToken(FlinkSqlParser.LAZY, 0);
};

AnsiNonReservedContext.prototype.LIKE = function() {
    return this.getToken(FlinkSqlParser.LIKE, 0);
};

AnsiNonReservedContext.prototype.LIMIT = function() {
    return this.getToken(FlinkSqlParser.LIMIT, 0);
};

AnsiNonReservedContext.prototype.LINES = function() {
    return this.getToken(FlinkSqlParser.LINES, 0);
};

AnsiNonReservedContext.prototype.LIST = function() {
    return this.getToken(FlinkSqlParser.LIST, 0);
};

AnsiNonReservedContext.prototype.LOAD = function() {
    return this.getToken(FlinkSqlParser.LOAD, 0);
};

AnsiNonReservedContext.prototype.LOCAL = function() {
    return this.getToken(FlinkSqlParser.LOCAL, 0);
};

AnsiNonReservedContext.prototype.LOCATION = function() {
    return this.getToken(FlinkSqlParser.LOCATION, 0);
};

AnsiNonReservedContext.prototype.LOCK = function() {
    return this.getToken(FlinkSqlParser.LOCK, 0);
};

AnsiNonReservedContext.prototype.LOCKS = function() {
    return this.getToken(FlinkSqlParser.LOCKS, 0);
};

AnsiNonReservedContext.prototype.LOGICAL = function() {
    return this.getToken(FlinkSqlParser.LOGICAL, 0);
};

AnsiNonReservedContext.prototype.MACRO = function() {
    return this.getToken(FlinkSqlParser.MACRO, 0);
};

AnsiNonReservedContext.prototype.MAP = function() {
    return this.getToken(FlinkSqlParser.MAP, 0);
};

AnsiNonReservedContext.prototype.MATCH = function() {
    return this.getToken(FlinkSqlParser.MATCH, 0);
};

AnsiNonReservedContext.prototype.MINUS = function() {
    return this.getToken(FlinkSqlParser.MINUS, 0);
};

AnsiNonReservedContext.prototype.MSCK = function() {
    return this.getToken(FlinkSqlParser.MSCK, 0);
};

AnsiNonReservedContext.prototype.MULTISET = function() {
    return this.getToken(FlinkSqlParser.MULTISET, 0);
};

AnsiNonReservedContext.prototype.NEXT = function() {
    return this.getToken(FlinkSqlParser.NEXT, 0);
};

AnsiNonReservedContext.prototype.NO = function() {
    return this.getToken(FlinkSqlParser.NO, 0);
};

AnsiNonReservedContext.prototype.NULL = function() {
    return this.getToken(FlinkSqlParser.NULL, 0);
};

AnsiNonReservedContext.prototype.NULLS = function() {
    return this.getToken(FlinkSqlParser.NULLS, 0);
};

AnsiNonReservedContext.prototype.OF = function() {
    return this.getToken(FlinkSqlParser.OF, 0);
};

AnsiNonReservedContext.prototype.OPTION = function() {
    return this.getToken(FlinkSqlParser.OPTION, 0);
};

AnsiNonReservedContext.prototype.OPTIONS = function() {
    return this.getToken(FlinkSqlParser.OPTIONS, 0);
};

AnsiNonReservedContext.prototype.OUT = function() {
    return this.getToken(FlinkSqlParser.OUT, 0);
};

AnsiNonReservedContext.prototype.OUTPUTFORMAT = function() {
    return this.getToken(FlinkSqlParser.OUTPUTFORMAT, 0);
};

AnsiNonReservedContext.prototype.OVER = function() {
    return this.getToken(FlinkSqlParser.OVER, 0);
};

AnsiNonReservedContext.prototype.OVERWRITE = function() {
    return this.getToken(FlinkSqlParser.OVERWRITE, 0);
};

AnsiNonReservedContext.prototype.PARTITION = function() {
    return this.getToken(FlinkSqlParser.PARTITION, 0);
};

AnsiNonReservedContext.prototype.PARTITIONED = function() {
    return this.getToken(FlinkSqlParser.PARTITIONED, 0);
};

AnsiNonReservedContext.prototype.PARTITIONS = function() {
    return this.getToken(FlinkSqlParser.PARTITIONS, 0);
};

AnsiNonReservedContext.prototype.PERCENTLIT = function() {
    return this.getToken(FlinkSqlParser.PERCENTLIT, 0);
};

AnsiNonReservedContext.prototype.PERIOD = function() {
    return this.getToken(FlinkSqlParser.PERIOD, 0);
};

AnsiNonReservedContext.prototype.PIVOT = function() {
    return this.getToken(FlinkSqlParser.PIVOT, 0);
};

AnsiNonReservedContext.prototype.POSITION = function() {
    return this.getToken(FlinkSqlParser.POSITION, 0);
};

AnsiNonReservedContext.prototype.PRECEDING = function() {
    return this.getToken(FlinkSqlParser.PRECEDING, 0);
};

AnsiNonReservedContext.prototype.PRINCIPALS = function() {
    return this.getToken(FlinkSqlParser.PRINCIPALS, 0);
};

AnsiNonReservedContext.prototype.PURGE = function() {
    return this.getToken(FlinkSqlParser.PURGE, 0);
};

AnsiNonReservedContext.prototype.RANGE = function() {
    return this.getToken(FlinkSqlParser.RANGE, 0);
};

AnsiNonReservedContext.prototype.RAW = function() {
    return this.getToken(FlinkSqlParser.RAW, 0);
};

AnsiNonReservedContext.prototype.RECORDREADER = function() {
    return this.getToken(FlinkSqlParser.RECORDREADER, 0);
};

AnsiNonReservedContext.prototype.RECORDWRITER = function() {
    return this.getToken(FlinkSqlParser.RECORDWRITER, 0);
};

AnsiNonReservedContext.prototype.RECOVER = function() {
    return this.getToken(FlinkSqlParser.RECOVER, 0);
};

AnsiNonReservedContext.prototype.REDUCE = function() {
    return this.getToken(FlinkSqlParser.REDUCE, 0);
};

AnsiNonReservedContext.prototype.REFRESH = function() {
    return this.getToken(FlinkSqlParser.REFRESH, 0);
};

AnsiNonReservedContext.prototype.RENAME = function() {
    return this.getToken(FlinkSqlParser.RENAME, 0);
};

AnsiNonReservedContext.prototype.REPAIR = function() {
    return this.getToken(FlinkSqlParser.REPAIR, 0);
};

AnsiNonReservedContext.prototype.REPLACE = function() {
    return this.getToken(FlinkSqlParser.REPLACE, 0);
};

AnsiNonReservedContext.prototype.RESET = function() {
    return this.getToken(FlinkSqlParser.RESET, 0);
};

AnsiNonReservedContext.prototype.RESTRICT = function() {
    return this.getToken(FlinkSqlParser.RESTRICT, 0);
};

AnsiNonReservedContext.prototype.REVOKE = function() {
    return this.getToken(FlinkSqlParser.REVOKE, 0);
};

AnsiNonReservedContext.prototype.RLIKE = function() {
    return this.getToken(FlinkSqlParser.RLIKE, 0);
};

AnsiNonReservedContext.prototype.ROLE = function() {
    return this.getToken(FlinkSqlParser.ROLE, 0);
};

AnsiNonReservedContext.prototype.ROLES = function() {
    return this.getToken(FlinkSqlParser.ROLES, 0);
};

AnsiNonReservedContext.prototype.ROLLBACK = function() {
    return this.getToken(FlinkSqlParser.ROLLBACK, 0);
};

AnsiNonReservedContext.prototype.ROLLUP = function() {
    return this.getToken(FlinkSqlParser.ROLLUP, 0);
};

AnsiNonReservedContext.prototype.ROW = function() {
    return this.getToken(FlinkSqlParser.ROW, 0);
};

AnsiNonReservedContext.prototype.ROWS = function() {
    return this.getToken(FlinkSqlParser.ROWS, 0);
};

AnsiNonReservedContext.prototype.SEMI = function() {
    return this.getToken(FlinkSqlParser.SEMI, 0);
};

AnsiNonReservedContext.prototype.SEPARATED = function() {
    return this.getToken(FlinkSqlParser.SEPARATED, 0);
};

AnsiNonReservedContext.prototype.SERDE = function() {
    return this.getToken(FlinkSqlParser.SERDE, 0);
};

AnsiNonReservedContext.prototype.SERDEPROPERTIES = function() {
    return this.getToken(FlinkSqlParser.SERDEPROPERTIES, 0);
};

AnsiNonReservedContext.prototype.SET = function() {
    return this.getToken(FlinkSqlParser.SET, 0);
};

AnsiNonReservedContext.prototype.SETMINUS = function() {
    return this.getToken(FlinkSqlParser.SETMINUS, 0);
};

AnsiNonReservedContext.prototype.SETS = function() {
    return this.getToken(FlinkSqlParser.SETS, 0);
};

AnsiNonReservedContext.prototype.SHOW = function() {
    return this.getToken(FlinkSqlParser.SHOW, 0);
};

AnsiNonReservedContext.prototype.SKEWED = function() {
    return this.getToken(FlinkSqlParser.SKEWED, 0);
};

AnsiNonReservedContext.prototype.SMALLINT = function() {
    return this.getToken(FlinkSqlParser.SMALLINT, 0);
};

AnsiNonReservedContext.prototype.SORT = function() {
    return this.getToken(FlinkSqlParser.SORT, 0);
};

AnsiNonReservedContext.prototype.SORTED = function() {
    return this.getToken(FlinkSqlParser.SORTED, 0);
};

AnsiNonReservedContext.prototype.START = function() {
    return this.getToken(FlinkSqlParser.START, 0);
};

AnsiNonReservedContext.prototype.STATISTICS = function() {
    return this.getToken(FlinkSqlParser.STATISTICS, 0);
};

AnsiNonReservedContext.prototype.STORED = function() {
    return this.getToken(FlinkSqlParser.STORED, 0);
};

AnsiNonReservedContext.prototype.STRATIFY = function() {
    return this.getToken(FlinkSqlParser.STRATIFY, 0);
};

AnsiNonReservedContext.prototype.STRING = function() {
    return this.getToken(FlinkSqlParser.STRING, 0);
};

AnsiNonReservedContext.prototype.STRUCT = function() {
    return this.getToken(FlinkSqlParser.STRUCT, 0);
};

AnsiNonReservedContext.prototype.SYSTEM = function() {
    return this.getToken(FlinkSqlParser.SYSTEM, 0);
};

AnsiNonReservedContext.prototype.SYSTEM_TIME = function() {
    return this.getToken(FlinkSqlParser.SYSTEM_TIME, 0);
};

AnsiNonReservedContext.prototype.TABLES = function() {
    return this.getToken(FlinkSqlParser.TABLES, 0);
};

AnsiNonReservedContext.prototype.TABLESAMPLE = function() {
    return this.getToken(FlinkSqlParser.TABLESAMPLE, 0);
};

AnsiNonReservedContext.prototype.TBLPROPERTIES = function() {
    return this.getToken(FlinkSqlParser.TBLPROPERTIES, 0);
};

AnsiNonReservedContext.prototype.TEMPORARY = function() {
    return this.getToken(FlinkSqlParser.TEMPORARY, 0);
};

AnsiNonReservedContext.prototype.TERMINATED = function() {
    return this.getToken(FlinkSqlParser.TERMINATED, 0);
};

AnsiNonReservedContext.prototype.TIME = function() {
    return this.getToken(FlinkSqlParser.TIME, 0);
};

AnsiNonReservedContext.prototype.TIMESTAMP = function() {
    return this.getToken(FlinkSqlParser.TIMESTAMP, 0);
};

AnsiNonReservedContext.prototype.TINYINT = function() {
    return this.getToken(FlinkSqlParser.TINYINT, 0);
};

AnsiNonReservedContext.prototype.TOUCH = function() {
    return this.getToken(FlinkSqlParser.TOUCH, 0);
};

AnsiNonReservedContext.prototype.TRANSACTION = function() {
    return this.getToken(FlinkSqlParser.TRANSACTION, 0);
};

AnsiNonReservedContext.prototype.TRANSACTIONS = function() {
    return this.getToken(FlinkSqlParser.TRANSACTIONS, 0);
};

AnsiNonReservedContext.prototype.TRANSFORM = function() {
    return this.getToken(FlinkSqlParser.TRANSFORM, 0);
};

AnsiNonReservedContext.prototype.TRUE = function() {
    return this.getToken(FlinkSqlParser.TRUE, 0);
};

AnsiNonReservedContext.prototype.TRUNCATE = function() {
    return this.getToken(FlinkSqlParser.TRUNCATE, 0);
};

AnsiNonReservedContext.prototype.UNARCHIVE = function() {
    return this.getToken(FlinkSqlParser.UNARCHIVE, 0);
};

AnsiNonReservedContext.prototype.UNBOUNDED = function() {
    return this.getToken(FlinkSqlParser.UNBOUNDED, 0);
};

AnsiNonReservedContext.prototype.UNCACHE = function() {
    return this.getToken(FlinkSqlParser.UNCACHE, 0);
};

AnsiNonReservedContext.prototype.UNLOCK = function() {
    return this.getToken(FlinkSqlParser.UNLOCK, 0);
};

AnsiNonReservedContext.prototype.UNSET = function() {
    return this.getToken(FlinkSqlParser.UNSET, 0);
};

AnsiNonReservedContext.prototype.UNNEST = function() {
    return this.getToken(FlinkSqlParser.UNNEST, 0);
};

AnsiNonReservedContext.prototype.USE = function() {
    return this.getToken(FlinkSqlParser.USE, 0);
};

AnsiNonReservedContext.prototype.VALUES = function() {
    return this.getToken(FlinkSqlParser.VALUES, 0);
};

AnsiNonReservedContext.prototype.VARBINARY = function() {
    return this.getToken(FlinkSqlParser.VARBINARY, 0);
};

AnsiNonReservedContext.prototype.VARCHAR = function() {
    return this.getToken(FlinkSqlParser.VARCHAR, 0);
};

AnsiNonReservedContext.prototype.VIEW = function() {
    return this.getToken(FlinkSqlParser.VIEW, 0);
};

AnsiNonReservedContext.prototype.VIEWS = function() {
    return this.getToken(FlinkSqlParser.VIEWS, 0);
};

AnsiNonReservedContext.prototype.WATERMARK = function() {
    return this.getToken(FlinkSqlParser.WATERMARK, 0);
};

AnsiNonReservedContext.prototype.WINDOW = function() {
    return this.getToken(FlinkSqlParser.WINDOW, 0);
};

AnsiNonReservedContext.prototype.WITHIN = function() {
    return this.getToken(FlinkSqlParser.WITHIN, 0);
};

AnsiNonReservedContext.prototype.WS = function() {
    return this.getToken(FlinkSqlParser.WS, 0);
};

AnsiNonReservedContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterAnsiNonReserved(this);
	}
};

AnsiNonReservedContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitAnsiNonReserved(this);
	}
};

AnsiNonReservedContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitAnsiNonReserved(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.AnsiNonReservedContext = AnsiNonReservedContext;

FlinkSqlParser.prototype.ansiNonReserved = function() {

    var localctx = new AnsiNonReservedContext(this, this._ctx, this.state);
    this.enterRule(localctx, 226, FlinkSqlParser.RULE_ansiNonReserved);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1355;
        _la = this._input.LA(1);
        if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FlinkSqlParser.ADD) | (1 << FlinkSqlParser.BY) | (1 << FlinkSqlParser.GROUPING) | (1 << FlinkSqlParser.SETS) | (1 << FlinkSqlParser.CUBE) | (1 << FlinkSqlParser.ROLLUP) | (1 << FlinkSqlParser.LIMIT) | (1 << FlinkSqlParser.AT) | (1 << FlinkSqlParser.NO) | (1 << FlinkSqlParser.EXISTS) | (1 << FlinkSqlParser.BETWEEN) | (1 << FlinkSqlParser.LIKE) | (1 << FlinkSqlParser.RLIKE))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (FlinkSqlParser.TRUE - 32)) | (1 << (FlinkSqlParser.NULLS - 32)) | (1 << (FlinkSqlParser.ASC - 32)) | (1 << (FlinkSqlParser.DESC - 32)) | (1 << (FlinkSqlParser.INTERVAL - 32)) | (1 << (FlinkSqlParser.SEMI - 32)) | (1 << (FlinkSqlParser.PIVOT - 32)) | (1 << (FlinkSqlParser.LATERAL - 32)) | (1 << (FlinkSqlParser.WINDOW - 32)) | (1 << (FlinkSqlParser.OVER - 32)) | (1 << (FlinkSqlParser.PARTITION - 32)) | (1 << (FlinkSqlParser.RANGE - 32)) | (1 << (FlinkSqlParser.ROWS - 32)) | (1 << (FlinkSqlParser.UNBOUNDED - 32)) | (1 << (FlinkSqlParser.PRECEDING - 32)) | (1 << (FlinkSqlParser.FOLLOWING - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (FlinkSqlParser.CURRENT - 64)) | (1 << (FlinkSqlParser.FIRST - 64)) | (1 << (FlinkSqlParser.AFTER - 64)) | (1 << (FlinkSqlParser.LAST - 64)) | (1 << (FlinkSqlParser.VALUES - 64)) | (1 << (FlinkSqlParser.DIRECTORY - 64)) | (1 << (FlinkSqlParser.VIEW - 64)) | (1 << (FlinkSqlParser.REPLACE - 64)) | (1 << (FlinkSqlParser.INSERT - 64)) | (1 << (FlinkSqlParser.DELETE - 64)) | (1 << (FlinkSqlParser.DESCRIBE - 64)) | (1 << (FlinkSqlParser.EXPLAIN - 64)) | (1 << (FlinkSqlParser.FORMAT - 64)) | (1 << (FlinkSqlParser.LOGICAL - 64)) | (1 << (FlinkSqlParser.CODEGEN - 64)) | (1 << (FlinkSqlParser.COST - 64)) | (1 << (FlinkSqlParser.SHOW - 64)) | (1 << (FlinkSqlParser.TABLES - 64)) | (1 << (FlinkSqlParser.COLUMNS - 64)) | (1 << (FlinkSqlParser.USE - 64)) | (1 << (FlinkSqlParser.PARTITIONS - 64)) | (1 << (FlinkSqlParser.FUNCTIONS - 64)) | (1 << (FlinkSqlParser.DROP - 64)) | (1 << (FlinkSqlParser.SETMINUS - 64)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (FlinkSqlParser.TABLESAMPLE - 98)) | (1 << (FlinkSqlParser.STRATIFY - 98)) | (1 << (FlinkSqlParser.ALTER - 98)) | (1 << (FlinkSqlParser.RENAME - 98)) | (1 << (FlinkSqlParser.STRUCT - 98)) | (1 << (FlinkSqlParser.COMMENT - 98)) | (1 << (FlinkSqlParser.SET - 98)) | (1 << (FlinkSqlParser.RESET - 98)) | (1 << (FlinkSqlParser.DATA - 98)) | (1 << (FlinkSqlParser.START - 98)) | (1 << (FlinkSqlParser.TRANSACTION - 98)) | (1 << (FlinkSqlParser.COMMIT - 98)) | (1 << (FlinkSqlParser.ROLLBACK - 98)) | (1 << (FlinkSqlParser.MACRO - 98)) | (1 << (FlinkSqlParser.IGNORE - 98)) | (1 << (FlinkSqlParser.IF - 98)) | (1 << (FlinkSqlParser.POSITION - 98)) | (1 << (FlinkSqlParser.EXTRACT - 98)) | (1 << (FlinkSqlParser.MINUS - 98)) | (1 << (FlinkSqlParser.DIV - 98)) | (1 << (FlinkSqlParser.PERCENTLIT - 98)) | (1 << (FlinkSqlParser.BUCKET - 98)) | (1 << (FlinkSqlParser.OUT - 98)) | (1 << (FlinkSqlParser.OF - 98)) | (1 << (FlinkSqlParser.SORT - 98)) | (1 << (FlinkSqlParser.CLUSTER - 98)) | (1 << (FlinkSqlParser.DISTRIBUTE - 98)) | (1 << (FlinkSqlParser.OVERWRITE - 98)) | (1 << (FlinkSqlParser.TRANSFORM - 98)))) !== 0) || ((((_la - 130)) & ~0x1f) == 0 && ((1 << (_la - 130)) & ((1 << (FlinkSqlParser.REDUCE - 130)) | (1 << (FlinkSqlParser.SERDE - 130)) | (1 << (FlinkSqlParser.SERDEPROPERTIES - 130)) | (1 << (FlinkSqlParser.RECORDREADER - 130)) | (1 << (FlinkSqlParser.RECORDWRITER - 130)) | (1 << (FlinkSqlParser.DELIMITED - 130)) | (1 << (FlinkSqlParser.FIELDS - 130)) | (1 << (FlinkSqlParser.TERMINATED - 130)) | (1 << (FlinkSqlParser.COLLECTION - 130)) | (1 << (FlinkSqlParser.ITEMS - 130)) | (1 << (FlinkSqlParser.KEYS - 130)) | (1 << (FlinkSqlParser.ESCAPED - 130)) | (1 << (FlinkSqlParser.LINES - 130)) | (1 << (FlinkSqlParser.SEPARATED - 130)) | (1 << (FlinkSqlParser.FUNCTION - 130)) | (1 << (FlinkSqlParser.EXTENDED - 130)) | (1 << (FlinkSqlParser.REFRESH - 130)) | (1 << (FlinkSqlParser.CLEAR - 130)) | (1 << (FlinkSqlParser.CACHE - 130)) | (1 << (FlinkSqlParser.UNCACHE - 130)) | (1 << (FlinkSqlParser.LAZY - 130)) | (1 << (FlinkSqlParser.FORMATTED - 130)) | (1 << (FlinkSqlParser.GLOBAL - 130)) | (1 << (FlinkSqlParser.TEMPORARY - 130)) | (1 << (FlinkSqlParser.OPTIONS - 130)) | (1 << (FlinkSqlParser.UNSET - 130)) | (1 << (FlinkSqlParser.TBLPROPERTIES - 130)) | (1 << (FlinkSqlParser.DBPROPERTIES - 130)) | (1 << (FlinkSqlParser.BUCKETS - 130)) | (1 << (FlinkSqlParser.SKEWED - 130)) | (1 << (FlinkSqlParser.STORED - 130)))) !== 0) || ((((_la - 162)) & ~0x1f) == 0 && ((1 << (_la - 162)) & ((1 << (FlinkSqlParser.DIRECTORIES - 162)) | (1 << (FlinkSqlParser.LOCATION - 162)) | (1 << (FlinkSqlParser.EXCHANGE - 162)) | (1 << (FlinkSqlParser.ARCHIVE - 162)) | (1 << (FlinkSqlParser.UNARCHIVE - 162)) | (1 << (FlinkSqlParser.FILEFORMAT - 162)) | (1 << (FlinkSqlParser.TOUCH - 162)) | (1 << (FlinkSqlParser.COMPACT - 162)) | (1 << (FlinkSqlParser.CONCATENATE - 162)) | (1 << (FlinkSqlParser.CHANGE - 162)) | (1 << (FlinkSqlParser.CASCADE - 162)) | (1 << (FlinkSqlParser.RESTRICT - 162)) | (1 << (FlinkSqlParser.CLUSTERED - 162)) | (1 << (FlinkSqlParser.SORTED - 162)) | (1 << (FlinkSqlParser.PURGE - 162)) | (1 << (FlinkSqlParser.INPUTFORMAT - 162)) | (1 << (FlinkSqlParser.OUTPUTFORMAT - 162)) | (1 << (FlinkSqlParser.DATABASE - 162)) | (1 << (FlinkSqlParser.DATABASES - 162)) | (1 << (FlinkSqlParser.DFS - 162)) | (1 << (FlinkSqlParser.TRUNCATE - 162)) | (1 << (FlinkSqlParser.ANALYZE - 162)) | (1 << (FlinkSqlParser.COMPUTE - 162)) | (1 << (FlinkSqlParser.LIST - 162)) | (1 << (FlinkSqlParser.STATISTICS - 162)) | (1 << (FlinkSqlParser.PARTITIONED - 162)) | (1 << (FlinkSqlParser.EXTERNAL - 162)) | (1 << (FlinkSqlParser.DEFINED - 162)) | (1 << (FlinkSqlParser.REVOKE - 162)) | (1 << (FlinkSqlParser.LOCK - 162)))) !== 0) || ((((_la - 194)) & ~0x1f) == 0 && ((1 << (_la - 194)) & ((1 << (FlinkSqlParser.UNLOCK - 194)) | (1 << (FlinkSqlParser.MSCK - 194)) | (1 << (FlinkSqlParser.REPAIR - 194)) | (1 << (FlinkSqlParser.RECOVER - 194)) | (1 << (FlinkSqlParser.EXPORT - 194)) | (1 << (FlinkSqlParser.IMPORT - 194)) | (1 << (FlinkSqlParser.LOAD - 194)) | (1 << (FlinkSqlParser.ROLE - 194)) | (1 << (FlinkSqlParser.ROLES - 194)) | (1 << (FlinkSqlParser.COMPACTIONS - 194)) | (1 << (FlinkSqlParser.PRINCIPALS - 194)) | (1 << (FlinkSqlParser.TRANSACTIONS - 194)) | (1 << (FlinkSqlParser.INDEX - 194)) | (1 << (FlinkSqlParser.INDEXES - 194)) | (1 << (FlinkSqlParser.LOCKS - 194)) | (1 << (FlinkSqlParser.OPTION - 194)) | (1 << (FlinkSqlParser.ANTI - 194)) | (1 << (FlinkSqlParser.LOCAL - 194)) | (1 << (FlinkSqlParser.INPATH - 194)) | (1 << (FlinkSqlParser.WATERMARK - 194)) | (1 << (FlinkSqlParser.UNNEST - 194)) | (1 << (FlinkSqlParser.MATCH - 194)) | (1 << (FlinkSqlParser.NEXT - 194)) | (1 << (FlinkSqlParser.WITHIN - 194)) | (1 << (FlinkSqlParser.WS - 194)) | (1 << (FlinkSqlParser.SYSTEM - 194)) | (1 << (FlinkSqlParser.INCLUDING - 194)) | (1 << (FlinkSqlParser.EXCLUDING - 194)) | (1 << (FlinkSqlParser.CONSTRAINTS - 194)) | (1 << (FlinkSqlParser.GENERATED - 194)) | (1 << (FlinkSqlParser.CATALOG - 194)) | (1 << (FlinkSqlParser.LANGUAGE - 194)))) !== 0) || ((((_la - 226)) & ~0x1f) == 0 && ((1 << (_la - 226)) & ((1 << (FlinkSqlParser.CATALOGS - 226)) | (1 << (FlinkSqlParser.VIEWS - 226)) | (1 << (FlinkSqlParser.KEY - 226)) | (1 << (FlinkSqlParser.PERIOD - 226)) | (1 << (FlinkSqlParser.SYSTEM_TIME - 226)) | (1 << (FlinkSqlParser.STRING - 226)) | (1 << (FlinkSqlParser.ARRAY - 226)) | (1 << (FlinkSqlParser.MAP - 226)) | (1 << (FlinkSqlParser.CHAR - 226)) | (1 << (FlinkSqlParser.VARCHAR - 226)) | (1 << (FlinkSqlParser.BINARY - 226)) | (1 << (FlinkSqlParser.VARBINARY - 226)) | (1 << (FlinkSqlParser.BYTES - 226)) | (1 << (FlinkSqlParser.DECIMAL - 226)) | (1 << (FlinkSqlParser.TINYINT - 226)) | (1 << (FlinkSqlParser.SMALLINT - 226)) | (1 << (FlinkSqlParser.INT - 226)) | (1 << (FlinkSqlParser.BIGINT - 226)) | (1 << (FlinkSqlParser.FLOAT - 226)) | (1 << (FlinkSqlParser.DOUBLE - 226)) | (1 << (FlinkSqlParser.DATE - 226)) | (1 << (FlinkSqlParser.TIME - 226)) | (1 << (FlinkSqlParser.TIMESTAMP - 226)) | (1 << (FlinkSqlParser.MULTISET - 226)) | (1 << (FlinkSqlParser.BOOLEAN - 226)) | (1 << (FlinkSqlParser.RAW - 226)) | (1 << (FlinkSqlParser.ROW - 226)) | (1 << (FlinkSqlParser.NULL - 226)) | (1 << (FlinkSqlParser.DATETIME - 226)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function StrictNonReservedContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_strictNonReserved;
    return this;
}

StrictNonReservedContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StrictNonReservedContext.prototype.constructor = StrictNonReservedContext;

StrictNonReservedContext.prototype.ANTI = function() {
    return this.getToken(FlinkSqlParser.ANTI, 0);
};

StrictNonReservedContext.prototype.CROSS = function() {
    return this.getToken(FlinkSqlParser.CROSS, 0);
};

StrictNonReservedContext.prototype.EXCEPT = function() {
    return this.getToken(FlinkSqlParser.EXCEPT, 0);
};

StrictNonReservedContext.prototype.FULL = function() {
    return this.getToken(FlinkSqlParser.FULL, 0);
};

StrictNonReservedContext.prototype.INNER = function() {
    return this.getToken(FlinkSqlParser.INNER, 0);
};

StrictNonReservedContext.prototype.INTERSECT = function() {
    return this.getToken(FlinkSqlParser.INTERSECT, 0);
};

StrictNonReservedContext.prototype.JOIN = function() {
    return this.getToken(FlinkSqlParser.JOIN, 0);
};

StrictNonReservedContext.prototype.LEFT = function() {
    return this.getToken(FlinkSqlParser.LEFT, 0);
};

StrictNonReservedContext.prototype.NATURAL = function() {
    return this.getToken(FlinkSqlParser.NATURAL, 0);
};

StrictNonReservedContext.prototype.ON = function() {
    return this.getToken(FlinkSqlParser.ON, 0);
};

StrictNonReservedContext.prototype.RIGHT = function() {
    return this.getToken(FlinkSqlParser.RIGHT, 0);
};

StrictNonReservedContext.prototype.SEMI = function() {
    return this.getToken(FlinkSqlParser.SEMI, 0);
};

StrictNonReservedContext.prototype.SETMINUS = function() {
    return this.getToken(FlinkSqlParser.SETMINUS, 0);
};

StrictNonReservedContext.prototype.UNION = function() {
    return this.getToken(FlinkSqlParser.UNION, 0);
};

StrictNonReservedContext.prototype.USING = function() {
    return this.getToken(FlinkSqlParser.USING, 0);
};

StrictNonReservedContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterStrictNonReserved(this);
	}
};

StrictNonReservedContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitStrictNonReserved(this);
	}
};

StrictNonReservedContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitStrictNonReserved(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.StrictNonReservedContext = StrictNonReservedContext;

FlinkSqlParser.prototype.strictNonReserved = function() {

    var localctx = new StrictNonReservedContext(this, this._ctx, this.state);
    this.enterRule(localctx, 228, FlinkSqlParser.RULE_strictNonReserved);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1357;
        _la = this._input.LA(1);
        if(!(((((_la - 44)) & ~0x1f) == 0 && ((1 << (_la - 44)) & ((1 << (FlinkSqlParser.JOIN - 44)) | (1 << (FlinkSqlParser.CROSS - 44)) | (1 << (FlinkSqlParser.INNER - 44)) | (1 << (FlinkSqlParser.LEFT - 44)) | (1 << (FlinkSqlParser.SEMI - 44)) | (1 << (FlinkSqlParser.RIGHT - 44)) | (1 << (FlinkSqlParser.FULL - 44)) | (1 << (FlinkSqlParser.NATURAL - 44)) | (1 << (FlinkSqlParser.ON - 44)))) !== 0) || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (FlinkSqlParser.UNION - 93)) | (1 << (FlinkSqlParser.EXCEPT - 93)) | (1 << (FlinkSqlParser.SETMINUS - 93)) | (1 << (FlinkSqlParser.INTERSECT - 93)))) !== 0) || _la===FlinkSqlParser.USING || _la===FlinkSqlParser.ANTI)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function NonReservedContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = FlinkSqlParser.RULE_nonReserved;
    return this;
}

NonReservedContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
NonReservedContext.prototype.constructor = NonReservedContext;

NonReservedContext.prototype.ADD = function() {
    return this.getToken(FlinkSqlParser.ADD, 0);
};

NonReservedContext.prototype.AFTER = function() {
    return this.getToken(FlinkSqlParser.AFTER, 0);
};

NonReservedContext.prototype.ALL = function() {
    return this.getToken(FlinkSqlParser.ALL, 0);
};

NonReservedContext.prototype.ALTER = function() {
    return this.getToken(FlinkSqlParser.ALTER, 0);
};

NonReservedContext.prototype.ANALYZE = function() {
    return this.getToken(FlinkSqlParser.ANALYZE, 0);
};

NonReservedContext.prototype.AND = function() {
    return this.getToken(FlinkSqlParser.AND, 0);
};

NonReservedContext.prototype.ANY = function() {
    return this.getToken(FlinkSqlParser.ANY, 0);
};

NonReservedContext.prototype.COLUMNS = function() {
    return this.getToken(FlinkSqlParser.COLUMNS, 0);
};

NonReservedContext.prototype.ARRAY = function() {
    return this.getToken(FlinkSqlParser.ARRAY, 0);
};

NonReservedContext.prototype.AS = function() {
    return this.getToken(FlinkSqlParser.AS, 0);
};

NonReservedContext.prototype.ASC = function() {
    return this.getToken(FlinkSqlParser.ASC, 0);
};

NonReservedContext.prototype.AT = function() {
    return this.getToken(FlinkSqlParser.AT, 0);
};

NonReservedContext.prototype.BETWEEN = function() {
    return this.getToken(FlinkSqlParser.BETWEEN, 0);
};

NonReservedContext.prototype.BIGINT = function() {
    return this.getToken(FlinkSqlParser.BIGINT, 0);
};

NonReservedContext.prototype.BINARY = function() {
    return this.getToken(FlinkSqlParser.BINARY, 0);
};

NonReservedContext.prototype.BOOLEAN = function() {
    return this.getToken(FlinkSqlParser.BOOLEAN, 0);
};

NonReservedContext.prototype.BOTH = function() {
    return this.getToken(FlinkSqlParser.BOTH, 0);
};

NonReservedContext.prototype.BUCKET = function() {
    return this.getToken(FlinkSqlParser.BUCKET, 0);
};

NonReservedContext.prototype.BUCKETS = function() {
    return this.getToken(FlinkSqlParser.BUCKETS, 0);
};

NonReservedContext.prototype.BY = function() {
    return this.getToken(FlinkSqlParser.BY, 0);
};

NonReservedContext.prototype.BYTES = function() {
    return this.getToken(FlinkSqlParser.BYTES, 0);
};

NonReservedContext.prototype.CACHE = function() {
    return this.getToken(FlinkSqlParser.CACHE, 0);
};

NonReservedContext.prototype.CASCADE = function() {
    return this.getToken(FlinkSqlParser.CASCADE, 0);
};

NonReservedContext.prototype.CASE = function() {
    return this.getToken(FlinkSqlParser.CASE, 0);
};

NonReservedContext.prototype.CAST = function() {
    return this.getToken(FlinkSqlParser.CAST, 0);
};

NonReservedContext.prototype.CATALOG = function() {
    return this.getToken(FlinkSqlParser.CATALOG, 0);
};

NonReservedContext.prototype.CATALOGS = function() {
    return this.getToken(FlinkSqlParser.CATALOGS, 0);
};

NonReservedContext.prototype.CHANGE = function() {
    return this.getToken(FlinkSqlParser.CHANGE, 0);
};

NonReservedContext.prototype.CHAR = function() {
    return this.getToken(FlinkSqlParser.CHAR, 0);
};

NonReservedContext.prototype.CLEAR = function() {
    return this.getToken(FlinkSqlParser.CLEAR, 0);
};

NonReservedContext.prototype.CLUSTER = function() {
    return this.getToken(FlinkSqlParser.CLUSTER, 0);
};

NonReservedContext.prototype.CLUSTERED = function() {
    return this.getToken(FlinkSqlParser.CLUSTERED, 0);
};

NonReservedContext.prototype.CODEGEN = function() {
    return this.getToken(FlinkSqlParser.CODEGEN, 0);
};

NonReservedContext.prototype.COLLECTION = function() {
    return this.getToken(FlinkSqlParser.COLLECTION, 0);
};

NonReservedContext.prototype.COLUMN = function() {
    return this.getToken(FlinkSqlParser.COLUMN, 0);
};

NonReservedContext.prototype.COMMENT = function() {
    return this.getToken(FlinkSqlParser.COMMENT, 0);
};

NonReservedContext.prototype.COMMIT = function() {
    return this.getToken(FlinkSqlParser.COMMIT, 0);
};

NonReservedContext.prototype.COMPACT = function() {
    return this.getToken(FlinkSqlParser.COMPACT, 0);
};

NonReservedContext.prototype.COMPACTIONS = function() {
    return this.getToken(FlinkSqlParser.COMPACTIONS, 0);
};

NonReservedContext.prototype.COMPUTE = function() {
    return this.getToken(FlinkSqlParser.COMPUTE, 0);
};

NonReservedContext.prototype.CONCATENATE = function() {
    return this.getToken(FlinkSqlParser.CONCATENATE, 0);
};

NonReservedContext.prototype.CONSTRAINT = function() {
    return this.getToken(FlinkSqlParser.CONSTRAINT, 0);
};

NonReservedContext.prototype.CONSTRAINTS = function() {
    return this.getToken(FlinkSqlParser.CONSTRAINTS, 0);
};

NonReservedContext.prototype.COST = function() {
    return this.getToken(FlinkSqlParser.COST, 0);
};

NonReservedContext.prototype.CREATE = function() {
    return this.getToken(FlinkSqlParser.CREATE, 0);
};

NonReservedContext.prototype.CUBE = function() {
    return this.getToken(FlinkSqlParser.CUBE, 0);
};

NonReservedContext.prototype.CURRENT = function() {
    return this.getToken(FlinkSqlParser.CURRENT, 0);
};

NonReservedContext.prototype.DATA = function() {
    return this.getToken(FlinkSqlParser.DATA, 0);
};

NonReservedContext.prototype.DATABASE = function() {
    return this.getToken(FlinkSqlParser.DATABASE, 0);
};

NonReservedContext.prototype.DATABASES = function() {
    return this.getToken(FlinkSqlParser.DATABASES, 0);
};

NonReservedContext.prototype.DATE = function() {
    return this.getToken(FlinkSqlParser.DATE, 0);
};

NonReservedContext.prototype.DATETIME = function() {
    return this.getToken(FlinkSqlParser.DATETIME, 0);
};

NonReservedContext.prototype.DBPROPERTIES = function() {
    return this.getToken(FlinkSqlParser.DBPROPERTIES, 0);
};

NonReservedContext.prototype.DECIMAL = function() {
    return this.getToken(FlinkSqlParser.DECIMAL, 0);
};

NonReservedContext.prototype.DEFINED = function() {
    return this.getToken(FlinkSqlParser.DEFINED, 0);
};

NonReservedContext.prototype.DELETE = function() {
    return this.getToken(FlinkSqlParser.DELETE, 0);
};

NonReservedContext.prototype.DELIMITED = function() {
    return this.getToken(FlinkSqlParser.DELIMITED, 0);
};

NonReservedContext.prototype.DESC = function() {
    return this.getToken(FlinkSqlParser.DESC, 0);
};

NonReservedContext.prototype.DESCRIBE = function() {
    return this.getToken(FlinkSqlParser.DESCRIBE, 0);
};

NonReservedContext.prototype.DFS = function() {
    return this.getToken(FlinkSqlParser.DFS, 0);
};

NonReservedContext.prototype.DIRECTORIES = function() {
    return this.getToken(FlinkSqlParser.DIRECTORIES, 0);
};

NonReservedContext.prototype.DIRECTORY = function() {
    return this.getToken(FlinkSqlParser.DIRECTORY, 0);
};

NonReservedContext.prototype.DISTINCT = function() {
    return this.getToken(FlinkSqlParser.DISTINCT, 0);
};

NonReservedContext.prototype.DISTRIBUTE = function() {
    return this.getToken(FlinkSqlParser.DISTRIBUTE, 0);
};

NonReservedContext.prototype.DIV = function() {
    return this.getToken(FlinkSqlParser.DIV, 0);
};

NonReservedContext.prototype.DOUBLE = function() {
    return this.getToken(FlinkSqlParser.DOUBLE, 0);
};

NonReservedContext.prototype.DROP = function() {
    return this.getToken(FlinkSqlParser.DROP, 0);
};

NonReservedContext.prototype.ELSE = function() {
    return this.getToken(FlinkSqlParser.ELSE, 0);
};

NonReservedContext.prototype.END = function() {
    return this.getToken(FlinkSqlParser.END, 0);
};

NonReservedContext.prototype.ESCAPED = function() {
    return this.getToken(FlinkSqlParser.ESCAPED, 0);
};

NonReservedContext.prototype.EXCHANGE = function() {
    return this.getToken(FlinkSqlParser.EXCHANGE, 0);
};

NonReservedContext.prototype.EXCLUDING = function() {
    return this.getToken(FlinkSqlParser.EXCLUDING, 0);
};

NonReservedContext.prototype.EXISTS = function() {
    return this.getToken(FlinkSqlParser.EXISTS, 0);
};

NonReservedContext.prototype.EXPLAIN = function() {
    return this.getToken(FlinkSqlParser.EXPLAIN, 0);
};

NonReservedContext.prototype.EXPORT = function() {
    return this.getToken(FlinkSqlParser.EXPORT, 0);
};

NonReservedContext.prototype.EXTENDED = function() {
    return this.getToken(FlinkSqlParser.EXTENDED, 0);
};

NonReservedContext.prototype.EXTERNAL = function() {
    return this.getToken(FlinkSqlParser.EXTERNAL, 0);
};

NonReservedContext.prototype.EXTRACT = function() {
    return this.getToken(FlinkSqlParser.EXTRACT, 0);
};

NonReservedContext.prototype.FALSE = function() {
    return this.getToken(FlinkSqlParser.FALSE, 0);
};

NonReservedContext.prototype.FIELDS = function() {
    return this.getToken(FlinkSqlParser.FIELDS, 0);
};

NonReservedContext.prototype.FILEFORMAT = function() {
    return this.getToken(FlinkSqlParser.FILEFORMAT, 0);
};

NonReservedContext.prototype.FIRST = function() {
    return this.getToken(FlinkSqlParser.FIRST, 0);
};

NonReservedContext.prototype.FLOAT = function() {
    return this.getToken(FlinkSqlParser.FLOAT, 0);
};

NonReservedContext.prototype.FOLLOWING = function() {
    return this.getToken(FlinkSqlParser.FOLLOWING, 0);
};

NonReservedContext.prototype.FOR = function() {
    return this.getToken(FlinkSqlParser.FOR, 0);
};

NonReservedContext.prototype.FORMAT = function() {
    return this.getToken(FlinkSqlParser.FORMAT, 0);
};

NonReservedContext.prototype.FORMATTED = function() {
    return this.getToken(FlinkSqlParser.FORMATTED, 0);
};

NonReservedContext.prototype.FROM = function() {
    return this.getToken(FlinkSqlParser.FROM, 0);
};

NonReservedContext.prototype.FUNCTION = function() {
    return this.getToken(FlinkSqlParser.FUNCTION, 0);
};

NonReservedContext.prototype.FUNCTIONS = function() {
    return this.getToken(FlinkSqlParser.FUNCTIONS, 0);
};

NonReservedContext.prototype.GENERATED = function() {
    return this.getToken(FlinkSqlParser.GENERATED, 0);
};

NonReservedContext.prototype.GLOBAL = function() {
    return this.getToken(FlinkSqlParser.GLOBAL, 0);
};

NonReservedContext.prototype.GRANT = function() {
    return this.getToken(FlinkSqlParser.GRANT, 0);
};

NonReservedContext.prototype.GROUP = function() {
    return this.getToken(FlinkSqlParser.GROUP, 0);
};

NonReservedContext.prototype.GROUPING = function() {
    return this.getToken(FlinkSqlParser.GROUPING, 0);
};

NonReservedContext.prototype.HAVING = function() {
    return this.getToken(FlinkSqlParser.HAVING, 0);
};

NonReservedContext.prototype.IF = function() {
    return this.getToken(FlinkSqlParser.IF, 0);
};

NonReservedContext.prototype.IGNORE = function() {
    return this.getToken(FlinkSqlParser.IGNORE, 0);
};

NonReservedContext.prototype.IMPORT = function() {
    return this.getToken(FlinkSqlParser.IMPORT, 0);
};

NonReservedContext.prototype.IN = function() {
    return this.getToken(FlinkSqlParser.IN, 0);
};

NonReservedContext.prototype.INCLUDING = function() {
    return this.getToken(FlinkSqlParser.INCLUDING, 0);
};

NonReservedContext.prototype.INDEX = function() {
    return this.getToken(FlinkSqlParser.INDEX, 0);
};

NonReservedContext.prototype.INDEXES = function() {
    return this.getToken(FlinkSqlParser.INDEXES, 0);
};

NonReservedContext.prototype.INPATH = function() {
    return this.getToken(FlinkSqlParser.INPATH, 0);
};

NonReservedContext.prototype.INPUTFORMAT = function() {
    return this.getToken(FlinkSqlParser.INPUTFORMAT, 0);
};

NonReservedContext.prototype.INSERT = function() {
    return this.getToken(FlinkSqlParser.INSERT, 0);
};

NonReservedContext.prototype.INT = function() {
    return this.getToken(FlinkSqlParser.INT, 0);
};

NonReservedContext.prototype.INTERVAL = function() {
    return this.getToken(FlinkSqlParser.INTERVAL, 0);
};

NonReservedContext.prototype.INTO = function() {
    return this.getToken(FlinkSqlParser.INTO, 0);
};

NonReservedContext.prototype.IS = function() {
    return this.getToken(FlinkSqlParser.IS, 0);
};

NonReservedContext.prototype.ITEMS = function() {
    return this.getToken(FlinkSqlParser.ITEMS, 0);
};

NonReservedContext.prototype.KEY = function() {
    return this.getToken(FlinkSqlParser.KEY, 0);
};

NonReservedContext.prototype.KEYS = function() {
    return this.getToken(FlinkSqlParser.KEYS, 0);
};

NonReservedContext.prototype.LANGUAGE = function() {
    return this.getToken(FlinkSqlParser.LANGUAGE, 0);
};

NonReservedContext.prototype.LAST = function() {
    return this.getToken(FlinkSqlParser.LAST, 0);
};

NonReservedContext.prototype.LATERAL = function() {
    return this.getToken(FlinkSqlParser.LATERAL, 0);
};

NonReservedContext.prototype.LAZY = function() {
    return this.getToken(FlinkSqlParser.LAZY, 0);
};

NonReservedContext.prototype.LEADING = function() {
    return this.getToken(FlinkSqlParser.LEADING, 0);
};

NonReservedContext.prototype.LIKE = function() {
    return this.getToken(FlinkSqlParser.LIKE, 0);
};

NonReservedContext.prototype.LIMIT = function() {
    return this.getToken(FlinkSqlParser.LIMIT, 0);
};

NonReservedContext.prototype.LINES = function() {
    return this.getToken(FlinkSqlParser.LINES, 0);
};

NonReservedContext.prototype.LIST = function() {
    return this.getToken(FlinkSqlParser.LIST, 0);
};

NonReservedContext.prototype.LOAD = function() {
    return this.getToken(FlinkSqlParser.LOAD, 0);
};

NonReservedContext.prototype.LOCAL = function() {
    return this.getToken(FlinkSqlParser.LOCAL, 0);
};

NonReservedContext.prototype.LOCATION = function() {
    return this.getToken(FlinkSqlParser.LOCATION, 0);
};

NonReservedContext.prototype.LOCK = function() {
    return this.getToken(FlinkSqlParser.LOCK, 0);
};

NonReservedContext.prototype.LOCKS = function() {
    return this.getToken(FlinkSqlParser.LOCKS, 0);
};

NonReservedContext.prototype.LOGICAL = function() {
    return this.getToken(FlinkSqlParser.LOGICAL, 0);
};

NonReservedContext.prototype.MACRO = function() {
    return this.getToken(FlinkSqlParser.MACRO, 0);
};

NonReservedContext.prototype.MAP = function() {
    return this.getToken(FlinkSqlParser.MAP, 0);
};

NonReservedContext.prototype.MATCH = function() {
    return this.getToken(FlinkSqlParser.MATCH, 0);
};

NonReservedContext.prototype.MINUS = function() {
    return this.getToken(FlinkSqlParser.MINUS, 0);
};

NonReservedContext.prototype.MSCK = function() {
    return this.getToken(FlinkSqlParser.MSCK, 0);
};

NonReservedContext.prototype.MULTISET = function() {
    return this.getToken(FlinkSqlParser.MULTISET, 0);
};

NonReservedContext.prototype.NEXT = function() {
    return this.getToken(FlinkSqlParser.NEXT, 0);
};

NonReservedContext.prototype.NO = function() {
    return this.getToken(FlinkSqlParser.NO, 0);
};

NonReservedContext.prototype.NOT = function() {
    return this.getToken(FlinkSqlParser.NOT, 0);
};

NonReservedContext.prototype.NULL = function() {
    return this.getToken(FlinkSqlParser.NULL, 0);
};

NonReservedContext.prototype.NULLS = function() {
    return this.getToken(FlinkSqlParser.NULLS, 0);
};

NonReservedContext.prototype.OF = function() {
    return this.getToken(FlinkSqlParser.OF, 0);
};

NonReservedContext.prototype.OPTION = function() {
    return this.getToken(FlinkSqlParser.OPTION, 0);
};

NonReservedContext.prototype.OPTIONS = function() {
    return this.getToken(FlinkSqlParser.OPTIONS, 0);
};

NonReservedContext.prototype.OR = function() {
    return this.getToken(FlinkSqlParser.OR, 0);
};

NonReservedContext.prototype.ORDER = function() {
    return this.getToken(FlinkSqlParser.ORDER, 0);
};

NonReservedContext.prototype.OUT = function() {
    return this.getToken(FlinkSqlParser.OUT, 0);
};

NonReservedContext.prototype.OUTER = function() {
    return this.getToken(FlinkSqlParser.OUTER, 0);
};

NonReservedContext.prototype.OUTPUTFORMAT = function() {
    return this.getToken(FlinkSqlParser.OUTPUTFORMAT, 0);
};

NonReservedContext.prototype.OVER = function() {
    return this.getToken(FlinkSqlParser.OVER, 0);
};

NonReservedContext.prototype.OVERWRITE = function() {
    return this.getToken(FlinkSqlParser.OVERWRITE, 0);
};

NonReservedContext.prototype.PARTITION = function() {
    return this.getToken(FlinkSqlParser.PARTITION, 0);
};

NonReservedContext.prototype.PARTITIONED = function() {
    return this.getToken(FlinkSqlParser.PARTITIONED, 0);
};

NonReservedContext.prototype.PARTITIONS = function() {
    return this.getToken(FlinkSqlParser.PARTITIONS, 0);
};

NonReservedContext.prototype.PERCENTLIT = function() {
    return this.getToken(FlinkSqlParser.PERCENTLIT, 0);
};

NonReservedContext.prototype.PERIOD = function() {
    return this.getToken(FlinkSqlParser.PERIOD, 0);
};

NonReservedContext.prototype.PIVOT = function() {
    return this.getToken(FlinkSqlParser.PIVOT, 0);
};

NonReservedContext.prototype.POSITION = function() {
    return this.getToken(FlinkSqlParser.POSITION, 0);
};

NonReservedContext.prototype.PRECEDING = function() {
    return this.getToken(FlinkSqlParser.PRECEDING, 0);
};

NonReservedContext.prototype.PRIMARY = function() {
    return this.getToken(FlinkSqlParser.PRIMARY, 0);
};

NonReservedContext.prototype.PRINCIPALS = function() {
    return this.getToken(FlinkSqlParser.PRINCIPALS, 0);
};

NonReservedContext.prototype.PURGE = function() {
    return this.getToken(FlinkSqlParser.PURGE, 0);
};

NonReservedContext.prototype.RANGE = function() {
    return this.getToken(FlinkSqlParser.RANGE, 0);
};

NonReservedContext.prototype.RAW = function() {
    return this.getToken(FlinkSqlParser.RAW, 0);
};

NonReservedContext.prototype.RECORDREADER = function() {
    return this.getToken(FlinkSqlParser.RECORDREADER, 0);
};

NonReservedContext.prototype.RECORDWRITER = function() {
    return this.getToken(FlinkSqlParser.RECORDWRITER, 0);
};

NonReservedContext.prototype.RECOVER = function() {
    return this.getToken(FlinkSqlParser.RECOVER, 0);
};

NonReservedContext.prototype.REDUCE = function() {
    return this.getToken(FlinkSqlParser.REDUCE, 0);
};

NonReservedContext.prototype.REFRESH = function() {
    return this.getToken(FlinkSqlParser.REFRESH, 0);
};

NonReservedContext.prototype.RENAME = function() {
    return this.getToken(FlinkSqlParser.RENAME, 0);
};

NonReservedContext.prototype.REPAIR = function() {
    return this.getToken(FlinkSqlParser.REPAIR, 0);
};

NonReservedContext.prototype.REPLACE = function() {
    return this.getToken(FlinkSqlParser.REPLACE, 0);
};

NonReservedContext.prototype.RESET = function() {
    return this.getToken(FlinkSqlParser.RESET, 0);
};

NonReservedContext.prototype.RESTRICT = function() {
    return this.getToken(FlinkSqlParser.RESTRICT, 0);
};

NonReservedContext.prototype.REVOKE = function() {
    return this.getToken(FlinkSqlParser.REVOKE, 0);
};

NonReservedContext.prototype.RLIKE = function() {
    return this.getToken(FlinkSqlParser.RLIKE, 0);
};

NonReservedContext.prototype.ROLE = function() {
    return this.getToken(FlinkSqlParser.ROLE, 0);
};

NonReservedContext.prototype.ROLES = function() {
    return this.getToken(FlinkSqlParser.ROLES, 0);
};

NonReservedContext.prototype.ROLLBACK = function() {
    return this.getToken(FlinkSqlParser.ROLLBACK, 0);
};

NonReservedContext.prototype.ROLLUP = function() {
    return this.getToken(FlinkSqlParser.ROLLUP, 0);
};

NonReservedContext.prototype.ROW = function() {
    return this.getToken(FlinkSqlParser.ROW, 0);
};

NonReservedContext.prototype.ROWS = function() {
    return this.getToken(FlinkSqlParser.ROWS, 0);
};

NonReservedContext.prototype.SELECT = function() {
    return this.getToken(FlinkSqlParser.SELECT, 0);
};

NonReservedContext.prototype.SEPARATED = function() {
    return this.getToken(FlinkSqlParser.SEPARATED, 0);
};

NonReservedContext.prototype.SERDE = function() {
    return this.getToken(FlinkSqlParser.SERDE, 0);
};

NonReservedContext.prototype.SERDEPROPERTIES = function() {
    return this.getToken(FlinkSqlParser.SERDEPROPERTIES, 0);
};

NonReservedContext.prototype.SET = function() {
    return this.getToken(FlinkSqlParser.SET, 0);
};

NonReservedContext.prototype.SETS = function() {
    return this.getToken(FlinkSqlParser.SETS, 0);
};

NonReservedContext.prototype.SHOW = function() {
    return this.getToken(FlinkSqlParser.SHOW, 0);
};

NonReservedContext.prototype.SKEWED = function() {
    return this.getToken(FlinkSqlParser.SKEWED, 0);
};

NonReservedContext.prototype.SMALLINT = function() {
    return this.getToken(FlinkSqlParser.SMALLINT, 0);
};

NonReservedContext.prototype.SORT = function() {
    return this.getToken(FlinkSqlParser.SORT, 0);
};

NonReservedContext.prototype.SORTED = function() {
    return this.getToken(FlinkSqlParser.SORTED, 0);
};

NonReservedContext.prototype.START = function() {
    return this.getToken(FlinkSqlParser.START, 0);
};

NonReservedContext.prototype.STATISTICS = function() {
    return this.getToken(FlinkSqlParser.STATISTICS, 0);
};

NonReservedContext.prototype.STORED = function() {
    return this.getToken(FlinkSqlParser.STORED, 0);
};

NonReservedContext.prototype.STRATIFY = function() {
    return this.getToken(FlinkSqlParser.STRATIFY, 0);
};

NonReservedContext.prototype.STRING = function() {
    return this.getToken(FlinkSqlParser.STRING, 0);
};

NonReservedContext.prototype.STRUCT = function() {
    return this.getToken(FlinkSqlParser.STRUCT, 0);
};

NonReservedContext.prototype.SYSTEM = function() {
    return this.getToken(FlinkSqlParser.SYSTEM, 0);
};

NonReservedContext.prototype.SYSTEM_TIME = function() {
    return this.getToken(FlinkSqlParser.SYSTEM_TIME, 0);
};

NonReservedContext.prototype.TABLE = function() {
    return this.getToken(FlinkSqlParser.TABLE, 0);
};

NonReservedContext.prototype.TABLES = function() {
    return this.getToken(FlinkSqlParser.TABLES, 0);
};

NonReservedContext.prototype.TABLESAMPLE = function() {
    return this.getToken(FlinkSqlParser.TABLESAMPLE, 0);
};

NonReservedContext.prototype.TBLPROPERTIES = function() {
    return this.getToken(FlinkSqlParser.TBLPROPERTIES, 0);
};

NonReservedContext.prototype.TEMPORARY = function() {
    return this.getToken(FlinkSqlParser.TEMPORARY, 0);
};

NonReservedContext.prototype.TERMINATED = function() {
    return this.getToken(FlinkSqlParser.TERMINATED, 0);
};

NonReservedContext.prototype.THEN = function() {
    return this.getToken(FlinkSqlParser.THEN, 0);
};

NonReservedContext.prototype.TIME = function() {
    return this.getToken(FlinkSqlParser.TIME, 0);
};

NonReservedContext.prototype.TIMESTAMP = function() {
    return this.getToken(FlinkSqlParser.TIMESTAMP, 0);
};

NonReservedContext.prototype.TINYINT = function() {
    return this.getToken(FlinkSqlParser.TINYINT, 0);
};

NonReservedContext.prototype.TO = function() {
    return this.getToken(FlinkSqlParser.TO, 0);
};

NonReservedContext.prototype.TOUCH = function() {
    return this.getToken(FlinkSqlParser.TOUCH, 0);
};

NonReservedContext.prototype.TRAILING = function() {
    return this.getToken(FlinkSqlParser.TRAILING, 0);
};

NonReservedContext.prototype.TRANSACTION = function() {
    return this.getToken(FlinkSqlParser.TRANSACTION, 0);
};

NonReservedContext.prototype.TRANSACTIONS = function() {
    return this.getToken(FlinkSqlParser.TRANSACTIONS, 0);
};

NonReservedContext.prototype.TRANSFORM = function() {
    return this.getToken(FlinkSqlParser.TRANSFORM, 0);
};

NonReservedContext.prototype.TRUE = function() {
    return this.getToken(FlinkSqlParser.TRUE, 0);
};

NonReservedContext.prototype.TRUNCATE = function() {
    return this.getToken(FlinkSqlParser.TRUNCATE, 0);
};

NonReservedContext.prototype.UNARCHIVE = function() {
    return this.getToken(FlinkSqlParser.UNARCHIVE, 0);
};

NonReservedContext.prototype.UNBOUNDED = function() {
    return this.getToken(FlinkSqlParser.UNBOUNDED, 0);
};

NonReservedContext.prototype.UNCACHE = function() {
    return this.getToken(FlinkSqlParser.UNCACHE, 0);
};

NonReservedContext.prototype.UNLOCK = function() {
    return this.getToken(FlinkSqlParser.UNLOCK, 0);
};

NonReservedContext.prototype.UNSET = function() {
    return this.getToken(FlinkSqlParser.UNSET, 0);
};

NonReservedContext.prototype.UNNEST = function() {
    return this.getToken(FlinkSqlParser.UNNEST, 0);
};

NonReservedContext.prototype.USE = function() {
    return this.getToken(FlinkSqlParser.USE, 0);
};

NonReservedContext.prototype.VALUES = function() {
    return this.getToken(FlinkSqlParser.VALUES, 0);
};

NonReservedContext.prototype.VARBINARY = function() {
    return this.getToken(FlinkSqlParser.VARBINARY, 0);
};

NonReservedContext.prototype.VARCHAR = function() {
    return this.getToken(FlinkSqlParser.VARCHAR, 0);
};

NonReservedContext.prototype.VIEW = function() {
    return this.getToken(FlinkSqlParser.VIEW, 0);
};

NonReservedContext.prototype.VIEWS = function() {
    return this.getToken(FlinkSqlParser.VIEWS, 0);
};

NonReservedContext.prototype.WATERMARK = function() {
    return this.getToken(FlinkSqlParser.WATERMARK, 0);
};

NonReservedContext.prototype.WHEN = function() {
    return this.getToken(FlinkSqlParser.WHEN, 0);
};

NonReservedContext.prototype.WHERE = function() {
    return this.getToken(FlinkSqlParser.WHERE, 0);
};

NonReservedContext.prototype.WINDOW = function() {
    return this.getToken(FlinkSqlParser.WINDOW, 0);
};

NonReservedContext.prototype.WITH = function() {
    return this.getToken(FlinkSqlParser.WITH, 0);
};

NonReservedContext.prototype.WITHIN = function() {
    return this.getToken(FlinkSqlParser.WITHIN, 0);
};

NonReservedContext.prototype.WS = function() {
    return this.getToken(FlinkSqlParser.WS, 0);
};

NonReservedContext.prototype.enterRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.enterNonReserved(this);
	}
};

NonReservedContext.prototype.exitRule = function(listener) {
    if(listener instanceof FlinkSqlParserListener ) {
        listener.exitNonReserved(this);
	}
};

NonReservedContext.prototype.accept = function(visitor) {
    if ( visitor instanceof FlinkSqlParserVisitor ) {
        return visitor.visitNonReserved(this);
    } else {
        return visitor.visitChildren(this);
    }
};




FlinkSqlParser.NonReservedContext = NonReservedContext;

FlinkSqlParser.prototype.nonReserved = function() {

    var localctx = new NonReservedContext(this, this._ctx, this.state);
    this.enterRule(localctx, 230, FlinkSqlParser.RULE_nonReserved);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1359;
        _la = this._input.LA(1);
        if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << FlinkSqlParser.SELECT) | (1 << FlinkSqlParser.FROM) | (1 << FlinkSqlParser.ADD) | (1 << FlinkSqlParser.AS) | (1 << FlinkSqlParser.ALL) | (1 << FlinkSqlParser.ANY) | (1 << FlinkSqlParser.DISTINCT) | (1 << FlinkSqlParser.WHERE) | (1 << FlinkSqlParser.GROUP) | (1 << FlinkSqlParser.BY) | (1 << FlinkSqlParser.GROUPING) | (1 << FlinkSqlParser.SETS) | (1 << FlinkSqlParser.CUBE) | (1 << FlinkSqlParser.ROLLUP) | (1 << FlinkSqlParser.ORDER) | (1 << FlinkSqlParser.HAVING) | (1 << FlinkSqlParser.LIMIT) | (1 << FlinkSqlParser.AT) | (1 << FlinkSqlParser.OR) | (1 << FlinkSqlParser.AND) | (1 << FlinkSqlParser.IN) | (1 << FlinkSqlParser.NOT) | (1 << FlinkSqlParser.NO) | (1 << FlinkSqlParser.EXISTS) | (1 << FlinkSqlParser.BETWEEN) | (1 << FlinkSqlParser.LIKE) | (1 << FlinkSqlParser.RLIKE) | (1 << FlinkSqlParser.IS))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (FlinkSqlParser.TRUE - 32)) | (1 << (FlinkSqlParser.FALSE - 32)) | (1 << (FlinkSqlParser.NULLS - 32)) | (1 << (FlinkSqlParser.ASC - 32)) | (1 << (FlinkSqlParser.DESC - 32)) | (1 << (FlinkSqlParser.FOR - 32)) | (1 << (FlinkSqlParser.INTERVAL - 32)) | (1 << (FlinkSqlParser.CASE - 32)) | (1 << (FlinkSqlParser.WHEN - 32)) | (1 << (FlinkSqlParser.THEN - 32)) | (1 << (FlinkSqlParser.ELSE - 32)) | (1 << (FlinkSqlParser.END - 32)) | (1 << (FlinkSqlParser.OUTER - 32)) | (1 << (FlinkSqlParser.PIVOT - 32)) | (1 << (FlinkSqlParser.LATERAL - 32)) | (1 << (FlinkSqlParser.WINDOW - 32)) | (1 << (FlinkSqlParser.OVER - 32)) | (1 << (FlinkSqlParser.PARTITION - 32)) | (1 << (FlinkSqlParser.RANGE - 32)) | (1 << (FlinkSqlParser.ROWS - 32)) | (1 << (FlinkSqlParser.UNBOUNDED - 32)) | (1 << (FlinkSqlParser.PRECEDING - 32)) | (1 << (FlinkSqlParser.FOLLOWING - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (FlinkSqlParser.CURRENT - 64)) | (1 << (FlinkSqlParser.FIRST - 64)) | (1 << (FlinkSqlParser.AFTER - 64)) | (1 << (FlinkSqlParser.LAST - 64)) | (1 << (FlinkSqlParser.WITH - 64)) | (1 << (FlinkSqlParser.VALUES - 64)) | (1 << (FlinkSqlParser.CREATE - 64)) | (1 << (FlinkSqlParser.TABLE - 64)) | (1 << (FlinkSqlParser.DIRECTORY - 64)) | (1 << (FlinkSqlParser.VIEW - 64)) | (1 << (FlinkSqlParser.REPLACE - 64)) | (1 << (FlinkSqlParser.INSERT - 64)) | (1 << (FlinkSqlParser.DELETE - 64)) | (1 << (FlinkSqlParser.INTO - 64)) | (1 << (FlinkSqlParser.DESCRIBE - 64)) | (1 << (FlinkSqlParser.EXPLAIN - 64)) | (1 << (FlinkSqlParser.FORMAT - 64)) | (1 << (FlinkSqlParser.LOGICAL - 64)) | (1 << (FlinkSqlParser.CODEGEN - 64)) | (1 << (FlinkSqlParser.COST - 64)) | (1 << (FlinkSqlParser.CAST - 64)) | (1 << (FlinkSqlParser.SHOW - 64)) | (1 << (FlinkSqlParser.TABLES - 64)) | (1 << (FlinkSqlParser.COLUMNS - 64)) | (1 << (FlinkSqlParser.COLUMN - 64)) | (1 << (FlinkSqlParser.USE - 64)) | (1 << (FlinkSqlParser.PARTITIONS - 64)) | (1 << (FlinkSqlParser.FUNCTIONS - 64)) | (1 << (FlinkSqlParser.DROP - 64)))) !== 0) || ((((_la - 97)) & ~0x1f) == 0 && ((1 << (_la - 97)) & ((1 << (FlinkSqlParser.TO - 97)) | (1 << (FlinkSqlParser.TABLESAMPLE - 97)) | (1 << (FlinkSqlParser.STRATIFY - 97)) | (1 << (FlinkSqlParser.ALTER - 97)) | (1 << (FlinkSqlParser.RENAME - 97)) | (1 << (FlinkSqlParser.STRUCT - 97)) | (1 << (FlinkSqlParser.COMMENT - 97)) | (1 << (FlinkSqlParser.SET - 97)) | (1 << (FlinkSqlParser.RESET - 97)) | (1 << (FlinkSqlParser.DATA - 97)) | (1 << (FlinkSqlParser.START - 97)) | (1 << (FlinkSqlParser.TRANSACTION - 97)) | (1 << (FlinkSqlParser.COMMIT - 97)) | (1 << (FlinkSqlParser.ROLLBACK - 97)) | (1 << (FlinkSqlParser.MACRO - 97)) | (1 << (FlinkSqlParser.IGNORE - 97)) | (1 << (FlinkSqlParser.BOTH - 97)) | (1 << (FlinkSqlParser.LEADING - 97)) | (1 << (FlinkSqlParser.TRAILING - 97)) | (1 << (FlinkSqlParser.IF - 97)) | (1 << (FlinkSqlParser.POSITION - 97)) | (1 << (FlinkSqlParser.EXTRACT - 97)) | (1 << (FlinkSqlParser.MINUS - 97)) | (1 << (FlinkSqlParser.DIV - 97)) | (1 << (FlinkSqlParser.PERCENTLIT - 97)) | (1 << (FlinkSqlParser.BUCKET - 97)) | (1 << (FlinkSqlParser.OUT - 97)) | (1 << (FlinkSqlParser.OF - 97)) | (1 << (FlinkSqlParser.SORT - 97)) | (1 << (FlinkSqlParser.CLUSTER - 97)) | (1 << (FlinkSqlParser.DISTRIBUTE - 97)) | (1 << (FlinkSqlParser.OVERWRITE - 97)))) !== 0) || ((((_la - 129)) & ~0x1f) == 0 && ((1 << (_la - 129)) & ((1 << (FlinkSqlParser.TRANSFORM - 129)) | (1 << (FlinkSqlParser.REDUCE - 129)) | (1 << (FlinkSqlParser.SERDE - 129)) | (1 << (FlinkSqlParser.SERDEPROPERTIES - 129)) | (1 << (FlinkSqlParser.RECORDREADER - 129)) | (1 << (FlinkSqlParser.RECORDWRITER - 129)) | (1 << (FlinkSqlParser.DELIMITED - 129)) | (1 << (FlinkSqlParser.FIELDS - 129)) | (1 << (FlinkSqlParser.TERMINATED - 129)) | (1 << (FlinkSqlParser.COLLECTION - 129)) | (1 << (FlinkSqlParser.ITEMS - 129)) | (1 << (FlinkSqlParser.KEYS - 129)) | (1 << (FlinkSqlParser.ESCAPED - 129)) | (1 << (FlinkSqlParser.LINES - 129)) | (1 << (FlinkSqlParser.SEPARATED - 129)) | (1 << (FlinkSqlParser.FUNCTION - 129)) | (1 << (FlinkSqlParser.EXTENDED - 129)) | (1 << (FlinkSqlParser.REFRESH - 129)) | (1 << (FlinkSqlParser.CLEAR - 129)) | (1 << (FlinkSqlParser.CACHE - 129)) | (1 << (FlinkSqlParser.UNCACHE - 129)) | (1 << (FlinkSqlParser.LAZY - 129)) | (1 << (FlinkSqlParser.FORMATTED - 129)) | (1 << (FlinkSqlParser.GLOBAL - 129)) | (1 << (FlinkSqlParser.TEMPORARY - 129)) | (1 << (FlinkSqlParser.OPTIONS - 129)) | (1 << (FlinkSqlParser.UNSET - 129)) | (1 << (FlinkSqlParser.TBLPROPERTIES - 129)) | (1 << (FlinkSqlParser.DBPROPERTIES - 129)) | (1 << (FlinkSqlParser.BUCKETS - 129)) | (1 << (FlinkSqlParser.SKEWED - 129)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (FlinkSqlParser.STORED - 161)) | (1 << (FlinkSqlParser.DIRECTORIES - 161)) | (1 << (FlinkSqlParser.LOCATION - 161)) | (1 << (FlinkSqlParser.EXCHANGE - 161)) | (1 << (FlinkSqlParser.UNARCHIVE - 161)) | (1 << (FlinkSqlParser.FILEFORMAT - 161)) | (1 << (FlinkSqlParser.TOUCH - 161)) | (1 << (FlinkSqlParser.COMPACT - 161)) | (1 << (FlinkSqlParser.CONCATENATE - 161)) | (1 << (FlinkSqlParser.CHANGE - 161)) | (1 << (FlinkSqlParser.CASCADE - 161)) | (1 << (FlinkSqlParser.CONSTRAINT - 161)) | (1 << (FlinkSqlParser.RESTRICT - 161)) | (1 << (FlinkSqlParser.CLUSTERED - 161)) | (1 << (FlinkSqlParser.SORTED - 161)) | (1 << (FlinkSqlParser.PURGE - 161)) | (1 << (FlinkSqlParser.INPUTFORMAT - 161)) | (1 << (FlinkSqlParser.OUTPUTFORMAT - 161)) | (1 << (FlinkSqlParser.DATABASE - 161)) | (1 << (FlinkSqlParser.DATABASES - 161)) | (1 << (FlinkSqlParser.DFS - 161)) | (1 << (FlinkSqlParser.TRUNCATE - 161)) | (1 << (FlinkSqlParser.ANALYZE - 161)) | (1 << (FlinkSqlParser.COMPUTE - 161)) | (1 << (FlinkSqlParser.LIST - 161)) | (1 << (FlinkSqlParser.STATISTICS - 161)) | (1 << (FlinkSqlParser.PARTITIONED - 161)) | (1 << (FlinkSqlParser.EXTERNAL - 161)) | (1 << (FlinkSqlParser.DEFINED - 161)) | (1 << (FlinkSqlParser.REVOKE - 161)) | (1 << (FlinkSqlParser.GRANT - 161)))) !== 0) || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (FlinkSqlParser.LOCK - 193)) | (1 << (FlinkSqlParser.UNLOCK - 193)) | (1 << (FlinkSqlParser.MSCK - 193)) | (1 << (FlinkSqlParser.REPAIR - 193)) | (1 << (FlinkSqlParser.RECOVER - 193)) | (1 << (FlinkSqlParser.EXPORT - 193)) | (1 << (FlinkSqlParser.IMPORT - 193)) | (1 << (FlinkSqlParser.LOAD - 193)) | (1 << (FlinkSqlParser.ROLE - 193)) | (1 << (FlinkSqlParser.ROLES - 193)) | (1 << (FlinkSqlParser.COMPACTIONS - 193)) | (1 << (FlinkSqlParser.PRINCIPALS - 193)) | (1 << (FlinkSqlParser.TRANSACTIONS - 193)) | (1 << (FlinkSqlParser.INDEX - 193)) | (1 << (FlinkSqlParser.INDEXES - 193)) | (1 << (FlinkSqlParser.LOCKS - 193)) | (1 << (FlinkSqlParser.OPTION - 193)) | (1 << (FlinkSqlParser.LOCAL - 193)) | (1 << (FlinkSqlParser.INPATH - 193)) | (1 << (FlinkSqlParser.WATERMARK - 193)) | (1 << (FlinkSqlParser.UNNEST - 193)) | (1 << (FlinkSqlParser.MATCH - 193)) | (1 << (FlinkSqlParser.NEXT - 193)) | (1 << (FlinkSqlParser.WITHIN - 193)) | (1 << (FlinkSqlParser.WS - 193)) | (1 << (FlinkSqlParser.SYSTEM - 193)) | (1 << (FlinkSqlParser.INCLUDING - 193)) | (1 << (FlinkSqlParser.EXCLUDING - 193)) | (1 << (FlinkSqlParser.CONSTRAINTS - 193)) | (1 << (FlinkSqlParser.GENERATED - 193)) | (1 << (FlinkSqlParser.CATALOG - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (FlinkSqlParser.LANGUAGE - 225)) | (1 << (FlinkSqlParser.CATALOGS - 225)) | (1 << (FlinkSqlParser.VIEWS - 225)) | (1 << (FlinkSqlParser.PRIMARY - 225)) | (1 << (FlinkSqlParser.KEY - 225)) | (1 << (FlinkSqlParser.PERIOD - 225)) | (1 << (FlinkSqlParser.SYSTEM_TIME - 225)) | (1 << (FlinkSqlParser.STRING - 225)) | (1 << (FlinkSqlParser.ARRAY - 225)) | (1 << (FlinkSqlParser.MAP - 225)) | (1 << (FlinkSqlParser.CHAR - 225)) | (1 << (FlinkSqlParser.VARCHAR - 225)) | (1 << (FlinkSqlParser.BINARY - 225)) | (1 << (FlinkSqlParser.VARBINARY - 225)) | (1 << (FlinkSqlParser.BYTES - 225)) | (1 << (FlinkSqlParser.DECIMAL - 225)) | (1 << (FlinkSqlParser.TINYINT - 225)) | (1 << (FlinkSqlParser.SMALLINT - 225)) | (1 << (FlinkSqlParser.INT - 225)) | (1 << (FlinkSqlParser.BIGINT - 225)) | (1 << (FlinkSqlParser.FLOAT - 225)) | (1 << (FlinkSqlParser.DOUBLE - 225)) | (1 << (FlinkSqlParser.DATE - 225)) | (1 << (FlinkSqlParser.TIME - 225)) | (1 << (FlinkSqlParser.TIMESTAMP - 225)) | (1 << (FlinkSqlParser.MULTISET - 225)) | (1 << (FlinkSqlParser.BOOLEAN - 225)) | (1 << (FlinkSqlParser.RAW - 225)) | (1 << (FlinkSqlParser.ROW - 225)) | (1 << (FlinkSqlParser.NULL - 225)) | (1 << (FlinkSqlParser.DATETIME - 225)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


FlinkSqlParser.prototype.sempred = function(localctx, ruleIndex, predIndex) {
	switch(ruleIndex) {
	case 44:
			return this.queryStatement_sempred(localctx, predIndex);
	case 50:
			return this.tableExpression_sempred(localctx, predIndex);
	case 68:
			return this.booleanExpression_sempred(localctx, predIndex);
	case 70:
			return this.valueExpression_sempred(localctx, predIndex);
	case 71:
			return this.primaryExpression_sempred(localctx, predIndex);
    default:
        throw "No predicate with index:" + ruleIndex;
   }
};

FlinkSqlParser.prototype.queryStatement_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 0:
			return this.precpred(this._ctx, 3);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

FlinkSqlParser.prototype.tableExpression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 1:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

FlinkSqlParser.prototype.booleanExpression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 2:
			return this.precpred(this._ctx, 2);
		case 3:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

FlinkSqlParser.prototype.valueExpression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 4:
			return this.precpred(this._ctx, 6);
		case 5:
			return this.precpred(this._ctx, 5);
		case 6:
			return this.precpred(this._ctx, 4);
		case 7:
			return this.precpred(this._ctx, 3);
		case 8:
			return this.precpred(this._ctx, 2);
		case 9:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

FlinkSqlParser.prototype.primaryExpression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 10:
			return this.precpred(this._ctx, 4);
		default:
			throw "No predicate with index:" + predIndex;
	}
};


exports.FlinkSqlParser = FlinkSqlParser;
