// Generated from /Users/jinjiongxi/workspace/dt-sql-parser/src/grammar/spark/SparkSql.g4 by ANTLR 4.8
// jshint ignore: start
var antlr4 = require('antlr4/index');
var SparkSqlListener = require('./SparkSqlListener').SparkSqlListener;
var SparkSqlVisitor = require('./SparkSqlVisitor').SparkSqlVisitor;

var grammarFileName = "SparkSql.g4";


var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964",
    "\u0003\u0128\u0bd9\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\u0004v\tv\u0004w\tw\u0004",
    "x\tx\u0004y\ty\u0004z\tz\u0004{\t{\u0004|\t|\u0004}\t}\u0004~\t~\u0004",
    "\u007f\t\u007f\u0004\u0080\t\u0080\u0004\u0081\t\u0081\u0004\u0082\t",
    "\u0082\u0004\u0083\t\u0083\u0004\u0084\t\u0084\u0004\u0085\t\u0085\u0004",
    "\u0086\t\u0086\u0004\u0087\t\u0087\u0004\u0088\t\u0088\u0004\u0089\t",
    "\u0089\u0004\u008a\t\u008a\u0003\u0002\u0003\u0002\u0003\u0002\u0003",
    "\u0003\u0003\u0003\u0005\u0003\u011a\n\u0003\u0003\u0003\u0007\u0003",
    "\u011d\n\u0003\f\u0003\u000e\u0003\u0120\u000b\u0003\u0003\u0004\u0003",
    "\u0004\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0006\u0003\u0006\u0003",
    "\u0006\u0003\u0007\u0003\u0007\u0003\u0007\u0003\b\u0003\b\u0003\b\u0003",
    "\t\u0003\t\u0003\t\u0003\n\u0003\n\u0005\n\u0135\n\n\u0003\n\u0003\n",
    "\u0003\n\u0005\n\u013a\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0005\n\u0142\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n",
    "\u0007\n\u014a\n\n\f\n\u000e\n\u014d\u000b\n\u0003\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u0160\n\n\u0003\n",
    "\u0003\n\u0005\n\u0164\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u016a",
    "\n\n\u0003\n\u0005\n\u016d\n\n\u0003\n\u0005\n\u0170\n\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0005\n\u0177\n\n\u0003\n\u0003\n\u0003\n",
    "\u0005\n\u017c\n\n\u0003\n\u0005\n\u017f\n\n\u0003\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0005\n\u0186\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u0192\n\n\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0007\n\u019b\n\n\f",
    "\n\u000e\n\u019e\u000b\n\u0003\n\u0005\n\u01a1\n\n\u0003\n\u0005\n\u01a4",
    "\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u01ab\n\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0007",
    "\n\u01b6\n\n\f\n\u000e\n\u01b9\u000b\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0005\n\u01c0\n\n\u0003\n\u0003\n\u0003\n\u0005\n\u01c5\n",
    "\n\u0003\n\u0005\n\u01c8\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n",
    "\u01ce\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0005\n\u01d9\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0005\n\u0219\n\n\u0003\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u0222\n\n\u0003\n\u0003\n\u0005",
    "\n\u0226\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u022c\n\n\u0003",
    "\n\u0003\n\u0005\n\u0230\n\n\u0003\n\u0003\n\u0003\n\u0005\n\u0235\n",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u023b\n\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005",
    "\n\u0247\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n",
    "\u024f\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u0255\n\n\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0005\n\u0262\n\n\u0003\n\u0006\n\u0265\n\n\r\n\u000e\n\u0266",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u0277\n\n\u0003\n",
    "\u0003\n\u0003\n\u0007\n\u027c\n\n\f\n\u000e\n\u027f\u000b\n\u0003\n",
    "\u0005\n\u0282\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u0288\n\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u0297\n\n\u0003\n\u0003\n",
    "\u0005\n\u029b\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u02a1\n\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u02a7\n\n\u0003\n\u0005\n\u02aa",
    "\n\n\u0003\n\u0005\n\u02ad\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005",
    "\n\u02b3\n\n\u0003\n\u0003\n\u0005\n\u02b7\n\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0007\n\u02bf\n\n\f\n\u000e\n\u02c2\u000b",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u02ca\n\n",
    "\u0003\n\u0005\n\u02cd\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0005\n\u02d6\n\n\u0003\n\u0003\n\u0003\n\u0005\n\u02db\n",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u02e1\n\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0005\n\u02e8\n\n\u0003\n\u0005\n\u02eb\n\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u02f1\n\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0007\n\u02fa\n\n\f\n\u000e\n\u02fd",
    "\u000b\n\u0005\n\u02ff\n\n\u0003\n\u0003\n\u0005\n\u0303\n\n\u0003\n",
    "\u0003\n\u0003\n\u0005\n\u0308\n\n\u0003\n\u0003\n\u0003\n\u0005\n\u030d",
    "\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u0314\n\n\u0003",
    "\n\u0005\n\u0317\n\n\u0003\n\u0005\n\u031a\n\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0005\n\u0321\n\n\u0003\n\u0003\n\u0003\n\u0005\n",
    "\u0326\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005",
    "\n\u032f\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n",
    "\u0337\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u033d\n\n\u0003\n",
    "\u0005\n\u0340\n\n\u0003\n\u0005\n\u0343\n\n\u0003\n\u0003\n\u0003\n",
    "\u0003\n\u0005\n\u0349\n\n\u0003\n\u0003\n\u0005\n\u034d\n\n\u0003\n",
    "\u0003\n\u0005\n\u0351\n\n\u0003\n\u0003\n\u0005\n\u0355\n\n\u0005\n",
    "\u0357\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u035f",
    "\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u0367\n",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u036d\n\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0005\n\u0373\n\n\u0003\n\u0005\n\u0376\n\n\u0003\n",
    "\u0003\n\u0005\n\u037a\n\n\u0003\n\u0005\n\u037d\n\n\u0003\n\u0003\n",
    "\u0005\n\u0381\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0007",
    "\n\u039b\n\n\f\n\u000e\n\u039e\u000b\n\u0005\n\u03a0\n\n\u0003\n\u0003",
    "\n\u0005\n\u03a4\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u03aa\n",
    "\n\u0003\n\u0005\n\u03ad\n\n\u0003\n\u0005\n\u03b0\n\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0005\n\u03b6\n\n\u0003\n\u0003\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0005\n\u03be\n\n\u0003\n\u0003\n\u0003\n\u0005\n\u03c3",
    "\n\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005\n\u03c9\n\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0005\n\u03cf\n\n\u0003\n\u0003\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0003\n\u0007\n\u03d9\n\n\f\n\u000e\n\u03dc",
    "\u000b\n\u0005\n\u03de\n\n\u0003\n\u0003\n\u0003\n\u0007\n\u03e3\n\n",
    "\f\n\u000e\n\u03e6\u000b\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0007\n\u03f4\n\n",
    "\f\n\u000e\n\u03f7\u000b\n\u0003\n\u0003\n\u0003\n\u0003\n\u0007\n\u03fd",
    "\n\n\f\n\u000e\n\u0400\u000b\n\u0005\n\u0402\n\n\u0003\n\u0003\n\u0007",
    "\n\u0406\n\n\f\n\u000e\n\u0409\u000b\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0007\n\u040f\n\n\f\n\u000e\n\u0412\u000b\n\u0003\n\u0003\n\u0007",
    "\n\u0416\n\n\f\n\u000e\n\u0419\u000b\n\u0005\n\u041b\n\n\u0003\u000b",
    "\u0003\u000b\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0005\f",
    "\u0425\n\f\u0003\f\u0003\f\u0005\f\u0429\n\f\u0003\f\u0003\f\u0003\f",
    "\u0003\f\u0003\f\u0005\f\u0430\n\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0005\f\u04a4\n\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f",
    "\u0003\f\u0005\f\u04ac\n\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0005\f\u04b4\n\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f",
    "\u0003\f\u0005\f\u04bd\n\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0003\f\u0003\f\u0005\f\u04c7\n\f\u0003\r\u0003\r\u0005\r\u04cb\n",
    "\r\u0003\r\u0005\r\u04ce\n\r\u0003\r\u0003\r\u0003\r\u0003\r\u0005\r",
    "\u04d4\n\r\u0003\r\u0003\r\u0003\u000e\u0003\u000e\u0005\u000e\u04da",
    "\n\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000e\u0003\u000f",
    "\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0005\u000f",
    "\u04e6\n\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003",
    "\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0005",
    "\u0010\u04f2\n\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0005\u0010",
    "\u04f7\n\u0010\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0012\u0003",
    "\u0012\u0003\u0012\u0003\u0013\u0005\u0013\u0500\n\u0013\u0003\u0013",
    "\u0003\u0013\u0003\u0013\u0003\u0014\u0003\u0014\u0003\u0014\u0005\u0014",
    "\u0508\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003",
    "\u0014\u0005\u0014\u050f\n\u0014\u0005\u0014\u0511\n\u0014\u0003\u0014",
    "\u0003\u0014\u0003\u0014\u0005\u0014\u0516\n\u0014\u0003\u0014\u0003",
    "\u0014\u0005\u0014\u051a\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014",
    "\u0005\u0014\u051f\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0005",
    "\u0014\u0524\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0005\u0014",
    "\u0529\n\u0014\u0003\u0014\u0005\u0014\u052c\n\u0014\u0003\u0014\u0003",
    "\u0014\u0003\u0014\u0005\u0014\u0531\n\u0014\u0003\u0014\u0003\u0014",
    "\u0005\u0014\u0535\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0005",
    "\u0014\u053a\n\u0014\u0005\u0014\u053c\n\u0014\u0003\u0015\u0003\u0015",
    "\u0005\u0015\u0540\n\u0015\u0003\u0016\u0003\u0016\u0003\u0016\u0003",
    "\u0016\u0003\u0016\u0007\u0016\u0547\n\u0016\f\u0016\u000e\u0016\u054a",
    "\u000b\u0016\u0003\u0016\u0003\u0016\u0003\u0017\u0003\u0017\u0003\u0017",
    "\u0005\u0017\u0551\n\u0017\u0003\u0018\u0003\u0018\u0003\u0019\u0003",
    "\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0005\u0019\u055a\n\u0019",
    "\u0003\u001a\u0003\u001a\u0003\u001a\u0007\u001a\u055f\n\u001a\f\u001a",
    "\u000e\u001a\u0562\u000b\u001a\u0003\u001b\u0003\u001b\u0003\u001b\u0003",
    "\u001b\u0007\u001b\u0568\n\u001b\f\u001b\u000e\u001b\u056b\u000b\u001b",
    "\u0003\u001c\u0003\u001c\u0005\u001c\u056f\n\u001c\u0003\u001c\u0005",
    "\u001c\u0572\n\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c",
    "\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001e\u0003\u001e\u0003\u001e",
    "\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e",
    "\u0003\u001e\u0007\u001e\u0585\n\u001e\f\u001e\u000e\u001e\u0588\u000b",
    "\u001e\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0007\u001f\u058e",
    "\n\u001f\f\u001f\u000e\u001f\u0591\u000b\u001f\u0003\u001f\u0003\u001f",
    "\u0003 \u0003 \u0005 \u0597\n \u0003 \u0005 \u059a\n \u0003!\u0003!",
    "\u0003!\u0007!\u059f\n!\f!\u000e!\u05a2\u000b!\u0003!\u0005!\u05a5\n",
    "!\u0003\"\u0003\"\u0003\"\u0003\"\u0005\"\u05ab\n\"\u0003#\u0003#\u0003",
    "#\u0003#\u0007#\u05b1\n#\f#\u000e#\u05b4\u000b#\u0003#\u0003#\u0003",
    "$\u0003$\u0003$\u0003$\u0007$\u05bc\n$\f$\u000e$\u05bf\u000b$\u0003",
    "$\u0003$\u0003%\u0003%\u0003%\u0003%\u0003%\u0003%\u0005%\u05c9\n%\u0003",
    "&\u0003&\u0003&\u0003&\u0003&\u0005&\u05d0\n&\u0003\'\u0003\'\u0003",
    "\'\u0003\'\u0005\'\u05d6\n\'\u0003(\u0003(\u0003(\u0003)\u0003)\u0003",
    ")\u0003)\u0003)\u0003)\u0006)\u05e1\n)\r)\u000e)\u05e2\u0003)\u0003",
    ")\u0003)\u0003)\u0003)\u0005)\u05ea\n)\u0003)\u0003)\u0003)\u0003)\u0003",
    ")\u0005)\u05f1\n)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003)\u0003",
    ")\u0003)\u0003)\u0005)\u05fd\n)\u0003)\u0003)\u0003)\u0003)\u0007)\u0603",
    "\n)\f)\u000e)\u0606\u000b)\u0003)\u0007)\u0609\n)\f)\u000e)\u060c\u000b",
    ")\u0005)\u060e\n)\u0003*\u0003*\u0003*\u0003*\u0003*\u0007*\u0615\n",
    "*\f*\u000e*\u0618\u000b*\u0005*\u061a\n*\u0003*\u0003*\u0003*\u0003",
    "*\u0003*\u0007*\u0621\n*\f*\u000e*\u0624\u000b*\u0005*\u0626\n*\u0003",
    "*\u0003*\u0003*\u0003*\u0003*\u0007*\u062d\n*\f*\u000e*\u0630\u000b",
    "*\u0005*\u0632\n*\u0003*\u0003*\u0003*\u0003*\u0003*\u0007*\u0639\n",
    "*\f*\u000e*\u063c\u000b*\u0005*\u063e\n*\u0003*\u0005*\u0641\n*\u0003",
    "*\u0003*\u0003*\u0005*\u0646\n*\u0005*\u0648\n*\u0003+\u0003+\u0003",
    "+\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0003,\u0005,\u0654\n,\u0003",
    ",\u0003,\u0003,\u0003,\u0003,\u0005,\u065b\n,\u0003,\u0003,\u0003,\u0003",
    ",\u0003,\u0005,\u0662\n,\u0003,\u0007,\u0665\n,\f,\u000e,\u0668\u000b",
    ",\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0005",
    "-\u0673\n-\u0003.\u0003.\u0005.\u0677\n.\u0003.\u0003.\u0005.\u067b",
    "\n.\u0003/\u0003/\u0006/\u067f\n/\r/\u000e/\u0680\u00030\u00030\u0005",
    "0\u0685\n0\u00030\u00030\u00030\u00030\u00070\u068b\n0\f0\u000e0\u068e",
    "\u000b0\u00030\u00050\u0691\n0\u00030\u00050\u0694\n0\u00030\u00050",
    "\u0697\n0\u00030\u00050\u069a\n0\u00030\u00030\u00050\u069e\n0\u0003",
    "1\u00031\u00051\u06a2\n1\u00031\u00051\u06a5\n1\u00031\u00031\u0005",
    "1\u06a9\n1\u00031\u00071\u06ac\n1\f1\u000e1\u06af\u000b1\u00031\u0005",
    "1\u06b2\n1\u00031\u00051\u06b5\n1\u00031\u00051\u06b8\n1\u00031\u0005",
    "1\u06bb\n1\u00051\u06bd\n1\u00032\u00032\u00032\u00032\u00032\u0003",
    "2\u00032\u00032\u00032\u00032\u00052\u06c9\n2\u00032\u00052\u06cc\n",
    "2\u00032\u00032\u00052\u06d0\n2\u00032\u00032\u00032\u00032\u00032\u0003",
    "2\u00032\u00032\u00052\u06da\n2\u00032\u00032\u00052\u06de\n2\u0005",
    "2\u06e0\n2\u00032\u00052\u06e3\n2\u00032\u00032\u00052\u06e7\n2\u0003",
    "3\u00033\u00073\u06eb\n3\f3\u000e3\u06ee\u000b3\u00033\u00053\u06f1",
    "\n3\u00033\u00033\u00034\u00034\u00034\u00035\u00035\u00035\u00035\u0005",
    "5\u06fc\n5\u00035\u00035\u00035\u00036\u00036\u00036\u00036\u00036\u0005",
    "6\u0706\n6\u00036\u00036\u00036\u00037\u00037\u00037\u00037\u00037\u0003",
    "7\u00037\u00057\u0712\n7\u00038\u00038\u00038\u00038\u00038\u00038\u0003",
    "8\u00038\u00038\u00038\u00038\u00078\u071f\n8\f8\u000e8\u0722\u000b",
    "8\u00038\u00038\u00058\u0726\n8\u00039\u00039\u00039\u00079\u072b\n",
    "9\f9\u000e9\u072e\u000b9\u0003:\u0003:\u0003:\u0003:\u0003;\u0003;\u0003",
    ";\u0003<\u0003<\u0003<\u0003=\u0003=\u0003=\u0005=\u073d\n=\u0003=\u0007",
    "=\u0740\n=\f=\u000e=\u0743\u000b=\u0003=\u0003=\u0003>\u0003>\u0003",
    ">\u0003>\u0003>\u0003>\u0007>\u074d\n>\f>\u000e>\u0750\u000b>\u0003",
    ">\u0003>\u0005>\u0754\n>\u0003?\u0003?\u0003?\u0003?\u0007?\u075a\n",
    "?\f?\u000e?\u075d\u000b?\u0003?\u0007?\u0760\n?\f?\u000e?\u0763\u000b",
    "?\u0003?\u0005?\u0766\n?\u0003@\u0003@\u0003@\u0003@\u0003@\u0007@\u076d",
    "\n@\f@\u000e@\u0770\u000b@\u0003@\u0003@\u0003@\u0003@\u0003@\u0003",
    "@\u0003@\u0003@\u0003@\u0003@\u0007@\u077c\n@\f@\u000e@\u077f\u000b",
    "@\u0003@\u0003@\u0005@\u0783\n@\u0003@\u0003@\u0003@\u0003@\u0003@\u0003",
    "@\u0003@\u0003@\u0007@\u078d\n@\f@\u000e@\u0790\u000b@\u0003@\u0003",
    "@\u0005@\u0794\n@\u0003A\u0003A\u0003A\u0003A\u0007A\u079a\nA\fA\u000e",
    "A\u079d\u000bA\u0005A\u079f\nA\u0003A\u0003A\u0005A\u07a3\nA\u0003B",
    "\u0003B\u0003B\u0003B\u0003B\u0003B\u0003B\u0003B\u0003B\u0003B\u0007",
    "B\u07af\nB\fB\u000eB\u07b2\u000bB\u0003B\u0003B\u0003B\u0003C\u0003",
    "C\u0003C\u0003C\u0003C\u0007C\u07bc\nC\fC\u000eC\u07bf\u000bC\u0003",
    "C\u0003C\u0005C\u07c3\nC\u0003D\u0003D\u0005D\u07c7\nD\u0003D\u0005",
    "D\u07ca\nD\u0003E\u0003E\u0003E\u0005E\u07cf\nE\u0003E\u0003E\u0003",
    "E\u0003E\u0003E\u0007E\u07d6\nE\fE\u000eE\u07d9\u000bE\u0005E\u07db",
    "\nE\u0003E\u0003E\u0003E\u0005E\u07e0\nE\u0003E\u0003E\u0003E\u0007",
    "E\u07e5\nE\fE\u000eE\u07e8\u000bE\u0005E\u07ea\nE\u0003F\u0003F\u0003",
    "G\u0003G\u0007G\u07f0\nG\fG\u000eG\u07f3\u000bG\u0003H\u0003H\u0003",
    "H\u0003H\u0005H\u07f9\nH\u0003H\u0003H\u0003H\u0003H\u0003H\u0005H\u0800",
    "\nH\u0003I\u0005I\u0803\nI\u0003I\u0003I\u0003I\u0005I\u0808\nI\u0003",
    "I\u0005I\u080b\nI\u0003I\u0003I\u0003I\u0005I\u0810\nI\u0003I\u0003",
    "I\u0005I\u0814\nI\u0003I\u0005I\u0817\nI\u0003I\u0005I\u081a\nI\u0003",
    "J\u0003J\u0003J\u0003J\u0005J\u0820\nJ\u0003K\u0003K\u0003K\u0005K\u0825",
    "\nK\u0003K\u0003K\u0003L\u0005L\u082a\nL\u0003L\u0003L\u0003L\u0003",
    "L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003L\u0003",
    "L\u0003L\u0003L\u0005L\u083c\nL\u0005L\u083e\nL\u0003L\u0005L\u0841",
    "\nL\u0003M\u0003M\u0003M\u0003M\u0003N\u0003N\u0003N\u0007N\u084a\n",
    "N\fN\u000eN\u084d\u000bN\u0003O\u0003O\u0003O\u0003O\u0007O\u0853\n",
    "O\fO\u000eO\u0856\u000bO\u0003O\u0003O\u0003P\u0003P\u0005P\u085c\n",
    "P\u0003Q\u0003Q\u0003Q\u0003Q\u0007Q\u0862\nQ\fQ\u000eQ\u0865\u000b",
    "Q\u0003Q\u0003Q\u0003R\u0003R\u0005R\u086b\nR\u0003S\u0003S\u0005S\u086f",
    "\nS\u0003S\u0003S\u0003S\u0003S\u0003S\u0003S\u0005S\u0877\nS\u0003",
    "S\u0003S\u0003S\u0003S\u0003S\u0003S\u0005S\u087f\nS\u0003S\u0003S\u0003",
    "S\u0003S\u0005S\u0885\nS\u0003T\u0003T\u0003T\u0003T\u0007T\u088b\n",
    "T\fT\u000eT\u088e\u000bT\u0003T\u0003T\u0003U\u0003U\u0003U\u0003U\u0003",
    "U\u0007U\u0897\nU\fU\u000eU\u089a\u000bU\u0005U\u089c\nU\u0003U\u0003",
    "U\u0003U\u0003V\u0005V\u08a2\nV\u0003V\u0003V\u0005V\u08a6\nV\u0005",
    "V\u08a8\nV\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0005W\u08b1",
    "\nW\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003",
    "W\u0005W\u08bd\nW\u0005W\u08bf\nW\u0003W\u0003W\u0003W\u0003W\u0003",
    "W\u0005W\u08c6\nW\u0003W\u0003W\u0003W\u0003W\u0003W\u0005W\u08cd\n",
    "W\u0003W\u0003W\u0003W\u0003W\u0005W\u08d3\nW\u0003W\u0003W\u0003W\u0003",
    "W\u0005W\u08d9\nW\u0005W\u08db\nW\u0003X\u0003X\u0003X\u0007X\u08e0",
    "\nX\fX\u000eX\u08e3\u000bX\u0003Y\u0003Y\u0003Y\u0007Y\u08e8\nY\fY\u000e",
    "Y\u08eb\u000bY\u0003Z\u0003Z\u0003Z\u0005Z\u08f0\nZ\u0003Z\u0003Z\u0003",
    "[\u0003[\u0005[\u08f6\n[\u0003[\u0003[\u0005[\u08fa\n[\u0005[\u08fc",
    "\n[\u0003\\\u0003\\\u0003\\\u0007\\\u0901\n\\\f\\\u000e\\\u0904\u000b",
    "\\\u0003]\u0003]\u0003]\u0003]\u0007]\u090a\n]\f]\u000e]\u090d\u000b",
    "]\u0003]\u0003]\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0007^\u0917",
    "\n^\f^\u000e^\u091a\u000b^\u0003^\u0003^\u0005^\u091e\n^\u0003_\u0003",
    "_\u0005_\u0922\n_\u0003`\u0003`\u0003a\u0003a\u0003a\u0003a\u0003a\u0003",
    "a\u0003a\u0003a\u0003a\u0003a\u0005a\u0930\na\u0005a\u0932\na\u0003",
    "a\u0003a\u0003a\u0003a\u0003a\u0003a\u0007a\u093a\na\fa\u000ea\u093d",
    "\u000ba\u0003b\u0005b\u0940\nb\u0003b\u0003b\u0003b\u0003b\u0003b\u0003",
    "b\u0005b\u0948\nb\u0003b\u0003b\u0003b\u0003b\u0003b\u0007b\u094f\n",
    "b\fb\u000eb\u0952\u000bb\u0003b\u0003b\u0003b\u0005b\u0957\nb\u0003",
    "b\u0003b\u0003b\u0003b\u0003b\u0003b\u0005b\u095f\nb\u0003b\u0003b\u0003",
    "b\u0005b\u0964\nb\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003b\u0003",
    "b\u0007b\u096e\nb\fb\u000eb\u0971\u000bb\u0003b\u0003b\u0005b\u0975",
    "\nb\u0003b\u0005b\u0978\nb\u0003b\u0003b\u0003b\u0003b\u0005b\u097e",
    "\nb\u0003b\u0003b\u0005b\u0982\nb\u0003b\u0003b\u0003b\u0005b\u0987",
    "\nb\u0003b\u0003b\u0003b\u0005b\u098c\nb\u0003b\u0003b\u0003b\u0005",
    "b\u0991\nb\u0003c\u0003c\u0003c\u0003c\u0005c\u0997\nc\u0003c\u0003",
    "c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003",
    "c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0003c\u0007c\u09ac\nc\f",
    "c\u000ec\u09af\u000bc\u0003d\u0003d\u0003d\u0003d\u0006d\u09b5\nd\r",
    "d\u000ed\u09b6\u0003d\u0003d\u0005d\u09bb\nd\u0003d\u0003d\u0003d\u0003",
    "d\u0003d\u0006d\u09c2\nd\rd\u000ed\u09c3\u0003d\u0003d\u0005d\u09c8",
    "\nd\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
    "d\u0003d\u0003d\u0003d\u0003d\u0007d\u09d8\nd\fd\u000ed\u09db\u000b",
    "d\u0005d\u09dd\nd\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0005d\u09e5",
    "\nd\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0005d\u09ee\n",
    "d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
    "d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0006",
    "d\u0a03\nd\rd\u000ed\u0a04\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
    "d\u0003d\u0003d\u0003d\u0005d\u0a10\nd\u0003d\u0003d\u0003d\u0007d\u0a15",
    "\nd\fd\u000ed\u0a18\u000bd\u0005d\u0a1a\nd\u0003d\u0003d\u0003d\u0003",
    "d\u0003d\u0003d\u0003d\u0005d\u0a23\nd\u0003d\u0003d\u0005d\u0a27\n",
    "d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0006d\u0a31",
    "\nd\rd\u000ed\u0a32\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
    "d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
    "d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0005d\u0a4c\nd\u0003d\u0003",
    "d\u0003d\u0003d\u0003d\u0005d\u0a53\nd\u0003d\u0005d\u0a56\nd\u0003",
    "d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003",
    "d\u0003d\u0003d\u0005d\u0a65\nd\u0003d\u0003d\u0005d\u0a69\nd\u0003",
    "d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0007d\u0a73\nd\f",
    "d\u000ed\u0a76\u000bd\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0003",
    "e\u0003e\u0006e\u0a80\ne\re\u000ee\u0a81\u0005e\u0a84\ne\u0003f\u0003",
    "f\u0003g\u0003g\u0003h\u0003h\u0003i\u0003i\u0003j\u0003j\u0003j\u0005",
    "j\u0a91\nj\u0003k\u0003k\u0005k\u0a95\nk\u0003l\u0003l\u0003l\u0006",
    "l\u0a9a\nl\rl\u000el\u0a9b\u0003m\u0003m\u0003m\u0005m\u0aa1\nm\u0003",
    "n\u0003n\u0003n\u0003n\u0003n\u0003o\u0005o\u0aa9\no\u0003o\u0003o\u0005",
    "o\u0aad\no\u0003p\u0003p\u0003p\u0005p\u0ab2\np\u0003q\u0003q\u0003",
    "q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003q\u0003",
    "q\u0003q\u0003q\u0005q\u0ac3\nq\u0003q\u0003q\u0005q\u0ac7\nq\u0003",
    "q\u0003q\u0003q\u0003q\u0003q\u0007q\u0ace\nq\fq\u000eq\u0ad1\u000b",
    "q\u0003q\u0005q\u0ad4\nq\u0005q\u0ad6\nq\u0003r\u0003r\u0003r\u0007",
    "r\u0adb\nr\fr\u000er\u0ade\u000br\u0003s\u0003s\u0003s\u0003s\u0005",
    "s\u0ae4\ns\u0003s\u0005s\u0ae7\ns\u0003s\u0005s\u0aea\ns\u0003t\u0003",
    "t\u0003t\u0007t\u0aef\nt\ft\u000et\u0af2\u000bt\u0003u\u0003u\u0003",
    "u\u0003u\u0005u\u0af8\nu\u0003u\u0005u\u0afb\nu\u0003v\u0003v\u0003",
    "v\u0007v\u0b00\nv\fv\u000ev\u0b03\u000bv\u0003w\u0003w\u0003w\u0003",
    "w\u0003w\u0005w\u0b0a\nw\u0003w\u0005w\u0b0d\nw\u0003x\u0003x\u0003",
    "x\u0003x\u0003x\u0003y\u0003y\u0003y\u0003y\u0007y\u0b18\ny\fy\u000e",
    "y\u0b1b\u000by\u0003z\u0003z\u0003z\u0003z\u0003{\u0003{\u0003{\u0003",
    "{\u0003{\u0003{\u0003{\u0003{\u0003{\u0003{\u0003{\u0007{\u0b2c\n{\f",
    "{\u000e{\u0b2f\u000b{\u0003{\u0003{\u0003{\u0003{\u0003{\u0007{\u0b36",
    "\n{\f{\u000e{\u0b39\u000b{\u0005{\u0b3b\n{\u0003{\u0003{\u0003{\u0003",
    "{\u0003{\u0007{\u0b42\n{\f{\u000e{\u0b45\u000b{\u0005{\u0b47\n{\u0005",
    "{\u0b49\n{\u0003{\u0005{\u0b4c\n{\u0003{\u0005{\u0b4f\n{\u0003|\u0003",
    "|\u0003|\u0003|\u0003|\u0003|\u0003|\u0003|\u0003|\u0003|\u0003|\u0003",
    "|\u0003|\u0003|\u0003|\u0003|\u0005|\u0b61\n|\u0003}\u0003}\u0003}\u0003",
    "}\u0003}\u0003}\u0003}\u0005}\u0b6a\n}\u0003~\u0003~\u0003~\u0007~\u0b6f",
    "\n~\f~\u000e~\u0b72\u000b~\u0003\u007f\u0003\u007f\u0003\u007f\u0003",
    "\u007f\u0005\u007f\u0b78\n\u007f\u0003\u0080\u0003\u0080\u0003\u0080",
    "\u0007\u0080\u0b7d\n\u0080\f\u0080\u000e\u0080\u0b80\u000b\u0080\u0003",
    "\u0081\u0003\u0081\u0003\u0081\u0003\u0082\u0003\u0082\u0006\u0082\u0b87",
    "\n\u0082\r\u0082\u000e\u0082\u0b88\u0003\u0082\u0005\u0082\u0b8c\n\u0082",
    "\u0003\u0083\u0003\u0083\u0003\u0083\u0005\u0083\u0b91\n\u0083\u0003",
    "\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0005",
    "\u0084\u0b99\n\u0084\u0003\u0085\u0003\u0085\u0003\u0086\u0003\u0086",
    "\u0005\u0086\u0b9f\n\u0086\u0003\u0086\u0003\u0086\u0003\u0086\u0005",
    "\u0086\u0ba4\n\u0086\u0003\u0086\u0003\u0086\u0003\u0086\u0005\u0086",
    "\u0ba9\n\u0086\u0003\u0086\u0003\u0086\u0005\u0086\u0bad\n\u0086\u0003",
    "\u0086\u0003\u0086\u0005\u0086\u0bb1\n\u0086\u0003\u0086\u0003\u0086",
    "\u0005\u0086\u0bb5\n\u0086\u0003\u0086\u0003\u0086\u0005\u0086\u0bb9",
    "\n\u0086\u0003\u0086\u0003\u0086\u0005\u0086\u0bbd\n\u0086\u0003\u0086",
    "\u0003\u0086\u0005\u0086\u0bc1\n\u0086\u0003\u0086\u0003\u0086\u0005",
    "\u0086\u0bc5\n\u0086\u0003\u0086\u0005\u0086\u0bc8\n\u0086\u0003\u0087",
    "\u0003\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0003\u0087",
    "\u0005\u0087\u0bd1\n\u0087\u0003\u0088\u0003\u0088\u0003\u0089\u0003",
    "\u0089\u0003\u008a\u0003\u008a\u0003\u008a\n\u039c\u03da\u03e4\u03f5",
    "\u03fe\u0407\u0410\u0417\u0006V\u00c0\u00c4\u00c6\u008b\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\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa\u00fc",
    "\u00fe\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0002",
    "-\u0004\u0002AA\u00b2\u00b2\u0004\u0002!!\u00c0\u00c0\u0004\u0002@@",
    "\u0094\u0094\u0004\u0002eeqq\u0003\u0002,-\u0004\u0002\u00e0\u00e0\u00ff",
    "\u00ff\u0004\u0002\u0010\u0010$$\u0007\u0002))55WWdd\u008d\u008d\u0003",
    "\u0002EF\u0004\u0002WWdd\u0004\u0002\u0098\u0098\u0119\u0119\u0004\u0002",
    "\r\r\u0087\u0087\u0004\u0002\u0089\u0089\u0119\u0119\u0005\u0002??\u0093",
    "\u0093\u00ca\u00ca\u0006\u0002RRxx\u00d2\u00d2\u00f5\u00f5\u0005\u0002",
    "RR\u00d2\u00d2\u00f5\u00f5\u0004\u0002\u0018\u0018EE\u0004\u0002__\u007f",
    "\u007f\u0004\u0002\u000f\u000fJJ\u0004\u0002\u011d\u011d\u011f\u011f",
    "\u0005\u0002\u000f\u000f\u0014\u0014\u00d6\u00d6\u0005\u0002ZZ\u00ef",
    "\u00ef\u00f7\u00f7\u0004\u0002\u010e\u010f\u0113\u0113\u0004\u0002L",
    "L\u0110\u0112\u0004\u0002\u010e\u010f\u0116\u0116\u0004\u0002::<<\u0003",
    "\u0002\u00de\u00df\u0004\u0002\u0005\u0005ee\u0004\u0002\u0005\u0005",
    "aa\u0005\u0002\u001c\u001c\u0082\u0082\u00ea\u00ea\u0003\u0002\u0106",
    "\u010d\u0004\u0002LL\u010e\u0117\u0006\u0002\u0012\u0012qq\u0097\u0097",
    "\u009f\u009f\u0004\u0002ZZ\u00ef\u00ef\u0003\u0002\u010e\u010f\u0004",
    "\u0002KK\u00a8\u00a8\u0004\u0002\u00a0\u00a0\u00d7\u00d7\u0004\u0002",
    "``\u00af\u00af\u0003\u0002\u011e\u011f\u0004\u0002MM\u00d1\u00d12\u0002",
    "\r\u000e\u0010\u0011\u0013\u0013\u0015\u0016\u0018\u0019\u001b\u001b",
    "\u001d!$$&)++-35589>IKMQQSY\\\\^`cdgillnprsuwyy||~\u0081\u0084\u0094",
    "\u0096\u0096\u0099\u009a\u009d\u009e\u00a1\u00a1\u00a3\u00a4\u00a6\u00af",
    "\u00b1\u00b9\u00bb\u00c1\u00c3\u00ca\u00cc\u00cf\u00d1\u00d5\u00d7\u00df",
    "\u00e1\u00e5\u00e9\u00e9\u00eb\u00f4\u00f8\u00fb\u00fe\u0100\u0103\u0103",
    "\u0105\u0105\u0011\u0002\u0013\u001377RRffttxx}}\u0083\u0083\u0095\u0095",
    "\u009b\u009b\u00c2\u00c2\u00cc\u00cc\u00d2\u00d2\u00f5\u00f5\u00fd\u00fd",
    "\u0012\u0002\r\u0012\u001468QSegsuwy|~\u0082\u0084\u0094\u0096\u009a",
    "\u009c\u00c1\u00c3\u00cb\u00cd\u00d1\u00d3\u00f4\u00f6\u00fc\u00fe\u0105",
    "\u0002\u0db3\u0002\u0114\u0003\u0002\u0002\u0002\u0004\u011e\u0003\u0002",
    "\u0002\u0002\u0006\u0121\u0003\u0002\u0002\u0002\b\u0123\u0003\u0002",
    "\u0002\u0002\n\u0126\u0003\u0002\u0002\u0002\f\u0129\u0003\u0002\u0002",
    "\u0002\u000e\u012c\u0003\u0002\u0002\u0002\u0010\u012f\u0003\u0002\u0002",
    "\u0002\u0012\u041a\u0003\u0002\u0002\u0002\u0014\u041c\u0003\u0002\u0002",
    "\u0002\u0016\u04c6\u0003\u0002\u0002\u0002\u0018\u04c8\u0003\u0002\u0002",
    "\u0002\u001a\u04d9\u0003\u0002\u0002\u0002\u001c\u04df\u0003\u0002\u0002",
    "\u0002\u001e\u04eb\u0003\u0002\u0002\u0002 \u04f8\u0003\u0002\u0002",
    "\u0002\"\u04fb\u0003\u0002\u0002\u0002$\u04ff\u0003\u0002\u0002\u0002",
    "&\u053b\u0003\u0002\u0002\u0002(\u053d\u0003\u0002\u0002\u0002*\u0541",
    "\u0003\u0002\u0002\u0002,\u054d\u0003\u0002\u0002\u0002.\u0552\u0003",
    "\u0002\u0002\u00020\u0559\u0003\u0002\u0002\u00022\u055b\u0003\u0002",
    "\u0002\u00024\u0563\u0003\u0002\u0002\u00026\u056c\u0003\u0002\u0002",
    "\u00028\u0577\u0003\u0002\u0002\u0002:\u0586\u0003\u0002\u0002\u0002",
    "<\u0589\u0003\u0002\u0002\u0002>\u0594\u0003\u0002\u0002\u0002@\u05a4",
    "\u0003\u0002\u0002\u0002B\u05aa\u0003\u0002\u0002\u0002D\u05ac\u0003",
    "\u0002\u0002\u0002F\u05b7\u0003\u0002\u0002\u0002H\u05c8\u0003\u0002",
    "\u0002\u0002J\u05cf\u0003\u0002\u0002\u0002L\u05d1\u0003\u0002\u0002",
    "\u0002N\u05d7\u0003\u0002\u0002\u0002P\u060d\u0003\u0002\u0002\u0002",
    "R\u0619\u0003\u0002\u0002\u0002T\u0649\u0003\u0002\u0002\u0002V\u064c",
    "\u0003\u0002\u0002\u0002X\u0672\u0003\u0002\u0002\u0002Z\u0674\u0003",
    "\u0002\u0002\u0002\\\u067c\u0003\u0002\u0002\u0002^\u069d\u0003\u0002",
    "\u0002\u0002`\u06bc\u0003\u0002\u0002\u0002b\u06c8\u0003\u0002\u0002",
    "\u0002d\u06e8\u0003\u0002\u0002\u0002f\u06f4\u0003\u0002\u0002\u0002",
    "h\u06f7\u0003\u0002\u0002\u0002j\u0700\u0003\u0002\u0002\u0002l\u0711",
    "\u0003\u0002\u0002\u0002n\u0725\u0003\u0002\u0002\u0002p\u0727\u0003",
    "\u0002\u0002\u0002r\u072f\u0003\u0002\u0002\u0002t\u0733\u0003\u0002",
    "\u0002\u0002v\u0736\u0003\u0002\u0002\u0002x\u0739\u0003\u0002\u0002",
    "\u0002z\u0753\u0003\u0002\u0002\u0002|\u0755\u0003\u0002\u0002\u0002",
    "~\u0793\u0003\u0002\u0002\u0002\u0080\u07a2\u0003\u0002\u0002\u0002",
    "\u0082\u07a4\u0003\u0002\u0002\u0002\u0084\u07c2\u0003\u0002\u0002\u0002",
    "\u0086\u07c4\u0003\u0002\u0002\u0002\u0088\u07cb\u0003\u0002\u0002\u0002",
    "\u008a\u07eb\u0003\u0002\u0002\u0002\u008c\u07ed\u0003\u0002\u0002\u0002",
    "\u008e\u07ff\u0003\u0002\u0002\u0002\u0090\u0819\u0003\u0002\u0002\u0002",
    "\u0092\u081f\u0003\u0002\u0002\u0002\u0094\u0821\u0003\u0002\u0002\u0002",
    "\u0096\u0840\u0003\u0002\u0002\u0002\u0098\u0842\u0003\u0002\u0002\u0002",
    "\u009a\u0846\u0003\u0002\u0002\u0002\u009c\u084e\u0003\u0002\u0002\u0002",
    "\u009e\u0859\u0003\u0002\u0002\u0002\u00a0\u085d\u0003\u0002\u0002\u0002",
    "\u00a2\u0868\u0003\u0002\u0002\u0002\u00a4\u0884\u0003\u0002\u0002\u0002",
    "\u00a6\u0886\u0003\u0002\u0002\u0002\u00a8\u0891\u0003\u0002\u0002\u0002",
    "\u00aa\u08a7\u0003\u0002\u0002\u0002\u00ac\u08da\u0003\u0002\u0002\u0002",
    "\u00ae\u08dc\u0003\u0002\u0002\u0002\u00b0\u08e4\u0003\u0002\u0002\u0002",
    "\u00b2\u08ef\u0003\u0002\u0002\u0002\u00b4\u08f3\u0003\u0002\u0002\u0002",
    "\u00b6\u08fd\u0003\u0002\u0002\u0002\u00b8\u0905\u0003\u0002\u0002\u0002",
    "\u00ba\u091d\u0003\u0002\u0002\u0002\u00bc\u0921\u0003\u0002\u0002\u0002",
    "\u00be\u0923\u0003\u0002\u0002\u0002\u00c0\u0931\u0003\u0002\u0002\u0002",
    "\u00c2\u0990\u0003\u0002\u0002\u0002\u00c4\u0996\u0003\u0002\u0002\u0002",
    "\u00c6\u0a68\u0003\u0002\u0002\u0002\u00c8\u0a83\u0003\u0002\u0002\u0002",
    "\u00ca\u0a85\u0003\u0002\u0002\u0002\u00cc\u0a87\u0003\u0002\u0002\u0002",
    "\u00ce\u0a89\u0003\u0002\u0002\u0002\u00d0\u0a8b\u0003\u0002\u0002\u0002",
    "\u00d2\u0a8d\u0003\u0002\u0002\u0002\u00d4\u0a92\u0003\u0002\u0002\u0002",
    "\u00d6\u0a99\u0003\u0002\u0002\u0002\u00d8\u0a9d\u0003\u0002\u0002\u0002",
    "\u00da\u0aa2\u0003\u0002\u0002\u0002\u00dc\u0aac\u0003\u0002\u0002\u0002",
    "\u00de\u0ab1\u0003\u0002\u0002\u0002\u00e0\u0ad5\u0003\u0002\u0002\u0002",
    "\u00e2\u0ad7\u0003\u0002\u0002\u0002\u00e4\u0adf\u0003\u0002\u0002\u0002",
    "\u00e6\u0aeb\u0003\u0002\u0002\u0002\u00e8\u0af3\u0003\u0002\u0002\u0002",
    "\u00ea\u0afc\u0003\u0002\u0002\u0002\u00ec\u0b04\u0003\u0002\u0002\u0002",
    "\u00ee\u0b0e\u0003\u0002\u0002\u0002\u00f0\u0b13\u0003\u0002\u0002\u0002",
    "\u00f2\u0b1c\u0003\u0002\u0002\u0002\u00f4\u0b4e\u0003\u0002\u0002\u0002",
    "\u00f6\u0b60\u0003\u0002\u0002\u0002\u00f8\u0b69\u0003\u0002\u0002\u0002",
    "\u00fa\u0b6b\u0003\u0002\u0002\u0002\u00fc\u0b77\u0003\u0002\u0002\u0002",
    "\u00fe\u0b79\u0003\u0002\u0002\u0002\u0100\u0b81\u0003\u0002\u0002\u0002",
    "\u0102\u0b8b\u0003\u0002\u0002\u0002\u0104\u0b90\u0003\u0002\u0002\u0002",
    "\u0106\u0b98\u0003\u0002\u0002\u0002\u0108\u0b9a\u0003\u0002\u0002\u0002",
    "\u010a\u0bc7\u0003\u0002\u0002\u0002\u010c\u0bd0\u0003\u0002\u0002\u0002",
    "\u010e\u0bd2\u0003\u0002\u0002\u0002\u0110\u0bd4\u0003\u0002\u0002\u0002",
    "\u0112\u0bd6\u0003\u0002\u0002\u0002\u0114\u0115\u0005\u0004\u0003\u0002",
    "\u0115\u0116\u0007\u0002\u0002\u0003\u0116\u0003\u0003\u0002\u0002\u0002",
    "\u0117\u0119\u0005\u0012\n\u0002\u0118\u011a\u0007\u0118\u0002\u0002",
    "\u0119\u0118\u0003\u0002\u0002\u0002\u0119\u011a\u0003\u0002\u0002\u0002",
    "\u011a\u011d\u0003\u0002\u0002\u0002\u011b\u011d\u0005\u0006\u0004\u0002",
    "\u011c\u0117\u0003\u0002\u0002\u0002\u011c\u011b\u0003\u0002\u0002\u0002",
    "\u011d\u0120\u0003\u0002\u0002\u0002\u011e\u011c\u0003\u0002\u0002\u0002",
    "\u011e\u011f\u0003\u0002\u0002\u0002\u011f\u0005\u0003\u0002\u0002\u0002",
    "\u0120\u011e\u0003\u0002\u0002\u0002\u0121\u0122\u0007\u0118\u0002\u0002",
    "\u0122\u0007\u0003\u0002\u0002\u0002\u0123\u0124\u0005\u00b4[\u0002",
    "\u0124\u0125\u0007\u0002\u0002\u0003\u0125\t\u0003\u0002\u0002\u0002",
    "\u0126\u0127\u0005\u00b2Z\u0002\u0127\u0128\u0007\u0002\u0002\u0003",
    "\u0128\u000b\u0003\u0002\u0002\u0002\u0129\u012a\u0005\u00b0Y\u0002",
    "\u012a\u012b\u0007\u0002\u0002\u0003\u012b\r\u0003\u0002\u0002\u0002",
    "\u012c\u012d\u0005\u00e0q\u0002\u012d\u012e\u0007\u0002\u0002\u0003",
    "\u012e\u000f\u0003\u0002\u0002\u0002\u012f\u0130\u0005\u00e6t\u0002",
    "\u0130\u0131\u0007\u0002\u0002\u0003\u0131\u0011\u0003\u0002\u0002\u0002",
    "\u0132\u041b\u0005$\u0013\u0002\u0133\u0135\u00054\u001b\u0002\u0134",
    "\u0133\u0003\u0002\u0002\u0002\u0134\u0135\u0003\u0002\u0002\u0002\u0135",
    "\u0136\u0003\u0002\u0002\u0002\u0136\u041b\u0005P)\u0002\u0137\u0139",
    "\u0007\u00fb\u0002\u0002\u0138\u013a\u0007\u0093\u0002\u0002\u0139\u0138",
    "\u0003\u0002\u0002\u0002\u0139\u013a\u0003\u0002\u0002\u0002\u013a\u013b",
    "\u0003\u0002\u0002\u0002\u013b\u041b\u0005\u00b0Y\u0002\u013c\u013d",
    "\u00076\u0002\u0002\u013d\u0141\u0005.\u0018\u0002\u013e\u013f\u0007",
    "n\u0002\u0002\u013f\u0140\u0007\u0097\u0002\u0002\u0140\u0142\u0007",
    "T\u0002\u0002\u0141\u013e\u0003\u0002\u0002\u0002\u0141\u0142\u0003",
    "\u0002\u0002\u0002\u0142\u0143\u0003\u0002\u0002\u0002\u0143\u014b\u0005",
    "\u00b0Y\u0002\u0144\u014a\u0005\"\u0012\u0002\u0145\u014a\u0005 \u0011",
    "\u0002\u0146\u0147\u0007\u0104\u0002\u0002\u0147\u0148\t\u0002\u0002",
    "\u0002\u0148\u014a\u0005<\u001f\u0002\u0149\u0144\u0003\u0002\u0002",
    "\u0002\u0149\u0145\u0003\u0002\u0002\u0002\u0149\u0146\u0003\u0002\u0002",
    "\u0002\u014a\u014d\u0003\u0002\u0002\u0002\u014b\u0149\u0003\u0002\u0002",
    "\u0002\u014b\u014c\u0003\u0002\u0002\u0002\u014c\u041b\u0003\u0002\u0002",
    "\u0002\u014d\u014b\u0003\u0002\u0002\u0002\u014e\u014f\u0007\u0010\u0002",
    "\u0002\u014f\u0150\u0005.\u0018\u0002\u0150\u0151\u0005\u00b0Y\u0002",
    "\u0151\u0152\u0007\u00d1\u0002\u0002\u0152\u0153\t\u0002\u0002\u0002",
    "\u0153\u0154\u0005<\u001f\u0002\u0154\u041b\u0003\u0002\u0002\u0002",
    "\u0155\u0156\u0007\u0010\u0002\u0002\u0156\u0157\u0005.\u0018\u0002",
    "\u0157\u0158\u0005\u00b0Y\u0002\u0158\u0159\u0007\u00d1\u0002\u0002",
    "\u0159\u015a\u0005 \u0011\u0002\u015a\u041b\u0003\u0002\u0002\u0002",
    "\u015b\u015c\u0007M\u0002\u0002\u015c\u015f\u0005.\u0018\u0002\u015d",
    "\u015e\u0007n\u0002\u0002\u015e\u0160\u0007T\u0002\u0002\u015f\u015d",
    "\u0003\u0002\u0002\u0002\u015f\u0160\u0003\u0002\u0002\u0002\u0160\u0161",
    "\u0003\u0002\u0002\u0002\u0161\u0163\u0005\u00b0Y\u0002\u0162\u0164",
    "\t\u0003\u0002\u0002\u0163\u0162\u0003\u0002\u0002\u0002\u0163\u0164",
    "\u0003\u0002\u0002\u0002\u0164\u041b\u0003\u0002\u0002\u0002\u0165\u0166",
    "\u0007\u00d4\u0002\u0002\u0166\u0169\t\u0004\u0002\u0002\u0167\u0168",
    "\t\u0005\u0002\u0002\u0168\u016a\u0005\u00b0Y\u0002\u0169\u0167\u0003",
    "\u0002\u0002\u0002\u0169\u016a\u0003\u0002\u0002\u0002\u016a\u016f\u0003",
    "\u0002\u0002\u0002\u016b\u016d\u0007\u0084\u0002\u0002\u016c\u016b\u0003",
    "\u0002\u0002\u0002\u016c\u016d\u0003\u0002\u0002\u0002\u016d\u016e\u0003",
    "\u0002\u0002\u0002\u016e\u0170\u0007\u0119\u0002\u0002\u016f\u016c\u0003",
    "\u0002\u0002\u0002\u016f\u0170\u0003\u0002\u0002\u0002\u0170\u041b\u0003",
    "\u0002\u0002\u0002\u0171\u0176\u0005\u0018\r\u0002\u0172\u0173\u0007",
    "\u0003\u0002\u0002\u0173\u0174\u0005\u00e6t\u0002\u0174\u0175\u0007",
    "\u0004\u0002\u0002\u0175\u0177\u0003\u0002\u0002\u0002\u0176\u0172\u0003",
    "\u0002\u0002\u0002\u0176\u0177\u0003\u0002\u0002\u0002\u0177\u0178\u0003",
    "\u0002\u0002\u0002\u0178\u0179\u00058\u001d\u0002\u0179\u017e\u0005",
    ":\u001e\u0002\u017a\u017c\u0007\u0017\u0002\u0002\u017b\u017a\u0003",
    "\u0002\u0002\u0002\u017b\u017c\u0003\u0002\u0002\u0002\u017c\u017d\u0003",
    "\u0002\u0002\u0002\u017d\u017f\u0005$\u0013\u0002\u017e\u017b\u0003",
    "\u0002\u0002\u0002\u017e\u017f\u0003\u0002\u0002\u0002\u017f\u041b\u0003",
    "\u0002\u0002\u0002\u0180\u0185\u0005\u0018\r\u0002\u0181\u0182\u0007",
    "\u0003\u0002\u0002\u0182\u0183\u0005\u00e6t\u0002\u0183\u0184\u0007",
    "\u0004\u0002\u0002\u0184\u0186\u0003\u0002\u0002\u0002\u0185\u0181\u0003",
    "\u0002\u0002\u0002\u0185\u0186\u0003\u0002\u0002\u0002\u0186\u019c\u0003",
    "\u0002\u0002\u0002\u0187\u019b\u0005\"\u0012\u0002\u0188\u0189\u0007",
    "\u00a9\u0002\u0002\u0189\u018a\u0007\u001f\u0002\u0002\u018a\u018b\u0007",
    "\u0003\u0002\u0002\u018b\u018c\u0005\u00e6t\u0002\u018c\u018d\u0007",
    "\u0004\u0002\u0002\u018d\u0192\u0003\u0002\u0002\u0002\u018e\u018f\u0007",
    "\u00a9\u0002\u0002\u018f\u0190\u0007\u001f\u0002\u0002\u0190\u0192\u0005",
    "\u0098M\u0002\u0191\u0188\u0003\u0002\u0002\u0002\u0191\u018e\u0003",
    "\u0002\u0002\u0002\u0192\u019b\u0003\u0002\u0002\u0002\u0193\u019b\u0005",
    "\u001c\u000f\u0002\u0194\u019b\u0005\u001e\u0010\u0002\u0195\u019b\u0005",
    "\u00acW\u0002\u0196\u019b\u0005H%\u0002\u0197\u019b\u0005 \u0011\u0002",
    "\u0198\u0199\u0007\u00e3\u0002\u0002\u0199\u019b\u0005<\u001f\u0002",
    "\u019a\u0187\u0003\u0002\u0002\u0002\u019a\u0191\u0003\u0002\u0002\u0002",
    "\u019a\u0193\u0003\u0002\u0002\u0002\u019a\u0194\u0003\u0002\u0002\u0002",
    "\u019a\u0195\u0003\u0002\u0002\u0002\u019a\u0196\u0003\u0002\u0002\u0002",
    "\u019a\u0197\u0003\u0002\u0002\u0002\u019a\u0198\u0003\u0002\u0002\u0002",
    "\u019b\u019e\u0003\u0002\u0002\u0002\u019c\u019a\u0003\u0002\u0002\u0002",
    "\u019c\u019d\u0003\u0002\u0002\u0002\u019d\u01a3\u0003\u0002\u0002\u0002",
    "\u019e\u019c\u0003\u0002\u0002\u0002\u019f\u01a1\u0007\u0017\u0002\u0002",
    "\u01a0\u019f\u0003\u0002\u0002\u0002\u01a0\u01a1\u0003\u0002\u0002\u0002",
    "\u01a1\u01a2\u0003\u0002\u0002\u0002\u01a2\u01a4\u0005$\u0013\u0002",
    "\u01a3\u01a0\u0003\u0002\u0002\u0002\u01a3\u01a4\u0003\u0002\u0002\u0002",
    "\u01a4\u041b\u0003\u0002\u0002\u0002\u01a5\u01a6\u00076\u0002\u0002",
    "\u01a6\u01aa\u0007\u00e0\u0002\u0002\u01a7\u01a8\u0007n\u0002\u0002",
    "\u01a8\u01a9\u0007\u0097\u0002\u0002\u01a9\u01ab\u0007T\u0002\u0002",
    "\u01aa\u01a7\u0003\u0002\u0002\u0002\u01aa\u01ab\u0003\u0002\u0002\u0002",
    "\u01ab\u01ac\u0003\u0002\u0002\u0002\u01ac\u01ad\u0005\u00b2Z\u0002",
    "\u01ad\u01ae\u0007\u0084\u0002\u0002\u01ae\u01b7\u0005\u00b2Z\u0002",
    "\u01af\u01b6\u00058\u001d\u0002\u01b0\u01b6\u0005\u00acW\u0002\u01b1",
    "\u01b6\u0005H%\u0002\u01b2\u01b6\u0005 \u0011\u0002\u01b3\u01b4\u0007",
    "\u00e3\u0002\u0002\u01b4\u01b6\u0005<\u001f\u0002\u01b5\u01af\u0003",
    "\u0002\u0002\u0002\u01b5\u01b0\u0003\u0002\u0002\u0002\u01b5\u01b1\u0003",
    "\u0002\u0002\u0002\u01b5\u01b2\u0003\u0002\u0002\u0002\u01b5\u01b3\u0003",
    "\u0002\u0002\u0002\u01b6\u01b9\u0003\u0002\u0002\u0002\u01b7\u01b5\u0003",
    "\u0002\u0002\u0002\u01b7\u01b8\u0003\u0002\u0002\u0002\u01b8\u041b\u0003",
    "\u0002\u0002\u0002\u01b9\u01b7\u0003\u0002\u0002\u0002\u01ba\u01bf\u0005",
    "\u001a\u000e\u0002\u01bb\u01bc\u0007\u0003\u0002\u0002\u01bc\u01bd\u0005",
    "\u00e6t\u0002\u01bd\u01be\u0007\u0004\u0002\u0002\u01be\u01c0\u0003",
    "\u0002\u0002\u0002\u01bf\u01bb\u0003\u0002\u0002\u0002\u01bf\u01c0\u0003",
    "\u0002\u0002\u0002\u01c0\u01c1\u0003\u0002\u0002\u0002\u01c1\u01c2\u0005",
    "8\u001d\u0002\u01c2\u01c7\u0005:\u001e\u0002\u01c3\u01c5\u0007\u0017",
    "\u0002\u0002\u01c4\u01c3\u0003\u0002\u0002\u0002\u01c4\u01c5\u0003\u0002",
    "\u0002\u0002\u01c5\u01c6\u0003\u0002\u0002\u0002\u01c6\u01c8\u0005$",
    "\u0013\u0002\u01c7\u01c4\u0003\u0002\u0002\u0002\u01c7\u01c8\u0003\u0002",
    "\u0002\u0002\u01c8\u041b\u0003\u0002\u0002\u0002\u01c9\u01ca\u0007\u0011",
    "\u0002\u0002\u01ca\u01cb\u0007\u00e0\u0002\u0002\u01cb\u01cd\u0005\u00b0",
    "Y\u0002\u01cc\u01ce\u0005*\u0016\u0002\u01cd\u01cc\u0003\u0002\u0002",
    "\u0002\u01cd\u01ce\u0003\u0002\u0002\u0002\u01ce\u01cf\u0003\u0002\u0002",
    "\u0002\u01cf\u01d0\u00072\u0002\u0002\u01d0\u01d8\u0007\u00da\u0002",
    "\u0002\u01d1\u01d9\u0005\u0104\u0083\u0002\u01d2\u01d3\u0007a\u0002",
    "\u0002\u01d3\u01d4\u0007-\u0002\u0002\u01d4\u01d9\u0005\u009aN\u0002",
    "\u01d5\u01d6\u0007a\u0002\u0002\u01d6\u01d7\u0007\u000f\u0002\u0002",
    "\u01d7\u01d9\u0007-\u0002\u0002\u01d8\u01d1\u0003\u0002\u0002\u0002",
    "\u01d8\u01d2\u0003\u0002\u0002\u0002\u01d8\u01d5\u0003\u0002\u0002\u0002",
    "\u01d8\u01d9\u0003\u0002\u0002\u0002\u01d9\u041b\u0003\u0002\u0002\u0002",
    "\u01da\u01db\u0007\u0010\u0002\u0002\u01db\u01dc\u0007\u00e0\u0002\u0002",
    "\u01dc\u01dd\u0005\u00b0Y\u0002\u01dd\u01de\u0007\r\u0002\u0002\u01de",
    "\u01df\t\u0006\u0002\u0002\u01df\u01e0\u0005\u00e2r\u0002\u01e0\u041b",
    "\u0003\u0002\u0002\u0002\u01e1\u01e2\u0007\u0010\u0002\u0002\u01e2\u01e3",
    "\u0007\u00e0\u0002\u0002\u01e3\u01e4\u0005\u00b0Y\u0002\u01e4\u01e5",
    "\u0007\r\u0002\u0002\u01e5\u01e6\t\u0006\u0002\u0002\u01e6\u01e7\u0007",
    "\u0003\u0002\u0002\u01e7\u01e8\u0005\u00e2r\u0002\u01e8\u01e9\u0007",
    "\u0004\u0002\u0002\u01e9\u041b\u0003\u0002\u0002\u0002\u01ea\u01eb\u0007",
    "\u0010\u0002\u0002\u01eb\u01ec\u0007\u00e0\u0002\u0002\u01ec\u01ed\u0005",
    "\u00b0Y\u0002\u01ed\u01ee\u0007\u00bc\u0002\u0002\u01ee\u01ef\u0007",
    ",\u0002\u0002\u01ef\u01f0\u0005\u00b0Y\u0002\u01f0\u01f1\u0007\u00e8",
    "\u0002\u0002\u01f1\u01f2\u0005\u0100\u0081\u0002\u01f2\u041b\u0003\u0002",
    "\u0002\u0002\u01f3\u01f4\u0007\u0010\u0002\u0002\u01f4\u01f5\u0007\u00e0",
    "\u0002\u0002\u01f5\u01f6\u0005\u00b0Y\u0002\u01f6\u01f7\u0007M\u0002",
    "\u0002\u01f7\u01f8\t\u0006\u0002\u0002\u01f8\u01f9\u0007\u0003\u0002",
    "\u0002\u01f9\u01fa\u0005\u00aeX\u0002\u01fa\u01fb\u0007\u0004\u0002",
    "\u0002\u01fb\u041b\u0003\u0002\u0002\u0002\u01fc\u01fd\u0007\u0010\u0002",
    "\u0002\u01fd\u01fe\u0007\u00e0\u0002\u0002\u01fe\u01ff\u0005\u00b0Y",
    "\u0002\u01ff\u0200\u0007M\u0002\u0002\u0200\u0201\t\u0006\u0002\u0002",
    "\u0201\u0202\u0005\u00aeX\u0002\u0202\u041b\u0003\u0002\u0002\u0002",
    "\u0203\u0204\u0007\u0010\u0002\u0002\u0204\u0205\t\u0007\u0002\u0002",
    "\u0205\u0206\u0005\u00b0Y\u0002\u0206\u0207\u0007\u00bc\u0002\u0002",
    "\u0207\u0208\u0007\u00e8\u0002\u0002\u0208\u0209\u0005\u00b0Y\u0002",
    "\u0209\u041b\u0003\u0002\u0002\u0002\u020a\u020b\u0007\u0010\u0002\u0002",
    "\u020b\u020c\t\u0007\u0002\u0002\u020c\u020d\u0005\u00b0Y\u0002\u020d",
    "\u020e\u0007\u00d1\u0002\u0002\u020e\u020f\u0007\u00e3\u0002\u0002\u020f",
    "\u0210\u0005<\u001f\u0002\u0210\u041b\u0003\u0002\u0002\u0002\u0211",
    "\u0212\u0007\u0010\u0002\u0002\u0212\u0213\t\u0007\u0002\u0002\u0213",
    "\u0214\u0005\u00b0Y\u0002\u0214\u0215\u0007\u00f9\u0002\u0002\u0215",
    "\u0218\u0007\u00e3\u0002\u0002\u0216\u0217\u0007n\u0002\u0002\u0217",
    "\u0219\u0007T\u0002\u0002\u0218\u0216\u0003\u0002\u0002\u0002\u0218",
    "\u0219\u0003\u0002\u0002\u0002\u0219\u021a\u0003\u0002\u0002\u0002\u021a",
    "\u021b\u0005<\u001f\u0002\u021b\u041b\u0003\u0002\u0002\u0002\u021c",
    "\u021d\u0007\u0010\u0002\u0002\u021d\u021e\u0007\u00e0\u0002\u0002\u021e",
    "\u021f\u0005\u00b0Y\u0002\u021f\u0221\t\b\u0002\u0002\u0220\u0222\u0007",
    ",\u0002\u0002\u0221\u0220\u0003\u0002\u0002\u0002\u0221\u0222\u0003",
    "\u0002\u0002\u0002\u0222\u0223\u0003\u0002\u0002\u0002\u0223\u0225\u0005",
    "\u00b0Y\u0002\u0224\u0226\u0005\u010c\u0087\u0002\u0225\u0224\u0003",
    "\u0002\u0002\u0002\u0225\u0226\u0003\u0002\u0002\u0002\u0226\u041b\u0003",
    "\u0002\u0002\u0002\u0227\u0228\u0007\u0010\u0002\u0002\u0228\u0229\u0007",
    "\u00e0\u0002\u0002\u0229\u022b\u0005\u00b0Y\u0002\u022a\u022c\u0005",
    "*\u0016\u0002\u022b\u022a\u0003\u0002\u0002\u0002\u022b\u022c\u0003",
    "\u0002\u0002\u0002\u022c\u022d\u0003\u0002\u0002\u0002\u022d\u022f\u0007",
    "$\u0002\u0002\u022e\u0230\u0007,\u0002\u0002\u022f\u022e\u0003\u0002",
    "\u0002\u0002\u022f\u0230\u0003\u0002\u0002\u0002\u0230\u0231\u0003\u0002",
    "\u0002\u0002\u0231\u0232\u0005\u00b0Y\u0002\u0232\u0234\u0005\u00e8",
    "u\u0002\u0233\u0235\u0005\u00dep\u0002\u0234\u0233\u0003\u0002\u0002",
    "\u0002\u0234\u0235\u0003\u0002\u0002\u0002\u0235\u041b\u0003\u0002\u0002",
    "\u0002\u0236\u0237\u0007\u0010\u0002\u0002\u0237\u0238\u0007\u00e0\u0002",
    "\u0002\u0238\u023a\u0005\u00b0Y\u0002\u0239\u023b\u0005*\u0016\u0002",
    "\u023a\u0239\u0003\u0002\u0002\u0002\u023a\u023b\u0003\u0002\u0002\u0002",
    "\u023b\u023c\u0003\u0002\u0002\u0002\u023c\u023d\u0007\u00be\u0002\u0002",
    "\u023d\u023e\u0007-\u0002\u0002\u023e\u023f\u0007\u0003\u0002\u0002",
    "\u023f\u0240\u0005\u00e2r\u0002\u0240\u0241\u0007\u0004\u0002\u0002",
    "\u0241\u041b\u0003\u0002\u0002\u0002\u0242\u0243\u0007\u0010\u0002\u0002",
    "\u0243\u0244\u0007\u00e0\u0002\u0002\u0244\u0246\u0005\u00b0Y\u0002",
    "\u0245\u0247\u0005*\u0016\u0002\u0246\u0245\u0003\u0002\u0002\u0002",
    "\u0246\u0247\u0003\u0002\u0002\u0002\u0247\u0248\u0003\u0002\u0002\u0002",
    "\u0248\u0249\u0007\u00d1\u0002\u0002\u0249\u024a\u0007\u00ce\u0002\u0002",
    "\u024a\u024e\u0007\u0119\u0002\u0002\u024b\u024c\u0007\u0104\u0002\u0002",
    "\u024c\u024d\u0007\u00cf\u0002\u0002\u024d\u024f\u0005<\u001f\u0002",
    "\u024e\u024b\u0003\u0002\u0002\u0002\u024e\u024f\u0003\u0002\u0002\u0002",
    "\u024f\u041b\u0003\u0002\u0002\u0002\u0250\u0251\u0007\u0010\u0002\u0002",
    "\u0251\u0252\u0007\u00e0\u0002\u0002\u0252\u0254\u0005\u00b0Y\u0002",
    "\u0253\u0255\u0005*\u0016\u0002\u0254\u0253\u0003\u0002\u0002\u0002",
    "\u0254\u0255\u0003\u0002\u0002\u0002\u0255\u0256\u0003\u0002\u0002\u0002",
    "\u0256\u0257\u0007\u00d1\u0002\u0002\u0257\u0258\u0007\u00cf\u0002\u0002",
    "\u0258\u0259\u0005<\u001f\u0002\u0259\u041b\u0003\u0002\u0002\u0002",
    "\u025a\u025b\u0007\u0010\u0002\u0002\u025b\u025c\t\u0007\u0002\u0002",
    "\u025c\u025d\u0005\u00b0Y\u0002\u025d\u0261\u0007\r\u0002\u0002\u025e",
    "\u025f\u0007n\u0002\u0002\u025f\u0260\u0007\u0097\u0002\u0002\u0260",
    "\u0262\u0007T\u0002\u0002\u0261\u025e\u0003\u0002\u0002\u0002\u0261",
    "\u0262\u0003\u0002\u0002\u0002\u0262\u0264\u0003\u0002\u0002\u0002\u0263",
    "\u0265\u0005(\u0015\u0002\u0264\u0263\u0003\u0002\u0002\u0002\u0265",
    "\u0266\u0003\u0002\u0002\u0002\u0266\u0264\u0003\u0002\u0002\u0002\u0266",
    "\u0267\u0003\u0002\u0002\u0002\u0267\u041b\u0003\u0002\u0002\u0002\u0268",
    "\u0269\u0007\u0010\u0002\u0002\u0269\u026a\u0007\u00e0\u0002\u0002\u026a",
    "\u026b\u0005\u00b0Y\u0002\u026b\u026c\u0005*\u0016\u0002\u026c\u026d",
    "\u0007\u00bc\u0002\u0002\u026d\u026e\u0007\u00e8\u0002\u0002\u026e\u026f",
    "\u0005*\u0016\u0002\u026f\u041b\u0003\u0002\u0002\u0002\u0270\u0271",
    "\u0007\u0010\u0002\u0002\u0271\u0272\t\u0007\u0002\u0002\u0272\u0273",
    "\u0005\u00b0Y\u0002\u0273\u0276\u0007M\u0002\u0002\u0274\u0275\u0007",
    "n\u0002\u0002\u0275\u0277\u0007T\u0002\u0002\u0276\u0274\u0003\u0002",
    "\u0002\u0002\u0276\u0277\u0003\u0002\u0002\u0002\u0277\u0278\u0003\u0002",
    "\u0002\u0002\u0278\u027d\u0005*\u0016\u0002\u0279\u027a\u0007\u0005",
    "\u0002\u0002\u027a\u027c\u0005*\u0016\u0002\u027b\u0279\u0003\u0002",
    "\u0002\u0002\u027c\u027f\u0003\u0002\u0002\u0002\u027d\u027b\u0003\u0002",
    "\u0002\u0002\u027d\u027e\u0003\u0002\u0002\u0002\u027e\u0281\u0003\u0002",
    "\u0002\u0002\u027f\u027d\u0003\u0002\u0002\u0002\u0280\u0282\u0007\u00b3",
    "\u0002\u0002\u0281\u0280\u0003\u0002\u0002\u0002\u0281\u0282\u0003\u0002",
    "\u0002\u0002\u0282\u041b\u0003\u0002\u0002\u0002\u0283\u0284\u0007\u0010",
    "\u0002\u0002\u0284\u0285\u0007\u00e0\u0002\u0002\u0285\u0287\u0005\u00b0",
    "Y\u0002\u0286\u0288\u0005*\u0016\u0002\u0287\u0286\u0003\u0002\u0002",
    "\u0002\u0287\u0288\u0003\u0002\u0002\u0002\u0288\u0289\u0003\u0002\u0002",
    "\u0002\u0289\u028a\u0007\u00d1\u0002\u0002\u028a\u028b\u0005 \u0011",
    "\u0002\u028b\u041b\u0003\u0002\u0002\u0002\u028c\u028d\u0007\u0010\u0002",
    "\u0002\u028d\u028e\u0007\u00e0\u0002\u0002\u028e\u028f\u0005\u00b0Y",
    "\u0002\u028f\u0290\u0007\u00b8\u0002\u0002\u0290\u0291\u0007\u00aa\u0002",
    "\u0002\u0291\u041b\u0003\u0002\u0002\u0002\u0292\u0293\u0007M\u0002",
    "\u0002\u0293\u0296\u0007\u00e0\u0002\u0002\u0294\u0295\u0007n\u0002",
    "\u0002\u0295\u0297\u0007T\u0002\u0002\u0296\u0294\u0003\u0002\u0002",
    "\u0002\u0296\u0297\u0003\u0002\u0002\u0002\u0297\u0298\u0003\u0002\u0002",
    "\u0002\u0298\u029a\u0005\u00b0Y\u0002\u0299\u029b\u0007\u00b3\u0002",
    "\u0002\u029a\u0299\u0003\u0002\u0002\u0002\u029a\u029b\u0003\u0002\u0002",
    "\u0002\u029b\u041b\u0003\u0002\u0002\u0002\u029c\u029d\u0007M\u0002",
    "\u0002\u029d\u02a0\u0007\u00ff\u0002\u0002\u029e\u029f\u0007n\u0002",
    "\u0002\u029f\u02a1\u0007T\u0002\u0002\u02a0\u029e\u0003\u0002\u0002",
    "\u0002\u02a0\u02a1\u0003\u0002\u0002\u0002\u02a1\u02a2\u0003\u0002\u0002",
    "\u0002\u02a2\u041b\u0005\u00b0Y\u0002\u02a3\u02a6\u00076\u0002\u0002",
    "\u02a4\u02a5\u0007\u009f\u0002\u0002\u02a5\u02a7\u0007\u00be\u0002\u0002",
    "\u02a6\u02a4\u0003\u0002\u0002\u0002\u02a6\u02a7\u0003\u0002\u0002\u0002",
    "\u02a7\u02ac\u0003\u0002\u0002\u0002\u02a8\u02aa\u0007i\u0002\u0002",
    "\u02a9\u02a8\u0003\u0002\u0002\u0002\u02a9\u02aa\u0003\u0002\u0002\u0002",
    "\u02aa\u02ab\u0003\u0002\u0002\u0002\u02ab\u02ad\u0007\u00e4\u0002\u0002",
    "\u02ac\u02a9\u0003\u0002\u0002\u0002\u02ac\u02ad\u0003\u0002\u0002\u0002",
    "\u02ad\u02ae\u0003\u0002\u0002\u0002\u02ae\u02b2\u0007\u00ff\u0002\u0002",
    "\u02af\u02b0\u0007n\u0002\u0002\u02b0\u02b1\u0007\u0097\u0002\u0002",
    "\u02b1\u02b3\u0007T\u0002\u0002\u02b2\u02af\u0003\u0002\u0002\u0002",
    "\u02b2\u02b3\u0003\u0002\u0002\u0002\u02b3\u02b4\u0003\u0002\u0002\u0002",
    "\u02b4\u02b6\u0005\u00b0Y\u0002\u02b5\u02b7\u0005\u00a0Q\u0002\u02b6",
    "\u02b5\u0003\u0002\u0002\u0002\u02b6\u02b7\u0003\u0002\u0002\u0002\u02b7",
    "\u02c0\u0003\u0002\u0002\u0002\u02b8\u02bf\u0005\"\u0012\u0002\u02b9",
    "\u02ba\u0007\u00a9\u0002\u0002\u02ba\u02bb\u0007\u009b\u0002\u0002\u02bb",
    "\u02bf\u0005\u0098M\u0002\u02bc\u02bd\u0007\u00e3\u0002\u0002\u02bd",
    "\u02bf\u0005<\u001f\u0002\u02be\u02b8\u0003\u0002\u0002\u0002\u02be",
    "\u02b9\u0003\u0002\u0002\u0002\u02be\u02bc\u0003\u0002\u0002\u0002\u02bf",
    "\u02c2\u0003\u0002\u0002\u0002\u02c0\u02be\u0003\u0002\u0002\u0002\u02c0",
    "\u02c1\u0003\u0002\u0002\u0002\u02c1\u02c3\u0003\u0002\u0002\u0002\u02c2",
    "\u02c0\u0003\u0002\u0002\u0002\u02c3\u02c4\u0007\u0017\u0002\u0002\u02c4",
    "\u02c5\u0005$\u0013\u0002\u02c5\u041b\u0003\u0002\u0002\u0002\u02c6",
    "\u02c9\u00076\u0002\u0002\u02c7\u02c8\u0007\u009f\u0002\u0002\u02c8",
    "\u02ca\u0007\u00be\u0002\u0002\u02c9\u02c7\u0003\u0002\u0002\u0002\u02c9",
    "\u02ca\u0003\u0002\u0002\u0002\u02ca\u02cc\u0003\u0002\u0002\u0002\u02cb",
    "\u02cd\u0007i\u0002\u0002\u02cc\u02cb\u0003\u0002\u0002\u0002\u02cc",
    "\u02cd\u0003\u0002\u0002\u0002\u02cd\u02ce\u0003\u0002\u0002\u0002\u02ce",
    "\u02cf\u0007\u00e4\u0002\u0002\u02cf\u02d0\u0007\u00ff\u0002\u0002\u02d0",
    "\u02d5\u0005\u00b2Z\u0002\u02d1\u02d2\u0007\u0003\u0002\u0002\u02d2",
    "\u02d3\u0005\u00e6t\u0002\u02d3\u02d4\u0007\u0004\u0002\u0002\u02d4",
    "\u02d6\u0003\u0002\u0002\u0002\u02d5\u02d1\u0003\u0002\u0002\u0002\u02d5",
    "\u02d6\u0003\u0002\u0002\u0002\u02d6\u02d7\u0003\u0002\u0002\u0002\u02d7",
    "\u02da\u00058\u001d\u0002\u02d8\u02d9\u0007\u009e\u0002\u0002\u02d9",
    "\u02db\u0005<\u001f\u0002\u02da\u02d8\u0003\u0002\u0002\u0002\u02da",
    "\u02db\u0003\u0002\u0002\u0002\u02db\u041b\u0003\u0002\u0002\u0002\u02dc",
    "\u02dd\u0007\u0010\u0002\u0002\u02dd\u02de\u0007\u00ff\u0002\u0002\u02de",
    "\u02e0\u0005\u00b0Y\u0002\u02df\u02e1\u0007\u0017\u0002\u0002\u02e0",
    "\u02df\u0003\u0002\u0002\u0002\u02e0\u02e1\u0003\u0002\u0002\u0002\u02e1",
    "\u02e2\u0003\u0002\u0002\u0002\u02e2\u02e3\u0005$\u0013\u0002\u02e3",
    "\u041b\u0003\u0002\u0002\u0002\u02e4\u02e7\u00076\u0002\u0002\u02e5",
    "\u02e6\u0007\u009f\u0002\u0002\u02e6\u02e8\u0007\u00be\u0002\u0002\u02e7",
    "\u02e5\u0003\u0002\u0002\u0002\u02e7\u02e8\u0003\u0002\u0002\u0002\u02e8",
    "\u02ea\u0003\u0002\u0002\u0002\u02e9\u02eb\u0007\u00e4\u0002\u0002\u02ea",
    "\u02e9\u0003\u0002\u0002\u0002\u02ea\u02eb\u0003\u0002\u0002\u0002\u02eb",
    "\u02ec\u0003\u0002\u0002\u0002\u02ec\u02f0\u0007g\u0002\u0002\u02ed",
    "\u02ee\u0007n\u0002\u0002\u02ee\u02ef\u0007\u0097\u0002\u0002\u02ef",
    "\u02f1\u0007T\u0002\u0002\u02f0\u02ed\u0003\u0002\u0002\u0002\u02f0",
    "\u02f1\u0003\u0002\u0002\u0002\u02f1\u02f2\u0003\u0002\u0002\u0002\u02f2",
    "\u02f3\u0005\u00b0Y\u0002\u02f3\u02f4\u0007\u0017\u0002\u0002\u02f4",
    "\u02fe\u0007\u0119\u0002\u0002\u02f5\u02f6\u0007\u00fd\u0002\u0002\u02f6",
    "\u02fb\u0005N(\u0002\u02f7\u02f8\u0007\u0005\u0002\u0002\u02f8\u02fa",
    "\u0005N(\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\u02ff\u0003\u0002\u0002\u0002\u02fd\u02fb\u0003",
    "\u0002\u0002\u0002\u02fe\u02f5\u0003\u0002\u0002\u0002\u02fe\u02ff\u0003",
    "\u0002\u0002\u0002\u02ff\u041b\u0003\u0002\u0002\u0002\u0300\u0302\u0007",
    "M\u0002\u0002\u0301\u0303\u0007\u00e4\u0002\u0002\u0302\u0301\u0003",
    "\u0002\u0002\u0002\u0302\u0303\u0003\u0002\u0002\u0002\u0303\u0304\u0003",
    "\u0002\u0002\u0002\u0304\u0307\u0007g\u0002\u0002\u0305\u0306\u0007",
    "n\u0002\u0002\u0306\u0308\u0007T\u0002\u0002\u0307\u0305\u0003\u0002",
    "\u0002\u0002\u0307\u0308\u0003\u0002\u0002\u0002\u0308\u0309\u0003\u0002",
    "\u0002\u0002\u0309\u041b\u0005\u00b0Y\u0002\u030a\u030c\u0007U\u0002",
    "\u0002\u030b\u030d\t\t\u0002\u0002\u030c\u030b\u0003\u0002\u0002\u0002",
    "\u030c\u030d\u0003\u0002\u0002\u0002\u030d\u030e\u0003\u0002\u0002\u0002",
    "\u030e\u041b\u0005\u0012\n\u0002\u030f\u0310\u0007\u00d4\u0002\u0002",
    "\u0310\u0313\u0007\u00e1\u0002\u0002\u0311\u0312\t\u0005\u0002\u0002",
    "\u0312\u0314\u0005\u00b0Y\u0002\u0313\u0311\u0003\u0002\u0002\u0002",
    "\u0313\u0314\u0003\u0002\u0002\u0002\u0314\u0319\u0003\u0002\u0002\u0002",
    "\u0315\u0317\u0007\u0084\u0002\u0002\u0316\u0315\u0003\u0002\u0002\u0002",
    "\u0316\u0317\u0003\u0002\u0002\u0002\u0317\u0318\u0003\u0002\u0002\u0002",
    "\u0318\u031a\u0007\u0119\u0002\u0002\u0319\u0316\u0003\u0002\u0002\u0002",
    "\u0319\u031a\u0003\u0002\u0002\u0002\u031a\u041b\u0003\u0002\u0002\u0002",
    "\u031b\u031c\u0007\u00d4\u0002\u0002\u031c\u031d\u0007\u00e0\u0002\u0002",
    "\u031d\u0320\u0007W\u0002\u0002\u031e\u031f\t\u0005\u0002\u0002\u031f",
    "\u0321\u0005\u00b0Y\u0002\u0320\u031e\u0003\u0002\u0002\u0002\u0320",
    "\u0321\u0003\u0002\u0002\u0002\u0321\u0322\u0003\u0002\u0002\u0002\u0322",
    "\u0323\u0007\u0084\u0002\u0002\u0323\u0325\u0007\u0119\u0002\u0002\u0324",
    "\u0326\u0005*\u0016\u0002\u0325\u0324\u0003\u0002\u0002\u0002\u0325",
    "\u0326\u0003\u0002\u0002\u0002\u0326\u041b\u0003\u0002\u0002\u0002\u0327",
    "\u0328\u0007\u00d4\u0002\u0002\u0328\u0329\u0007\u00e3\u0002\u0002\u0329",
    "\u032e\u0005\u00b0Y\u0002\u032a\u032b\u0007\u0003\u0002\u0002\u032b",
    "\u032c\u0005@!\u0002\u032c\u032d\u0007\u0004\u0002\u0002\u032d\u032f",
    "\u0003\u0002\u0002\u0002\u032e\u032a\u0003\u0002\u0002\u0002\u032e\u032f",
    "\u0003\u0002\u0002\u0002\u032f\u041b\u0003\u0002\u0002\u0002\u0330\u0331",
    "\u0007\u00d4\u0002\u0002\u0331\u0332\u0007-\u0002\u0002\u0332\u0333",
    "\t\u0005\u0002\u0002\u0333\u0336\u0005\u00b0Y\u0002\u0334\u0335\t\u0005",
    "\u0002\u0002\u0335\u0337\u0005\u00b0Y\u0002\u0336\u0334\u0003\u0002",
    "\u0002\u0002\u0336\u0337\u0003\u0002\u0002\u0002\u0337\u041b\u0003\u0002",
    "\u0002\u0002\u0338\u0339\u0007\u00d4\u0002\u0002\u0339\u033c\u0007\u0100",
    "\u0002\u0002\u033a\u033b\t\u0005\u0002\u0002\u033b\u033d\u0005\u00b0",
    "Y\u0002\u033c\u033a\u0003\u0002\u0002\u0002\u033c\u033d\u0003\u0002",
    "\u0002\u0002\u033d\u0342\u0003\u0002\u0002\u0002\u033e\u0340\u0007\u0084",
    "\u0002\u0002\u033f\u033e\u0003\u0002\u0002\u0002\u033f\u0340\u0003\u0002",
    "\u0002\u0002\u0340\u0341\u0003\u0002\u0002\u0002\u0341\u0343\u0007\u0119",
    "\u0002\u0002\u0342\u033f\u0003\u0002\u0002\u0002\u0342\u0343\u0003\u0002",
    "\u0002\u0002\u0343\u041b\u0003\u0002\u0002\u0002\u0344\u0345\u0007\u00d4",
    "\u0002\u0002\u0345\u0346\u0007\u00aa\u0002\u0002\u0346\u0348\u0005\u00b0",
    "Y\u0002\u0347\u0349\u0005*\u0016\u0002\u0348\u0347\u0003\u0002\u0002",
    "\u0002\u0348\u0349\u0003\u0002\u0002\u0002\u0349\u041b\u0003\u0002\u0002",
    "\u0002\u034a\u034c\u0007\u00d4\u0002\u0002\u034b\u034d\u0005\u0104\u0083",
    "\u0002\u034c\u034b\u0003\u0002\u0002\u0002\u034c\u034d\u0003\u0002\u0002",
    "\u0002\u034d\u034e\u0003\u0002\u0002\u0002\u034e\u0356\u0007h\u0002",
    "\u0002\u034f\u0351\u0007\u0084\u0002\u0002\u0350\u034f\u0003\u0002\u0002",
    "\u0002\u0350\u0351\u0003\u0002\u0002\u0002\u0351\u0354\u0003\u0002\u0002",
    "\u0002\u0352\u0355\u0005\u00b0Y\u0002\u0353\u0355\u0007\u0119\u0002",
    "\u0002\u0354\u0352\u0003\u0002\u0002\u0002\u0354\u0353\u0003\u0002\u0002",
    "\u0002\u0355\u0357\u0003\u0002\u0002\u0002\u0356\u0350\u0003\u0002\u0002",
    "\u0002\u0356\u0357\u0003\u0002\u0002\u0002\u0357\u041b\u0003\u0002\u0002",
    "\u0002\u0358\u0359\u0007\u00d4\u0002\u0002\u0359\u035a\u00076\u0002",
    "\u0002\u035a\u035b\u0007\u00e0\u0002\u0002\u035b\u035e\u0005\u00b0Y",
    "\u0002\u035c\u035d\u0007\u0017\u0002\u0002\u035d\u035f\u0007\u00ce\u0002",
    "\u0002\u035e\u035c\u0003\u0002\u0002\u0002\u035e\u035f\u0003\u0002\u0002",
    "\u0002\u035f\u041b\u0003\u0002\u0002\u0002\u0360\u0361\u0007\u00d4\u0002",
    "\u0002\u0361\u0362\u00079\u0002\u0002\u0362\u041b\u0007\u0093\u0002",
    "\u0002\u0363\u0364\t\n\u0002\u0002\u0364\u0366\u0007g\u0002\u0002\u0365",
    "\u0367\u0007W\u0002\u0002\u0366\u0365\u0003\u0002\u0002\u0002\u0366",
    "\u0367\u0003\u0002\u0002\u0002\u0367\u0368\u0003\u0002\u0002\u0002\u0368",
    "\u041b\u00050\u0019\u0002\u0369\u036a\t\n\u0002\u0002\u036a\u036c\u0005",
    ".\u0018\u0002\u036b\u036d\u0007W\u0002\u0002\u036c\u036b\u0003\u0002",
    "\u0002\u0002\u036c\u036d\u0003\u0002\u0002\u0002\u036d\u036e\u0003\u0002",
    "\u0002\u0002\u036e\u036f\u0005\u00b0Y\u0002\u036f\u041b\u0003\u0002",
    "\u0002\u0002\u0370\u0372\t\n\u0002\u0002\u0371\u0373\u0007\u00e0\u0002",
    "\u0002\u0372\u0371\u0003\u0002\u0002\u0002\u0372\u0373\u0003\u0002\u0002",
    "\u0002\u0373\u0375\u0003\u0002\u0002\u0002\u0374\u0376\t\u000b\u0002",
    "\u0002\u0375\u0374\u0003\u0002\u0002\u0002\u0375\u0376\u0003\u0002\u0002",
    "\u0002\u0376\u0377\u0003\u0002\u0002\u0002\u0377\u0379\u0005\u00b0Y",
    "\u0002\u0378\u037a\u0005*\u0016\u0002\u0379\u0378\u0003\u0002\u0002",
    "\u0002\u0379\u037a\u0003\u0002\u0002\u0002\u037a\u037c\u0003\u0002\u0002",
    "\u0002\u037b\u037d\u00052\u001a\u0002\u037c\u037b\u0003\u0002\u0002",
    "\u0002\u037c\u037d\u0003\u0002\u0002\u0002\u037d\u041b\u0003\u0002\u0002",
    "\u0002\u037e\u0380\t\n\u0002\u0002\u037f\u0381\u0007\u00b4\u0002\u0002",
    "\u0380\u037f\u0003\u0002\u0002\u0002\u0380\u0381\u0003\u0002\u0002\u0002",
    "\u0381\u0382\u0003\u0002\u0002\u0002\u0382\u041b\u0005$\u0013\u0002",
    "\u0383\u0384\u0007.\u0002\u0002\u0384\u0385\u0007\u009b\u0002\u0002",
    "\u0385\u0386\u0005.\u0018\u0002\u0386\u0387\u0005\u00b0Y\u0002\u0387",
    "\u0388\u0007{\u0002\u0002\u0388\u0389\t\f\u0002\u0002\u0389\u041b\u0003",
    "\u0002\u0002\u0002\u038a\u038b\u0007.\u0002\u0002\u038b\u038c\u0007",
    "\u009b\u0002\u0002\u038c\u038d\u0007\u00e0\u0002\u0002\u038d\u038e\u0005",
    "\u00b0Y\u0002\u038e\u038f\u0007{\u0002\u0002\u038f\u0390\t\f\u0002\u0002",
    "\u0390\u041b\u0003\u0002\u0002\u0002\u0391\u0392\u0007\u00bb\u0002\u0002",
    "\u0392\u0393\u0007\u00e0\u0002\u0002\u0393\u041b\u0005\u00b0Y\u0002",
    "\u0394\u0395\u0007\u00bb\u0002\u0002\u0395\u0396\u0007g\u0002\u0002",
    "\u0396\u041b\u0005\u00b0Y\u0002\u0397\u039f\u0007\u00bb\u0002\u0002",
    "\u0398\u03a0\u0007\u0119\u0002\u0002\u0399\u039b\u000b\u0002\u0002\u0002",
    "\u039a\u0399\u0003\u0002\u0002\u0002\u039b\u039e\u0003\u0002\u0002\u0002",
    "\u039c\u039d\u0003\u0002\u0002\u0002\u039c\u039a\u0003\u0002\u0002\u0002",
    "\u039d\u03a0\u0003\u0002\u0002\u0002\u039e\u039c\u0003\u0002\u0002\u0002",
    "\u039f\u0398\u0003\u0002\u0002\u0002\u039f\u039c\u0003\u0002\u0002\u0002",
    "\u03a0\u041b\u0003\u0002\u0002\u0002\u03a1\u03a3\u0007 \u0002\u0002",
    "\u03a2\u03a4\u0007\u0081\u0002\u0002\u03a3\u03a2\u0003\u0002\u0002\u0002",
    "\u03a3\u03a4\u0003\u0002\u0002\u0002\u03a4\u03a5\u0003\u0002\u0002\u0002",
    "\u03a5\u03a6\u0007\u00e0\u0002\u0002\u03a6\u03a9\u0005\u00b0Y\u0002",
    "\u03a7\u03a8\u0007\u009e\u0002\u0002\u03a8\u03aa\u0005<\u001f\u0002",
    "\u03a9\u03a7\u0003\u0002\u0002\u0002\u03a9\u03aa\u0003\u0002\u0002\u0002",
    "\u03aa\u03af\u0003\u0002\u0002\u0002\u03ab\u03ad\u0007\u0017\u0002\u0002",
    "\u03ac\u03ab\u0003\u0002\u0002\u0002\u03ac\u03ad\u0003\u0002\u0002\u0002",
    "\u03ad\u03ae\u0003\u0002\u0002\u0002\u03ae\u03b0\u0005$\u0013\u0002",
    "\u03af\u03ac\u0003\u0002\u0002\u0002\u03af\u03b0\u0003\u0002\u0002\u0002",
    "\u03b0\u041b\u0003\u0002\u0002\u0002\u03b1\u03b2\u0007\u00f4\u0002\u0002",
    "\u03b2\u03b5\u0007\u00e0\u0002\u0002\u03b3\u03b4\u0007n\u0002\u0002",
    "\u03b4\u03b6\u0007T\u0002\u0002\u03b5\u03b3\u0003\u0002\u0002\u0002",
    "\u03b5\u03b6\u0003\u0002\u0002\u0002\u03b6\u03b7\u0003\u0002\u0002\u0002",
    "\u03b7\u041b\u0005\u00b0Y\u0002\u03b8\u03b9\u0007&\u0002\u0002\u03b9",
    "\u041b\u0007 \u0002\u0002\u03ba\u03bb\u0007\u0088\u0002\u0002\u03bb",
    "\u03bd\u0007>\u0002\u0002\u03bc\u03be\u0007\u0089\u0002\u0002\u03bd",
    "\u03bc\u0003\u0002\u0002\u0002\u03bd\u03be\u0003\u0002\u0002\u0002\u03be",
    "\u03bf\u0003\u0002\u0002\u0002\u03bf\u03c0\u0007u\u0002\u0002\u03c0",
    "\u03c2\u0007\u0119\u0002\u0002\u03c1\u03c3\u0007\u00a7\u0002\u0002\u03c2",
    "\u03c1\u0003\u0002\u0002\u0002\u03c2\u03c3\u0003\u0002\u0002\u0002\u03c3",
    "\u03c4\u0003\u0002\u0002\u0002\u03c4\u03c5\u0007z\u0002\u0002\u03c5",
    "\u03c6\u0007\u00e0\u0002\u0002\u03c6\u03c8\u0005\u00b0Y\u0002\u03c7",
    "\u03c9\u0005*\u0016\u0002\u03c8\u03c7\u0003\u0002\u0002\u0002\u03c8",
    "\u03c9\u0003\u0002\u0002\u0002\u03c9\u041b\u0003\u0002\u0002\u0002\u03ca",
    "\u03cb\u0007\u00f0\u0002\u0002\u03cb\u03cc\u0007\u00e0\u0002\u0002\u03cc",
    "\u03ce\u0005\u00b0Y\u0002\u03cd\u03cf\u0005*\u0016\u0002\u03ce\u03cd",
    "\u0003\u0002\u0002\u0002\u03ce\u03cf\u0003\u0002\u0002\u0002\u03cf\u041b",
    "\u0003\u0002\u0002\u0002\u03d0\u03d1\u0007\u0092\u0002\u0002\u03d1\u03d2",
    "\u0007\u00bd\u0002\u0002\u03d2\u03d3\u0007\u00e0\u0002\u0002\u03d3\u041b",
    "\u0005\u00b0Y\u0002\u03d4\u03d5\t\r\u0002\u0002\u03d5\u03dd\u0005\u0104",
    "\u0083\u0002\u03d6\u03de\u0007\u0119\u0002\u0002\u03d7\u03d9\u000b\u0002",
    "\u0002\u0002\u03d8\u03d7\u0003\u0002\u0002\u0002\u03d9\u03dc\u0003\u0002",
    "\u0002\u0002\u03da\u03db\u0003\u0002\u0002\u0002\u03da\u03d8\u0003\u0002",
    "\u0002\u0002\u03db\u03de\u0003\u0002\u0002\u0002\u03dc\u03da\u0003\u0002",
    "\u0002\u0002\u03dd\u03d6\u0003\u0002\u0002\u0002\u03dd\u03da\u0003\u0002",
    "\u0002\u0002\u03de\u041b\u0003\u0002\u0002\u0002\u03df\u03e0\u0007\u00d1",
    "\u0002\u0002\u03e0\u03e4\u0007\u00c4\u0002\u0002\u03e1\u03e3\u000b\u0002",
    "\u0002\u0002\u03e2\u03e1\u0003\u0002\u0002\u0002\u03e3\u03e6\u0003\u0002",
    "\u0002\u0002\u03e4\u03e5\u0003\u0002\u0002\u0002\u03e4\u03e2\u0003\u0002",
    "\u0002\u0002\u03e5\u041b\u0003\u0002\u0002\u0002\u03e6\u03e4\u0003\u0002",
    "\u0002\u0002\u03e7\u03e8\u0007\u00d1\u0002\u0002\u03e8\u03e9\u0007\u00e7",
    "\u0002\u0002\u03e9\u03ea\u0007\u0105\u0002\u0002\u03ea\u041b\u0005\u00d2",
    "j\u0002\u03eb\u03ec\u0007\u00d1\u0002\u0002\u03ec\u03ed\u0007\u00e7",
    "\u0002\u0002\u03ed\u03ee\u0007\u0105\u0002\u0002\u03ee\u041b\t\u000e",
    "\u0002\u0002\u03ef\u03f0\u0007\u00d1\u0002\u0002\u03f0\u03f1\u0007\u00e7",
    "\u0002\u0002\u03f1\u03f5\u0007\u0105\u0002\u0002\u03f2\u03f4\u000b\u0002",
    "\u0002\u0002\u03f3\u03f2\u0003\u0002\u0002\u0002\u03f4\u03f7\u0003\u0002",
    "\u0002\u0002\u03f5\u03f6\u0003\u0002\u0002\u0002\u03f5\u03f3\u0003\u0002",
    "\u0002\u0002\u03f6\u041b\u0003\u0002\u0002\u0002\u03f7\u03f5\u0003\u0002",
    "\u0002\u0002\u03f8\u03f9\u0007\u00d1\u0002\u0002\u03f9\u0401\u0005\u0014",
    "\u000b\u0002\u03fa\u03fe\u0007\u0106\u0002\u0002\u03fb\u03fd\u000b\u0002",
    "\u0002\u0002\u03fc\u03fb\u0003\u0002\u0002\u0002\u03fd\u0400\u0003\u0002",
    "\u0002\u0002\u03fe\u03ff\u0003\u0002\u0002\u0002\u03fe\u03fc\u0003\u0002",
    "\u0002\u0002\u03ff\u0402\u0003\u0002\u0002\u0002\u0400\u03fe\u0003\u0002",
    "\u0002\u0002\u0401\u03fa\u0003\u0002\u0002\u0002\u0401\u0402\u0003\u0002",
    "\u0002\u0002\u0402\u041b\u0003\u0002\u0002\u0002\u0403\u0407\u0007\u00d1",
    "\u0002\u0002\u0404\u0406\u000b\u0002\u0002\u0002\u0405\u0404\u0003\u0002",
    "\u0002\u0002\u0406\u0409\u0003\u0002\u0002\u0002\u0407\u0408\u0003\u0002",
    "\u0002\u0002\u0407\u0405\u0003\u0002\u0002\u0002\u0408\u041b\u0003\u0002",
    "\u0002\u0002\u0409\u0407\u0003\u0002\u0002\u0002\u040a\u040b\u0007\u00bf",
    "\u0002\u0002\u040b\u041b\u0005\u0014\u000b\u0002\u040c\u0410\u0007\u00bf",
    "\u0002\u0002\u040d\u040f\u000b\u0002\u0002\u0002\u040e\u040d\u0003\u0002",
    "\u0002\u0002\u040f\u0412\u0003\u0002\u0002\u0002\u0410\u0411\u0003\u0002",
    "\u0002\u0002\u0410\u040e\u0003\u0002\u0002\u0002\u0411\u041b\u0003\u0002",
    "\u0002\u0002\u0412\u0410\u0003\u0002\u0002\u0002\u0413\u0417\u0005\u0016",
    "\f\u0002\u0414\u0416\u000b\u0002\u0002\u0002\u0415\u0414\u0003\u0002",
    "\u0002\u0002\u0416\u0419\u0003\u0002\u0002\u0002\u0417\u0418\u0003\u0002",
    "\u0002\u0002\u0417\u0415\u0003\u0002\u0002\u0002\u0418\u041b\u0003\u0002",
    "\u0002\u0002\u0419\u0417\u0003\u0002\u0002\u0002\u041a\u0132\u0003\u0002",
    "\u0002\u0002\u041a\u0134\u0003\u0002\u0002\u0002\u041a\u0137\u0003\u0002",
    "\u0002\u0002\u041a\u013c\u0003\u0002\u0002\u0002\u041a\u014e\u0003\u0002",
    "\u0002\u0002\u041a\u0155\u0003\u0002\u0002\u0002\u041a\u015b\u0003\u0002",
    "\u0002\u0002\u041a\u0165\u0003\u0002\u0002\u0002\u041a\u0171\u0003\u0002",
    "\u0002\u0002\u041a\u0180\u0003\u0002\u0002\u0002\u041a\u01a5\u0003\u0002",
    "\u0002\u0002\u041a\u01ba\u0003\u0002\u0002\u0002\u041a\u01c9\u0003\u0002",
    "\u0002\u0002\u041a\u01da\u0003\u0002\u0002\u0002\u041a\u01e1\u0003\u0002",
    "\u0002\u0002\u041a\u01ea\u0003\u0002\u0002\u0002\u041a\u01f3\u0003\u0002",
    "\u0002\u0002\u041a\u01fc\u0003\u0002\u0002\u0002\u041a\u0203\u0003\u0002",
    "\u0002\u0002\u041a\u020a\u0003\u0002\u0002\u0002\u041a\u0211\u0003\u0002",
    "\u0002\u0002\u041a\u021c\u0003\u0002\u0002\u0002\u041a\u0227\u0003\u0002",
    "\u0002\u0002\u041a\u0236\u0003\u0002\u0002\u0002\u041a\u0242\u0003\u0002",
    "\u0002\u0002\u041a\u0250\u0003\u0002\u0002\u0002\u041a\u025a\u0003\u0002",
    "\u0002\u0002\u041a\u0268\u0003\u0002\u0002\u0002\u041a\u0270\u0003\u0002",
    "\u0002\u0002\u041a\u0283\u0003\u0002\u0002\u0002\u041a\u028c\u0003\u0002",
    "\u0002\u0002\u041a\u0292\u0003\u0002\u0002\u0002\u041a\u029c\u0003\u0002",
    "\u0002\u0002\u041a\u02a3\u0003\u0002\u0002\u0002\u041a\u02c6\u0003\u0002",
    "\u0002\u0002\u041a\u02dc\u0003\u0002\u0002\u0002\u041a\u02e4\u0003\u0002",
    "\u0002\u0002\u041a\u0300\u0003\u0002\u0002\u0002\u041a\u030a\u0003\u0002",
    "\u0002\u0002\u041a\u030f\u0003\u0002\u0002\u0002\u041a\u031b\u0003\u0002",
    "\u0002\u0002\u041a\u0327\u0003\u0002\u0002\u0002\u041a\u0330\u0003\u0002",
    "\u0002\u0002\u041a\u0338\u0003\u0002\u0002\u0002\u041a\u0344\u0003\u0002",
    "\u0002\u0002\u041a\u034a\u0003\u0002\u0002\u0002\u041a\u0358\u0003\u0002",
    "\u0002\u0002\u041a\u0360\u0003\u0002\u0002\u0002\u041a\u0363\u0003\u0002",
    "\u0002\u0002\u041a\u0369\u0003\u0002\u0002\u0002\u041a\u0370\u0003\u0002",
    "\u0002\u0002\u041a\u037e\u0003\u0002\u0002\u0002\u041a\u0383\u0003\u0002",
    "\u0002\u0002\u041a\u038a\u0003\u0002\u0002\u0002\u041a\u0391\u0003\u0002",
    "\u0002\u0002\u041a\u0394\u0003\u0002\u0002\u0002\u041a\u0397\u0003\u0002",
    "\u0002\u0002\u041a\u03a1\u0003\u0002\u0002\u0002\u041a\u03b1\u0003\u0002",
    "\u0002\u0002\u041a\u03b8\u0003\u0002\u0002\u0002\u041a\u03ba\u0003\u0002",
    "\u0002\u0002\u041a\u03ca\u0003\u0002\u0002\u0002\u041a\u03d0\u0003\u0002",
    "\u0002\u0002\u041a\u03d4\u0003\u0002\u0002\u0002\u041a\u03df\u0003\u0002",
    "\u0002\u0002\u041a\u03e7\u0003\u0002\u0002\u0002\u041a\u03eb\u0003\u0002",
    "\u0002\u0002\u041a\u03ef\u0003\u0002\u0002\u0002\u041a\u03f8\u0003\u0002",
    "\u0002\u0002\u041a\u0403\u0003\u0002\u0002\u0002\u041a\u040a\u0003\u0002",
    "\u0002\u0002\u041a\u040c\u0003\u0002\u0002\u0002\u041a\u0413\u0003\u0002",
    "\u0002\u0002\u041b\u0013\u0003\u0002\u0002\u0002\u041c\u041d\u0005\u0108",
    "\u0085\u0002\u041d\u0015\u0003\u0002\u0002\u0002\u041e\u041f\u00076",
    "\u0002\u0002\u041f\u04c7\u0007\u00c4\u0002\u0002\u0420\u0421\u0007M",
    "\u0002\u0002\u0421\u04c7\u0007\u00c4\u0002\u0002\u0422\u0424\u0007j",
    "\u0002\u0002\u0423\u0425\u0007\u00c4\u0002\u0002\u0424\u0423\u0003\u0002",
    "\u0002\u0002\u0424\u0425\u0003\u0002\u0002\u0002\u0425\u04c7\u0003\u0002",
    "\u0002\u0002\u0426\u0428\u0007\u00c1\u0002\u0002\u0427\u0429\u0007\u00c4",
    "\u0002\u0002\u0428\u0427\u0003\u0002\u0002\u0002\u0428\u0429\u0003\u0002",
    "\u0002\u0002\u0429\u04c7\u0003\u0002\u0002\u0002\u042a\u042b\u0007\u00d4",
    "\u0002\u0002\u042b\u04c7\u0007j\u0002\u0002\u042c\u042d\u0007\u00d4",
    "\u0002\u0002\u042d\u042f\u0007\u00c4\u0002\u0002\u042e\u0430\u0007j",
    "\u0002\u0002\u042f\u042e\u0003\u0002\u0002\u0002\u042f\u0430\u0003\u0002",
    "\u0002\u0002\u0430\u04c7\u0003\u0002\u0002\u0002\u0431\u0432\u0007\u00d4",
    "\u0002\u0002\u0432\u04c7\u0007\u00b1\u0002\u0002\u0433\u0434\u0007\u00d4",
    "\u0002\u0002\u0434\u04c7\u0007\u00c5\u0002\u0002\u0435\u0436\u0007\u00d4",
    "\u0002\u0002\u0436\u0437\u00079\u0002\u0002\u0437\u04c7\u0007\u00c5",
    "\u0002\u0002\u0438\u0439\u0007V\u0002\u0002\u0439\u04c7\u0007\u00e0",
    "\u0002\u0002\u043a\u043b\u0007p\u0002\u0002\u043b\u04c7\u0007\u00e0",
    "\u0002\u0002\u043c\u043d\u0007\u00d4\u0002\u0002\u043d\u04c7\u00071",
    "\u0002\u0002\u043e\u043f\u0007\u00d4\u0002\u0002\u043f\u0440\u00076",
    "\u0002\u0002\u0440\u04c7\u0007\u00e0\u0002\u0002\u0441\u0442\u0007\u00d4",
    "\u0002\u0002\u0442\u04c7\u0007\u00ec\u0002\u0002\u0443\u0444\u0007\u00d4",
    "\u0002\u0002\u0444\u04c7\u0007s\u0002\u0002\u0445\u0446\u0007\u00d4",
    "\u0002\u0002\u0446\u04c7\u0007\u008c\u0002\u0002\u0447\u0448\u00076",
    "\u0002\u0002\u0448\u04c7\u0007r\u0002\u0002\u0449\u044a\u0007M\u0002",
    "\u0002\u044a\u04c7\u0007r\u0002\u0002\u044b\u044c\u0007\u0010\u0002",
    "\u0002\u044c\u04c7\u0007r\u0002\u0002\u044d\u044e\u0007\u008b\u0002",
    "\u0002\u044e\u04c7\u0007\u00e0\u0002\u0002\u044f\u0450\u0007\u008b\u0002",
    "\u0002\u0450\u04c7\u0007?\u0002\u0002\u0451\u0452\u0007\u00f8\u0002",
    "\u0002\u0452\u04c7\u0007\u00e0\u0002\u0002\u0453\u0454\u0007\u00f8\u0002",
    "\u0002\u0454\u04c7\u0007?\u0002\u0002\u0455\u0456\u00076\u0002\u0002",
    "\u0456\u0457\u0007\u00e4\u0002\u0002\u0457\u04c7\u0007\u008e\u0002\u0002",
    "\u0458\u0459\u0007M\u0002\u0002\u0459\u045a\u0007\u00e4\u0002\u0002",
    "\u045a\u04c7\u0007\u008e\u0002\u0002\u045b\u045c\u0007\u0010\u0002\u0002",
    "\u045c\u045d\u0007\u00e0\u0002\u0002\u045d\u045e\u0005\u00b2Z\u0002",
    "\u045e\u045f\u0007\u0097\u0002\u0002\u045f\u0460\u0007(\u0002\u0002",
    "\u0460\u04c7\u0003\u0002\u0002\u0002\u0461\u0462\u0007\u0010\u0002\u0002",
    "\u0462\u0463\u0007\u00e0\u0002\u0002\u0463\u0464\u0005\u00b2Z\u0002",
    "\u0464\u0465\u0007(\u0002\u0002\u0465\u0466\u0007\u001f\u0002\u0002",
    "\u0466\u04c7\u0003\u0002\u0002\u0002\u0467\u0468\u0007\u0010\u0002\u0002",
    "\u0468\u0469\u0007\u00e0\u0002\u0002\u0469\u046a\u0005\u00b2Z\u0002",
    "\u046a\u046b\u0007\u0097\u0002\u0002\u046b\u046c\u0007\u00d8\u0002\u0002",
    "\u046c\u04c7\u0003\u0002\u0002\u0002\u046d\u046e\u0007\u0010\u0002\u0002",
    "\u046e\u046f\u0007\u00e0\u0002\u0002\u046f\u0470\u0005\u00b2Z\u0002",
    "\u0470\u0471\u0007\u00d5\u0002\u0002\u0471\u0472\u0007\u001f\u0002\u0002",
    "\u0472\u04c7\u0003\u0002\u0002\u0002\u0473\u0474\u0007\u0010\u0002\u0002",
    "\u0474\u0475\u0007\u00e0\u0002\u0002\u0475\u0476\u0005\u00b2Z\u0002",
    "\u0476\u0477\u0007\u0097\u0002\u0002\u0477\u0478\u0007\u00d5\u0002\u0002",
    "\u0478\u04c7\u0003\u0002\u0002\u0002\u0479\u047a\u0007\u0010\u0002\u0002",
    "\u047a\u047b\u0007\u00e0\u0002\u0002\u047b\u047c\u0005\u00b2Z\u0002",
    "\u047c\u047d\u0007\u0097\u0002\u0002\u047d\u047e\u0007\u00db\u0002\u0002",
    "\u047e\u047f\u0007\u0017\u0002\u0002\u047f\u0480\u0007H\u0002\u0002",
    "\u0480\u04c7\u0003\u0002\u0002\u0002\u0481\u0482\u0007\u0010\u0002\u0002",
    "\u0482\u0483\u0007\u00e0\u0002\u0002\u0483\u0484\u0005\u00b2Z\u0002",
    "\u0484\u0485\u0007\u00d1\u0002\u0002\u0485\u0486\u0007\u00d5\u0002\u0002",
    "\u0486\u0487\u0007\u008a\u0002\u0002\u0487\u04c7\u0003\u0002\u0002\u0002",
    "\u0488\u0489\u0007\u0010\u0002\u0002\u0489\u048a\u0007\u00e0\u0002\u0002",
    "\u048a\u048b\u0005\u00b2Z\u0002\u048b\u048c\u0007S\u0002\u0002\u048c",
    "\u048d\u0007\u00a8\u0002\u0002\u048d\u04c7\u0003\u0002\u0002\u0002\u048e",
    "\u048f\u0007\u0010\u0002\u0002\u048f\u0490\u0007\u00e0\u0002\u0002\u0490",
    "\u0491\u0005\u00b2Z\u0002\u0491\u0492\u0007\u0015\u0002\u0002\u0492",
    "\u0493\u0007\u00a8\u0002\u0002\u0493\u04c7\u0003\u0002\u0002\u0002\u0494",
    "\u0495\u0007\u0010\u0002\u0002\u0495\u0496\u0007\u00e0\u0002\u0002\u0496",
    "\u0497\u0005\u00b2Z\u0002\u0497\u0498\u0007\u00f2\u0002\u0002\u0498",
    "\u0499\u0007\u00a8\u0002\u0002\u0499\u04c7\u0003\u0002\u0002\u0002\u049a",
    "\u049b\u0007\u0010\u0002\u0002\u049b\u049c\u0007\u00e0\u0002\u0002\u049c",
    "\u049d\u0005\u00b2Z\u0002\u049d\u049e\u0007\u00e9\u0002\u0002\u049e",
    "\u04c7\u0003\u0002\u0002\u0002\u049f\u04a0\u0007\u0010\u0002\u0002\u04a0",
    "\u04a1\u0007\u00e0\u0002\u0002\u04a1\u04a3\u0005\u00b2Z\u0002\u04a2",
    "\u04a4\u0005*\u0016\u0002\u04a3\u04a2\u0003\u0002\u0002\u0002\u04a3",
    "\u04a4\u0003\u0002\u0002\u0002\u04a4\u04a5\u0003\u0002\u0002\u0002\u04a5",
    "\u04a6\u00070\u0002\u0002\u04a6\u04c7\u0003\u0002\u0002\u0002\u04a7",
    "\u04a8\u0007\u0010\u0002\u0002\u04a8\u04a9\u0007\u00e0\u0002\u0002\u04a9",
    "\u04ab\u0005\u00b2Z\u0002\u04aa\u04ac\u0005*\u0016\u0002\u04ab\u04aa",
    "\u0003\u0002\u0002\u0002\u04ab\u04ac\u0003\u0002\u0002\u0002\u04ac\u04ad",
    "\u0003\u0002\u0002\u0002\u04ad\u04ae\u00073\u0002\u0002\u04ae\u04c7",
    "\u0003\u0002\u0002\u0002\u04af\u04b0\u0007\u0010\u0002\u0002\u04b0\u04b1",
    "\u0007\u00e0\u0002\u0002\u04b1\u04b3\u0005\u00b2Z\u0002\u04b2\u04b4",
    "\u0005*\u0016\u0002\u04b3\u04b2\u0003\u0002\u0002\u0002\u04b3\u04b4",
    "\u0003\u0002\u0002\u0002\u04b4\u04b5\u0003\u0002\u0002\u0002\u04b5\u04b6",
    "\u0007\u00d1\u0002\u0002\u04b6\u04b7\u0007^\u0002\u0002\u04b7\u04c7",
    "\u0003\u0002\u0002\u0002\u04b8\u04b9\u0007\u0010\u0002\u0002\u04b9\u04ba",
    "\u0007\u00e0\u0002\u0002\u04ba\u04bc\u0005\u00b2Z\u0002\u04bb\u04bd",
    "\u0005*\u0016\u0002\u04bc\u04bb\u0003\u0002\u0002\u0002\u04bc\u04bd",
    "\u0003\u0002\u0002\u0002\u04bd\u04be\u0003\u0002\u0002\u0002\u04be\u04bf",
    "\u0007\u00be\u0002\u0002\u04bf\u04c0\u0007-\u0002\u0002\u04c0\u04c7",
    "\u0003\u0002\u0002\u0002\u04c1\u04c2\u0007\u00d9\u0002\u0002\u04c2\u04c7",
    "\u0007\u00eb\u0002\u0002\u04c3\u04c7\u0007/\u0002\u0002\u04c4\u04c7",
    "\u0007\u00c6\u0002\u0002\u04c5\u04c7\u0007G\u0002\u0002\u04c6\u041e",
    "\u0003\u0002\u0002\u0002\u04c6\u0420\u0003\u0002\u0002\u0002\u04c6\u0422",
    "\u0003\u0002\u0002\u0002\u04c6\u0426\u0003\u0002\u0002\u0002\u04c6\u042a",
    "\u0003\u0002\u0002\u0002\u04c6\u042c\u0003\u0002\u0002\u0002\u04c6\u0431",
    "\u0003\u0002\u0002\u0002\u04c6\u0433\u0003\u0002\u0002\u0002\u04c6\u0435",
    "\u0003\u0002\u0002\u0002\u04c6\u0438\u0003\u0002\u0002\u0002\u04c6\u043a",
    "\u0003\u0002\u0002\u0002\u04c6\u043c\u0003\u0002\u0002\u0002\u04c6\u043e",
    "\u0003\u0002\u0002\u0002\u04c6\u0441\u0003\u0002\u0002\u0002\u04c6\u0443",
    "\u0003\u0002\u0002\u0002\u04c6\u0445\u0003\u0002\u0002\u0002\u04c6\u0447",
    "\u0003\u0002\u0002\u0002\u04c6\u0449\u0003\u0002\u0002\u0002\u04c6\u044b",
    "\u0003\u0002\u0002\u0002\u04c6\u044d\u0003\u0002\u0002\u0002\u04c6\u044f",
    "\u0003\u0002\u0002\u0002\u04c6\u0451\u0003\u0002\u0002\u0002\u04c6\u0453",
    "\u0003\u0002\u0002\u0002\u04c6\u0455\u0003\u0002\u0002\u0002\u04c6\u0458",
    "\u0003\u0002\u0002\u0002\u04c6\u045b\u0003\u0002\u0002\u0002\u04c6\u0461",
    "\u0003\u0002\u0002\u0002\u04c6\u0467\u0003\u0002\u0002\u0002\u04c6\u046d",
    "\u0003\u0002\u0002\u0002\u04c6\u0473\u0003\u0002\u0002\u0002\u04c6\u0479",
    "\u0003\u0002\u0002\u0002\u04c6\u0481\u0003\u0002\u0002\u0002\u04c6\u0488",
    "\u0003\u0002\u0002\u0002\u04c6\u048e\u0003\u0002\u0002\u0002\u04c6\u0494",
    "\u0003\u0002\u0002\u0002\u04c6\u049a\u0003\u0002\u0002\u0002\u04c6\u049f",
    "\u0003\u0002\u0002\u0002\u04c6\u04a7\u0003\u0002\u0002\u0002\u04c6\u04af",
    "\u0003\u0002\u0002\u0002\u04c6\u04b8\u0003\u0002\u0002\u0002\u04c6\u04c1",
    "\u0003\u0002\u0002\u0002\u04c6\u04c3\u0003\u0002\u0002\u0002\u04c6\u04c4",
    "\u0003\u0002\u0002\u0002\u04c6\u04c5\u0003\u0002\u0002\u0002\u04c7\u0017",
    "\u0003\u0002\u0002\u0002\u04c8\u04ca\u00076\u0002\u0002\u04c9\u04cb",
    "\u0007\u00e4\u0002\u0002\u04ca\u04c9\u0003\u0002\u0002\u0002\u04ca\u04cb",
    "\u0003\u0002\u0002\u0002\u04cb\u04cd\u0003\u0002\u0002\u0002\u04cc\u04ce",
    "\u0007X\u0002\u0002\u04cd\u04cc\u0003\u0002\u0002\u0002\u04cd\u04ce",
    "\u0003\u0002\u0002\u0002\u04ce\u04cf\u0003\u0002\u0002\u0002\u04cf\u04d3",
    "\u0007\u00e0\u0002\u0002\u04d0\u04d1\u0007n\u0002\u0002\u04d1\u04d2",
    "\u0007\u0097\u0002\u0002\u04d2\u04d4\u0007T\u0002\u0002\u04d3\u04d0",
    "\u0003\u0002\u0002\u0002\u04d3\u04d4\u0003\u0002\u0002\u0002\u04d4\u04d5",
    "\u0003\u0002\u0002\u0002\u04d5\u04d6\u0005\u00b0Y\u0002\u04d6\u0019",
    "\u0003\u0002\u0002\u0002\u04d7\u04d8\u00076\u0002\u0002\u04d8\u04da",
    "\u0007\u009f\u0002\u0002\u04d9\u04d7\u0003\u0002\u0002\u0002\u04d9\u04da",
    "\u0003\u0002\u0002\u0002\u04da\u04db\u0003\u0002\u0002\u0002\u04db\u04dc",
    "\u0007\u00be\u0002\u0002\u04dc\u04dd\u0007\u00e0\u0002\u0002\u04dd\u04de",
    "\u0005\u00b0Y\u0002\u04de\u001b\u0003\u0002\u0002\u0002\u04df\u04e0",
    "\u0007(\u0002\u0002\u04e0\u04e1\u0007\u001f\u0002\u0002\u04e1\u04e5",
    "\u0005\u0098M\u0002\u04e2\u04e3\u0007\u00d8\u0002\u0002\u04e3\u04e4",
    "\u0007\u001f\u0002\u0002\u04e4\u04e6\u0005\u009cO\u0002\u04e5\u04e2",
    "\u0003\u0002\u0002\u0002\u04e5\u04e6\u0003\u0002\u0002\u0002\u04e6\u04e7",
    "\u0003\u0002\u0002\u0002\u04e7\u04e8\u0007z\u0002\u0002\u04e8\u04e9",
    "\u0007\u011d\u0002\u0002\u04e9\u04ea\u0007\u001e\u0002\u0002\u04ea\u001d",
    "\u0003\u0002\u0002\u0002\u04eb\u04ec\u0007\u00d5\u0002\u0002\u04ec\u04ed",
    "\u0007\u001f\u0002\u0002\u04ed\u04ee\u0005\u0098M\u0002\u04ee\u04f1",
    "\u0007\u009b\u0002\u0002\u04ef\u04f2\u0005D#\u0002\u04f0\u04f2\u0005",
    "F$\u0002\u04f1\u04ef\u0003\u0002\u0002\u0002\u04f1\u04f0\u0003\u0002",
    "\u0002\u0002\u04f2\u04f6\u0003\u0002\u0002\u0002\u04f3\u04f4\u0007\u00db",
    "\u0002\u0002\u04f4\u04f5\u0007\u0017\u0002\u0002\u04f5\u04f7\u0007H",
    "\u0002\u0002\u04f6\u04f3\u0003\u0002\u0002\u0002\u04f6\u04f7\u0003\u0002",
    "\u0002\u0002\u04f7\u001f\u0003\u0002\u0002\u0002\u04f8\u04f9\u0007\u008a",
    "\u0002\u0002\u04f9\u04fa\u0007\u0119\u0002\u0002\u04fa!\u0003\u0002",
    "\u0002\u0002\u04fb\u04fc\u0007.\u0002\u0002\u04fc\u04fd\u0007\u0119",
    "\u0002\u0002\u04fd#\u0003\u0002\u0002\u0002\u04fe\u0500\u00054\u001b",
    "\u0002\u04ff\u04fe\u0003\u0002\u0002\u0002\u04ff\u0500\u0003\u0002\u0002",
    "\u0002\u0500\u0501\u0003\u0002\u0002\u0002\u0501\u0502\u0005V,\u0002",
    "\u0502\u0503\u0005R*\u0002\u0503%\u0003\u0002\u0002\u0002\u0504\u0505",
    "\u0007w\u0002\u0002\u0505\u0507\u0007\u00a7\u0002\u0002\u0506\u0508",
    "\u0007\u00e0\u0002\u0002\u0507\u0506\u0003\u0002\u0002\u0002\u0507\u0508",
    "\u0003\u0002\u0002\u0002\u0508\u0509\u0003\u0002\u0002\u0002\u0509\u0510",
    "\u0005\u00b0Y\u0002\u050a\u050e\u0005*\u0016\u0002\u050b\u050c\u0007",
    "n\u0002\u0002\u050c\u050d\u0007\u0097\u0002\u0002\u050d\u050f\u0007",
    "T\u0002\u0002\u050e\u050b\u0003\u0002\u0002\u0002\u050e\u050f\u0003",
    "\u0002\u0002\u0002\u050f\u0511\u0003\u0002\u0002\u0002\u0510\u050a\u0003",
    "\u0002\u0002\u0002\u0510\u0511\u0003\u0002\u0002\u0002\u0511\u053c\u0003",
    "\u0002\u0002\u0002\u0512\u0513\u0007w\u0002\u0002\u0513\u0515\u0007",
    "z\u0002\u0002\u0514\u0516\u0007\u00e0\u0002\u0002\u0515\u0514\u0003",
    "\u0002\u0002\u0002\u0515\u0516\u0003\u0002\u0002\u0002\u0516\u0517\u0003",
    "\u0002\u0002\u0002\u0517\u0519\u0005\u00b0Y\u0002\u0518\u051a\u0005",
    "*\u0016\u0002\u0519\u0518\u0003\u0002\u0002\u0002\u0519\u051a\u0003",
    "\u0002\u0002\u0002\u051a\u051e\u0003\u0002\u0002\u0002\u051b\u051c\u0007",
    "n\u0002\u0002\u051c\u051d\u0007\u0097\u0002\u0002\u051d\u051f\u0007",
    "T\u0002\u0002\u051e\u051b\u0003\u0002\u0002\u0002\u051e\u051f\u0003",
    "\u0002\u0002\u0002\u051f\u053c\u0003\u0002\u0002\u0002\u0520\u0521\u0007",
    "w\u0002\u0002\u0521\u0523\u0007\u00a7\u0002\u0002\u0522\u0524\u0007",
    "\u0089\u0002\u0002\u0523\u0522\u0003\u0002\u0002\u0002\u0523\u0524\u0003",
    "\u0002\u0002\u0002\u0524\u0525\u0003\u0002\u0002\u0002\u0525\u0526\u0007",
    "I\u0002\u0002\u0526\u0528\u0007\u0119\u0002\u0002\u0527\u0529\u0005",
    "\u00acW\u0002\u0528\u0527\u0003\u0002\u0002\u0002\u0528\u0529\u0003",
    "\u0002\u0002\u0002\u0529\u052b\u0003\u0002\u0002\u0002\u052a\u052c\u0005",
    "H%\u0002\u052b\u052a\u0003\u0002\u0002\u0002\u052b\u052c\u0003\u0002",
    "\u0002\u0002\u052c\u053c\u0003\u0002\u0002\u0002\u052d\u052e\u0007w",
    "\u0002\u0002\u052e\u0530\u0007\u00a7\u0002\u0002\u052f\u0531\u0007\u0089",
    "\u0002\u0002\u0530\u052f\u0003\u0002\u0002\u0002\u0530\u0531\u0003\u0002",
    "\u0002\u0002\u0531\u0532\u0003\u0002\u0002\u0002\u0532\u0534\u0007I",
    "\u0002\u0002\u0533\u0535\u0007\u0119\u0002\u0002\u0534\u0533\u0003\u0002",
    "\u0002\u0002\u0534\u0535\u0003\u0002\u0002\u0002\u0535\u0536\u0003\u0002",
    "\u0002\u0002\u0536\u0539\u00058\u001d\u0002\u0537\u0538\u0007\u009e",
    "\u0002\u0002\u0538\u053a\u0005<\u001f\u0002\u0539\u0537\u0003\u0002",
    "\u0002\u0002\u0539\u053a\u0003\u0002\u0002\u0002\u053a\u053c\u0003\u0002",
    "\u0002\u0002\u053b\u0504\u0003\u0002\u0002\u0002\u053b\u0512\u0003\u0002",
    "\u0002\u0002\u053b\u0520\u0003\u0002\u0002\u0002\u053b\u052d\u0003\u0002",
    "\u0002\u0002\u053c\'\u0003\u0002\u0002\u0002\u053d\u053f\u0005*\u0016",
    "\u0002\u053e\u0540\u0005 \u0011\u0002\u053f\u053e\u0003\u0002\u0002",
    "\u0002\u053f\u0540\u0003\u0002\u0002\u0002\u0540)\u0003\u0002\u0002",
    "\u0002\u0541\u0542\u0007\u00a8\u0002\u0002\u0542\u0543\u0007\u0003\u0002",
    "\u0002\u0543\u0548\u0005,\u0017\u0002\u0544\u0545\u0007\u0005\u0002",
    "\u0002\u0545\u0547\u0005,\u0017\u0002\u0546\u0544\u0003\u0002\u0002",
    "\u0002\u0547\u054a\u0003\u0002\u0002\u0002\u0548\u0546\u0003\u0002\u0002",
    "\u0002\u0548\u0549\u0003\u0002\u0002\u0002\u0549\u054b\u0003\u0002\u0002",
    "\u0002\u054a\u0548\u0003\u0002\u0002\u0002\u054b\u054c\u0007\u0004\u0002",
    "\u0002\u054c+\u0003\u0002\u0002\u0002\u054d\u0550\u0005\u0104\u0083",
    "\u0002\u054e\u054f\u0007\u0106\u0002\u0002\u054f\u0551\u0005\u00c8e",
    "\u0002\u0550\u054e\u0003\u0002\u0002\u0002\u0550\u0551\u0003\u0002\u0002",
    "\u0002\u0551-\u0003\u0002\u0002\u0002\u0552\u0553\t\u000f\u0002\u0002",
    "\u0553/\u0003\u0002\u0002\u0002\u0554\u055a\u0005\u00fe\u0080\u0002",
    "\u0555\u055a\u0007\u0119\u0002\u0002\u0556\u055a\u0005\u00caf\u0002",
    "\u0557\u055a\u0005\u00ccg\u0002\u0558\u055a\u0005\u00ceh\u0002\u0559",
    "\u0554\u0003\u0002\u0002\u0002\u0559\u0555\u0003\u0002\u0002\u0002\u0559",
    "\u0556\u0003\u0002\u0002\u0002\u0559\u0557\u0003\u0002\u0002\u0002\u0559",
    "\u0558\u0003\u0002\u0002\u0002\u055a1\u0003\u0002\u0002\u0002\u055b",
    "\u0560\u0005\u0104\u0083\u0002\u055c\u055d\u0007\u0006\u0002\u0002\u055d",
    "\u055f\u0005\u0104\u0083\u0002\u055e\u055c\u0003\u0002\u0002\u0002\u055f",
    "\u0562\u0003\u0002\u0002\u0002\u0560\u055e\u0003\u0002\u0002\u0002\u0560",
    "\u0561\u0003\u0002\u0002\u0002\u05613\u0003\u0002\u0002\u0002\u0562",
    "\u0560\u0003\u0002\u0002\u0002\u0563\u0564\u0007\u0104\u0002\u0002\u0564",
    "\u0569\u00056\u001c\u0002\u0565\u0566\u0007\u0005\u0002\u0002\u0566",
    "\u0568\u00056\u001c\u0002\u0567\u0565\u0003\u0002\u0002\u0002\u0568",
    "\u056b\u0003\u0002\u0002\u0002\u0569\u0567\u0003\u0002\u0002\u0002\u0569",
    "\u056a\u0003\u0002\u0002\u0002\u056a5\u0003\u0002\u0002\u0002\u056b",
    "\u0569\u0003\u0002\u0002\u0002\u056c\u056e\u0005\u0100\u0081\u0002\u056d",
    "\u056f\u0005\u0098M\u0002\u056e\u056d\u0003\u0002\u0002\u0002\u056e",
    "\u056f\u0003\u0002\u0002\u0002\u056f\u0571\u0003\u0002\u0002\u0002\u0570",
    "\u0572\u0007\u0017\u0002\u0002\u0571\u0570\u0003\u0002\u0002\u0002\u0571",
    "\u0572\u0003\u0002\u0002\u0002\u0572\u0573\u0003\u0002\u0002\u0002\u0573",
    "\u0574\u0007\u0003\u0002\u0002\u0574\u0575\u0005$\u0013\u0002\u0575",
    "\u0576\u0007\u0004\u0002\u0002\u05767\u0003\u0002\u0002\u0002\u0577",
    "\u0578\u0007\u00fd\u0002\u0002\u0578\u0579\u0005\u00b0Y\u0002\u0579",
    "9\u0003\u0002\u0002\u0002\u057a\u057b\u0007\u009e\u0002\u0002\u057b",
    "\u0585\u0005<\u001f\u0002\u057c\u057d\u0007\u00a9\u0002\u0002\u057d",
    "\u057e\u0007\u001f\u0002\u0002\u057e\u0585\u0005\u00b8]\u0002\u057f",
    "\u0585\u0005\u001c\u000f\u0002\u0580\u0585\u0005 \u0011\u0002\u0581",
    "\u0585\u0005\"\u0012\u0002\u0582\u0583\u0007\u00e3\u0002\u0002\u0583",
    "\u0585\u0005<\u001f\u0002\u0584\u057a\u0003\u0002\u0002\u0002\u0584",
    "\u057c\u0003\u0002\u0002\u0002\u0584\u057f\u0003\u0002\u0002\u0002\u0584",
    "\u0580\u0003\u0002\u0002\u0002\u0584\u0581\u0003\u0002\u0002\u0002\u0584",
    "\u0582\u0003\u0002\u0002\u0002\u0585\u0588\u0003\u0002\u0002\u0002\u0586",
    "\u0584\u0003\u0002\u0002\u0002\u0586\u0587\u0003\u0002\u0002\u0002\u0587",
    ";\u0003\u0002\u0002\u0002\u0588\u0586\u0003\u0002\u0002\u0002\u0589",
    "\u058a\u0007\u0003\u0002\u0002\u058a\u058f\u0005> \u0002\u058b\u058c",
    "\u0007\u0005\u0002\u0002\u058c\u058e\u0005> \u0002\u058d\u058b\u0003",
    "\u0002\u0002\u0002\u058e\u0591\u0003\u0002\u0002\u0002\u058f\u058d\u0003",
    "\u0002\u0002\u0002\u058f\u0590\u0003\u0002\u0002\u0002\u0590\u0592\u0003",
    "\u0002\u0002\u0002\u0591\u058f\u0003\u0002\u0002\u0002\u0592\u0593\u0007",
    "\u0004\u0002\u0002\u0593=\u0003\u0002\u0002\u0002\u0594\u0599\u0005",
    "@!\u0002\u0595\u0597\u0007\u0106\u0002\u0002\u0596\u0595\u0003\u0002",
    "\u0002\u0002\u0596\u0597\u0003\u0002\u0002\u0002\u0597\u0598\u0003\u0002",
    "\u0002\u0002\u0598\u059a\u0005B\"\u0002\u0599\u0596\u0003\u0002\u0002",
    "\u0002\u0599\u059a\u0003\u0002\u0002\u0002\u059a?\u0003\u0002\u0002",
    "\u0002\u059b\u05a0\u0005\u0104\u0083\u0002\u059c\u059d\u0007\u0006\u0002",
    "\u0002\u059d\u059f\u0005\u0104\u0083\u0002\u059e\u059c\u0003\u0002\u0002",
    "\u0002\u059f\u05a2\u0003\u0002\u0002\u0002\u05a0\u059e\u0003\u0002\u0002",
    "\u0002\u05a0\u05a1\u0003\u0002\u0002\u0002\u05a1\u05a5\u0003\u0002\u0002",
    "\u0002\u05a2\u05a0\u0003\u0002\u0002\u0002\u05a3\u05a5\u0007\u0119\u0002",
    "\u0002\u05a4\u059b\u0003\u0002\u0002\u0002\u05a4\u05a3\u0003\u0002\u0002",
    "\u0002\u05a5A\u0003\u0002\u0002\u0002\u05a6\u05ab\u0007\u011d\u0002",
    "\u0002\u05a7\u05ab\u0007\u011f\u0002\u0002\u05a8\u05ab\u0005\u00d0i",
    "\u0002\u05a9\u05ab\u0007\u0119\u0002\u0002\u05aa\u05a6\u0003\u0002\u0002",
    "\u0002\u05aa\u05a7\u0003\u0002\u0002\u0002\u05aa\u05a8\u0003\u0002\u0002",
    "\u0002\u05aa\u05a9\u0003\u0002\u0002\u0002\u05abC\u0003\u0002\u0002",
    "\u0002\u05ac\u05ad\u0007\u0003\u0002\u0002\u05ad\u05b2\u0005\u00c8e",
    "\u0002\u05ae\u05af\u0007\u0005\u0002\u0002\u05af\u05b1\u0005\u00c8e",
    "\u0002\u05b0\u05ae\u0003\u0002\u0002\u0002\u05b1\u05b4\u0003\u0002\u0002",
    "\u0002\u05b2\u05b0\u0003\u0002\u0002\u0002\u05b2\u05b3\u0003\u0002\u0002",
    "\u0002\u05b3\u05b5\u0003\u0002\u0002\u0002\u05b4\u05b2\u0003\u0002\u0002",
    "\u0002\u05b5\u05b6\u0007\u0004\u0002\u0002\u05b6E\u0003\u0002\u0002",
    "\u0002\u05b7\u05b8\u0007\u0003\u0002\u0002\u05b8\u05bd\u0005D#\u0002",
    "\u05b9\u05ba\u0007\u0005\u0002\u0002\u05ba\u05bc\u0005D#\u0002\u05bb",
    "\u05b9\u0003\u0002\u0002\u0002\u05bc\u05bf\u0003\u0002\u0002\u0002\u05bd",
    "\u05bb\u0003\u0002\u0002\u0002\u05bd\u05be\u0003\u0002\u0002\u0002\u05be",
    "\u05c0\u0003\u0002\u0002\u0002\u05bf\u05bd\u0003\u0002\u0002\u0002\u05c0",
    "\u05c1\u0007\u0004\u0002\u0002\u05c1G\u0003\u0002\u0002\u0002\u05c2",
    "\u05c3\u0007\u00db\u0002\u0002\u05c3\u05c4\u0007\u0017\u0002\u0002\u05c4",
    "\u05c9\u0005J&\u0002\u05c5\u05c6\u0007\u00db\u0002\u0002\u05c6\u05c7",
    "\u0007\u001f\u0002\u0002\u05c7\u05c9\u0005L\'\u0002\u05c8\u05c2\u0003",
    "\u0002\u0002\u0002\u05c8\u05c5\u0003\u0002\u0002\u0002\u05c9I\u0003",
    "\u0002\u0002\u0002\u05ca\u05cb\u0007v\u0002\u0002\u05cb\u05cc\u0007",
    "\u0119\u0002\u0002\u05cc\u05cd\u0007\u00a3\u0002\u0002\u05cd\u05d0\u0007",
    "\u0119\u0002\u0002\u05ce\u05d0\u0005\u0104\u0083\u0002\u05cf\u05ca\u0003",
    "\u0002\u0002\u0002\u05cf\u05ce\u0003\u0002\u0002\u0002\u05d0K\u0003",
    "\u0002\u0002\u0002\u05d1\u05d5\u0007\u0119\u0002\u0002\u05d2\u05d3\u0007",
    "\u0104\u0002\u0002\u05d3\u05d4\u0007\u00cf\u0002\u0002\u05d4\u05d6\u0005",
    "<\u001f\u0002\u05d5\u05d2\u0003\u0002\u0002\u0002\u05d5\u05d6\u0003",
    "\u0002\u0002\u0002\u05d6M\u0003\u0002\u0002\u0002\u05d7\u05d8\u0005",
    "\u0104\u0083\u0002\u05d8\u05d9\u0007\u0119\u0002\u0002\u05d9O\u0003",
    "\u0002\u0002\u0002\u05da\u05db\u0005&\u0014\u0002\u05db\u05dc\u0005",
    "V,\u0002\u05dc\u05dd\u0005R*\u0002\u05dd\u060e\u0003\u0002\u0002\u0002",
    "\u05de\u05e0\u0005|?\u0002\u05df\u05e1\u0005T+\u0002\u05e0\u05df\u0003",
    "\u0002\u0002\u0002\u05e1\u05e2\u0003\u0002\u0002\u0002\u05e2\u05e0\u0003",
    "\u0002\u0002\u0002\u05e2\u05e3\u0003\u0002\u0002\u0002\u05e3\u060e\u0003",
    "\u0002\u0002\u0002\u05e4\u05e5\u0007C\u0002\u0002\u05e5\u05e6\u0007",
    "e\u0002\u0002\u05e6\u05e7\u0005\u00b0Y\u0002\u05e7\u05e9\u0005\u00aa",
    "V\u0002\u05e8\u05ea\u0005t;\u0002\u05e9\u05e8\u0003\u0002\u0002\u0002",
    "\u05e9\u05ea\u0003\u0002\u0002\u0002\u05ea\u060e\u0003\u0002\u0002\u0002",
    "\u05eb\u05ec\u0007\u00fa\u0002\u0002\u05ec\u05ed\u0005\u00b0Y\u0002",
    "\u05ed\u05ee\u0005\u00aaV\u0002\u05ee\u05f0\u0005f4\u0002\u05ef\u05f1",
    "\u0005t;\u0002\u05f0\u05ef\u0003\u0002\u0002\u0002\u05f0\u05f1\u0003",
    "\u0002\u0002\u0002\u05f1\u060e\u0003\u0002\u0002\u0002\u05f2\u05f3\u0007",
    "\u0091\u0002\u0002\u05f3\u05f4\u0007z\u0002\u0002\u05f4\u05f5\u0005",
    "\u00b0Y\u0002\u05f5\u05f6\u0005\u00aaV\u0002\u05f6\u05fc\u0007\u00fd",
    "\u0002\u0002\u05f7\u05fd\u0005\u00b0Y\u0002\u05f8\u05f9\u0007\u0003",
    "\u0002\u0002\u05f9\u05fa\u0005$\u0013\u0002\u05fa\u05fb\u0007\u0004",
    "\u0002\u0002\u05fb\u05fd\u0003\u0002\u0002\u0002\u05fc\u05f7\u0003\u0002",
    "\u0002\u0002\u05fc\u05f8\u0003\u0002\u0002\u0002\u05fd\u05fe\u0003\u0002",
    "\u0002\u0002\u05fe\u05ff\u0005\u00aaV\u0002\u05ff\u0600\u0007\u009b",
    "\u0002\u0002\u0600\u0604\u0005\u00c0a\u0002\u0601\u0603\u0005h5\u0002",
    "\u0602\u0601\u0003\u0002\u0002\u0002\u0603\u0606\u0003\u0002\u0002\u0002",
    "\u0604\u0602\u0003\u0002\u0002\u0002\u0604\u0605\u0003\u0002\u0002\u0002",
    "\u0605\u060a\u0003\u0002\u0002\u0002\u0606\u0604\u0003\u0002\u0002\u0002",
    "\u0607\u0609\u0005j6\u0002\u0608\u0607\u0003\u0002\u0002\u0002\u0609",
    "\u060c\u0003\u0002\u0002\u0002\u060a\u0608\u0003\u0002\u0002\u0002\u060a",
    "\u060b\u0003\u0002\u0002\u0002\u060b\u060e\u0003\u0002\u0002\u0002\u060c",
    "\u060a\u0003\u0002\u0002\u0002\u060d\u05da\u0003\u0002\u0002\u0002\u060d",
    "\u05de\u0003\u0002\u0002\u0002\u060d\u05e4\u0003\u0002\u0002\u0002\u060d",
    "\u05eb\u0003\u0002\u0002\u0002\u060d\u05f2\u0003\u0002\u0002\u0002\u060e",
    "Q\u0003\u0002\u0002\u0002\u060f\u0610\u0007\u00a0\u0002\u0002\u0610",
    "\u0611\u0007\u001f\u0002\u0002\u0611\u0616\u0005Z.\u0002\u0612\u0613",
    "\u0007\u0005\u0002\u0002\u0613\u0615\u0005Z.\u0002\u0614\u0612\u0003",
    "\u0002\u0002\u0002\u0615\u0618\u0003\u0002\u0002\u0002\u0616\u0614\u0003",
    "\u0002\u0002\u0002\u0616\u0617\u0003\u0002\u0002\u0002\u0617\u061a\u0003",
    "\u0002\u0002\u0002\u0618\u0616\u0003\u0002\u0002\u0002\u0619\u060f\u0003",
    "\u0002\u0002\u0002\u0619\u061a\u0003\u0002\u0002\u0002\u061a\u0625\u0003",
    "\u0002\u0002\u0002\u061b\u061c\u0007\'\u0002\u0002\u061c\u061d\u0007",
    "\u001f\u0002\u0002\u061d\u0622\u0005\u00be`\u0002\u061e\u061f\u0007",
    "\u0005\u0002\u0002\u061f\u0621\u0005\u00be`\u0002\u0620\u061e\u0003",
    "\u0002\u0002\u0002\u0621\u0624\u0003\u0002\u0002\u0002\u0622\u0620\u0003",
    "\u0002\u0002\u0002\u0622\u0623\u0003\u0002\u0002\u0002\u0623\u0626\u0003",
    "\u0002\u0002\u0002\u0624\u0622\u0003\u0002\u0002\u0002\u0625\u061b\u0003",
    "\u0002\u0002\u0002\u0625\u0626\u0003\u0002\u0002\u0002\u0626\u0631\u0003",
    "\u0002\u0002\u0002\u0627\u0628\u0007K\u0002\u0002\u0628\u0629\u0007",
    "\u001f\u0002\u0002\u0629\u062e\u0005\u00be`\u0002\u062a\u062b\u0007",
    "\u0005\u0002\u0002\u062b\u062d\u0005\u00be`\u0002\u062c\u062a\u0003",
    "\u0002\u0002\u0002\u062d\u0630\u0003\u0002\u0002\u0002\u062e\u062c\u0003",
    "\u0002\u0002\u0002\u062e\u062f\u0003\u0002\u0002\u0002\u062f\u0632\u0003",
    "\u0002\u0002\u0002\u0630\u062e\u0003\u0002\u0002\u0002\u0631\u0627\u0003",
    "\u0002\u0002\u0002\u0631\u0632\u0003\u0002\u0002\u0002\u0632\u063d\u0003",
    "\u0002\u0002\u0002\u0633\u0634\u0007\u00d7\u0002\u0002\u0634\u0635\u0007",
    "\u001f\u0002\u0002\u0635\u063a\u0005Z.\u0002\u0636\u0637\u0007\u0005",
    "\u0002\u0002\u0637\u0639\u0005Z.\u0002\u0638\u0636\u0003\u0002\u0002",
    "\u0002\u0639\u063c\u0003\u0002\u0002\u0002\u063a\u0638\u0003\u0002\u0002",
    "\u0002\u063a\u063b\u0003\u0002\u0002\u0002\u063b\u063e\u0003\u0002\u0002",
    "\u0002\u063c\u063a\u0003\u0002\u0002\u0002\u063d\u0633\u0003\u0002\u0002",
    "\u0002\u063d\u063e\u0003\u0002\u0002\u0002\u063e\u0640\u0003\u0002\u0002",
    "\u0002\u063f\u0641\u0005\u00f0y\u0002\u0640\u063f\u0003\u0002\u0002",
    "\u0002\u0640\u0641\u0003\u0002\u0002\u0002\u0641\u0647\u0003\u0002\u0002",
    "\u0002\u0642\u0645\u0007\u0085\u0002\u0002\u0643\u0646\u0007\u000f\u0002",
    "\u0002\u0644\u0646\u0005\u00be`\u0002\u0645\u0643\u0003\u0002\u0002",
    "\u0002\u0645\u0644\u0003\u0002\u0002\u0002\u0646\u0648\u0003\u0002\u0002",
    "\u0002\u0647\u0642\u0003\u0002\u0002\u0002\u0647\u0648\u0003\u0002\u0002",
    "\u0002\u0648S\u0003\u0002\u0002\u0002\u0649\u064a\u0005&\u0014\u0002",
    "\u064a\u064b\u0005^0\u0002\u064bU\u0003\u0002\u0002\u0002\u064c\u064d",
    "\b,\u0001\u0002\u064d\u064e\u0005X-\u0002\u064e\u0666\u0003\u0002\u0002",
    "\u0002\u064f\u0650\f\u0005\u0002\u0002\u0650\u0651\u0006,\u0003\u0002",
    "\u0651\u0653\t\u0010\u0002\u0002\u0652\u0654\u0005\u008aF\u0002\u0653",
    "\u0652\u0003\u0002\u0002\u0002\u0653\u0654\u0003\u0002\u0002\u0002\u0654",
    "\u0655\u0003\u0002\u0002\u0002\u0655\u0665\u0005V,\u0006\u0656\u0657",
    "\f\u0004\u0002\u0002\u0657\u0658\u0006,\u0005\u0002\u0658\u065a\u0007",
    "x\u0002\u0002\u0659\u065b\u0005\u008aF\u0002\u065a\u0659\u0003\u0002",
    "\u0002\u0002\u065a\u065b\u0003\u0002\u0002\u0002\u065b\u065c\u0003\u0002",
    "\u0002\u0002\u065c\u0665\u0005V,\u0005\u065d\u065e\f\u0003\u0002\u0002",
    "\u065e\u065f\u0006,\u0007\u0002\u065f\u0661\t\u0011\u0002\u0002\u0660",
    "\u0662\u0005\u008aF\u0002\u0661\u0660\u0003\u0002\u0002\u0002\u0661",
    "\u0662\u0003\u0002\u0002\u0002\u0662\u0663\u0003\u0002\u0002\u0002\u0663",
    "\u0665\u0005V,\u0004\u0664\u064f\u0003\u0002\u0002\u0002\u0664\u0656",
    "\u0003\u0002\u0002\u0002\u0664\u065d\u0003\u0002\u0002\u0002\u0665\u0668",
    "\u0003\u0002\u0002\u0002\u0666\u0664\u0003\u0002\u0002\u0002\u0666\u0667",
    "\u0003\u0002\u0002\u0002\u0667W\u0003\u0002\u0002\u0002\u0668\u0666",
    "\u0003\u0002\u0002\u0002\u0669\u0673\u0005`1\u0002\u066a\u0673\u0005",
    "\\/\u0002\u066b\u066c\u0007\u00e0\u0002\u0002\u066c\u0673\u0005\u00b0",
    "Y\u0002\u066d\u0673\u0005\u00a6T\u0002\u066e\u066f\u0007\u0003\u0002",
    "\u0002\u066f\u0670\u0005$\u0013\u0002\u0670\u0671\u0007\u0004\u0002",
    "\u0002\u0671\u0673\u0003\u0002\u0002\u0002\u0672\u0669\u0003\u0002\u0002",
    "\u0002\u0672\u066a\u0003\u0002\u0002\u0002\u0672\u066b\u0003\u0002\u0002",
    "\u0002\u0672\u066d\u0003\u0002\u0002\u0002\u0672\u066e\u0003\u0002\u0002",
    "\u0002\u0673Y\u0003\u0002\u0002\u0002\u0674\u0676\u0005\u00be`\u0002",
    "\u0675\u0677\t\u0012\u0002\u0002\u0676\u0675\u0003\u0002\u0002\u0002",
    "\u0676\u0677\u0003\u0002\u0002\u0002\u0677\u067a\u0003\u0002\u0002\u0002",
    "\u0678\u0679\u0007\u0099\u0002\u0002\u0679\u067b\t\u0013\u0002\u0002",
    "\u067a\u0678\u0003\u0002\u0002\u0002\u067a\u067b\u0003\u0002\u0002\u0002",
    "\u067b[\u0003\u0002\u0002\u0002\u067c\u067e\u0005|?\u0002\u067d\u067f",
    "\u0005^0\u0002\u067e\u067d\u0003\u0002\u0002\u0002\u067f\u0680\u0003",
    "\u0002\u0002\u0002\u0680\u067e\u0003\u0002\u0002\u0002\u0680\u0681\u0003",
    "\u0002\u0002\u0002\u0681]\u0003\u0002\u0002\u0002\u0682\u0684\u0005",
    "b2\u0002\u0683\u0685\u0005t;\u0002\u0684\u0683\u0003\u0002\u0002\u0002",
    "\u0684\u0685\u0003\u0002\u0002\u0002\u0685\u0686\u0003\u0002\u0002\u0002",
    "\u0686\u0687\u0005R*\u0002\u0687\u069e\u0003\u0002\u0002\u0002\u0688",
    "\u068c\u0005d3\u0002\u0689\u068b\u0005\u0088E\u0002\u068a\u0689\u0003",
    "\u0002\u0002\u0002\u068b\u068e\u0003\u0002\u0002\u0002\u068c\u068a\u0003",
    "\u0002\u0002\u0002\u068c\u068d\u0003\u0002\u0002\u0002\u068d\u0690\u0003",
    "\u0002\u0002\u0002\u068e\u068c\u0003\u0002\u0002\u0002\u068f\u0691\u0005",
    "t;\u0002\u0690\u068f\u0003\u0002\u0002\u0002\u0690\u0691\u0003\u0002",
    "\u0002\u0002\u0691\u0693\u0003\u0002\u0002\u0002\u0692\u0694\u0005~",
    "@\u0002\u0693\u0692\u0003\u0002\u0002\u0002\u0693\u0694\u0003\u0002",
    "\u0002\u0002\u0694\u0696\u0003\u0002\u0002\u0002\u0695\u0697\u0005v",
    "<\u0002\u0696\u0695\u0003\u0002\u0002\u0002\u0696\u0697\u0003\u0002",
    "\u0002\u0002\u0697\u0699\u0003\u0002\u0002\u0002\u0698\u069a\u0005\u00f0",
    "y\u0002\u0699\u0698\u0003\u0002\u0002\u0002\u0699\u069a\u0003\u0002",
    "\u0002\u0002\u069a\u069b\u0003\u0002\u0002\u0002\u069b\u069c\u0005R",
    "*\u0002\u069c\u069e\u0003\u0002\u0002\u0002\u069d\u0682\u0003\u0002",
    "\u0002\u0002\u069d\u0688\u0003\u0002\u0002\u0002\u069e_\u0003\u0002",
    "\u0002\u0002\u069f\u06a1\u0005b2\u0002\u06a0\u06a2\u0005|?\u0002\u06a1",
    "\u06a0\u0003\u0002\u0002\u0002\u06a1\u06a2\u0003\u0002\u0002\u0002\u06a2",
    "\u06a4\u0003\u0002\u0002\u0002\u06a3\u06a5\u0005t;\u0002\u06a4\u06a3",
    "\u0003\u0002\u0002\u0002\u06a4\u06a5\u0003\u0002\u0002\u0002\u06a5\u06bd",
    "\u0003\u0002\u0002\u0002\u06a6\u06a8\u0005d3\u0002\u06a7\u06a9\u0005",
    "|?\u0002\u06a8\u06a7\u0003\u0002\u0002\u0002\u06a8\u06a9\u0003\u0002",
    "\u0002\u0002\u06a9\u06ad\u0003\u0002\u0002\u0002\u06aa\u06ac\u0005\u0088",
    "E\u0002\u06ab\u06aa\u0003\u0002\u0002\u0002\u06ac\u06af\u0003\u0002",
    "\u0002\u0002\u06ad\u06ab\u0003\u0002\u0002\u0002\u06ad\u06ae\u0003\u0002",
    "\u0002\u0002\u06ae\u06b1\u0003\u0002\u0002\u0002\u06af\u06ad\u0003\u0002",
    "\u0002\u0002\u06b0\u06b2\u0005t;\u0002\u06b1\u06b0\u0003\u0002\u0002",
    "\u0002\u06b1\u06b2\u0003\u0002\u0002\u0002\u06b2\u06b4\u0003\u0002\u0002",
    "\u0002\u06b3\u06b5\u0005~@\u0002\u06b4\u06b3\u0003\u0002\u0002\u0002",
    "\u06b4\u06b5\u0003\u0002\u0002\u0002\u06b5\u06b7\u0003\u0002\u0002\u0002",
    "\u06b6\u06b8\u0005v<\u0002\u06b7\u06b6\u0003\u0002\u0002\u0002\u06b7",
    "\u06b8\u0003\u0002\u0002\u0002\u06b8\u06ba\u0003\u0002\u0002\u0002\u06b9",
    "\u06bb\u0005\u00f0y\u0002\u06ba\u06b9\u0003\u0002\u0002\u0002\u06ba",
    "\u06bb\u0003\u0002\u0002\u0002\u06bb\u06bd\u0003\u0002\u0002\u0002\u06bc",
    "\u069f\u0003\u0002\u0002\u0002\u06bc\u06a6\u0003\u0002\u0002\u0002\u06bd",
    "a\u0003\u0002\u0002\u0002\u06be\u06bf\u0007\u00cb\u0002\u0002\u06bf",
    "\u06c0\u0007\u00ed\u0002\u0002\u06c0\u06c1\u0007\u0003\u0002\u0002\u06c1",
    "\u06c2\u0005\u00b6\\\u0002\u06c2\u06c3\u0007\u0004\u0002\u0002\u06c3",
    "\u06c9\u0003\u0002\u0002\u0002\u06c4\u06c5\u0007\u008f\u0002\u0002\u06c5",
    "\u06c9\u0005\u00b6\\\u0002\u06c6\u06c7\u0007\u00b9\u0002\u0002\u06c7",
    "\u06c9\u0005\u00b6\\\u0002\u06c8\u06be\u0003\u0002\u0002\u0002\u06c8",
    "\u06c4\u0003\u0002\u0002\u0002\u06c8\u06c6\u0003\u0002\u0002\u0002\u06c9",
    "\u06cb\u0003\u0002\u0002\u0002\u06ca\u06cc\u0005\u00acW\u0002\u06cb",
    "\u06ca\u0003\u0002\u0002\u0002\u06cb\u06cc\u0003\u0002\u0002\u0002\u06cc",
    "\u06cf\u0003\u0002\u0002\u0002\u06cd\u06ce\u0007\u00b7\u0002\u0002\u06ce",
    "\u06d0\u0007\u0119\u0002\u0002\u06cf\u06cd\u0003\u0002\u0002\u0002\u06cf",
    "\u06d0\u0003\u0002\u0002\u0002\u06d0\u06d1\u0003\u0002\u0002\u0002\u06d1",
    "\u06d2\u0007\u00fd\u0002\u0002\u06d2\u06df\u0007\u0119\u0002\u0002\u06d3",
    "\u06dd\u0007\u0017\u0002\u0002\u06d4\u06de\u0005\u009aN\u0002\u06d5",
    "\u06de\u0005\u00e6t\u0002\u06d6\u06d9\u0007\u0003\u0002\u0002\u06d7",
    "\u06da\u0005\u009aN\u0002\u06d8\u06da\u0005\u00e6t\u0002\u06d9\u06d7",
    "\u0003\u0002\u0002\u0002\u06d9\u06d8\u0003\u0002\u0002\u0002\u06da\u06db",
    "\u0003\u0002\u0002\u0002\u06db\u06dc\u0007\u0004\u0002\u0002\u06dc\u06de",
    "\u0003\u0002\u0002\u0002\u06dd\u06d4\u0003\u0002\u0002\u0002\u06dd\u06d5",
    "\u0003\u0002\u0002\u0002\u06dd\u06d6\u0003\u0002\u0002\u0002\u06de\u06e0",
    "\u0003\u0002\u0002\u0002\u06df\u06d3\u0003\u0002\u0002\u0002\u06df\u06e0",
    "\u0003\u0002\u0002\u0002\u06e0\u06e2\u0003\u0002\u0002\u0002\u06e1\u06e3",
    "\u0005\u00acW\u0002\u06e2\u06e1\u0003\u0002\u0002\u0002\u06e2\u06e3",
    "\u0003\u0002\u0002\u0002\u06e3\u06e6\u0003\u0002\u0002\u0002\u06e4\u06e5",
    "\u0007\u00b6\u0002\u0002\u06e5\u06e7\u0007\u0119\u0002\u0002\u06e6\u06e4",
    "\u0003\u0002\u0002\u0002\u06e6\u06e7\u0003\u0002\u0002\u0002\u06e7c",
    "\u0003\u0002\u0002\u0002\u06e8\u06ec\u0007\u00cb\u0002\u0002\u06e9\u06eb",
    "\u0005x=\u0002\u06ea\u06e9\u0003\u0002\u0002\u0002\u06eb\u06ee\u0003",
    "\u0002\u0002\u0002\u06ec\u06ea\u0003\u0002\u0002\u0002\u06ec\u06ed\u0003",
    "\u0002\u0002\u0002\u06ed\u06f0\u0003\u0002\u0002\u0002\u06ee\u06ec\u0003",
    "\u0002\u0002\u0002\u06ef\u06f1\u0005\u008aF\u0002\u06f0\u06ef\u0003",
    "\u0002\u0002\u0002\u06f0\u06f1\u0003\u0002\u0002\u0002\u06f1\u06f2\u0003",
    "\u0002\u0002\u0002\u06f2\u06f3\u0005\u00b6\\\u0002\u06f3e\u0003\u0002",
    "\u0002\u0002\u06f4\u06f5\u0007\u00d1\u0002\u0002\u06f5\u06f6\u0005p",
    "9\u0002\u06f6g\u0003\u0002\u0002\u0002\u06f7\u06f8\u0007\u0101\u0002",
    "\u0002\u06f8\u06fb\u0007\u0090\u0002\u0002\u06f9\u06fa\u0007\u0012\u0002",
    "\u0002\u06fa\u06fc\u0005\u00c0a\u0002\u06fb\u06f9\u0003\u0002\u0002",
    "\u0002\u06fb\u06fc\u0003\u0002\u0002\u0002\u06fc\u06fd\u0003\u0002\u0002",
    "\u0002\u06fd\u06fe\u0007\u00e6\u0002\u0002\u06fe\u06ff\u0005l7\u0002",
    "\u06ffi\u0003\u0002\u0002\u0002\u0700\u0701\u0007\u0101\u0002\u0002",
    "\u0701\u0702\u0007\u0097\u0002\u0002\u0702\u0705\u0007\u0090\u0002\u0002",
    "\u0703\u0704\u0007\u0012\u0002\u0002\u0704\u0706\u0005\u00c0a\u0002",
    "\u0705\u0703\u0003\u0002\u0002\u0002\u0705\u0706\u0003\u0002\u0002\u0002",
    "\u0706\u0707\u0003\u0002\u0002\u0002\u0707\u0708\u0007\u00e6\u0002\u0002",
    "\u0708\u0709\u0005n8\u0002\u0709k\u0003\u0002\u0002\u0002\u070a\u0712",
    "\u0007C\u0002\u0002\u070b\u070c\u0007\u00fa\u0002\u0002\u070c\u070d",
    "\u0007\u00d1\u0002\u0002\u070d\u0712\u0007\u0110\u0002\u0002\u070e\u070f",
    "\u0007\u00fa\u0002\u0002\u070f\u0710\u0007\u00d1\u0002\u0002\u0710\u0712",
    "\u0005p9\u0002\u0711\u070a\u0003\u0002\u0002\u0002\u0711\u070b\u0003",
    "\u0002\u0002\u0002\u0711\u070e\u0003\u0002\u0002\u0002\u0712m\u0003",
    "\u0002\u0002\u0002\u0713\u0714\u0007w\u0002\u0002\u0714\u0726\u0007",
    "\u0110\u0002\u0002\u0715\u0716\u0007w\u0002\u0002\u0716\u0717\u0007",
    "\u0003\u0002\u0002\u0717\u0718\u0005\u00aeX\u0002\u0718\u0719\u0007",
    "\u0004\u0002\u0002\u0719\u071a\u0007\u00fe\u0002\u0002\u071a\u071b\u0007",
    "\u0003\u0002\u0002\u071b\u0720\u0005\u00be`\u0002\u071c\u071d\u0007",
    "\u0005\u0002\u0002\u071d\u071f\u0005\u00be`\u0002\u071e\u071c\u0003",
    "\u0002\u0002\u0002\u071f\u0722\u0003\u0002\u0002\u0002\u0720\u071e\u0003",
    "\u0002\u0002\u0002\u0720\u0721\u0003\u0002\u0002\u0002\u0721\u0723\u0003",
    "\u0002\u0002\u0002\u0722\u0720\u0003\u0002\u0002\u0002\u0723\u0724\u0007",
    "\u0004\u0002\u0002\u0724\u0726\u0003\u0002\u0002\u0002\u0725\u0713\u0003",
    "\u0002\u0002\u0002\u0725\u0715\u0003\u0002\u0002\u0002\u0726o\u0003",
    "\u0002\u0002\u0002\u0727\u072c\u0005r:\u0002\u0728\u0729\u0007\u0005",
    "\u0002\u0002\u0729\u072b\u0005r:\u0002\u072a\u0728\u0003\u0002\u0002",
    "\u0002\u072b\u072e\u0003\u0002\u0002\u0002\u072c\u072a\u0003\u0002\u0002",
    "\u0002\u072c\u072d\u0003\u0002\u0002\u0002\u072dq\u0003\u0002\u0002",
    "\u0002\u072e\u072c\u0003\u0002\u0002\u0002\u072f\u0730\u0005\u00b0Y",
    "\u0002\u0730\u0731\u0007\u0106\u0002\u0002\u0731\u0732\u0005\u00be`",
    "\u0002\u0732s\u0003\u0002\u0002\u0002\u0733\u0734\u0007\u0102\u0002",
    "\u0002\u0734\u0735\u0005\u00c0a\u0002\u0735u\u0003\u0002\u0002\u0002",
    "\u0736\u0737\u0007m\u0002\u0002\u0737\u0738\u0005\u00c0a\u0002\u0738",
    "w\u0003\u0002\u0002\u0002\u0739\u073a\u0007\u0007\u0002\u0002\u073a",
    "\u0741\u0005z>\u0002\u073b\u073d\u0007\u0005\u0002\u0002\u073c\u073b",
    "\u0003\u0002\u0002\u0002\u073c\u073d\u0003\u0002\u0002\u0002\u073d\u073e",
    "\u0003\u0002\u0002\u0002\u073e\u0740\u0005z>\u0002\u073f\u073c\u0003",
    "\u0002\u0002\u0002\u0740\u0743\u0003\u0002\u0002\u0002\u0741\u073f\u0003",
    "\u0002\u0002\u0002\u0741\u0742\u0003\u0002\u0002\u0002\u0742\u0744\u0003",
    "\u0002\u0002\u0002\u0743\u0741\u0003\u0002\u0002\u0002\u0744\u0745\u0007",
    "\b\u0002\u0002\u0745y\u0003\u0002\u0002\u0002\u0746\u0754\u0005\u0104",
    "\u0083\u0002\u0747\u0748\u0005\u0104\u0083\u0002\u0748\u0749\u0007\u0003",
    "\u0002\u0002\u0749\u074e\u0005\u00c6d\u0002\u074a\u074b\u0007\u0005",
    "\u0002\u0002\u074b\u074d\u0005\u00c6d\u0002\u074c\u074a\u0003\u0002",
    "\u0002\u0002\u074d\u0750\u0003\u0002\u0002\u0002\u074e\u074c\u0003\u0002",
    "\u0002\u0002\u074e\u074f\u0003\u0002\u0002\u0002\u074f\u0751\u0003\u0002",
    "\u0002\u0002\u0750\u074e\u0003\u0002\u0002\u0002\u0751\u0752\u0007\u0004",
    "\u0002\u0002\u0752\u0754\u0003\u0002\u0002\u0002\u0753\u0746\u0003\u0002",
    "\u0002\u0002\u0753\u0747\u0003\u0002\u0002\u0002\u0754{\u0003\u0002",
    "\u0002\u0002\u0755\u0756\u0007e\u0002\u0002\u0756\u075b\u0005\u008c",
    "G\u0002\u0757\u0758\u0007\u0005\u0002\u0002\u0758\u075a\u0005\u008c",
    "G\u0002\u0759\u0757\u0003\u0002\u0002\u0002\u075a\u075d\u0003\u0002",
    "\u0002\u0002\u075b\u0759\u0003\u0002\u0002\u0002\u075b\u075c\u0003\u0002",
    "\u0002\u0002\u075c\u0761\u0003\u0002\u0002\u0002\u075d\u075b\u0003\u0002",
    "\u0002\u0002\u075e\u0760\u0005\u0088E\u0002\u075f\u075e\u0003\u0002",
    "\u0002\u0002\u0760\u0763\u0003\u0002\u0002\u0002\u0761\u075f\u0003\u0002",
    "\u0002\u0002\u0761\u0762\u0003\u0002\u0002\u0002\u0762\u0765\u0003\u0002",
    "\u0002\u0002\u0763\u0761\u0003\u0002\u0002\u0002\u0764\u0766\u0005\u0082",
    "B\u0002\u0765\u0764\u0003\u0002\u0002\u0002\u0765\u0766\u0003\u0002",
    "\u0002\u0002\u0766}\u0003\u0002\u0002\u0002\u0767\u0768\u0007k\u0002",
    "\u0002\u0768\u0769\u0007\u001f\u0002\u0002\u0769\u076e\u0005\u00be`",
    "\u0002\u076a\u076b\u0007\u0005\u0002\u0002\u076b\u076d\u0005\u00be`",
    "\u0002\u076c\u076a\u0003\u0002\u0002\u0002\u076d\u0770\u0003\u0002\u0002",
    "\u0002\u076e\u076c\u0003\u0002\u0002\u0002\u076e\u076f\u0003\u0002\u0002",
    "\u0002\u076f\u0782\u0003\u0002\u0002\u0002\u0770\u076e\u0003\u0002\u0002",
    "\u0002\u0771\u0772\u0007\u0104\u0002\u0002\u0772\u0783\u0007\u00c7\u0002",
    "\u0002\u0773\u0774\u0007\u0104\u0002\u0002\u0774\u0783\u00078\u0002",
    "\u0002\u0775\u0776\u0007l\u0002\u0002\u0776\u0777\u0007\u00d3\u0002",
    "\u0002\u0777\u0778\u0007\u0003\u0002\u0002\u0778\u077d\u0005\u0080A",
    "\u0002\u0779\u077a\u0007\u0005\u0002\u0002\u077a\u077c\u0005\u0080A",
    "\u0002\u077b\u0779\u0003\u0002\u0002\u0002\u077c\u077f\u0003\u0002\u0002",
    "\u0002\u077d\u077b\u0003\u0002\u0002\u0002\u077d\u077e\u0003\u0002\u0002",
    "\u0002\u077e\u0780\u0003\u0002\u0002\u0002\u077f\u077d\u0003\u0002\u0002",
    "\u0002\u0780\u0781\u0007\u0004\u0002\u0002\u0781\u0783\u0003\u0002\u0002",
    "\u0002\u0782\u0771\u0003\u0002\u0002\u0002\u0782\u0773\u0003\u0002\u0002",
    "\u0002\u0782\u0775\u0003\u0002\u0002\u0002\u0782\u0783\u0003\u0002\u0002",
    "\u0002\u0783\u0794\u0003\u0002\u0002\u0002\u0784\u0785\u0007k\u0002",
    "\u0002\u0785\u0786\u0007\u001f\u0002\u0002\u0786\u0787\u0007l\u0002",
    "\u0002\u0787\u0788\u0007\u00d3\u0002\u0002\u0788\u0789\u0007\u0003\u0002",
    "\u0002\u0789\u078e\u0005\u0080A\u0002\u078a\u078b\u0007\u0005\u0002",
    "\u0002\u078b\u078d\u0005\u0080A\u0002\u078c\u078a\u0003\u0002\u0002",
    "\u0002\u078d\u0790\u0003\u0002\u0002\u0002\u078e\u078c\u0003\u0002\u0002",
    "\u0002\u078e\u078f\u0003\u0002\u0002\u0002\u078f\u0791\u0003\u0002\u0002",
    "\u0002\u0790\u078e\u0003\u0002\u0002\u0002\u0791\u0792\u0007\u0004\u0002",
    "\u0002\u0792\u0794\u0003\u0002\u0002\u0002\u0793\u0767\u0003\u0002\u0002",
    "\u0002\u0793\u0784\u0003\u0002\u0002\u0002\u0794\u007f\u0003\u0002\u0002",
    "\u0002\u0795\u079e\u0007\u0003\u0002\u0002\u0796\u079b\u0005\u00be`",
    "\u0002\u0797\u0798\u0007\u0005\u0002\u0002\u0798\u079a\u0005\u00be`",
    "\u0002\u0799\u0797\u0003\u0002\u0002\u0002\u079a\u079d\u0003\u0002\u0002",
    "\u0002\u079b\u0799\u0003\u0002\u0002\u0002\u079b\u079c\u0003\u0002\u0002",
    "\u0002\u079c\u079f\u0003\u0002\u0002\u0002\u079d\u079b\u0003\u0002\u0002",
    "\u0002\u079e\u0796\u0003\u0002\u0002\u0002\u079e\u079f\u0003\u0002\u0002",
    "\u0002\u079f\u07a0\u0003\u0002\u0002\u0002\u07a0\u07a3\u0007\u0004\u0002",
    "\u0002\u07a1\u07a3\u0005\u00be`\u0002\u07a2\u0795\u0003\u0002\u0002",
    "\u0002\u07a2\u07a1\u0003\u0002\u0002\u0002\u07a3\u0081\u0003\u0002\u0002",
    "\u0002\u07a4\u07a5\u0007\u00ac\u0002\u0002\u07a5\u07a6\u0007\u0003\u0002",
    "\u0002\u07a6\u07a7\u0005\u00b6\\\u0002\u07a7\u07a8\u0007a\u0002\u0002",
    "\u07a8\u07a9\u0005\u0084C\u0002\u07a9\u07aa\u0007q\u0002\u0002\u07aa",
    "\u07ab\u0007\u0003\u0002\u0002\u07ab\u07b0\u0005\u0086D\u0002\u07ac",
    "\u07ad\u0007\u0005\u0002\u0002\u07ad\u07af\u0005\u0086D\u0002\u07ae",
    "\u07ac\u0003\u0002\u0002\u0002\u07af\u07b2\u0003\u0002\u0002\u0002\u07b0",
    "\u07ae\u0003\u0002\u0002\u0002\u07b0\u07b1\u0003\u0002\u0002\u0002\u07b1",
    "\u07b3\u0003\u0002\u0002\u0002\u07b2\u07b0\u0003\u0002\u0002\u0002\u07b3",
    "\u07b4\u0007\u0004\u0002\u0002\u07b4\u07b5\u0007\u0004\u0002\u0002\u07b5",
    "\u0083\u0003\u0002\u0002\u0002\u07b6\u07c3\u0005\u0104\u0083\u0002\u07b7",
    "\u07b8\u0007\u0003\u0002\u0002\u07b8\u07bd\u0005\u0104\u0083\u0002\u07b9",
    "\u07ba\u0007\u0005\u0002\u0002\u07ba\u07bc\u0005\u0104\u0083\u0002\u07bb",
    "\u07b9\u0003\u0002\u0002\u0002\u07bc\u07bf\u0003\u0002\u0002\u0002\u07bd",
    "\u07bb\u0003\u0002\u0002\u0002\u07bd\u07be\u0003\u0002\u0002\u0002\u07be",
    "\u07c0\u0003\u0002\u0002\u0002\u07bf\u07bd\u0003\u0002\u0002\u0002\u07c0",
    "\u07c1\u0007\u0004\u0002\u0002\u07c1\u07c3\u0003\u0002\u0002\u0002\u07c2",
    "\u07b6\u0003\u0002\u0002\u0002\u07c2\u07b7\u0003\u0002\u0002\u0002\u07c3",
    "\u0085\u0003\u0002\u0002\u0002\u07c4\u07c9\u0005\u00be`\u0002\u07c5",
    "\u07c7\u0007\u0017\u0002\u0002\u07c6\u07c5\u0003\u0002\u0002\u0002\u07c6",
    "\u07c7\u0003\u0002\u0002\u0002\u07c7\u07c8\u0003\u0002\u0002\u0002\u07c8",
    "\u07ca\u0005\u0104\u0083\u0002\u07c9\u07c6\u0003\u0002\u0002\u0002\u07c9",
    "\u07ca\u0003\u0002\u0002\u0002\u07ca\u0087\u0003\u0002\u0002\u0002\u07cb",
    "\u07cc\u0007\u0080\u0002\u0002\u07cc\u07ce\u0007\u00ff\u0002\u0002\u07cd",
    "\u07cf\u0007\u00a2\u0002\u0002\u07ce\u07cd\u0003\u0002\u0002\u0002\u07ce",
    "\u07cf\u0003\u0002\u0002\u0002\u07cf\u07d0\u0003\u0002\u0002\u0002\u07d0",
    "\u07d1\u0005\u00fe\u0080\u0002\u07d1\u07da\u0007\u0003\u0002\u0002\u07d2",
    "\u07d7\u0005\u00be`\u0002\u07d3\u07d4\u0007\u0005\u0002\u0002\u07d4",
    "\u07d6\u0005\u00be`\u0002\u07d5\u07d3\u0003\u0002\u0002\u0002\u07d6",
    "\u07d9\u0003\u0002\u0002\u0002\u07d7\u07d5\u0003\u0002\u0002\u0002\u07d7",
    "\u07d8\u0003\u0002\u0002\u0002\u07d8\u07db\u0003\u0002\u0002\u0002\u07d9",
    "\u07d7\u0003\u0002\u0002\u0002\u07da\u07d2\u0003\u0002\u0002\u0002\u07da",
    "\u07db\u0003\u0002\u0002\u0002\u07db\u07dc\u0003\u0002\u0002\u0002\u07dc",
    "\u07dd\u0007\u0004\u0002\u0002\u07dd\u07e9\u0005\u0104\u0083\u0002\u07de",
    "\u07e0\u0007\u0017\u0002\u0002\u07df\u07de\u0003\u0002\u0002\u0002\u07df",
    "\u07e0\u0003\u0002\u0002\u0002\u07e0\u07e1\u0003\u0002\u0002\u0002\u07e1",
    "\u07e6\u0005\u0104\u0083\u0002\u07e2\u07e3\u0007\u0005\u0002\u0002\u07e3",
    "\u07e5\u0005\u0104\u0083\u0002\u07e4\u07e2\u0003\u0002\u0002\u0002\u07e5",
    "\u07e8\u0003\u0002\u0002\u0002\u07e6\u07e4\u0003\u0002\u0002\u0002\u07e6",
    "\u07e7\u0003\u0002\u0002\u0002\u07e7\u07ea\u0003\u0002\u0002\u0002\u07e8",
    "\u07e6\u0003\u0002\u0002\u0002\u07e9\u07df\u0003\u0002\u0002\u0002\u07e9",
    "\u07ea\u0003\u0002\u0002\u0002\u07ea\u0089\u0003\u0002\u0002\u0002\u07eb",
    "\u07ec\t\u0014\u0002\u0002\u07ec\u008b\u0003\u0002\u0002\u0002\u07ed",
    "\u07f1\u0005\u00a4S\u0002\u07ee\u07f0\u0005\u008eH\u0002\u07ef\u07ee",
    "\u0003\u0002\u0002\u0002\u07f0\u07f3\u0003\u0002\u0002\u0002\u07f1\u07ef",
    "\u0003\u0002\u0002\u0002\u07f1\u07f2\u0003\u0002\u0002\u0002\u07f2\u008d",
    "\u0003\u0002\u0002\u0002\u07f3\u07f1\u0003\u0002\u0002\u0002\u07f4\u07f5",
    "\u0005\u0090I\u0002\u07f5\u07f6\u0007}\u0002\u0002\u07f6\u07f8\u0005",
    "\u00a4S\u0002\u07f7\u07f9\u0005\u0092J\u0002\u07f8\u07f7\u0003\u0002",
    "\u0002\u0002\u07f8\u07f9\u0003\u0002\u0002\u0002\u07f9\u0800\u0003\u0002",
    "\u0002\u0002\u07fa\u07fb\u0007\u0095\u0002\u0002\u07fb\u07fc\u0005\u0090",
    "I\u0002\u07fc\u07fd\u0007}\u0002\u0002\u07fd\u07fe\u0005\u00a4S\u0002",
    "\u07fe\u0800\u0003\u0002\u0002\u0002\u07ff\u07f4\u0003\u0002\u0002\u0002",
    "\u07ff\u07fa\u0003\u0002\u0002\u0002\u0800\u008f\u0003\u0002\u0002\u0002",
    "\u0801\u0803\u0007t\u0002\u0002\u0802\u0801\u0003\u0002\u0002\u0002",
    "\u0802\u0803\u0003\u0002\u0002\u0002\u0803\u081a\u0003\u0002\u0002\u0002",
    "\u0804\u081a\u00077\u0002\u0002\u0805\u0807\u0007\u0083\u0002\u0002",
    "\u0806\u0808\u0007\u00a2\u0002\u0002\u0807\u0806\u0003\u0002\u0002\u0002",
    "\u0807\u0808\u0003\u0002\u0002\u0002\u0808\u081a\u0003\u0002\u0002\u0002",
    "\u0809\u080b\u0007\u0083\u0002\u0002\u080a\u0809\u0003\u0002\u0002\u0002",
    "\u080a\u080b\u0003\u0002\u0002\u0002\u080b\u080c\u0003\u0002\u0002\u0002",
    "\u080c\u081a\u0007\u00cc\u0002\u0002\u080d\u080f\u0007\u00c2\u0002\u0002",
    "\u080e\u0810\u0007\u00a2\u0002\u0002\u080f\u080e\u0003\u0002\u0002\u0002",
    "\u080f\u0810\u0003\u0002\u0002\u0002\u0810\u081a\u0003\u0002\u0002\u0002",
    "\u0811\u0813\u0007f\u0002\u0002\u0812\u0814\u0007\u00a2\u0002\u0002",
    "\u0813\u0812\u0003\u0002\u0002\u0002\u0813\u0814\u0003\u0002\u0002\u0002",
    "\u0814\u081a\u0003\u0002\u0002\u0002\u0815\u0817\u0007\u0083\u0002\u0002",
    "\u0816\u0815\u0003\u0002\u0002\u0002\u0816\u0817\u0003\u0002\u0002\u0002",
    "\u0817\u0818\u0003\u0002\u0002\u0002\u0818\u081a\u0007\u0013\u0002\u0002",
    "\u0819\u0802\u0003\u0002\u0002\u0002\u0819\u0804\u0003\u0002\u0002\u0002",
    "\u0819\u0805\u0003\u0002\u0002\u0002\u0819\u080a\u0003\u0002\u0002\u0002",
    "\u0819\u080d\u0003\u0002\u0002\u0002\u0819\u0811\u0003\u0002\u0002\u0002",
    "\u0819\u0816\u0003\u0002\u0002\u0002\u081a\u0091\u0003\u0002\u0002\u0002",
    "\u081b\u081c\u0007\u009b\u0002\u0002\u081c\u0820\u0005\u00c0a\u0002",
    "\u081d\u081e\u0007\u00fd\u0002\u0002\u081e\u0820\u0005\u0098M\u0002",
    "\u081f\u081b\u0003\u0002\u0002\u0002\u081f\u081d\u0003\u0002\u0002\u0002",
    "\u0820\u0093\u0003\u0002\u0002\u0002\u0821\u0822\u0007\u00e2\u0002\u0002",
    "\u0822\u0824\u0007\u0003\u0002\u0002\u0823\u0825\u0005\u0096L\u0002",
    "\u0824\u0823\u0003\u0002\u0002\u0002\u0824\u0825\u0003\u0002\u0002\u0002",
    "\u0825\u0826\u0003\u0002\u0002\u0002\u0826\u0827\u0007\u0004\u0002\u0002",
    "\u0827\u0095\u0003\u0002\u0002\u0002\u0828\u082a\u0007\u010f\u0002\u0002",
    "\u0829\u0828\u0003\u0002\u0002\u0002\u0829\u082a\u0003\u0002\u0002\u0002",
    "\u082a\u082b\u0003\u0002\u0002\u0002\u082b\u082c\t\u0015\u0002\u0002",
    "\u082c\u0841\u0007\u00ab\u0002\u0002\u082d\u082e\u0005\u00be`\u0002",
    "\u082e\u082f\u0007\u00c9\u0002\u0002\u082f\u0841\u0003\u0002\u0002\u0002",
    "\u0830\u0831\u0007\u001d\u0002\u0002\u0831\u0832\u0007\u011d\u0002\u0002",
    "\u0832\u0833\u0007\u00a1\u0002\u0002\u0833\u0834\u0007\u009a\u0002\u0002",
    "\u0834\u083d\u0007\u011d\u0002\u0002\u0835\u083b\u0007\u009b\u0002\u0002",
    "\u0836\u083c\u0005\u0104\u0083\u0002\u0837\u0838\u0005\u00fe\u0080\u0002",
    "\u0838\u0839\u0007\u0003\u0002\u0002\u0839\u083a\u0007\u0004\u0002\u0002",
    "\u083a\u083c\u0003\u0002\u0002\u0002\u083b\u0836\u0003\u0002\u0002\u0002",
    "\u083b\u0837\u0003\u0002\u0002\u0002\u083c\u083e\u0003\u0002\u0002\u0002",
    "\u083d\u0835\u0003\u0002\u0002\u0002\u083d\u083e\u0003\u0002\u0002\u0002",
    "\u083e\u0841\u0003\u0002\u0002\u0002\u083f\u0841\u0005\u00be`\u0002",
    "\u0840\u0829\u0003\u0002\u0002\u0002\u0840\u082d\u0003\u0002\u0002\u0002",
    "\u0840\u0830\u0003\u0002\u0002\u0002\u0840\u083f\u0003\u0002\u0002\u0002",
    "\u0841\u0097\u0003\u0002\u0002\u0002\u0842\u0843\u0007\u0003\u0002\u0002",
    "\u0843\u0844\u0005\u009aN\u0002\u0844\u0845\u0007\u0004\u0002\u0002",
    "\u0845\u0099\u0003\u0002\u0002\u0002\u0846\u084b\u0005\u0100\u0081\u0002",
    "\u0847\u0848\u0007\u0005\u0002\u0002\u0848\u084a\u0005\u0100\u0081\u0002",
    "\u0849\u0847\u0003\u0002\u0002\u0002\u084a\u084d\u0003\u0002\u0002\u0002",
    "\u084b\u0849\u0003\u0002\u0002\u0002\u084b\u084c\u0003\u0002\u0002\u0002",
    "\u084c\u009b\u0003\u0002\u0002\u0002\u084d\u084b\u0003\u0002\u0002\u0002",
    "\u084e\u084f\u0007\u0003\u0002\u0002\u084f\u0854\u0005\u009eP\u0002",
    "\u0850\u0851\u0007\u0005\u0002\u0002\u0851\u0853\u0005\u009eP\u0002",
    "\u0852\u0850\u0003\u0002\u0002\u0002\u0853\u0856\u0003\u0002\u0002\u0002",
    "\u0854\u0852\u0003\u0002\u0002\u0002\u0854\u0855\u0003\u0002\u0002\u0002",
    "\u0855\u0857\u0003\u0002\u0002\u0002\u0856\u0854\u0003\u0002\u0002\u0002",
    "\u0857\u0858\u0007\u0004\u0002\u0002\u0858\u009d\u0003\u0002\u0002\u0002",
    "\u0859\u085b\u0005\u0100\u0081\u0002\u085a\u085c\t\u0012\u0002\u0002",
    "\u085b\u085a\u0003\u0002\u0002\u0002\u085b\u085c\u0003\u0002\u0002\u0002",
    "\u085c\u009f\u0003\u0002\u0002\u0002\u085d\u085e\u0007\u0003\u0002\u0002",
    "\u085e\u0863\u0005\u00a2R\u0002\u085f\u0860\u0007\u0005\u0002\u0002",
    "\u0860\u0862\u0005\u00a2R\u0002\u0861\u085f\u0003\u0002\u0002\u0002",
    "\u0862\u0865\u0003\u0002\u0002\u0002\u0863\u0861\u0003\u0002\u0002\u0002",
    "\u0863\u0864\u0003\u0002\u0002\u0002\u0864\u0866\u0003\u0002\u0002\u0002",
    "\u0865\u0863\u0003\u0002\u0002\u0002\u0866\u0867\u0007\u0004\u0002\u0002",
    "\u0867\u00a1\u0003\u0002\u0002\u0002\u0868\u086a\u0005\u0104\u0083\u0002",
    "\u0869\u086b\u0005\"\u0012\u0002\u086a\u0869\u0003\u0002\u0002\u0002",
    "\u086a\u086b\u0003\u0002\u0002\u0002\u086b\u00a3\u0003\u0002\u0002\u0002",
    "\u086c\u086e\u0005\u00b0Y\u0002\u086d\u086f\u0005\u0094K\u0002\u086e",
    "\u086d\u0003\u0002\u0002\u0002\u086e\u086f\u0003\u0002\u0002\u0002\u086f",
    "\u0870\u0003\u0002\u0002\u0002\u0870\u0871\u0005\u00aaV\u0002\u0871",
    "\u0885\u0003\u0002\u0002\u0002\u0872\u0873\u0007\u0003\u0002\u0002\u0873",
    "\u0874\u0005$\u0013\u0002\u0874\u0876\u0007\u0004\u0002\u0002\u0875",
    "\u0877\u0005\u0094K\u0002\u0876\u0875\u0003\u0002\u0002\u0002\u0876",
    "\u0877\u0003\u0002\u0002\u0002\u0877\u0878\u0003\u0002\u0002\u0002\u0878",
    "\u0879\u0005\u00aaV\u0002\u0879\u0885\u0003\u0002\u0002\u0002\u087a",
    "\u087b\u0007\u0003\u0002\u0002\u087b\u087c\u0005\u008cG\u0002\u087c",
    "\u087e\u0007\u0004\u0002\u0002\u087d\u087f\u0005\u0094K\u0002\u087e",
    "\u087d\u0003\u0002\u0002\u0002\u087e\u087f\u0003\u0002\u0002\u0002\u087f",
    "\u0880\u0003\u0002\u0002\u0002\u0880\u0881\u0005\u00aaV\u0002\u0881",
    "\u0885\u0003\u0002\u0002\u0002\u0882\u0885\u0005\u00a6T\u0002\u0883",
    "\u0885\u0005\u00a8U\u0002\u0884\u086c\u0003\u0002\u0002\u0002\u0884",
    "\u0872\u0003\u0002\u0002\u0002\u0884\u087a\u0003\u0002\u0002\u0002\u0884",
    "\u0882\u0003\u0002\u0002\u0002\u0884\u0883\u0003\u0002\u0002\u0002\u0885",
    "\u00a5\u0003\u0002\u0002\u0002\u0886\u0887\u0007\u00fe\u0002\u0002\u0887",
    "\u088c\u0005\u00be`\u0002\u0888\u0889\u0007\u0005\u0002\u0002\u0889",
    "\u088b\u0005\u00be`\u0002\u088a\u0888\u0003\u0002\u0002\u0002\u088b",
    "\u088e\u0003\u0002\u0002\u0002\u088c\u088a\u0003\u0002\u0002\u0002\u088c",
    "\u088d\u0003\u0002\u0002\u0002\u088d\u088f\u0003\u0002\u0002\u0002\u088e",
    "\u088c\u0003\u0002\u0002\u0002\u088f\u0890\u0005\u00aaV\u0002\u0890",
    "\u00a7\u0003\u0002\u0002\u0002\u0891\u0892\u0005\u0100\u0081\u0002\u0892",
    "\u089b\u0007\u0003\u0002\u0002\u0893\u0898\u0005\u00be`\u0002\u0894",
    "\u0895\u0007\u0005\u0002\u0002\u0895\u0897\u0005\u00be`\u0002\u0896",
    "\u0894\u0003\u0002\u0002\u0002\u0897\u089a\u0003\u0002\u0002\u0002\u0898",
    "\u0896\u0003\u0002\u0002\u0002\u0898\u0899\u0003\u0002\u0002\u0002\u0899",
    "\u089c\u0003\u0002\u0002\u0002\u089a\u0898\u0003\u0002\u0002\u0002\u089b",
    "\u0893\u0003\u0002\u0002\u0002\u089b\u089c\u0003\u0002\u0002\u0002\u089c",
    "\u089d\u0003\u0002\u0002\u0002\u089d\u089e\u0007\u0004\u0002\u0002\u089e",
    "\u089f\u0005\u00aaV\u0002\u089f\u00a9\u0003\u0002\u0002\u0002\u08a0",
    "\u08a2\u0007\u0017\u0002\u0002\u08a1\u08a0\u0003\u0002\u0002\u0002\u08a1",
    "\u08a2\u0003\u0002\u0002\u0002\u08a2\u08a3\u0003\u0002\u0002\u0002\u08a3",
    "\u08a5\u0005\u0106\u0084\u0002\u08a4\u08a6\u0005\u0098M\u0002\u08a5",
    "\u08a4\u0003\u0002\u0002\u0002\u08a5\u08a6\u0003\u0002\u0002\u0002\u08a6",
    "\u08a8\u0003\u0002\u0002\u0002\u08a7\u08a1\u0003\u0002\u0002\u0002\u08a7",
    "\u08a8\u0003\u0002\u0002\u0002\u08a8\u00ab\u0003\u0002\u0002\u0002\u08a9",
    "\u08aa\u0007\u00c8\u0002\u0002\u08aa\u08ab\u0007c\u0002\u0002\u08ab",
    "\u08ac\u0007\u00ce\u0002\u0002\u08ac\u08b0\u0007\u0119\u0002\u0002\u08ad",
    "\u08ae\u0007\u0104\u0002\u0002\u08ae\u08af\u0007\u00cf\u0002\u0002\u08af",
    "\u08b1\u0005<\u001f\u0002\u08b0\u08ad\u0003\u0002\u0002\u0002\u08b0",
    "\u08b1\u0003\u0002\u0002\u0002\u08b1\u08db\u0003\u0002\u0002\u0002\u08b2",
    "\u08b3\u0007\u00c8\u0002\u0002\u08b3\u08b4\u0007c\u0002\u0002\u08b4",
    "\u08be\u0007D\u0002\u0002\u08b5\u08b6\u0007\\\u0002\u0002\u08b6\u08b7",
    "\u0007\u00e5\u0002\u0002\u08b7\u08b8\u0007\u001f\u0002\u0002\u08b8\u08bc",
    "\u0007\u0119\u0002\u0002\u08b9\u08ba\u0007Q\u0002\u0002\u08ba\u08bb",
    "\u0007\u001f\u0002\u0002\u08bb\u08bd\u0007\u0119\u0002\u0002\u08bc\u08b9",
    "\u0003\u0002\u0002\u0002\u08bc\u08bd\u0003\u0002\u0002\u0002\u08bd\u08bf",
    "\u0003\u0002\u0002\u0002\u08be\u08b5\u0003\u0002\u0002\u0002\u08be\u08bf",
    "\u0003\u0002\u0002\u0002\u08bf\u08c5\u0003\u0002\u0002\u0002\u08c0\u08c1",
    "\u0007+\u0002\u0002\u08c1\u08c2\u0007|\u0002\u0002\u08c2\u08c3\u0007",
    "\u00e5\u0002\u0002\u08c3\u08c4\u0007\u001f\u0002\u0002\u08c4\u08c6\u0007",
    "\u0119\u0002\u0002\u08c5\u08c0\u0003\u0002\u0002\u0002\u08c5\u08c6\u0003",
    "\u0002\u0002\u0002\u08c6\u08cc\u0003\u0002\u0002\u0002\u08c7\u08c8\u0007",
    "\u008f\u0002\u0002\u08c8\u08c9\u0007~\u0002\u0002\u08c9\u08ca\u0007",
    "\u00e5\u0002\u0002\u08ca\u08cb\u0007\u001f\u0002\u0002\u08cb\u08cd\u0007",
    "\u0119\u0002\u0002\u08cc\u08c7\u0003\u0002\u0002\u0002\u08cc\u08cd\u0003",
    "\u0002\u0002\u0002\u08cd\u08d2\u0003\u0002\u0002\u0002\u08ce\u08cf\u0007",
    "\u0086\u0002\u0002\u08cf\u08d0\u0007\u00e5\u0002\u0002\u08d0\u08d1\u0007",
    "\u001f\u0002\u0002\u08d1\u08d3\u0007\u0119\u0002\u0002\u08d2\u08ce\u0003",
    "\u0002\u0002\u0002\u08d2\u08d3\u0003\u0002\u0002\u0002\u08d3\u08d8\u0003",
    "\u0002\u0002\u0002\u08d4\u08d5\u0007\u0098\u0002\u0002\u08d5\u08d6\u0007",
    "B\u0002\u0002\u08d6\u08d7\u0007\u0017\u0002\u0002\u08d7\u08d9\u0007",
    "\u0119\u0002\u0002\u08d8\u08d4\u0003\u0002\u0002\u0002\u08d8\u08d9\u0003",
    "\u0002\u0002\u0002\u08d9\u08db\u0003\u0002\u0002\u0002\u08da\u08a9\u0003",
    "\u0002\u0002\u0002\u08da\u08b2\u0003\u0002\u0002\u0002\u08db\u00ad\u0003",
    "\u0002\u0002\u0002\u08dc\u08e1\u0005\u00b0Y\u0002\u08dd\u08de\u0007",
    "\u0005\u0002\u0002\u08de\u08e0\u0005\u00b0Y\u0002\u08df\u08dd\u0003",
    "\u0002\u0002\u0002\u08e0\u08e3\u0003\u0002\u0002\u0002\u08e1\u08df\u0003",
    "\u0002\u0002\u0002\u08e1\u08e2\u0003\u0002\u0002\u0002\u08e2\u00af\u0003",
    "\u0002\u0002\u0002\u08e3\u08e1\u0003\u0002\u0002\u0002\u08e4\u08e9\u0005",
    "\u0100\u0081\u0002\u08e5\u08e6\u0007\u0006\u0002\u0002\u08e6\u08e8\u0005",
    "\u0100\u0081\u0002\u08e7\u08e5\u0003\u0002\u0002\u0002\u08e8\u08eb\u0003",
    "\u0002\u0002\u0002\u08e9\u08e7\u0003\u0002\u0002\u0002\u08e9\u08ea\u0003",
    "\u0002\u0002\u0002\u08ea\u00b1\u0003\u0002\u0002\u0002\u08eb\u08e9\u0003",
    "\u0002\u0002\u0002\u08ec\u08ed\u0005\u0100\u0081\u0002\u08ed\u08ee\u0007",
    "\u0006\u0002\u0002\u08ee\u08f0\u0003\u0002\u0002\u0002\u08ef\u08ec\u0003",
    "\u0002\u0002\u0002\u08ef\u08f0\u0003\u0002\u0002\u0002\u08f0\u08f1\u0003",
    "\u0002\u0002\u0002\u08f1\u08f2\u0005\u0100\u0081\u0002\u08f2\u00b3\u0003",
    "\u0002\u0002\u0002\u08f3\u08fb\u0005\u00be`\u0002\u08f4\u08f6\u0007",
    "\u0017\u0002\u0002\u08f5\u08f4\u0003\u0002\u0002\u0002\u08f5\u08f6\u0003",
    "\u0002\u0002\u0002\u08f6\u08f9\u0003\u0002\u0002\u0002\u08f7\u08fa\u0005",
    "\u0100\u0081\u0002\u08f8\u08fa\u0005\u0098M\u0002\u08f9\u08f7\u0003",
    "\u0002\u0002\u0002\u08f9\u08f8\u0003\u0002\u0002\u0002\u08fa\u08fc\u0003",
    "\u0002\u0002\u0002\u08fb\u08f5\u0003\u0002\u0002\u0002\u08fb\u08fc\u0003",
    "\u0002\u0002\u0002\u08fc\u00b5\u0003\u0002\u0002\u0002\u08fd\u0902\u0005",
    "\u00b4[\u0002\u08fe\u08ff\u0007\u0005\u0002\u0002\u08ff\u0901\u0005",
    "\u00b4[\u0002\u0900\u08fe\u0003\u0002\u0002\u0002\u0901\u0904\u0003",
    "\u0002\u0002\u0002\u0902\u0900\u0003\u0002\u0002\u0002\u0902\u0903\u0003",
    "\u0002\u0002\u0002\u0903\u00b7\u0003\u0002\u0002\u0002\u0904\u0902\u0003",
    "\u0002\u0002\u0002\u0905\u0906\u0007\u0003\u0002\u0002\u0906\u090b\u0005",
    "\u00ba^\u0002\u0907\u0908\u0007\u0005\u0002\u0002\u0908\u090a\u0005",
    "\u00ba^\u0002\u0909\u0907\u0003\u0002\u0002\u0002\u090a\u090d\u0003",
    "\u0002\u0002\u0002\u090b\u0909\u0003\u0002\u0002\u0002\u090b\u090c\u0003",
    "\u0002\u0002\u0002\u090c\u090e\u0003\u0002\u0002\u0002\u090d\u090b\u0003",
    "\u0002\u0002\u0002\u090e\u090f\u0007\u0004\u0002\u0002\u090f\u00b9\u0003",
    "\u0002\u0002\u0002\u0910\u091e\u0005\u00fe\u0080\u0002\u0911\u0912\u0005",
    "\u0104\u0083\u0002\u0912\u0913\u0007\u0003\u0002\u0002\u0913\u0918\u0005",
    "\u00bc_\u0002\u0914\u0915\u0007\u0005\u0002\u0002\u0915\u0917\u0005",
    "\u00bc_\u0002\u0916\u0914\u0003\u0002\u0002\u0002\u0917\u091a\u0003",
    "\u0002\u0002\u0002\u0918\u0916\u0003\u0002\u0002\u0002\u0918\u0919\u0003",
    "\u0002\u0002\u0002\u0919\u091b\u0003\u0002\u0002\u0002\u091a\u0918\u0003",
    "\u0002\u0002\u0002\u091b\u091c\u0007\u0004\u0002\u0002\u091c\u091e\u0003",
    "\u0002\u0002\u0002\u091d\u0910\u0003\u0002\u0002\u0002\u091d\u0911\u0003",
    "\u0002\u0002\u0002\u091e\u00bb\u0003\u0002\u0002\u0002\u091f\u0922\u0005",
    "\u00fe\u0080\u0002\u0920\u0922\u0005\u00c8e\u0002\u0921\u091f\u0003",
    "\u0002\u0002\u0002\u0921\u0920\u0003\u0002\u0002\u0002\u0922\u00bd\u0003",
    "\u0002\u0002\u0002\u0923\u0924\u0005\u00c0a\u0002\u0924\u00bf\u0003",
    "\u0002\u0002\u0002\u0925\u0926\ba\u0001\u0002\u0926\u0927\u0007\u0097",
    "\u0002\u0002\u0927\u0932\u0005\u00c0a\u0007\u0928\u0929\u0007T\u0002",
    "\u0002\u0929\u092a\u0007\u0003\u0002\u0002\u092a\u092b\u0005$\u0013",
    "\u0002\u092b\u092c\u0007\u0004\u0002\u0002\u092c\u0932\u0003\u0002\u0002",
    "\u0002\u092d\u092f\u0005\u00c4c\u0002\u092e\u0930\u0005\u00c2b\u0002",
    "\u092f\u092e\u0003\u0002\u0002\u0002\u092f\u0930\u0003\u0002\u0002\u0002",
    "\u0930\u0932\u0003\u0002\u0002\u0002\u0931\u0925\u0003\u0002\u0002\u0002",
    "\u0931\u0928\u0003\u0002\u0002\u0002\u0931\u092d\u0003\u0002\u0002\u0002",
    "\u0932\u093b\u0003\u0002\u0002\u0002\u0933\u0934\f\u0004\u0002\u0002",
    "\u0934\u0935\u0007\u0012\u0002\u0002\u0935\u093a\u0005\u00c0a\u0005",
    "\u0936\u0937\f\u0003\u0002\u0002\u0937\u0938\u0007\u009f\u0002\u0002",
    "\u0938\u093a\u0005\u00c0a\u0004\u0939\u0933\u0003\u0002\u0002\u0002",
    "\u0939\u0936\u0003\u0002\u0002\u0002\u093a\u093d\u0003\u0002\u0002\u0002",
    "\u093b\u0939\u0003\u0002\u0002\u0002\u093b\u093c\u0003\u0002\u0002\u0002",
    "\u093c\u00c1\u0003\u0002\u0002\u0002\u093d\u093b\u0003\u0002\u0002\u0002",
    "\u093e\u0940\u0007\u0097\u0002\u0002\u093f\u093e\u0003\u0002\u0002\u0002",
    "\u093f\u0940\u0003\u0002\u0002\u0002\u0940\u0941\u0003\u0002\u0002\u0002",
    "\u0941\u0942\u0007\u001b\u0002\u0002\u0942\u0943\u0005\u00c4c\u0002",
    "\u0943\u0944\u0007\u0012\u0002\u0002\u0944\u0945\u0005\u00c4c\u0002",
    "\u0945\u0991\u0003\u0002\u0002\u0002\u0946\u0948\u0007\u0097\u0002\u0002",
    "\u0947\u0946\u0003\u0002\u0002\u0002\u0947\u0948\u0003\u0002\u0002\u0002",
    "\u0948\u0949\u0003\u0002\u0002\u0002\u0949\u094a\u0007q\u0002\u0002",
    "\u094a\u094b\u0007\u0003\u0002\u0002\u094b\u0950\u0005\u00be`\u0002",
    "\u094c\u094d\u0007\u0005\u0002\u0002\u094d\u094f\u0005\u00be`\u0002",
    "\u094e\u094c\u0003\u0002\u0002\u0002\u094f\u0952\u0003\u0002\u0002\u0002",
    "\u0950\u094e\u0003\u0002\u0002\u0002\u0950\u0951\u0003\u0002\u0002\u0002",
    "\u0951\u0953\u0003\u0002\u0002\u0002\u0952\u0950\u0003\u0002\u0002\u0002",
    "\u0953\u0954\u0007\u0004\u0002\u0002\u0954\u0991\u0003\u0002\u0002\u0002",
    "\u0955\u0957\u0007\u0097\u0002\u0002\u0956\u0955\u0003\u0002\u0002\u0002",
    "\u0956\u0957\u0003\u0002\u0002\u0002\u0957\u0958\u0003\u0002\u0002\u0002",
    "\u0958\u0959\u0007q\u0002\u0002\u0959\u095a\u0007\u0003\u0002\u0002",
    "\u095a\u095b\u0005$\u0013\u0002\u095b\u095c\u0007\u0004\u0002\u0002",
    "\u095c\u0991\u0003\u0002\u0002\u0002\u095d\u095f\u0007\u0097\u0002\u0002",
    "\u095e\u095d\u0003\u0002\u0002\u0002\u095e\u095f\u0003\u0002\u0002\u0002",
    "\u095f\u0960\u0003\u0002\u0002\u0002\u0960\u0961\u0007\u00c3\u0002\u0002",
    "\u0961\u0991\u0005\u00c4c\u0002\u0962\u0964\u0007\u0097\u0002\u0002",
    "\u0963\u0962\u0003\u0002\u0002\u0002\u0963\u0964\u0003\u0002\u0002\u0002",
    "\u0964\u0965\u0003\u0002\u0002\u0002\u0965\u0966\u0007\u0084\u0002\u0002",
    "\u0966\u0974\t\u0016\u0002\u0002\u0967\u0968\u0007\u0003\u0002\u0002",
    "\u0968\u0975\u0007\u0004\u0002\u0002\u0969\u096a\u0007\u0003\u0002\u0002",
    "\u096a\u096f\u0005\u00be`\u0002\u096b\u096c\u0007\u0005\u0002\u0002",
    "\u096c\u096e\u0005\u00be`\u0002\u096d\u096b\u0003\u0002\u0002\u0002",
    "\u096e\u0971\u0003\u0002\u0002\u0002\u096f\u096d\u0003\u0002\u0002\u0002",
    "\u096f\u0970\u0003\u0002\u0002\u0002\u0970\u0972\u0003\u0002\u0002\u0002",
    "\u0971\u096f\u0003\u0002\u0002\u0002\u0972\u0973\u0007\u0004\u0002\u0002",
    "\u0973\u0975\u0003\u0002\u0002\u0002\u0974\u0967\u0003\u0002\u0002\u0002",
    "\u0974\u0969\u0003\u0002\u0002\u0002\u0975\u0991\u0003\u0002\u0002\u0002",
    "\u0976\u0978\u0007\u0097\u0002\u0002\u0977\u0976\u0003\u0002\u0002\u0002",
    "\u0977\u0978\u0003\u0002\u0002\u0002\u0978\u0979\u0003\u0002\u0002\u0002",
    "\u0979\u097a\u0007\u0084\u0002\u0002\u097a\u097d\u0005\u00c4c\u0002",
    "\u097b\u097c\u0007P\u0002\u0002\u097c\u097e\u0007\u0119\u0002\u0002",
    "\u097d\u097b\u0003\u0002\u0002\u0002\u097d\u097e\u0003\u0002\u0002\u0002",
    "\u097e\u0991\u0003\u0002\u0002\u0002\u097f\u0981\u0007{\u0002\u0002",
    "\u0980\u0982\u0007\u0097\u0002\u0002\u0981\u0980\u0003\u0002\u0002\u0002",
    "\u0981\u0982\u0003\u0002\u0002\u0002\u0982\u0983\u0003\u0002\u0002\u0002",
    "\u0983\u0991\u0007\u0098\u0002\u0002\u0984\u0986\u0007{\u0002\u0002",
    "\u0985\u0987\u0007\u0097\u0002\u0002\u0986\u0985\u0003\u0002\u0002\u0002",
    "\u0986\u0987\u0003\u0002\u0002\u0002\u0987\u0988\u0003\u0002\u0002\u0002",
    "\u0988\u0991\t\u0017\u0002\u0002\u0989\u098b\u0007{\u0002\u0002\u098a",
    "\u098c\u0007\u0097\u0002\u0002\u098b\u098a\u0003\u0002\u0002\u0002\u098b",
    "\u098c\u0003\u0002\u0002\u0002\u098c\u098d\u0003\u0002\u0002\u0002\u098d",
    "\u098e\u0007J\u0002\u0002\u098e\u098f\u0007e\u0002\u0002\u098f\u0991",
    "\u0005\u00c4c\u0002\u0990\u093f\u0003\u0002\u0002\u0002\u0990\u0947",
    "\u0003\u0002\u0002\u0002\u0990\u0956\u0003\u0002\u0002\u0002\u0990\u095e",
    "\u0003\u0002\u0002\u0002\u0990\u0963\u0003\u0002\u0002\u0002\u0990\u0977",
    "\u0003\u0002\u0002\u0002\u0990\u097f\u0003\u0002\u0002\u0002\u0990\u0984",
    "\u0003\u0002\u0002\u0002\u0990\u0989\u0003\u0002\u0002\u0002\u0991\u00c3",
    "\u0003\u0002\u0002\u0002\u0992\u0993\bc\u0001\u0002\u0993\u0997\u0005",
    "\u00c6d\u0002\u0994\u0995\t\u0018\u0002\u0002\u0995\u0997\u0005\u00c4",
    "c\t\u0996\u0992\u0003\u0002\u0002\u0002\u0996\u0994\u0003\u0002\u0002",
    "\u0002\u0997\u09ad\u0003\u0002\u0002\u0002\u0998\u0999\f\b\u0002\u0002",
    "\u0999\u099a\t\u0019\u0002\u0002\u099a\u09ac\u0005\u00c4c\t\u099b\u099c",
    "\f\u0007\u0002\u0002\u099c\u099d\t\u001a\u0002\u0002\u099d\u09ac\u0005",
    "\u00c4c\b\u099e\u099f\f\u0006\u0002\u0002\u099f\u09a0\u0007\u0114\u0002",
    "\u0002\u09a0\u09ac\u0005\u00c4c\u0007\u09a1\u09a2\f\u0005\u0002\u0002",
    "\u09a2\u09a3\u0007\u0117\u0002\u0002\u09a3\u09ac\u0005\u00c4c\u0006",
    "\u09a4\u09a5\f\u0004\u0002\u0002\u09a5\u09a6\u0007\u0115\u0002\u0002",
    "\u09a6\u09ac\u0005\u00c4c\u0005\u09a7\u09a8\f\u0003\u0002\u0002\u09a8",
    "\u09a9\u0005\u00caf\u0002\u09a9\u09aa\u0005\u00c4c\u0004\u09aa\u09ac",
    "\u0003\u0002\u0002\u0002\u09ab\u0998\u0003\u0002\u0002\u0002\u09ab\u099b",
    "\u0003\u0002\u0002\u0002\u09ab\u099e\u0003\u0002\u0002\u0002\u09ab\u09a1",
    "\u0003\u0002\u0002\u0002\u09ab\u09a4\u0003\u0002\u0002\u0002\u09ab\u09a7",
    "\u0003\u0002\u0002\u0002\u09ac\u09af\u0003\u0002\u0002\u0002\u09ad\u09ab",
    "\u0003\u0002\u0002\u0002\u09ad\u09ae\u0003\u0002\u0002\u0002\u09ae\u00c5",
    "\u0003\u0002\u0002\u0002\u09af\u09ad\u0003\u0002\u0002\u0002\u09b0\u09b1",
    "\bd\u0001\u0002\u09b1\u0a69\t\u001b\u0002\u0002\u09b2\u09b4\u0007\"",
    "\u0002\u0002\u09b3\u09b5\u0005\u00eex\u0002\u09b4\u09b3\u0003\u0002",
    "\u0002\u0002\u09b5\u09b6\u0003\u0002\u0002\u0002\u09b6\u09b4\u0003\u0002",
    "\u0002\u0002\u09b6\u09b7\u0003\u0002\u0002\u0002\u09b7\u09ba\u0003\u0002",
    "\u0002\u0002\u09b8\u09b9\u0007N\u0002\u0002\u09b9\u09bb\u0005\u00be",
    "`\u0002\u09ba\u09b8\u0003\u0002\u0002\u0002\u09ba\u09bb\u0003\u0002",
    "\u0002\u0002\u09bb\u09bc\u0003\u0002\u0002\u0002\u09bc\u09bd\u0007O",
    "\u0002\u0002\u09bd\u0a69\u0003\u0002\u0002\u0002\u09be\u09bf\u0007\"",
    "\u0002\u0002\u09bf\u09c1\u0005\u00be`\u0002\u09c0\u09c2\u0005\u00ee",
    "x\u0002\u09c1\u09c0\u0003\u0002\u0002\u0002\u09c2\u09c3\u0003\u0002",
    "\u0002\u0002\u09c3\u09c1\u0003\u0002\u0002\u0002\u09c3\u09c4\u0003\u0002",
    "\u0002\u0002\u09c4\u09c7\u0003\u0002\u0002\u0002\u09c5\u09c6\u0007N",
    "\u0002\u0002\u09c6\u09c8\u0005\u00be`\u0002\u09c7\u09c5\u0003\u0002",
    "\u0002\u0002\u09c7\u09c8\u0003\u0002\u0002\u0002\u09c8\u09c9\u0003\u0002",
    "\u0002\u0002\u09c9\u09ca\u0007O\u0002\u0002\u09ca\u0a69\u0003\u0002",
    "\u0002\u0002\u09cb\u09cc\u0007#\u0002\u0002\u09cc\u09cd\u0007\u0003",
    "\u0002\u0002\u09cd\u09ce\u0005\u00be`\u0002\u09ce\u09cf\u0007\u0017",
    "\u0002\u0002\u09cf\u09d0\u0005\u00e0q\u0002\u09d0\u09d1\u0007\u0004",
    "\u0002\u0002\u09d1\u0a69\u0003\u0002\u0002\u0002\u09d2\u09d3\u0007\u00dd",
    "\u0002\u0002\u09d3\u09dc\u0007\u0003\u0002\u0002\u09d4\u09d9\u0005\u00b4",
    "[\u0002\u09d5\u09d6\u0007\u0005\u0002\u0002\u09d6\u09d8\u0005\u00b4",
    "[\u0002\u09d7\u09d5\u0003\u0002\u0002\u0002\u09d8\u09db\u0003\u0002",
    "\u0002\u0002\u09d9\u09d7\u0003\u0002\u0002\u0002\u09d9\u09da\u0003\u0002",
    "\u0002\u0002\u09da\u09dd\u0003\u0002\u0002\u0002\u09db\u09d9\u0003\u0002",
    "\u0002\u0002\u09dc\u09d4\u0003\u0002\u0002\u0002\u09dc\u09dd\u0003\u0002",
    "\u0002\u0002\u09dd\u09de\u0003\u0002\u0002\u0002\u09de\u0a69\u0007\u0004",
    "\u0002\u0002\u09df\u09e0\u0007_\u0002\u0002\u09e0\u09e1\u0007\u0003",
    "\u0002\u0002\u09e1\u09e4\u0005\u00be`\u0002\u09e2\u09e3\u0007o\u0002",
    "\u0002\u09e3\u09e5\u0007\u0099\u0002\u0002\u09e4\u09e2\u0003\u0002\u0002",
    "\u0002\u09e4\u09e5\u0003\u0002\u0002\u0002\u09e5\u09e6\u0003\u0002\u0002",
    "\u0002\u09e6\u09e7\u0007\u0004\u0002\u0002\u09e7\u0a69\u0003\u0002\u0002",
    "\u0002\u09e8\u09e9\u0007\u007f\u0002\u0002\u09e9\u09ea\u0007\u0003\u0002",
    "\u0002\u09ea\u09ed\u0005\u00be`\u0002\u09eb\u09ec\u0007o\u0002\u0002",
    "\u09ec\u09ee\u0007\u0099\u0002\u0002\u09ed\u09eb\u0003\u0002\u0002\u0002",
    "\u09ed\u09ee\u0003\u0002\u0002\u0002\u09ee\u09ef\u0003\u0002\u0002\u0002",
    "\u09ef\u09f0\u0007\u0004\u0002\u0002\u09f0\u0a69\u0003\u0002\u0002\u0002",
    "\u09f1\u09f2\u0007\u00ae\u0002\u0002\u09f2\u09f3\u0007\u0003\u0002\u0002",
    "\u09f3\u09f4\u0005\u00c4c\u0002\u09f4\u09f5\u0007q\u0002\u0002\u09f5",
    "\u09f6\u0005\u00c4c\u0002\u09f6\u09f7\u0007\u0004\u0002\u0002\u09f7",
    "\u0a69\u0003\u0002\u0002\u0002\u09f8\u0a69\u0005\u00c8e\u0002\u09f9",
    "\u0a69\u0007\u0110\u0002\u0002\u09fa\u09fb\u0005\u00fe\u0080\u0002\u09fb",
    "\u09fc\u0007\u0006\u0002\u0002\u09fc\u09fd\u0007\u0110\u0002\u0002\u09fd",
    "\u0a69\u0003\u0002\u0002\u0002\u09fe\u09ff\u0007\u0003\u0002\u0002\u09ff",
    "\u0a02\u0005\u00b4[\u0002\u0a00\u0a01\u0007\u0005\u0002\u0002\u0a01",
    "\u0a03\u0005\u00b4[\u0002\u0a02\u0a00\u0003\u0002\u0002\u0002\u0a03",
    "\u0a04\u0003\u0002\u0002\u0002\u0a04\u0a02\u0003\u0002\u0002\u0002\u0a04",
    "\u0a05\u0003\u0002\u0002\u0002\u0a05\u0a06\u0003\u0002\u0002\u0002\u0a06",
    "\u0a07\u0007\u0004\u0002\u0002\u0a07\u0a69\u0003\u0002\u0002\u0002\u0a08",
    "\u0a09\u0007\u0003\u0002\u0002\u0a09\u0a0a\u0005$\u0013\u0002\u0a0a",
    "\u0a0b\u0007\u0004\u0002\u0002\u0a0b\u0a69\u0003\u0002\u0002\u0002\u0a0c",
    "\u0a0d\u0005\u00fc\u007f\u0002\u0a0d\u0a19\u0007\u0003\u0002\u0002\u0a0e",
    "\u0a10\u0005\u008aF\u0002\u0a0f\u0a0e\u0003\u0002\u0002\u0002\u0a0f",
    "\u0a10\u0003\u0002\u0002\u0002\u0a10\u0a11\u0003\u0002\u0002\u0002\u0a11",
    "\u0a16\u0005\u00be`\u0002\u0a12\u0a13\u0007\u0005\u0002\u0002\u0a13",
    "\u0a15\u0005\u00be`\u0002\u0a14\u0a12\u0003\u0002\u0002\u0002\u0a15",
    "\u0a18\u0003\u0002\u0002\u0002\u0a16\u0a14\u0003\u0002\u0002\u0002\u0a16",
    "\u0a17\u0003\u0002\u0002\u0002\u0a17\u0a1a\u0003\u0002\u0002\u0002\u0a18",
    "\u0a16\u0003\u0002\u0002\u0002\u0a19\u0a0f\u0003\u0002\u0002\u0002\u0a19",
    "\u0a1a\u0003\u0002\u0002\u0002\u0a1a\u0a1b\u0003\u0002\u0002\u0002\u0a1b",
    "\u0a22\u0007\u0004\u0002\u0002\u0a1c\u0a1d\u0007]\u0002\u0002\u0a1d",
    "\u0a1e\u0007\u0003\u0002\u0002\u0a1e\u0a1f\u0007\u0102\u0002\u0002\u0a1f",
    "\u0a20\u0005\u00c0a\u0002\u0a20\u0a21\u0007\u0004\u0002\u0002\u0a21",
    "\u0a23\u0003\u0002\u0002\u0002\u0a22\u0a1c\u0003\u0002\u0002\u0002\u0a22",
    "\u0a23\u0003\u0002\u0002\u0002\u0a23\u0a26\u0003\u0002\u0002\u0002\u0a24",
    "\u0a25\u0007\u00a4\u0002\u0002\u0a25\u0a27\u0005\u00f4{\u0002\u0a26",
    "\u0a24\u0003\u0002\u0002\u0002\u0a26\u0a27\u0003\u0002\u0002\u0002\u0a27",
    "\u0a69\u0003\u0002\u0002\u0002\u0a28\u0a29\u0005\u0104\u0083\u0002\u0a29",
    "\u0a2a\u0007\t\u0002\u0002\u0a2a\u0a2b\u0005\u00be`\u0002\u0a2b\u0a69",
    "\u0003\u0002\u0002\u0002\u0a2c\u0a2d\u0007\u0003\u0002\u0002\u0a2d\u0a30",
    "\u0005\u0104\u0083\u0002\u0a2e\u0a2f\u0007\u0005\u0002\u0002\u0a2f\u0a31",
    "\u0005\u0104\u0083\u0002\u0a30\u0a2e\u0003\u0002\u0002\u0002\u0a31\u0a32",
    "\u0003\u0002\u0002\u0002\u0a32\u0a30\u0003\u0002\u0002\u0002\u0a32\u0a33",
    "\u0003\u0002\u0002\u0002\u0a33\u0a34\u0003\u0002\u0002\u0002\u0a34\u0a35",
    "\u0007\u0004\u0002\u0002\u0a35\u0a36\u0007\t\u0002\u0002\u0a36\u0a37",
    "\u0005\u00be`\u0002\u0a37\u0a69\u0003\u0002\u0002\u0002\u0a38\u0a69",
    "\u0005\u0104\u0083\u0002\u0a39\u0a3a\u0007\u0003\u0002\u0002\u0a3a\u0a3b",
    "\u0005\u00be`\u0002\u0a3b\u0a3c\u0007\u0004\u0002\u0002\u0a3c\u0a69",
    "\u0003\u0002\u0002\u0002\u0a3d\u0a3e\u0007Y\u0002\u0002\u0a3e\u0a3f",
    "\u0007\u0003\u0002\u0002\u0a3f\u0a40\u0005\u0104\u0083\u0002\u0a40\u0a41",
    "\u0007e\u0002\u0002\u0a41\u0a42\u0005\u00c4c\u0002\u0a42\u0a43\u0007",
    "\u0004\u0002\u0002\u0a43\u0a69\u0003\u0002\u0002\u0002\u0a44\u0a45\t",
    "\u001c\u0002\u0002\u0a45\u0a46\u0007\u0003\u0002\u0002\u0a46\u0a47\u0005",
    "\u00c4c\u0002\u0a47\u0a48\t\u001d\u0002\u0002\u0a48\u0a4b\u0005\u00c4",
    "c\u0002\u0a49\u0a4a\t\u001e\u0002\u0002\u0a4a\u0a4c\u0005\u00c4c\u0002",
    "\u0a4b\u0a49\u0003\u0002\u0002\u0002\u0a4b\u0a4c\u0003\u0002\u0002\u0002",
    "\u0a4c\u0a4d\u0003\u0002\u0002\u0002\u0a4d\u0a4e\u0007\u0004\u0002\u0002",
    "\u0a4e\u0a69\u0003\u0002\u0002\u0002\u0a4f\u0a50\u0007\u00ee\u0002\u0002",
    "\u0a50\u0a52\u0007\u0003\u0002\u0002\u0a51\u0a53\t\u001f\u0002\u0002",
    "\u0a52\u0a51\u0003\u0002\u0002\u0002\u0a52\u0a53\u0003\u0002\u0002\u0002",
    "\u0a53\u0a55\u0003\u0002\u0002\u0002\u0a54\u0a56\u0005\u00c4c\u0002",
    "\u0a55\u0a54\u0003\u0002\u0002\u0002\u0a55\u0a56\u0003\u0002\u0002\u0002",
    "\u0a56\u0a57\u0003\u0002\u0002\u0002\u0a57\u0a58\u0007e\u0002\u0002",
    "\u0a58\u0a59\u0005\u00c4c\u0002\u0a59\u0a5a\u0007\u0004\u0002\u0002",
    "\u0a5a\u0a69\u0003\u0002\u0002\u0002\u0a5b\u0a5c\u0007\u00a6\u0002\u0002",
    "\u0a5c\u0a5d\u0007\u0003\u0002\u0002\u0a5d\u0a5e\u0005\u00c4c\u0002",
    "\u0a5e\u0a5f\u0007\u00ad\u0002\u0002\u0a5f\u0a60\u0005\u00c4c\u0002",
    "\u0a60\u0a61\u0007e\u0002\u0002\u0a61\u0a64\u0005\u00c4c\u0002\u0a62",
    "\u0a63\u0007a\u0002\u0002\u0a63\u0a65\u0005\u00c4c\u0002\u0a64\u0a62",
    "\u0003\u0002\u0002\u0002\u0a64\u0a65\u0003\u0002\u0002\u0002\u0a65\u0a66",
    "\u0003\u0002\u0002\u0002\u0a66\u0a67\u0007\u0004\u0002\u0002\u0a67\u0a69",
    "\u0003\u0002\u0002\u0002\u0a68\u09b0\u0003\u0002\u0002\u0002\u0a68\u09b2",
    "\u0003\u0002\u0002\u0002\u0a68\u09be\u0003\u0002\u0002\u0002\u0a68\u09cb",
    "\u0003\u0002\u0002\u0002\u0a68\u09d2\u0003\u0002\u0002\u0002\u0a68\u09df",
    "\u0003\u0002\u0002\u0002\u0a68\u09e8\u0003\u0002\u0002\u0002\u0a68\u09f1",
    "\u0003\u0002\u0002\u0002\u0a68\u09f8\u0003\u0002\u0002\u0002\u0a68\u09f9",
    "\u0003\u0002\u0002\u0002\u0a68\u09fa\u0003\u0002\u0002\u0002\u0a68\u09fe",
    "\u0003\u0002\u0002\u0002\u0a68\u0a08\u0003\u0002\u0002\u0002\u0a68\u0a0c",
    "\u0003\u0002\u0002\u0002\u0a68\u0a28\u0003\u0002\u0002\u0002\u0a68\u0a2c",
    "\u0003\u0002\u0002\u0002\u0a68\u0a38\u0003\u0002\u0002\u0002\u0a68\u0a39",
    "\u0003\u0002\u0002\u0002\u0a68\u0a3d\u0003\u0002\u0002\u0002\u0a68\u0a44",
    "\u0003\u0002\u0002\u0002\u0a68\u0a4f\u0003\u0002\u0002\u0002\u0a68\u0a5b",
    "\u0003\u0002\u0002\u0002\u0a69\u0a74\u0003\u0002\u0002\u0002\u0a6a\u0a6b",
    "\f\n\u0002\u0002\u0a6b\u0a6c\u0007\n\u0002\u0002\u0a6c\u0a6d\u0005\u00c4",
    "c\u0002\u0a6d\u0a6e\u0007\u000b\u0002\u0002\u0a6e\u0a73\u0003\u0002",
    "\u0002\u0002\u0a6f\u0a70\f\b\u0002\u0002\u0a70\u0a71\u0007\u0006\u0002",
    "\u0002\u0a71\u0a73\u0005\u0104\u0083\u0002\u0a72\u0a6a\u0003\u0002\u0002",
    "\u0002\u0a72\u0a6f\u0003\u0002\u0002\u0002\u0a73\u0a76\u0003\u0002\u0002",
    "\u0002\u0a74\u0a72\u0003\u0002\u0002\u0002\u0a74\u0a75\u0003\u0002\u0002",
    "\u0002\u0a75\u00c7\u0003\u0002\u0002\u0002\u0a76\u0a74\u0003\u0002\u0002",
    "\u0002\u0a77\u0a84\u0007\u0098\u0002\u0002\u0a78\u0a84\u0005\u00d2j",
    "\u0002\u0a79\u0a7a\u0005\u0104\u0083\u0002\u0a7a\u0a7b\u0007\u0119\u0002",
    "\u0002\u0a7b\u0a84\u0003\u0002\u0002\u0002\u0a7c\u0a84\u0005\u010a\u0086",
    "\u0002\u0a7d\u0a84\u0005\u00d0i\u0002\u0a7e\u0a80\u0007\u0119\u0002",
    "\u0002\u0a7f\u0a7e\u0003\u0002\u0002\u0002\u0a80\u0a81\u0003\u0002\u0002",
    "\u0002\u0a81\u0a7f\u0003\u0002\u0002\u0002\u0a81\u0a82\u0003\u0002\u0002",
    "\u0002\u0a82\u0a84\u0003\u0002\u0002\u0002\u0a83\u0a77\u0003\u0002\u0002",
    "\u0002\u0a83\u0a78\u0003\u0002\u0002\u0002\u0a83\u0a79\u0003\u0002\u0002",
    "\u0002\u0a83\u0a7c\u0003\u0002\u0002\u0002\u0a83\u0a7d\u0003\u0002\u0002",
    "\u0002\u0a83\u0a7f\u0003\u0002\u0002\u0002\u0a84\u00c9\u0003\u0002\u0002",
    "\u0002\u0a85\u0a86\t \u0002\u0002\u0a86\u00cb\u0003\u0002\u0002\u0002",
    "\u0a87\u0a88\t!\u0002\u0002\u0a88\u00cd\u0003\u0002\u0002\u0002\u0a89",
    "\u0a8a\t\"\u0002\u0002\u0a8a\u00cf\u0003\u0002\u0002\u0002\u0a8b\u0a8c",
    "\t#\u0002\u0002\u0a8c\u00d1\u0003\u0002\u0002\u0002\u0a8d\u0a90\u0007",
    "y\u0002\u0002\u0a8e\u0a91\u0005\u00d4k\u0002\u0a8f\u0a91\u0005\u00d8",
    "m\u0002\u0a90\u0a8e\u0003\u0002\u0002\u0002\u0a90\u0a8f\u0003\u0002",
    "\u0002\u0002\u0a90\u0a91\u0003\u0002\u0002\u0002\u0a91\u00d3\u0003\u0002",
    "\u0002\u0002\u0a92\u0a94\u0005\u00d6l\u0002\u0a93\u0a95\u0005\u00da",
    "n\u0002\u0a94\u0a93\u0003\u0002\u0002\u0002\u0a94\u0a95\u0003\u0002",
    "\u0002\u0002\u0a95\u00d5\u0003\u0002\u0002\u0002\u0a96\u0a97\u0005\u00dc",
    "o\u0002\u0a97\u0a98\u0005\u0104\u0083\u0002\u0a98\u0a9a\u0003\u0002",
    "\u0002\u0002\u0a99\u0a96\u0003\u0002\u0002\u0002\u0a9a\u0a9b\u0003\u0002",
    "\u0002\u0002\u0a9b\u0a99\u0003\u0002\u0002\u0002\u0a9b\u0a9c\u0003\u0002",
    "\u0002\u0002\u0a9c\u00d7\u0003\u0002\u0002\u0002\u0a9d\u0aa0\u0005\u00da",
    "n\u0002\u0a9e\u0aa1\u0005\u00d6l\u0002\u0a9f\u0aa1\u0005\u00dan\u0002",
    "\u0aa0\u0a9e\u0003\u0002\u0002\u0002\u0aa0\u0a9f\u0003\u0002\u0002\u0002",
    "\u0aa0\u0aa1\u0003\u0002\u0002\u0002\u0aa1\u00d9\u0003\u0002\u0002\u0002",
    "\u0aa2\u0aa3\u0005\u00dco\u0002\u0aa3\u0aa4\u0005\u0104\u0083\u0002",
    "\u0aa4\u0aa5\u0007\u00e8\u0002\u0002\u0aa5\u0aa6\u0005\u0104\u0083\u0002",
    "\u0aa6\u00db\u0003\u0002\u0002\u0002\u0aa7\u0aa9\t$\u0002\u0002\u0aa8",
    "\u0aa7\u0003\u0002\u0002\u0002\u0aa8\u0aa9\u0003\u0002\u0002\u0002\u0aa9",
    "\u0aaa\u0003\u0002\u0002\u0002\u0aaa\u0aad\t\u0015\u0002\u0002\u0aab",
    "\u0aad\u0007\u0119\u0002\u0002\u0aac\u0aa8\u0003\u0002\u0002\u0002\u0aac",
    "\u0aab\u0003\u0002\u0002\u0002\u0aad\u00dd\u0003\u0002\u0002\u0002\u0aae",
    "\u0ab2\u0007_\u0002\u0002\u0aaf\u0ab0\u0007\u000e\u0002\u0002\u0ab0",
    "\u0ab2\u0005\u0100\u0081\u0002\u0ab1\u0aae\u0003\u0002\u0002\u0002\u0ab1",
    "\u0aaf\u0003\u0002\u0002\u0002\u0ab2\u00df\u0003\u0002\u0002\u0002\u0ab3",
    "\u0ab4\u0007\u0016\u0002\u0002\u0ab4\u0ab5\u0007\u010a\u0002\u0002\u0ab5",
    "\u0ab6\u0005\u00e0q\u0002\u0ab6\u0ab7\u0007\u010c\u0002\u0002\u0ab7",
    "\u0ad6\u0003\u0002\u0002\u0002\u0ab8\u0ab9\u0007\u008f\u0002\u0002\u0ab9",
    "\u0aba\u0007\u010a\u0002\u0002\u0aba\u0abb\u0005\u00e0q\u0002\u0abb",
    "\u0abc\u0007\u0005\u0002\u0002\u0abc\u0abd\u0005\u00e0q\u0002\u0abd",
    "\u0abe\u0007\u010c\u0002\u0002\u0abe\u0ad6\u0003\u0002\u0002\u0002\u0abf",
    "\u0ac6\u0007\u00dd\u0002\u0002\u0ac0\u0ac2\u0007\u010a\u0002\u0002\u0ac1",
    "\u0ac3\u0005\u00eav\u0002\u0ac2\u0ac1\u0003\u0002\u0002\u0002\u0ac2",
    "\u0ac3\u0003\u0002\u0002\u0002\u0ac3\u0ac4\u0003\u0002\u0002\u0002\u0ac4",
    "\u0ac7\u0007\u010c\u0002\u0002\u0ac5\u0ac7\u0007\u0108\u0002\u0002\u0ac6",
    "\u0ac0\u0003\u0002\u0002\u0002\u0ac6\u0ac5\u0003\u0002\u0002\u0002\u0ac7",
    "\u0ad6\u0003\u0002\u0002\u0002\u0ac8\u0ad3\u0005\u0104\u0083\u0002\u0ac9",
    "\u0aca\u0007\u0003\u0002\u0002\u0aca\u0acf\u0007\u011d\u0002\u0002\u0acb",
    "\u0acc\u0007\u0005\u0002\u0002\u0acc\u0ace\u0007\u011d\u0002\u0002\u0acd",
    "\u0acb\u0003\u0002\u0002\u0002\u0ace\u0ad1\u0003\u0002\u0002\u0002\u0acf",
    "\u0acd\u0003\u0002\u0002\u0002\u0acf\u0ad0\u0003\u0002\u0002\u0002\u0ad0",
    "\u0ad2\u0003\u0002\u0002\u0002\u0ad1\u0acf\u0003\u0002\u0002\u0002\u0ad2",
    "\u0ad4\u0007\u0004\u0002\u0002\u0ad3\u0ac9\u0003\u0002\u0002\u0002\u0ad3",
    "\u0ad4\u0003\u0002\u0002\u0002\u0ad4\u0ad6\u0003\u0002\u0002\u0002\u0ad5",
    "\u0ab3\u0003\u0002\u0002\u0002\u0ad5\u0ab8\u0003\u0002\u0002\u0002\u0ad5",
    "\u0abf\u0003\u0002\u0002\u0002\u0ad5\u0ac8\u0003\u0002\u0002\u0002\u0ad6",
    "\u00e1\u0003\u0002\u0002\u0002\u0ad7\u0adc\u0005\u00e4s\u0002\u0ad8",
    "\u0ad9\u0007\u0005\u0002\u0002\u0ad9\u0adb\u0005\u00e4s\u0002\u0ada",
    "\u0ad8\u0003\u0002\u0002\u0002\u0adb\u0ade\u0003\u0002\u0002\u0002\u0adc",
    "\u0ada\u0003\u0002\u0002\u0002\u0adc\u0add\u0003\u0002\u0002\u0002\u0add",
    "\u00e3\u0003\u0002\u0002\u0002\u0ade\u0adc\u0003\u0002\u0002\u0002\u0adf",
    "\u0ae0\u0005\u00b0Y\u0002\u0ae0\u0ae3\u0005\u00e0q\u0002\u0ae1\u0ae2",
    "\u0007\u0097\u0002\u0002\u0ae2\u0ae4\u0007\u0098\u0002\u0002\u0ae3\u0ae1",
    "\u0003\u0002\u0002\u0002\u0ae3\u0ae4\u0003\u0002\u0002\u0002\u0ae4\u0ae6",
    "\u0003\u0002\u0002\u0002\u0ae5\u0ae7\u0005\"\u0012\u0002\u0ae6\u0ae5",
    "\u0003\u0002\u0002\u0002\u0ae6\u0ae7\u0003\u0002\u0002\u0002\u0ae7\u0ae9",
    "\u0003\u0002\u0002\u0002\u0ae8\u0aea\u0005\u00dep\u0002\u0ae9\u0ae8",
    "\u0003\u0002\u0002\u0002\u0ae9\u0aea\u0003\u0002\u0002\u0002\u0aea\u00e5",
    "\u0003\u0002\u0002\u0002\u0aeb\u0af0\u0005\u00e8u\u0002\u0aec\u0aed",
    "\u0007\u0005\u0002\u0002\u0aed\u0aef\u0005\u00e8u\u0002\u0aee\u0aec",
    "\u0003\u0002\u0002\u0002\u0aef\u0af2\u0003\u0002\u0002\u0002\u0af0\u0aee",
    "\u0003\u0002\u0002\u0002\u0af0\u0af1\u0003\u0002\u0002\u0002\u0af1\u00e7",
    "\u0003\u0002\u0002\u0002\u0af2\u0af0\u0003\u0002\u0002\u0002\u0af3\u0af4",
    "\u0005\u0100\u0081\u0002\u0af4\u0af7\u0005\u00e0q\u0002\u0af5\u0af6",
    "\u0007\u0097\u0002\u0002\u0af6\u0af8\u0007\u0098\u0002\u0002\u0af7\u0af5",
    "\u0003\u0002\u0002\u0002\u0af7\u0af8\u0003\u0002\u0002\u0002\u0af8\u0afa",
    "\u0003\u0002\u0002\u0002\u0af9\u0afb\u0005\"\u0012\u0002\u0afa\u0af9",
    "\u0003\u0002\u0002\u0002\u0afa\u0afb\u0003\u0002\u0002\u0002\u0afb\u00e9",
    "\u0003\u0002\u0002\u0002\u0afc\u0b01\u0005\u00ecw\u0002\u0afd\u0afe",
    "\u0007\u0005\u0002\u0002\u0afe\u0b00\u0005\u00ecw\u0002\u0aff\u0afd",
    "\u0003\u0002\u0002\u0002\u0b00\u0b03\u0003\u0002\u0002\u0002\u0b01\u0aff",
    "\u0003\u0002\u0002\u0002\u0b01\u0b02\u0003\u0002\u0002\u0002\u0b02\u00eb",
    "\u0003\u0002\u0002\u0002\u0b03\u0b01\u0003\u0002\u0002\u0002\u0b04\u0b05",
    "\u0005\u0104\u0083\u0002\u0b05\u0b06\u0007\f\u0002\u0002\u0b06\u0b09",
    "\u0005\u00e0q\u0002\u0b07\u0b08\u0007\u0097\u0002\u0002\u0b08\u0b0a",
    "\u0007\u0098\u0002\u0002\u0b09\u0b07\u0003\u0002\u0002\u0002\u0b09\u0b0a",
    "\u0003\u0002\u0002\u0002\u0b0a\u0b0c\u0003\u0002\u0002\u0002\u0b0b\u0b0d",
    "\u0005\"\u0012\u0002\u0b0c\u0b0b\u0003\u0002\u0002\u0002\u0b0c\u0b0d",
    "\u0003\u0002\u0002\u0002\u0b0d\u00ed\u0003\u0002\u0002\u0002\u0b0e\u0b0f",
    "\u0007\u0101\u0002\u0002\u0b0f\u0b10\u0005\u00be`\u0002\u0b10\u0b11",
    "\u0007\u00e6\u0002\u0002\u0b11\u0b12\u0005\u00be`\u0002\u0b12\u00ef",
    "\u0003\u0002\u0002\u0002\u0b13\u0b14\u0007\u0103\u0002\u0002\u0b14\u0b19",
    "\u0005\u00f2z\u0002\u0b15\u0b16\u0007\u0005\u0002\u0002\u0b16\u0b18",
    "\u0005\u00f2z\u0002\u0b17\u0b15\u0003\u0002\u0002\u0002\u0b18\u0b1b",
    "\u0003\u0002\u0002\u0002\u0b19\u0b17\u0003\u0002\u0002\u0002\u0b19\u0b1a",
    "\u0003\u0002\u0002\u0002\u0b1a\u00f1\u0003\u0002\u0002\u0002\u0b1b\u0b19",
    "\u0003\u0002\u0002\u0002\u0b1c\u0b1d\u0005\u0100\u0081\u0002\u0b1d\u0b1e",
    "\u0007\u0017\u0002\u0002\u0b1e\u0b1f\u0005\u00f4{\u0002\u0b1f\u00f3",
    "\u0003\u0002\u0002\u0002\u0b20\u0b4f\u0005\u0100\u0081\u0002\u0b21\u0b22",
    "\u0007\u0003\u0002\u0002\u0b22\u0b23\u0005\u0100\u0081\u0002\u0b23\u0b24",
    "\u0007\u0004\u0002\u0002\u0b24\u0b4f\u0003\u0002\u0002\u0002\u0b25\u0b48",
    "\u0007\u0003\u0002\u0002\u0b26\u0b27\u0007\'\u0002\u0002\u0b27\u0b28",
    "\u0007\u001f\u0002\u0002\u0b28\u0b2d\u0005\u00be`\u0002\u0b29\u0b2a",
    "\u0007\u0005\u0002\u0002\u0b2a\u0b2c\u0005\u00be`\u0002\u0b2b\u0b29",
    "\u0003\u0002\u0002\u0002\u0b2c\u0b2f\u0003\u0002\u0002\u0002\u0b2d\u0b2b",
    "\u0003\u0002\u0002\u0002\u0b2d\u0b2e\u0003\u0002\u0002\u0002\u0b2e\u0b49",
    "\u0003\u0002\u0002\u0002\u0b2f\u0b2d\u0003\u0002\u0002\u0002\u0b30\u0b31",
    "\t%\u0002\u0002\u0b31\u0b32\u0007\u001f\u0002\u0002\u0b32\u0b37\u0005",
    "\u00be`\u0002\u0b33\u0b34\u0007\u0005\u0002\u0002\u0b34\u0b36\u0005",
    "\u00be`\u0002\u0b35\u0b33\u0003\u0002\u0002\u0002\u0b36\u0b39\u0003",
    "\u0002\u0002\u0002\u0b37\u0b35\u0003\u0002\u0002\u0002\u0b37\u0b38\u0003",
    "\u0002\u0002\u0002\u0b38\u0b3b\u0003\u0002\u0002\u0002\u0b39\u0b37\u0003",
    "\u0002\u0002\u0002\u0b3a\u0b30\u0003\u0002\u0002\u0002\u0b3a\u0b3b\u0003",
    "\u0002\u0002\u0002\u0b3b\u0b46\u0003\u0002\u0002\u0002\u0b3c\u0b3d\t",
    "&\u0002\u0002\u0b3d\u0b3e\u0007\u001f\u0002\u0002\u0b3e\u0b43\u0005",
    "Z.\u0002\u0b3f\u0b40\u0007\u0005\u0002\u0002\u0b40\u0b42\u0005Z.\u0002",
    "\u0b41\u0b3f\u0003\u0002\u0002\u0002\u0b42\u0b45\u0003\u0002\u0002\u0002",
    "\u0b43\u0b41\u0003\u0002\u0002\u0002\u0b43\u0b44\u0003\u0002\u0002\u0002",
    "\u0b44\u0b47\u0003\u0002\u0002\u0002\u0b45\u0b43\u0003\u0002\u0002\u0002",
    "\u0b46\u0b3c\u0003\u0002\u0002\u0002\u0b46\u0b47\u0003\u0002\u0002\u0002",
    "\u0b47\u0b49\u0003\u0002\u0002\u0002\u0b48\u0b26\u0003\u0002\u0002\u0002",
    "\u0b48\u0b3a\u0003\u0002\u0002\u0002\u0b49\u0b4b\u0003\u0002\u0002\u0002",
    "\u0b4a\u0b4c\u0005\u00f6|\u0002\u0b4b\u0b4a\u0003\u0002\u0002\u0002",
    "\u0b4b\u0b4c\u0003\u0002\u0002\u0002\u0b4c\u0b4d\u0003\u0002\u0002\u0002",
    "\u0b4d\u0b4f\u0007\u0004\u0002\u0002\u0b4e\u0b20\u0003\u0002\u0002\u0002",
    "\u0b4e\u0b21\u0003\u0002\u0002\u0002\u0b4e\u0b25\u0003\u0002\u0002\u0002",
    "\u0b4f\u00f5\u0003\u0002\u0002\u0002\u0b50\u0b51\u0007\u00b5\u0002\u0002",
    "\u0b51\u0b61\u0005\u00f8}\u0002\u0b52\u0b53\u0007\u00c9\u0002\u0002",
    "\u0b53\u0b61\u0005\u00f8}\u0002\u0b54\u0b55\u0007\u00b5\u0002\u0002",
    "\u0b55\u0b56\u0007\u001b\u0002\u0002\u0b56\u0b57\u0005\u00f8}\u0002",
    "\u0b57\u0b58\u0007\u0012\u0002\u0002\u0b58\u0b59\u0005\u00f8}\u0002",
    "\u0b59\u0b61\u0003\u0002\u0002\u0002\u0b5a\u0b5b\u0007\u00c9\u0002\u0002",
    "\u0b5b\u0b5c\u0007\u001b\u0002\u0002\u0b5c\u0b5d\u0005\u00f8}\u0002",
    "\u0b5d\u0b5e\u0007\u0012\u0002\u0002\u0b5e\u0b5f\u0005\u00f8}\u0002",
    "\u0b5f\u0b61\u0003\u0002\u0002\u0002\u0b60\u0b50\u0003\u0002\u0002\u0002",
    "\u0b60\u0b52\u0003\u0002\u0002\u0002\u0b60\u0b54\u0003\u0002\u0002\u0002",
    "\u0b60\u0b5a\u0003\u0002\u0002\u0002\u0b61\u00f7\u0003\u0002\u0002\u0002",
    "\u0b62\u0b63\u0007\u00f3\u0002\u0002\u0b63\u0b6a\t\'\u0002\u0002\u0b64",
    "\u0b65\u00079\u0002\u0002\u0b65\u0b6a\u0007\u00c8\u0002\u0002\u0b66",
    "\u0b67\u0005\u00be`\u0002\u0b67\u0b68\t\'\u0002\u0002\u0b68\u0b6a\u0003",
    "\u0002\u0002\u0002\u0b69\u0b62\u0003\u0002\u0002\u0002\u0b69\u0b64\u0003",
    "\u0002\u0002\u0002\u0b69\u0b66\u0003\u0002\u0002\u0002\u0b6a\u00f9\u0003",
    "\u0002\u0002\u0002\u0b6b\u0b70\u0005\u00fe\u0080\u0002\u0b6c\u0b6d\u0007",
    "\u0005\u0002\u0002\u0b6d\u0b6f\u0005\u00fe\u0080\u0002\u0b6e\u0b6c\u0003",
    "\u0002\u0002\u0002\u0b6f\u0b72\u0003\u0002\u0002\u0002\u0b70\u0b6e\u0003",
    "\u0002\u0002\u0002\u0b70\u0b71\u0003\u0002\u0002\u0002\u0b71\u00fb\u0003",
    "\u0002\u0002\u0002\u0b72\u0b70\u0003\u0002\u0002\u0002\u0b73\u0b78\u0005",
    "\u00fe\u0080\u0002\u0b74\u0b78\u0007]\u0002\u0002\u0b75\u0b78\u0007",
    "\u0083\u0002\u0002\u0b76\u0b78\u0007\u00c2\u0002\u0002\u0b77\u0b73\u0003",
    "\u0002\u0002\u0002\u0b77\u0b74\u0003\u0002\u0002\u0002\u0b77\u0b75\u0003",
    "\u0002\u0002\u0002\u0b77\u0b76\u0003\u0002\u0002\u0002\u0b78\u00fd\u0003",
    "\u0002\u0002\u0002\u0b79\u0b7e\u0005\u0104\u0083\u0002\u0b7a\u0b7b\u0007",
    "\u0006\u0002\u0002\u0b7b\u0b7d\u0005\u0104\u0083\u0002\u0b7c\u0b7a\u0003",
    "\u0002\u0002\u0002\u0b7d\u0b80\u0003\u0002\u0002\u0002\u0b7e\u0b7c\u0003",
    "\u0002\u0002\u0002\u0b7e\u0b7f\u0003\u0002\u0002\u0002\u0b7f\u00ff\u0003",
    "\u0002\u0002\u0002\u0b80\u0b7e\u0003\u0002\u0002\u0002\u0b81\u0b82\u0005",
    "\u0104\u0083\u0002\u0b82\u0b83\u0005\u0102\u0082\u0002\u0b83\u0101\u0003",
    "\u0002\u0002\u0002\u0b84\u0b85\u0007\u010f\u0002\u0002\u0b85\u0b87\u0005",
    "\u0104\u0083\u0002\u0b86\u0b84\u0003\u0002\u0002\u0002\u0b87\u0b88\u0003",
    "\u0002\u0002\u0002\u0b88\u0b86\u0003\u0002\u0002\u0002\u0b88\u0b89\u0003",
    "\u0002\u0002\u0002\u0b89\u0b8c\u0003\u0002\u0002\u0002\u0b8a\u0b8c\u0003",
    "\u0002\u0002\u0002\u0b8b\u0b86\u0003\u0002\u0002\u0002\u0b8b\u0b8a\u0003",
    "\u0002\u0002\u0002\u0b8c\u0103\u0003\u0002\u0002\u0002\u0b8d\u0b91\u0005",
    "\u0106\u0084\u0002\u0b8e\u0b8f\u0006\u0083\u0012\u0002\u0b8f\u0b91\u0005",
    "\u0110\u0089\u0002\u0b90\u0b8d\u0003\u0002\u0002\u0002\u0b90\u0b8e\u0003",
    "\u0002\u0002\u0002\u0b91\u0105\u0003\u0002\u0002\u0002\u0b92\u0b99\u0007",
    "\u0123\u0002\u0002\u0b93\u0b99\u0005\u0108\u0085\u0002\u0b94\u0b95\u0006",
    "\u0084\u0013\u0002\u0b95\u0b99\u0005\u010e\u0088\u0002\u0b96\u0b97\u0006",
    "\u0084\u0014\u0002\u0b97\u0b99\u0005\u0112\u008a\u0002\u0b98\u0b92\u0003",
    "\u0002\u0002\u0002\u0b98\u0b93\u0003\u0002\u0002\u0002\u0b98\u0b94\u0003",
    "\u0002\u0002\u0002\u0b98\u0b96\u0003\u0002\u0002\u0002\u0b99\u0107\u0003",
    "\u0002\u0002\u0002\u0b9a\u0b9b\u0007\u0124\u0002\u0002\u0b9b\u0109\u0003",
    "\u0002\u0002\u0002\u0b9c\u0b9e\u0006\u0086\u0015\u0002\u0b9d\u0b9f\u0007",
    "\u010f\u0002\u0002\u0b9e\u0b9d\u0003\u0002\u0002\u0002\u0b9e\u0b9f\u0003",
    "\u0002\u0002\u0002\u0b9f\u0ba0\u0003\u0002\u0002\u0002\u0ba0\u0bc8\u0007",
    "\u011e\u0002\u0002\u0ba1\u0ba3\u0006\u0086\u0016\u0002\u0ba2\u0ba4\u0007",
    "\u010f\u0002\u0002\u0ba3\u0ba2\u0003\u0002\u0002\u0002\u0ba3\u0ba4\u0003",
    "\u0002\u0002\u0002\u0ba4\u0ba5\u0003\u0002\u0002\u0002\u0ba5\u0bc8\u0007",
    "\u011f\u0002\u0002\u0ba6\u0ba8\u0006\u0086\u0017\u0002\u0ba7\u0ba9\u0007",
    "\u010f\u0002\u0002\u0ba8\u0ba7\u0003\u0002\u0002\u0002\u0ba8\u0ba9\u0003",
    "\u0002\u0002\u0002\u0ba9\u0baa\u0003\u0002\u0002\u0002\u0baa\u0bc8\t",
    "(\u0002\u0002\u0bab\u0bad\u0007\u010f\u0002\u0002\u0bac\u0bab\u0003",
    "\u0002\u0002\u0002\u0bac\u0bad\u0003\u0002\u0002\u0002\u0bad\u0bae\u0003",
    "\u0002\u0002\u0002\u0bae\u0bc8\u0007\u011d\u0002\u0002\u0baf\u0bb1\u0007",
    "\u010f\u0002\u0002\u0bb0\u0baf\u0003\u0002\u0002\u0002\u0bb0\u0bb1\u0003",
    "\u0002\u0002\u0002\u0bb1\u0bb2\u0003\u0002\u0002\u0002\u0bb2\u0bc8\u0007",
    "\u011a\u0002\u0002\u0bb3\u0bb5\u0007\u010f\u0002\u0002\u0bb4\u0bb3\u0003",
    "\u0002\u0002\u0002\u0bb4\u0bb5\u0003\u0002\u0002\u0002\u0bb5\u0bb6\u0003",
    "\u0002\u0002\u0002\u0bb6\u0bc8\u0007\u011b\u0002\u0002\u0bb7\u0bb9\u0007",
    "\u010f\u0002\u0002\u0bb8\u0bb7\u0003\u0002\u0002\u0002\u0bb8\u0bb9\u0003",
    "\u0002\u0002\u0002\u0bb9\u0bba\u0003\u0002\u0002\u0002\u0bba\u0bc8\u0007",
    "\u011c\u0002\u0002\u0bbb\u0bbd\u0007\u010f\u0002\u0002\u0bbc\u0bbb\u0003",
    "\u0002\u0002\u0002\u0bbc\u0bbd\u0003\u0002\u0002\u0002\u0bbd\u0bbe\u0003",
    "\u0002\u0002\u0002\u0bbe\u0bc8\u0007\u0121\u0002\u0002\u0bbf\u0bc1\u0007",
    "\u010f\u0002\u0002\u0bc0\u0bbf\u0003\u0002\u0002\u0002\u0bc0\u0bc1\u0003",
    "\u0002\u0002\u0002\u0bc1\u0bc2\u0003\u0002\u0002\u0002\u0bc2\u0bc8\u0007",
    "\u0120\u0002\u0002\u0bc3\u0bc5\u0007\u010f\u0002\u0002\u0bc4\u0bc3\u0003",
    "\u0002\u0002\u0002\u0bc4\u0bc5\u0003\u0002\u0002\u0002\u0bc5\u0bc6\u0003",
    "\u0002\u0002\u0002\u0bc6\u0bc8\u0007\u0122\u0002\u0002\u0bc7\u0b9c\u0003",
    "\u0002\u0002\u0002\u0bc7\u0ba1\u0003\u0002\u0002\u0002\u0bc7\u0ba6\u0003",
    "\u0002\u0002\u0002\u0bc7\u0bac\u0003\u0002\u0002\u0002\u0bc7\u0bb0\u0003",
    "\u0002\u0002\u0002\u0bc7\u0bb4\u0003\u0002\u0002\u0002\u0bc7\u0bb8\u0003",
    "\u0002\u0002\u0002\u0bc7\u0bbc\u0003\u0002\u0002\u0002\u0bc7\u0bc0\u0003",
    "\u0002\u0002\u0002\u0bc7\u0bc4\u0003\u0002\u0002\u0002\u0bc8\u010b\u0003",
    "\u0002\u0002\u0002\u0bc9\u0bca\u0007\u00f1\u0002\u0002\u0bca\u0bd1\u0005",
    "\u00e0q\u0002\u0bcb\u0bd1\u0005\"\u0012\u0002\u0bcc\u0bd1\u0005\u00de",
    "p\u0002\u0bcd\u0bce\t)\u0002\u0002\u0bce\u0bcf\u0007\u0097\u0002\u0002",
    "\u0bcf\u0bd1\u0007\u0098\u0002\u0002\u0bd0\u0bc9\u0003\u0002\u0002\u0002",
    "\u0bd0\u0bcb\u0003\u0002\u0002\u0002\u0bd0\u0bcc\u0003\u0002\u0002\u0002",
    "\u0bd0\u0bcd\u0003\u0002\u0002\u0002\u0bd1\u010d\u0003\u0002\u0002\u0002",
    "\u0bd2\u0bd3\t*\u0002\u0002\u0bd3\u010f\u0003\u0002\u0002\u0002\u0bd4",
    "\u0bd5\t+\u0002\u0002\u0bd5\u0111\u0003\u0002\u0002\u0002\u0bd6\u0bd7",
    "\t,\u0002\u0002\u0bd7\u0113\u0003\u0002\u0002\u0002\u018d\u0119\u011c",
    "\u011e\u0134\u0139\u0141\u0149\u014b\u015f\u0163\u0169\u016c\u016f\u0176",
    "\u017b\u017e\u0185\u0191\u019a\u019c\u01a0\u01a3\u01aa\u01b5\u01b7\u01bf",
    "\u01c4\u01c7\u01cd\u01d8\u0218\u0221\u0225\u022b\u022f\u0234\u023a\u0246",
    "\u024e\u0254\u0261\u0266\u0276\u027d\u0281\u0287\u0296\u029a\u02a0\u02a6",
    "\u02a9\u02ac\u02b2\u02b6\u02be\u02c0\u02c9\u02cc\u02d5\u02da\u02e0\u02e7",
    "\u02ea\u02f0\u02fb\u02fe\u0302\u0307\u030c\u0313\u0316\u0319\u0320\u0325",
    "\u032e\u0336\u033c\u033f\u0342\u0348\u034c\u0350\u0354\u0356\u035e\u0366",
    "\u036c\u0372\u0375\u0379\u037c\u0380\u039c\u039f\u03a3\u03a9\u03ac\u03af",
    "\u03b5\u03bd\u03c2\u03c8\u03ce\u03da\u03dd\u03e4\u03f5\u03fe\u0401\u0407",
    "\u0410\u0417\u041a\u0424\u0428\u042f\u04a3\u04ab\u04b3\u04bc\u04c6\u04ca",
    "\u04cd\u04d3\u04d9\u04e5\u04f1\u04f6\u04ff\u0507\u050e\u0510\u0515\u0519",
    "\u051e\u0523\u0528\u052b\u0530\u0534\u0539\u053b\u053f\u0548\u0550\u0559",
    "\u0560\u0569\u056e\u0571\u0584\u0586\u058f\u0596\u0599\u05a0\u05a4\u05aa",
    "\u05b2\u05bd\u05c8\u05cf\u05d5\u05e2\u05e9\u05f0\u05fc\u0604\u060a\u060d",
    "\u0616\u0619\u0622\u0625\u062e\u0631\u063a\u063d\u0640\u0645\u0647\u0653",
    "\u065a\u0661\u0664\u0666\u0672\u0676\u067a\u0680\u0684\u068c\u0690\u0693",
    "\u0696\u0699\u069d\u06a1\u06a4\u06a8\u06ad\u06b1\u06b4\u06b7\u06ba\u06bc",
    "\u06c8\u06cb\u06cf\u06d9\u06dd\u06df\u06e2\u06e6\u06ec\u06f0\u06fb\u0705",
    "\u0711\u0720\u0725\u072c\u073c\u0741\u074e\u0753\u075b\u0761\u0765\u076e",
    "\u077d\u0782\u078e\u0793\u079b\u079e\u07a2\u07b0\u07bd\u07c2\u07c6\u07c9",
    "\u07ce\u07d7\u07da\u07df\u07e6\u07e9\u07f1\u07f8\u07ff\u0802\u0807\u080a",
    "\u080f\u0813\u0816\u0819\u081f\u0824\u0829\u083b\u083d\u0840\u084b\u0854",
    "\u085b\u0863\u086a\u086e\u0876\u087e\u0884\u088c\u0898\u089b\u08a1\u08a5",
    "\u08a7\u08b0\u08bc\u08be\u08c5\u08cc\u08d2\u08d8\u08da\u08e1\u08e9\u08ef",
    "\u08f5\u08f9\u08fb\u0902\u090b\u0918\u091d\u0921\u092f\u0931\u0939\u093b",
    "\u093f\u0947\u0950\u0956\u095e\u0963\u096f\u0974\u0977\u097d\u0981\u0986",
    "\u098b\u0990\u0996\u09ab\u09ad\u09b6\u09ba\u09c3\u09c7\u09d9\u09dc\u09e4",
    "\u09ed\u0a04\u0a0f\u0a16\u0a19\u0a22\u0a26\u0a32\u0a4b\u0a52\u0a55\u0a64",
    "\u0a68\u0a72\u0a74\u0a81\u0a83\u0a90\u0a94\u0a9b\u0aa0\u0aa8\u0aac\u0ab1",
    "\u0ac2\u0ac6\u0acf\u0ad3\u0ad5\u0adc\u0ae3\u0ae6\u0ae9\u0af0\u0af7\u0afa",
    "\u0b01\u0b09\u0b0c\u0b19\u0b2d\u0b37\u0b3a\u0b43\u0b46\u0b48\u0b4b\u0b4e",
    "\u0b60\u0b69\u0b70\u0b77\u0b7e\u0b88\u0b8b\u0b90\u0b98\u0b9e\u0ba3\u0ba8",
    "\u0bac\u0bb0\u0bb4\u0bb8\u0bbc\u0bc0\u0bc4\u0bc7\u0bd0"].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, "'('", "')'", "','", "'.'", "'/*+'", "'*/'", 
                     "'->'", "'['", "']'", "':'", "'ADD'", "'AFTER'", "'ALL'", 
                     "'ALTER'", "'ANALYZE'", "'AND'", "'ANTI'", "'ANY'", 
                     "'ARCHIVE'", "'ARRAY'", "'AS'", "'ASC'", "'AT'", "'AUTHORIZATION'", 
                     "'BETWEEN'", "'BOTH'", "'BUCKET'", "'BUCKETS'", "'BY'", 
                     "'CACHE'", "'CASCADE'", "'CASE'", "'CAST'", "'CHANGE'", 
                     "'CHECK'", "'CLEAR'", "'CLUSTER'", "'CLUSTERED'", "'CODEGEN'", 
                     "'COLLATE'", "'COLLECTION'", "'COLUMN'", "'COLUMNS'", 
                     "'COMMENT'", "'COMMIT'", "'COMPACT'", "'COMPACTIONS'", 
                     "'COMPUTE'", "'CONCATENATE'", "'CONSTRAINT'", "'COST'", 
                     "'CREATE'", "'CROSS'", "'CUBE'", "'CURRENT'", "'CURRENT_DATE'", 
                     "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", 
                     "'DATA'", "'DATABASE'", null, "'DBPROPERTIES'", "'DEFINED'", 
                     "'DELETE'", "'DELIMITED'", "'DESC'", "'DESCRIBE'", 
                     "'DFS'", "'DIRECTORIES'", "'DIRECTORY'", "'DISTINCT'", 
                     "'DISTRIBUTE'", "'DIV'", "'DROP'", "'ELSE'", "'END'", 
                     "'ESCAPE'", "'ESCAPED'", "'EXCEPT'", "'EXCHANGE'", 
                     "'EXISTS'", "'EXPLAIN'", "'EXPORT'", "'EXTENDED'", 
                     "'EXTERNAL'", "'EXTRACT'", "'FALSE'", "'FETCH'", "'FIELDS'", 
                     "'FILTER'", "'FILEFORMAT'", "'FIRST'", "'FOLLOWING'", 
                     "'FOR'", "'FOREIGN'", "'FORMAT'", "'FORMATTED'", "'FROM'", 
                     "'FULL'", "'FUNCTION'", "'FUNCTIONS'", "'GLOBAL'", 
                     "'GRANT'", "'GROUP'", "'GROUPING'", "'HAVING'", "'IF'", 
                     "'IGNORE'", "'IMPORT'", "'IN'", "'INDEX'", "'INDEXES'", 
                     "'INNER'", "'INPATH'", "'INPUTFORMAT'", "'INSERT'", 
                     "'INTERSECT'", "'INTERVAL'", "'INTO'", "'IS'", "'ITEMS'", 
                     "'JOIN'", "'KEYS'", "'LAST'", "'LATERAL'", "'LAZY'", 
                     "'LEADING'", "'LEFT'", "'LIKE'", "'LIMIT'", "'LINES'", 
                     "'LIST'", "'LOAD'", "'LOCAL'", "'LOCATION'", "'LOCK'", 
                     "'LOCKS'", "'LOGICAL'", "'MACRO'", "'MAP'", "'MATCHED'", 
                     "'MERGE'", "'MSCK'", "'NAMESPACE'", "'NAMESPACES'", 
                     "'NATURAL'", "'NO'", null, "'NULL'", "'NULLS'", "'OF'", 
                     "'ON'", "'ONLY'", "'OPTION'", "'OPTIONS'", "'OR'", 
                     "'ORDER'", "'OUT'", "'OUTER'", "'OUTPUTFORMAT'", "'OVER'", 
                     "'OVERLAPS'", "'OVERLAY'", "'OVERWRITE'", "'PARTITION'", 
                     "'PARTITIONED'", "'PARTITIONS'", "'PERCENT'", "'PIVOT'", 
                     "'PLACING'", "'POSITION'", "'PRECEDING'", "'PRIMARY'", 
                     "'PRINCIPALS'", "'PROPERTIES'", "'PURGE'", "'QUERY'", 
                     "'RANGE'", "'RECORDREADER'", "'RECORDWRITER'", "'RECOVER'", 
                     "'REDUCE'", "'REFERENCES'", "'REFRESH'", "'RENAME'", 
                     "'REPAIR'", "'REPLACE'", "'RESET'", "'RESTRICT'", "'REVOKE'", 
                     "'RIGHT'", null, "'ROLE'", "'ROLES'", "'ROLLBACK'", 
                     "'ROLLUP'", "'ROW'", "'ROWS'", "'SCHEMA'", "'SELECT'", 
                     "'SEMI'", "'SEPARATED'", "'SERDE'", "'SERDEPROPERTIES'", 
                     "'SESSION_USER'", "'SET'", "'MINUS'", "'SETS'", "'SHOW'", 
                     "'SKEWED'", "'SOME'", "'SORT'", "'SORTED'", "'START'", 
                     "'STATISTICS'", "'STORED'", "'STRATIFY'", "'STRUCT'", 
                     "'SUBSTR'", "'SUBSTRING'", "'TABLE'", "'TABLES'", "'TABLESAMPLE'", 
                     "'TBLPROPERTIES'", null, "'TERMINATED'", "'THEN'", 
                     "'TIME'", "'TO'", "'TOUCH'", "'TRAILING'", "'TRANSACTION'", 
                     "'TRANSACTIONS'", "'TRANSFORM'", "'TRIM'", "'TRUE'", 
                     "'TRUNCATE'", "'TYPE'", "'UNARCHIVE'", "'UNBOUNDED'", 
                     "'UNCACHE'", "'UNION'", "'UNIQUE'", "'UNKNOWN'", "'UNLOCK'", 
                     "'UNSET'", "'UPDATE'", "'USE'", "'USER'", "'USING'", 
                     "'VALUES'", "'VIEW'", "'VIEWS'", "'WHEN'", "'WHERE'", 
                     "'WINDOW'", "'WITH'", "'ZONE'", null, "'<=>'", "'<>'", 
                     "'!='", "'<'", null, "'>'", null, "'+'", "'-'", "'*'", 
                     "'/'", "'%'", "'~'", "'&'", "'|'", "'||'", "'^'", "';'" ];

var symbolicNames = [ null, null, null, null, null, null, null, null, null, 
                      null, null, "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", 
                      "AND", "ANTI", "ANY", "ARCHIVE", "ARRAY", "AS", "ASC", 
                      "AT", "AUTHORIZATION", "BETWEEN", "BOTH", "BUCKET", 
                      "BUCKETS", "BY", "CACHE", "CASCADE", "CASE", "CAST", 
                      "CHANGE", "CHECK", "CLEAR", "CLUSTER", "CLUSTERED", 
                      "CODEGEN", "COLLATE", "COLLECTION", "COLUMN", "COLUMNS", 
                      "COMMENT", "COMMIT", "COMPACT", "COMPACTIONS", "COMPUTE", 
                      "CONCATENATE", "CONSTRAINT", "COST", "CREATE", "CROSS", 
                      "CUBE", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", 
                      "CURRENT_TIMESTAMP", "CURRENT_USER", "DATA", "DATABASE", 
                      "DATABASES", "DBPROPERTIES", "DEFINED", "DELETE", 
                      "DELIMITED", "DESC", "DESCRIBE", "DFS", "DIRECTORIES", 
                      "DIRECTORY", "DISTINCT", "DISTRIBUTE", "DIV", "DROP", 
                      "ELSE", "END", "ESCAPE", "ESCAPED", "EXCEPT", "EXCHANGE", 
                      "EXISTS", "EXPLAIN", "EXPORT", "EXTENDED", "EXTERNAL", 
                      "EXTRACT", "FALSE", "FETCH", "FIELDS", "FILTER", "FILEFORMAT", 
                      "FIRST", "FOLLOWING", "FOR", "FOREIGN", "FORMAT", 
                      "FORMATTED", "FROM", "FULL", "FUNCTION", "FUNCTIONS", 
                      "GLOBAL", "GRANT", "GROUP", "GROUPING", "HAVING", 
                      "IF", "IGNORE", "IMPORT", "IN", "INDEX", "INDEXES", 
                      "INNER", "INPATH", "INPUTFORMAT", "INSERT", "INTERSECT", 
                      "INTERVAL", "INTO", "IS", "ITEMS", "JOIN", "KEYS", 
                      "LAST", "LATERAL", "LAZY", "LEADING", "LEFT", "LIKE", 
                      "LIMIT", "LINES", "LIST", "LOAD", "LOCAL", "LOCATION", 
                      "LOCK", "LOCKS", "LOGICAL", "MACRO", "MAP", "MATCHED", 
                      "MERGE", "MSCK", "NAMESPACE", "NAMESPACES", "NATURAL", 
                      "NO", "NOT", "NULL", "NULLS", "OF", "ON", "ONLY", 
                      "OPTION", "OPTIONS", "OR", "ORDER", "OUT", "OUTER", 
                      "OUTPUTFORMAT", "OVER", "OVERLAPS", "OVERLAY", "OVERWRITE", 
                      "PARTITION", "PARTITIONED", "PARTITIONS", "PERCENTLIT", 
                      "PIVOT", "PLACING", "POSITION", "PRECEDING", "PRIMARY", 
                      "PRINCIPALS", "PROPERTIES", "PURGE", "QUERY", "RANGE", 
                      "RECORDREADER", "RECORDWRITER", "RECOVER", "REDUCE", 
                      "REFERENCES", "REFRESH", "RENAME", "REPAIR", "REPLACE", 
                      "RESET", "RESTRICT", "REVOKE", "RIGHT", "RLIKE", "ROLE", 
                      "ROLES", "ROLLBACK", "ROLLUP", "ROW", "ROWS", "SCHEMA", 
                      "SELECT", "SEMI", "SEPARATED", "SERDE", "SERDEPROPERTIES", 
                      "SESSION_USER", "SET", "SETMINUS", "SETS", "SHOW", 
                      "SKEWED", "SOME", "SORT", "SORTED", "START", "STATISTICS", 
                      "STORED", "STRATIFY", "STRUCT", "SUBSTR", "SUBSTRING", 
                      "TABLE", "TABLES", "TABLESAMPLE", "TBLPROPERTIES", 
                      "TEMPORARY", "TERMINATED", "THEN", "TIME", "TO", "TOUCH", 
                      "TRAILING", "TRANSACTION", "TRANSACTIONS", "TRANSFORM", 
                      "TRIM", "TRUE", "TRUNCATE", "TYPE", "UNARCHIVE", "UNBOUNDED", 
                      "UNCACHE", "UNION", "UNIQUE", "UNKNOWN", "UNLOCK", 
                      "UNSET", "UPDATE", "USE", "USER", "USING", "VALUES", 
                      "VIEW", "VIEWS", "WHEN", "WHERE", "WINDOW", "WITH", 
                      "ZONE", "EQ", "NSEQ", "NEQ", "NEQJ", "LT", "LTE", 
                      "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", 
                      "PERCENT", "TILDE", "AMPERSAND", "PIPE", "CONCAT_PIPE", 
                      "HAT", "SEMICOLON", "STRING", "BIGINT_LITERAL", "SMALLINT_LITERAL", 
                      "TINYINT_LITERAL", "INTEGER_VALUE", "EXPONENT_VALUE", 
                      "DECIMAL_VALUE", "FLOAT_LITERAL", "DOUBLE_LITERAL", 
                      "BIGDECIMAL_LITERAL", "IDENTIFIER", "BACKQUOTED_IDENTIFIER", 
                      "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", "UNRECOGNIZED" ];

var ruleNames =  [ "program", "singleStatement", "emptyStatement", "singleExpression", 
                   "singleTableIdentifier", "singleMultipartIdentifier", 
                   "singleDataType", "singleTableSchema", "statement", "configKey", 
                   "unsupportedHiveNativeCommands", "createTableHeader", 
                   "replaceTableHeader", "bucketSpec", "skewSpec", "locationSpec", 
                   "commentSpec", "query", "insertInto", "partitionSpecLocation", 
                   "partitionSpec", "partitionVal", "namespace", "describeFuncName", 
                   "describeColName", "ctes", "namedQuery", "tableProvider", 
                   "createTableClauses", "tablePropertyList", "tableProperty", 
                   "tablePropertyKey", "tablePropertyValue", "constantList", 
                   "nestedConstantList", "createFileFormat", "fileFormat", 
                   "storageHandler", "resource", "dmlStatementNoWith", "queryOrganization", 
                   "multiInsertQueryBody", "queryTerm", "queryPrimary", 
                   "sortItem", "fromStatement", "fromStatementBody", "querySpecification", 
                   "transformClause", "selectClause", "setClause", "matchedClause", 
                   "notMatchedClause", "matchedAction", "notMatchedAction", 
                   "assignmentList", "assignment", "whereClause", "havingClause", 
                   "hint", "hintStatement", "fromClause", "aggregationClause", 
                   "groupingSet", "pivotClause", "pivotColumn", "pivotValue", 
                   "lateralView", "setQuantifier", "relation", "joinRelation", 
                   "joinType", "joinCriteria", "sample", "sampleMethod", 
                   "identifierList", "identifierSeq", "orderedIdentifierList", 
                   "orderedIdentifier", "identifierCommentList", "identifierComment", 
                   "relationPrimary", "inlineTable", "functionTable", "tableAlias", 
                   "rowFormat", "multipartIdentifierList", "multipartIdentifier", 
                   "tableIdentifier", "namedExpression", "namedExpressionSeq", 
                   "transformList", "transform", "transformArgument", "expression", 
                   "booleanExpression", "predicate", "valueExpression", 
                   "primaryExpression", "constant", "comparisonOperator", 
                   "arithmeticOperator", "predicateOperator", "booleanValue", 
                   "interval", "errorCapturingMultiUnitsInterval", "multiUnitsInterval", 
                   "errorCapturingUnitToUnitInterval", "unitToUnitInterval", 
                   "intervalValue", "colPosition", "dataType", "qualifiedColTypeWithPositionList", 
                   "qualifiedColTypeWithPosition", "colTypeList", "colType", 
                   "complexColTypeList", "complexColType", "whenClause", 
                   "windowClause", "namedWindow", "windowSpec", "windowFrame", 
                   "frameBound", "qualifiedNameList", "functionName", "qualifiedName", 
                   "errorCapturingIdentifier", "errorCapturingIdentifierExtra", 
                   "identifier", "strictIdentifier", "quotedIdentifier", 
                   "number", "alterColumnAction", "ansiNonReserved", "strictNonReserved", 
                   "nonReserved" ];

function SparkSqlParser (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;

	    /**
	    * When false, INTERSECT is given the greater precedence over the other set
	    * operations (UNION, EXCEPT and MINUS) as per the SQL standard.
	    */
	    //  public boolean legacy_setops_precedence_enbled = false;
	    /**
	    * When false, a literal with an exponent would be converted into
	    * double type rather than decimal type.
	    */
	    //  public boolean legacy_exponent_literal_as_decimal_enabled = false;
	    global.legacy_exponent_literal_as_decimal_enabled = false;
	    /**
	    * When true, the behavior of keywords follows ANSI SQL standard.
	    */
	    //  public boolean SQL_standard_keyword_behavior = false;

	    global.legacy_setops_precedence_enbled = false;
	    global.legacy_exponent_literal_as_decimal_enabled = false;
	    global.SQL_standard_keyword_behavior = false;

    return this;
}

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

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

SparkSqlParser.EOF = antlr4.Token.EOF;
SparkSqlParser.T__0 = 1;
SparkSqlParser.T__1 = 2;
SparkSqlParser.T__2 = 3;
SparkSqlParser.T__3 = 4;
SparkSqlParser.T__4 = 5;
SparkSqlParser.T__5 = 6;
SparkSqlParser.T__6 = 7;
SparkSqlParser.T__7 = 8;
SparkSqlParser.T__8 = 9;
SparkSqlParser.T__9 = 10;
SparkSqlParser.ADD = 11;
SparkSqlParser.AFTER = 12;
SparkSqlParser.ALL = 13;
SparkSqlParser.ALTER = 14;
SparkSqlParser.ANALYZE = 15;
SparkSqlParser.AND = 16;
SparkSqlParser.ANTI = 17;
SparkSqlParser.ANY = 18;
SparkSqlParser.ARCHIVE = 19;
SparkSqlParser.ARRAY = 20;
SparkSqlParser.AS = 21;
SparkSqlParser.ASC = 22;
SparkSqlParser.AT = 23;
SparkSqlParser.AUTHORIZATION = 24;
SparkSqlParser.BETWEEN = 25;
SparkSqlParser.BOTH = 26;
SparkSqlParser.BUCKET = 27;
SparkSqlParser.BUCKETS = 28;
SparkSqlParser.BY = 29;
SparkSqlParser.CACHE = 30;
SparkSqlParser.CASCADE = 31;
SparkSqlParser.CASE = 32;
SparkSqlParser.CAST = 33;
SparkSqlParser.CHANGE = 34;
SparkSqlParser.CHECK = 35;
SparkSqlParser.CLEAR = 36;
SparkSqlParser.CLUSTER = 37;
SparkSqlParser.CLUSTERED = 38;
SparkSqlParser.CODEGEN = 39;
SparkSqlParser.COLLATE = 40;
SparkSqlParser.COLLECTION = 41;
SparkSqlParser.COLUMN = 42;
SparkSqlParser.COLUMNS = 43;
SparkSqlParser.COMMENT = 44;
SparkSqlParser.COMMIT = 45;
SparkSqlParser.COMPACT = 46;
SparkSqlParser.COMPACTIONS = 47;
SparkSqlParser.COMPUTE = 48;
SparkSqlParser.CONCATENATE = 49;
SparkSqlParser.CONSTRAINT = 50;
SparkSqlParser.COST = 51;
SparkSqlParser.CREATE = 52;
SparkSqlParser.CROSS = 53;
SparkSqlParser.CUBE = 54;
SparkSqlParser.CURRENT = 55;
SparkSqlParser.CURRENT_DATE = 56;
SparkSqlParser.CURRENT_TIME = 57;
SparkSqlParser.CURRENT_TIMESTAMP = 58;
SparkSqlParser.CURRENT_USER = 59;
SparkSqlParser.DATA = 60;
SparkSqlParser.DATABASE = 61;
SparkSqlParser.DATABASES = 62;
SparkSqlParser.DBPROPERTIES = 63;
SparkSqlParser.DEFINED = 64;
SparkSqlParser.DELETE = 65;
SparkSqlParser.DELIMITED = 66;
SparkSqlParser.DESC = 67;
SparkSqlParser.DESCRIBE = 68;
SparkSqlParser.DFS = 69;
SparkSqlParser.DIRECTORIES = 70;
SparkSqlParser.DIRECTORY = 71;
SparkSqlParser.DISTINCT = 72;
SparkSqlParser.DISTRIBUTE = 73;
SparkSqlParser.DIV = 74;
SparkSqlParser.DROP = 75;
SparkSqlParser.ELSE = 76;
SparkSqlParser.END = 77;
SparkSqlParser.ESCAPE = 78;
SparkSqlParser.ESCAPED = 79;
SparkSqlParser.EXCEPT = 80;
SparkSqlParser.EXCHANGE = 81;
SparkSqlParser.EXISTS = 82;
SparkSqlParser.EXPLAIN = 83;
SparkSqlParser.EXPORT = 84;
SparkSqlParser.EXTENDED = 85;
SparkSqlParser.EXTERNAL = 86;
SparkSqlParser.EXTRACT = 87;
SparkSqlParser.FALSE = 88;
SparkSqlParser.FETCH = 89;
SparkSqlParser.FIELDS = 90;
SparkSqlParser.FILTER = 91;
SparkSqlParser.FILEFORMAT = 92;
SparkSqlParser.FIRST = 93;
SparkSqlParser.FOLLOWING = 94;
SparkSqlParser.FOR = 95;
SparkSqlParser.FOREIGN = 96;
SparkSqlParser.FORMAT = 97;
SparkSqlParser.FORMATTED = 98;
SparkSqlParser.FROM = 99;
SparkSqlParser.FULL = 100;
SparkSqlParser.FUNCTION = 101;
SparkSqlParser.FUNCTIONS = 102;
SparkSqlParser.GLOBAL = 103;
SparkSqlParser.GRANT = 104;
SparkSqlParser.GROUP = 105;
SparkSqlParser.GROUPING = 106;
SparkSqlParser.HAVING = 107;
SparkSqlParser.IF = 108;
SparkSqlParser.IGNORE = 109;
SparkSqlParser.IMPORT = 110;
SparkSqlParser.IN = 111;
SparkSqlParser.INDEX = 112;
SparkSqlParser.INDEXES = 113;
SparkSqlParser.INNER = 114;
SparkSqlParser.INPATH = 115;
SparkSqlParser.INPUTFORMAT = 116;
SparkSqlParser.INSERT = 117;
SparkSqlParser.INTERSECT = 118;
SparkSqlParser.INTERVAL = 119;
SparkSqlParser.INTO = 120;
SparkSqlParser.IS = 121;
SparkSqlParser.ITEMS = 122;
SparkSqlParser.JOIN = 123;
SparkSqlParser.KEYS = 124;
SparkSqlParser.LAST = 125;
SparkSqlParser.LATERAL = 126;
SparkSqlParser.LAZY = 127;
SparkSqlParser.LEADING = 128;
SparkSqlParser.LEFT = 129;
SparkSqlParser.LIKE = 130;
SparkSqlParser.LIMIT = 131;
SparkSqlParser.LINES = 132;
SparkSqlParser.LIST = 133;
SparkSqlParser.LOAD = 134;
SparkSqlParser.LOCAL = 135;
SparkSqlParser.LOCATION = 136;
SparkSqlParser.LOCK = 137;
SparkSqlParser.LOCKS = 138;
SparkSqlParser.LOGICAL = 139;
SparkSqlParser.MACRO = 140;
SparkSqlParser.MAP = 141;
SparkSqlParser.MATCHED = 142;
SparkSqlParser.MERGE = 143;
SparkSqlParser.MSCK = 144;
SparkSqlParser.NAMESPACE = 145;
SparkSqlParser.NAMESPACES = 146;
SparkSqlParser.NATURAL = 147;
SparkSqlParser.NO = 148;
SparkSqlParser.NOT = 149;
SparkSqlParser.NULL = 150;
SparkSqlParser.NULLS = 151;
SparkSqlParser.OF = 152;
SparkSqlParser.ON = 153;
SparkSqlParser.ONLY = 154;
SparkSqlParser.OPTION = 155;
SparkSqlParser.OPTIONS = 156;
SparkSqlParser.OR = 157;
SparkSqlParser.ORDER = 158;
SparkSqlParser.OUT = 159;
SparkSqlParser.OUTER = 160;
SparkSqlParser.OUTPUTFORMAT = 161;
SparkSqlParser.OVER = 162;
SparkSqlParser.OVERLAPS = 163;
SparkSqlParser.OVERLAY = 164;
SparkSqlParser.OVERWRITE = 165;
SparkSqlParser.PARTITION = 166;
SparkSqlParser.PARTITIONED = 167;
SparkSqlParser.PARTITIONS = 168;
SparkSqlParser.PERCENTLIT = 169;
SparkSqlParser.PIVOT = 170;
SparkSqlParser.PLACING = 171;
SparkSqlParser.POSITION = 172;
SparkSqlParser.PRECEDING = 173;
SparkSqlParser.PRIMARY = 174;
SparkSqlParser.PRINCIPALS = 175;
SparkSqlParser.PROPERTIES = 176;
SparkSqlParser.PURGE = 177;
SparkSqlParser.QUERY = 178;
SparkSqlParser.RANGE = 179;
SparkSqlParser.RECORDREADER = 180;
SparkSqlParser.RECORDWRITER = 181;
SparkSqlParser.RECOVER = 182;
SparkSqlParser.REDUCE = 183;
SparkSqlParser.REFERENCES = 184;
SparkSqlParser.REFRESH = 185;
SparkSqlParser.RENAME = 186;
SparkSqlParser.REPAIR = 187;
SparkSqlParser.REPLACE = 188;
SparkSqlParser.RESET = 189;
SparkSqlParser.RESTRICT = 190;
SparkSqlParser.REVOKE = 191;
SparkSqlParser.RIGHT = 192;
SparkSqlParser.RLIKE = 193;
SparkSqlParser.ROLE = 194;
SparkSqlParser.ROLES = 195;
SparkSqlParser.ROLLBACK = 196;
SparkSqlParser.ROLLUP = 197;
SparkSqlParser.ROW = 198;
SparkSqlParser.ROWS = 199;
SparkSqlParser.SCHEMA = 200;
SparkSqlParser.SELECT = 201;
SparkSqlParser.SEMI = 202;
SparkSqlParser.SEPARATED = 203;
SparkSqlParser.SERDE = 204;
SparkSqlParser.SERDEPROPERTIES = 205;
SparkSqlParser.SESSION_USER = 206;
SparkSqlParser.SET = 207;
SparkSqlParser.SETMINUS = 208;
SparkSqlParser.SETS = 209;
SparkSqlParser.SHOW = 210;
SparkSqlParser.SKEWED = 211;
SparkSqlParser.SOME = 212;
SparkSqlParser.SORT = 213;
SparkSqlParser.SORTED = 214;
SparkSqlParser.START = 215;
SparkSqlParser.STATISTICS = 216;
SparkSqlParser.STORED = 217;
SparkSqlParser.STRATIFY = 218;
SparkSqlParser.STRUCT = 219;
SparkSqlParser.SUBSTR = 220;
SparkSqlParser.SUBSTRING = 221;
SparkSqlParser.TABLE = 222;
SparkSqlParser.TABLES = 223;
SparkSqlParser.TABLESAMPLE = 224;
SparkSqlParser.TBLPROPERTIES = 225;
SparkSqlParser.TEMPORARY = 226;
SparkSqlParser.TERMINATED = 227;
SparkSqlParser.THEN = 228;
SparkSqlParser.TIME = 229;
SparkSqlParser.TO = 230;
SparkSqlParser.TOUCH = 231;
SparkSqlParser.TRAILING = 232;
SparkSqlParser.TRANSACTION = 233;
SparkSqlParser.TRANSACTIONS = 234;
SparkSqlParser.TRANSFORM = 235;
SparkSqlParser.TRIM = 236;
SparkSqlParser.TRUE = 237;
SparkSqlParser.TRUNCATE = 238;
SparkSqlParser.TYPE = 239;
SparkSqlParser.UNARCHIVE = 240;
SparkSqlParser.UNBOUNDED = 241;
SparkSqlParser.UNCACHE = 242;
SparkSqlParser.UNION = 243;
SparkSqlParser.UNIQUE = 244;
SparkSqlParser.UNKNOWN = 245;
SparkSqlParser.UNLOCK = 246;
SparkSqlParser.UNSET = 247;
SparkSqlParser.UPDATE = 248;
SparkSqlParser.USE = 249;
SparkSqlParser.USER = 250;
SparkSqlParser.USING = 251;
SparkSqlParser.VALUES = 252;
SparkSqlParser.VIEW = 253;
SparkSqlParser.VIEWS = 254;
SparkSqlParser.WHEN = 255;
SparkSqlParser.WHERE = 256;
SparkSqlParser.WINDOW = 257;
SparkSqlParser.WITH = 258;
SparkSqlParser.ZONE = 259;
SparkSqlParser.EQ = 260;
SparkSqlParser.NSEQ = 261;
SparkSqlParser.NEQ = 262;
SparkSqlParser.NEQJ = 263;
SparkSqlParser.LT = 264;
SparkSqlParser.LTE = 265;
SparkSqlParser.GT = 266;
SparkSqlParser.GTE = 267;
SparkSqlParser.PLUS = 268;
SparkSqlParser.MINUS = 269;
SparkSqlParser.ASTERISK = 270;
SparkSqlParser.SLASH = 271;
SparkSqlParser.PERCENT = 272;
SparkSqlParser.TILDE = 273;
SparkSqlParser.AMPERSAND = 274;
SparkSqlParser.PIPE = 275;
SparkSqlParser.CONCAT_PIPE = 276;
SparkSqlParser.HAT = 277;
SparkSqlParser.SEMICOLON = 278;
SparkSqlParser.STRING = 279;
SparkSqlParser.BIGINT_LITERAL = 280;
SparkSqlParser.SMALLINT_LITERAL = 281;
SparkSqlParser.TINYINT_LITERAL = 282;
SparkSqlParser.INTEGER_VALUE = 283;
SparkSqlParser.EXPONENT_VALUE = 284;
SparkSqlParser.DECIMAL_VALUE = 285;
SparkSqlParser.FLOAT_LITERAL = 286;
SparkSqlParser.DOUBLE_LITERAL = 287;
SparkSqlParser.BIGDECIMAL_LITERAL = 288;
SparkSqlParser.IDENTIFIER = 289;
SparkSqlParser.BACKQUOTED_IDENTIFIER = 290;
SparkSqlParser.SIMPLE_COMMENT = 291;
SparkSqlParser.BRACKETED_COMMENT = 292;
SparkSqlParser.WS = 293;
SparkSqlParser.UNRECOGNIZED = 294;

SparkSqlParser.RULE_program = 0;
SparkSqlParser.RULE_singleStatement = 1;
SparkSqlParser.RULE_emptyStatement = 2;
SparkSqlParser.RULE_singleExpression = 3;
SparkSqlParser.RULE_singleTableIdentifier = 4;
SparkSqlParser.RULE_singleMultipartIdentifier = 5;
SparkSqlParser.RULE_singleDataType = 6;
SparkSqlParser.RULE_singleTableSchema = 7;
SparkSqlParser.RULE_statement = 8;
SparkSqlParser.RULE_configKey = 9;
SparkSqlParser.RULE_unsupportedHiveNativeCommands = 10;
SparkSqlParser.RULE_createTableHeader = 11;
SparkSqlParser.RULE_replaceTableHeader = 12;
SparkSqlParser.RULE_bucketSpec = 13;
SparkSqlParser.RULE_skewSpec = 14;
SparkSqlParser.RULE_locationSpec = 15;
SparkSqlParser.RULE_commentSpec = 16;
SparkSqlParser.RULE_query = 17;
SparkSqlParser.RULE_insertInto = 18;
SparkSqlParser.RULE_partitionSpecLocation = 19;
SparkSqlParser.RULE_partitionSpec = 20;
SparkSqlParser.RULE_partitionVal = 21;
SparkSqlParser.RULE_namespace = 22;
SparkSqlParser.RULE_describeFuncName = 23;
SparkSqlParser.RULE_describeColName = 24;
SparkSqlParser.RULE_ctes = 25;
SparkSqlParser.RULE_namedQuery = 26;
SparkSqlParser.RULE_tableProvider = 27;
SparkSqlParser.RULE_createTableClauses = 28;
SparkSqlParser.RULE_tablePropertyList = 29;
SparkSqlParser.RULE_tableProperty = 30;
SparkSqlParser.RULE_tablePropertyKey = 31;
SparkSqlParser.RULE_tablePropertyValue = 32;
SparkSqlParser.RULE_constantList = 33;
SparkSqlParser.RULE_nestedConstantList = 34;
SparkSqlParser.RULE_createFileFormat = 35;
SparkSqlParser.RULE_fileFormat = 36;
SparkSqlParser.RULE_storageHandler = 37;
SparkSqlParser.RULE_resource = 38;
SparkSqlParser.RULE_dmlStatementNoWith = 39;
SparkSqlParser.RULE_queryOrganization = 40;
SparkSqlParser.RULE_multiInsertQueryBody = 41;
SparkSqlParser.RULE_queryTerm = 42;
SparkSqlParser.RULE_queryPrimary = 43;
SparkSqlParser.RULE_sortItem = 44;
SparkSqlParser.RULE_fromStatement = 45;
SparkSqlParser.RULE_fromStatementBody = 46;
SparkSqlParser.RULE_querySpecification = 47;
SparkSqlParser.RULE_transformClause = 48;
SparkSqlParser.RULE_selectClause = 49;
SparkSqlParser.RULE_setClause = 50;
SparkSqlParser.RULE_matchedClause = 51;
SparkSqlParser.RULE_notMatchedClause = 52;
SparkSqlParser.RULE_matchedAction = 53;
SparkSqlParser.RULE_notMatchedAction = 54;
SparkSqlParser.RULE_assignmentList = 55;
SparkSqlParser.RULE_assignment = 56;
SparkSqlParser.RULE_whereClause = 57;
SparkSqlParser.RULE_havingClause = 58;
SparkSqlParser.RULE_hint = 59;
SparkSqlParser.RULE_hintStatement = 60;
SparkSqlParser.RULE_fromClause = 61;
SparkSqlParser.RULE_aggregationClause = 62;
SparkSqlParser.RULE_groupingSet = 63;
SparkSqlParser.RULE_pivotClause = 64;
SparkSqlParser.RULE_pivotColumn = 65;
SparkSqlParser.RULE_pivotValue = 66;
SparkSqlParser.RULE_lateralView = 67;
SparkSqlParser.RULE_setQuantifier = 68;
SparkSqlParser.RULE_relation = 69;
SparkSqlParser.RULE_joinRelation = 70;
SparkSqlParser.RULE_joinType = 71;
SparkSqlParser.RULE_joinCriteria = 72;
SparkSqlParser.RULE_sample = 73;
SparkSqlParser.RULE_sampleMethod = 74;
SparkSqlParser.RULE_identifierList = 75;
SparkSqlParser.RULE_identifierSeq = 76;
SparkSqlParser.RULE_orderedIdentifierList = 77;
SparkSqlParser.RULE_orderedIdentifier = 78;
SparkSqlParser.RULE_identifierCommentList = 79;
SparkSqlParser.RULE_identifierComment = 80;
SparkSqlParser.RULE_relationPrimary = 81;
SparkSqlParser.RULE_inlineTable = 82;
SparkSqlParser.RULE_functionTable = 83;
SparkSqlParser.RULE_tableAlias = 84;
SparkSqlParser.RULE_rowFormat = 85;
SparkSqlParser.RULE_multipartIdentifierList = 86;
SparkSqlParser.RULE_multipartIdentifier = 87;
SparkSqlParser.RULE_tableIdentifier = 88;
SparkSqlParser.RULE_namedExpression = 89;
SparkSqlParser.RULE_namedExpressionSeq = 90;
SparkSqlParser.RULE_transformList = 91;
SparkSqlParser.RULE_transform = 92;
SparkSqlParser.RULE_transformArgument = 93;
SparkSqlParser.RULE_expression = 94;
SparkSqlParser.RULE_booleanExpression = 95;
SparkSqlParser.RULE_predicate = 96;
SparkSqlParser.RULE_valueExpression = 97;
SparkSqlParser.RULE_primaryExpression = 98;
SparkSqlParser.RULE_constant = 99;
SparkSqlParser.RULE_comparisonOperator = 100;
SparkSqlParser.RULE_arithmeticOperator = 101;
SparkSqlParser.RULE_predicateOperator = 102;
SparkSqlParser.RULE_booleanValue = 103;
SparkSqlParser.RULE_interval = 104;
SparkSqlParser.RULE_errorCapturingMultiUnitsInterval = 105;
SparkSqlParser.RULE_multiUnitsInterval = 106;
SparkSqlParser.RULE_errorCapturingUnitToUnitInterval = 107;
SparkSqlParser.RULE_unitToUnitInterval = 108;
SparkSqlParser.RULE_intervalValue = 109;
SparkSqlParser.RULE_colPosition = 110;
SparkSqlParser.RULE_dataType = 111;
SparkSqlParser.RULE_qualifiedColTypeWithPositionList = 112;
SparkSqlParser.RULE_qualifiedColTypeWithPosition = 113;
SparkSqlParser.RULE_colTypeList = 114;
SparkSqlParser.RULE_colType = 115;
SparkSqlParser.RULE_complexColTypeList = 116;
SparkSqlParser.RULE_complexColType = 117;
SparkSqlParser.RULE_whenClause = 118;
SparkSqlParser.RULE_windowClause = 119;
SparkSqlParser.RULE_namedWindow = 120;
SparkSqlParser.RULE_windowSpec = 121;
SparkSqlParser.RULE_windowFrame = 122;
SparkSqlParser.RULE_frameBound = 123;
SparkSqlParser.RULE_qualifiedNameList = 124;
SparkSqlParser.RULE_functionName = 125;
SparkSqlParser.RULE_qualifiedName = 126;
SparkSqlParser.RULE_errorCapturingIdentifier = 127;
SparkSqlParser.RULE_errorCapturingIdentifierExtra = 128;
SparkSqlParser.RULE_identifier = 129;
SparkSqlParser.RULE_strictIdentifier = 130;
SparkSqlParser.RULE_quotedIdentifier = 131;
SparkSqlParser.RULE_number = 132;
SparkSqlParser.RULE_alterColumnAction = 133;
SparkSqlParser.RULE_ansiNonReserved = 134;
SparkSqlParser.RULE_strictNonReserved = 135;
SparkSqlParser.RULE_nonReserved = 136;


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 = SparkSqlParser.RULE_program;
    return this;
}

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

ProgramContext.prototype.singleStatement = function() {
    return this.getTypedRuleContext(SingleStatementContext,0);
};

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

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

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

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




SparkSqlParser.ProgramContext = ProgramContext;

SparkSqlParser.prototype.program = function() {

    var localctx = new ProgramContext(this, this._ctx, this.state);
    this.enterRule(localctx, 0, SparkSqlParser.RULE_program);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 274;
        this.singleStatement();
        this.state = 275;
        this.match(SparkSqlParser.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 SingleStatementContext(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 = SparkSqlParser.RULE_singleStatement;
    return this;
}

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

SingleStatementContext.prototype.statement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(StatementContext);
    } else {
        return this.getTypedRuleContext(StatementContext,i);
    }
};

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

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


SingleStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSingleStatement(this);
	}
};

SingleStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSingleStatement(this);
	}
};

SingleStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSingleStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SingleStatementContext = SingleStatementContext;

SparkSqlParser.prototype.singleStatement = function() {

    var localctx = new SingleStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 2, SparkSqlParser.RULE_singleStatement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 284;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SparkSqlParser.T__0) | (1 << SparkSqlParser.ADD) | (1 << SparkSqlParser.ALTER) | (1 << SparkSqlParser.ANALYZE) | (1 << SparkSqlParser.CACHE))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (SparkSqlParser.CLEAR - 36)) | (1 << (SparkSqlParser.COMMENT - 36)) | (1 << (SparkSqlParser.COMMIT - 36)) | (1 << (SparkSqlParser.CREATE - 36)) | (1 << (SparkSqlParser.DELETE - 36)) | (1 << (SparkSqlParser.DESC - 36)))) !== 0) || ((((_la - 68)) & ~0x1f) == 0 && ((1 << (_la - 68)) & ((1 << (SparkSqlParser.DESCRIBE - 68)) | (1 << (SparkSqlParser.DFS - 68)) | (1 << (SparkSqlParser.DROP - 68)) | (1 << (SparkSqlParser.EXPLAIN - 68)) | (1 << (SparkSqlParser.EXPORT - 68)) | (1 << (SparkSqlParser.FROM - 68)))) !== 0) || ((((_la - 104)) & ~0x1f) == 0 && ((1 << (_la - 104)) & ((1 << (SparkSqlParser.GRANT - 104)) | (1 << (SparkSqlParser.IMPORT - 104)) | (1 << (SparkSqlParser.INSERT - 104)) | (1 << (SparkSqlParser.LIST - 104)) | (1 << (SparkSqlParser.LOAD - 104)))) !== 0) || ((((_la - 137)) & ~0x1f) == 0 && ((1 << (_la - 137)) & ((1 << (SparkSqlParser.LOCK - 137)) | (1 << (SparkSqlParser.MAP - 137)) | (1 << (SparkSqlParser.MERGE - 137)) | (1 << (SparkSqlParser.MSCK - 137)))) !== 0) || ((((_la - 183)) & ~0x1f) == 0 && ((1 << (_la - 183)) & ((1 << (SparkSqlParser.REDUCE - 183)) | (1 << (SparkSqlParser.REFRESH - 183)) | (1 << (SparkSqlParser.REPLACE - 183)) | (1 << (SparkSqlParser.RESET - 183)) | (1 << (SparkSqlParser.REVOKE - 183)) | (1 << (SparkSqlParser.ROLLBACK - 183)) | (1 << (SparkSqlParser.SELECT - 183)) | (1 << (SparkSqlParser.SET - 183)) | (1 << (SparkSqlParser.SHOW - 183)))) !== 0) || ((((_la - 215)) & ~0x1f) == 0 && ((1 << (_la - 215)) & ((1 << (SparkSqlParser.START - 215)) | (1 << (SparkSqlParser.TABLE - 215)) | (1 << (SparkSqlParser.TRUNCATE - 215)) | (1 << (SparkSqlParser.UNCACHE - 215)) | (1 << (SparkSqlParser.UNLOCK - 215)))) !== 0) || ((((_la - 248)) & ~0x1f) == 0 && ((1 << (_la - 248)) & ((1 << (SparkSqlParser.UPDATE - 248)) | (1 << (SparkSqlParser.USE - 248)) | (1 << (SparkSqlParser.VALUES - 248)) | (1 << (SparkSqlParser.WITH - 248)) | (1 << (SparkSqlParser.SEMICOLON - 248)))) !== 0)) {
            this.state = 282;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case SparkSqlParser.T__0:
            case SparkSqlParser.ADD:
            case SparkSqlParser.ALTER:
            case SparkSqlParser.ANALYZE:
            case SparkSqlParser.CACHE:
            case SparkSqlParser.CLEAR:
            case SparkSqlParser.COMMENT:
            case SparkSqlParser.COMMIT:
            case SparkSqlParser.CREATE:
            case SparkSqlParser.DELETE:
            case SparkSqlParser.DESC:
            case SparkSqlParser.DESCRIBE:
            case SparkSqlParser.DFS:
            case SparkSqlParser.DROP:
            case SparkSqlParser.EXPLAIN:
            case SparkSqlParser.EXPORT:
            case SparkSqlParser.FROM:
            case SparkSqlParser.GRANT:
            case SparkSqlParser.IMPORT:
            case SparkSqlParser.INSERT:
            case SparkSqlParser.LIST:
            case SparkSqlParser.LOAD:
            case SparkSqlParser.LOCK:
            case SparkSqlParser.MAP:
            case SparkSqlParser.MERGE:
            case SparkSqlParser.MSCK:
            case SparkSqlParser.REDUCE:
            case SparkSqlParser.REFRESH:
            case SparkSqlParser.REPLACE:
            case SparkSqlParser.RESET:
            case SparkSqlParser.REVOKE:
            case SparkSqlParser.ROLLBACK:
            case SparkSqlParser.SELECT:
            case SparkSqlParser.SET:
            case SparkSqlParser.SHOW:
            case SparkSqlParser.START:
            case SparkSqlParser.TABLE:
            case SparkSqlParser.TRUNCATE:
            case SparkSqlParser.UNCACHE:
            case SparkSqlParser.UNLOCK:
            case SparkSqlParser.UPDATE:
            case SparkSqlParser.USE:
            case SparkSqlParser.VALUES:
            case SparkSqlParser.WITH:
                this.state = 277;
                this.statement();
                this.state = 279;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,0,this._ctx);
                if(la_===1) {
                    this.state = 278;
                    this.match(SparkSqlParser.SEMICOLON);

                }
                break;
            case SparkSqlParser.SEMICOLON:
                this.state = 281;
                this.emptyStatement();
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 286;
            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 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 = SparkSqlParser.RULE_emptyStatement;
    return this;
}

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

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

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

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

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




SparkSqlParser.EmptyStatementContext = EmptyStatementContext;

SparkSqlParser.prototype.emptyStatement = function() {

    var localctx = new EmptyStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 4, SparkSqlParser.RULE_emptyStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 287;
        this.match(SparkSqlParser.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 SingleExpressionContext(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 = SparkSqlParser.RULE_singleExpression;
    return this;
}

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

SingleExpressionContext.prototype.namedExpression = function() {
    return this.getTypedRuleContext(NamedExpressionContext,0);
};

SingleExpressionContext.prototype.EOF = function() {
    return this.getToken(SparkSqlParser.EOF, 0);
};

SingleExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSingleExpression(this);
	}
};

SingleExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSingleExpression(this);
	}
};

SingleExpressionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSingleExpression(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SingleExpressionContext = SingleExpressionContext;

SparkSqlParser.prototype.singleExpression = function() {

    var localctx = new SingleExpressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 6, SparkSqlParser.RULE_singleExpression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 289;
        this.namedExpression();
        this.state = 290;
        this.match(SparkSqlParser.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 SingleTableIdentifierContext(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 = SparkSqlParser.RULE_singleTableIdentifier;
    return this;
}

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

SingleTableIdentifierContext.prototype.tableIdentifier = function() {
    return this.getTypedRuleContext(TableIdentifierContext,0);
};

SingleTableIdentifierContext.prototype.EOF = function() {
    return this.getToken(SparkSqlParser.EOF, 0);
};

SingleTableIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSingleTableIdentifier(this);
	}
};

SingleTableIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSingleTableIdentifier(this);
	}
};

SingleTableIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSingleTableIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SingleTableIdentifierContext = SingleTableIdentifierContext;

SparkSqlParser.prototype.singleTableIdentifier = function() {

    var localctx = new SingleTableIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 8, SparkSqlParser.RULE_singleTableIdentifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 292;
        this.tableIdentifier();
        this.state = 293;
        this.match(SparkSqlParser.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 SingleMultipartIdentifierContext(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 = SparkSqlParser.RULE_singleMultipartIdentifier;
    return this;
}

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

SingleMultipartIdentifierContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

SingleMultipartIdentifierContext.prototype.EOF = function() {
    return this.getToken(SparkSqlParser.EOF, 0);
};

SingleMultipartIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSingleMultipartIdentifier(this);
	}
};

SingleMultipartIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSingleMultipartIdentifier(this);
	}
};

SingleMultipartIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSingleMultipartIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SingleMultipartIdentifierContext = SingleMultipartIdentifierContext;

SparkSqlParser.prototype.singleMultipartIdentifier = function() {

    var localctx = new SingleMultipartIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 10, SparkSqlParser.RULE_singleMultipartIdentifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 295;
        this.multipartIdentifier();
        this.state = 296;
        this.match(SparkSqlParser.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 SingleDataTypeContext(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 = SparkSqlParser.RULE_singleDataType;
    return this;
}

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

SingleDataTypeContext.prototype.dataType = function() {
    return this.getTypedRuleContext(DataTypeContext,0);
};

SingleDataTypeContext.prototype.EOF = function() {
    return this.getToken(SparkSqlParser.EOF, 0);
};

SingleDataTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSingleDataType(this);
	}
};

SingleDataTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSingleDataType(this);
	}
};

SingleDataTypeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSingleDataType(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SingleDataTypeContext = SingleDataTypeContext;

SparkSqlParser.prototype.singleDataType = function() {

    var localctx = new SingleDataTypeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 12, SparkSqlParser.RULE_singleDataType);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 298;
        this.dataType();
        this.state = 299;
        this.match(SparkSqlParser.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 SingleTableSchemaContext(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 = SparkSqlParser.RULE_singleTableSchema;
    return this;
}

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

SingleTableSchemaContext.prototype.colTypeList = function() {
    return this.getTypedRuleContext(ColTypeListContext,0);
};

SingleTableSchemaContext.prototype.EOF = function() {
    return this.getToken(SparkSqlParser.EOF, 0);
};

SingleTableSchemaContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSingleTableSchema(this);
	}
};

SingleTableSchemaContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSingleTableSchema(this);
	}
};

SingleTableSchemaContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSingleTableSchema(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SingleTableSchemaContext = SingleTableSchemaContext;

SparkSqlParser.prototype.singleTableSchema = function() {

    var localctx = new SingleTableSchemaContext(this, this._ctx, this.state);
    this.enterRule(localctx, 14, SparkSqlParser.RULE_singleTableSchema);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 301;
        this.colTypeList();
        this.state = 302;
        this.match(SparkSqlParser.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 = SparkSqlParser.RULE_statement;
    return this;
}

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


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


function ExplainContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ExplainContext.prototype = Object.create(StatementContext.prototype);
ExplainContext.prototype.constructor = ExplainContext;

SparkSqlParser.ExplainContext = ExplainContext;

ExplainContext.prototype.EXPLAIN = function() {
    return this.getToken(SparkSqlParser.EXPLAIN, 0);
};

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

ExplainContext.prototype.LOGICAL = function() {
    return this.getToken(SparkSqlParser.LOGICAL, 0);
};

ExplainContext.prototype.FORMATTED = function() {
    return this.getToken(SparkSqlParser.FORMATTED, 0);
};

ExplainContext.prototype.EXTENDED = function() {
    return this.getToken(SparkSqlParser.EXTENDED, 0);
};

ExplainContext.prototype.CODEGEN = function() {
    return this.getToken(SparkSqlParser.CODEGEN, 0);
};

ExplainContext.prototype.COST = function() {
    return this.getToken(SparkSqlParser.COST, 0);
};
ExplainContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterExplain(this);
	}
};

ExplainContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitExplain(this);
	}
};

ExplainContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitExplain(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ResetConfigurationContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ResetConfigurationContext.prototype = Object.create(StatementContext.prototype);
ResetConfigurationContext.prototype.constructor = ResetConfigurationContext;

SparkSqlParser.ResetConfigurationContext = ResetConfigurationContext;

ResetConfigurationContext.prototype.RESET = function() {
    return this.getToken(SparkSqlParser.RESET, 0);
};
ResetConfigurationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterResetConfiguration(this);
	}
};

ResetConfigurationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitResetConfiguration(this);
	}
};

ResetConfigurationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitResetConfiguration(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function AlterViewQueryContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AlterViewQueryContext.prototype = Object.create(StatementContext.prototype);
AlterViewQueryContext.prototype.constructor = AlterViewQueryContext;

SparkSqlParser.AlterViewQueryContext = AlterViewQueryContext;

AlterViewQueryContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

AlterViewQueryContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};

AlterViewQueryContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

AlterViewQueryContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

AlterViewQueryContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};
AlterViewQueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAlterViewQuery(this);
	}
};

AlterViewQueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAlterViewQuery(this);
	}
};

AlterViewQueryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAlterViewQuery(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function UseContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

UseContext.prototype = Object.create(StatementContext.prototype);
UseContext.prototype.constructor = UseContext;

SparkSqlParser.UseContext = UseContext;

UseContext.prototype.USE = function() {
    return this.getToken(SparkSqlParser.USE, 0);
};

UseContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

UseContext.prototype.NAMESPACE = function() {
    return this.getToken(SparkSqlParser.NAMESPACE, 0);
};
UseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterUse(this);
	}
};

UseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitUse(this);
	}
};

UseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitUse(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function DropNamespaceContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DropNamespaceContext.prototype = Object.create(StatementContext.prototype);
DropNamespaceContext.prototype.constructor = DropNamespaceContext;

SparkSqlParser.DropNamespaceContext = DropNamespaceContext;

DropNamespaceContext.prototype.DROP = function() {
    return this.getToken(SparkSqlParser.DROP, 0);
};

DropNamespaceContext.prototype.namespace = function() {
    return this.getTypedRuleContext(NamespaceContext,0);
};

DropNamespaceContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

DropNamespaceContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

DropNamespaceContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

DropNamespaceContext.prototype.RESTRICT = function() {
    return this.getToken(SparkSqlParser.RESTRICT, 0);
};

DropNamespaceContext.prototype.CASCADE = function() {
    return this.getToken(SparkSqlParser.CASCADE, 0);
};
DropNamespaceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDropNamespace(this);
	}
};

DropNamespaceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDropNamespace(this);
	}
};

DropNamespaceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDropNamespace(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CreateTempViewUsingContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CreateTempViewUsingContext.prototype = Object.create(StatementContext.prototype);
CreateTempViewUsingContext.prototype.constructor = CreateTempViewUsingContext;

SparkSqlParser.CreateTempViewUsingContext = CreateTempViewUsingContext;

CreateTempViewUsingContext.prototype.CREATE = function() {
    return this.getToken(SparkSqlParser.CREATE, 0);
};

CreateTempViewUsingContext.prototype.TEMPORARY = function() {
    return this.getToken(SparkSqlParser.TEMPORARY, 0);
};

CreateTempViewUsingContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};

CreateTempViewUsingContext.prototype.tableIdentifier = function() {
    return this.getTypedRuleContext(TableIdentifierContext,0);
};

CreateTempViewUsingContext.prototype.tableProvider = function() {
    return this.getTypedRuleContext(TableProviderContext,0);
};

CreateTempViewUsingContext.prototype.OR = function() {
    return this.getToken(SparkSqlParser.OR, 0);
};

CreateTempViewUsingContext.prototype.REPLACE = function() {
    return this.getToken(SparkSqlParser.REPLACE, 0);
};

CreateTempViewUsingContext.prototype.GLOBAL = function() {
    return this.getToken(SparkSqlParser.GLOBAL, 0);
};

CreateTempViewUsingContext.prototype.colTypeList = function() {
    return this.getTypedRuleContext(ColTypeListContext,0);
};

CreateTempViewUsingContext.prototype.OPTIONS = function() {
    return this.getToken(SparkSqlParser.OPTIONS, 0);
};

CreateTempViewUsingContext.prototype.tablePropertyList = function() {
    return this.getTypedRuleContext(TablePropertyListContext,0);
};
CreateTempViewUsingContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateTempViewUsing(this);
	}
};

CreateTempViewUsingContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCreateTempViewUsing(this);
	}
};

CreateTempViewUsingContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCreateTempViewUsing(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RenameTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.from = null; // MultipartIdentifierContext;
    this.to = null; // MultipartIdentifierContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RenameTableContext.prototype = Object.create(StatementContext.prototype);
RenameTableContext.prototype.constructor = RenameTableContext;

SparkSqlParser.RenameTableContext = RenameTableContext;

RenameTableContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

RenameTableContext.prototype.RENAME = function() {
    return this.getToken(SparkSqlParser.RENAME, 0);
};

RenameTableContext.prototype.TO = function() {
    return this.getToken(SparkSqlParser.TO, 0);
};

RenameTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

RenameTableContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};

RenameTableContext.prototype.multipartIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(MultipartIdentifierContext);
    } else {
        return this.getTypedRuleContext(MultipartIdentifierContext,i);
    }
};
RenameTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRenameTable(this);
	}
};

RenameTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRenameTable(this);
	}
};

RenameTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRenameTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function FailNativeCommandContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

FailNativeCommandContext.prototype = Object.create(StatementContext.prototype);
FailNativeCommandContext.prototype.constructor = FailNativeCommandContext;

SparkSqlParser.FailNativeCommandContext = FailNativeCommandContext;

FailNativeCommandContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

FailNativeCommandContext.prototype.ROLE = function() {
    return this.getToken(SparkSqlParser.ROLE, 0);
};

FailNativeCommandContext.prototype.unsupportedHiveNativeCommands = function() {
    return this.getTypedRuleContext(UnsupportedHiveNativeCommandsContext,0);
};
FailNativeCommandContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFailNativeCommand(this);
	}
};

FailNativeCommandContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFailNativeCommand(this);
	}
};

FailNativeCommandContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitFailNativeCommand(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ClearCacheContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ClearCacheContext.prototype = Object.create(StatementContext.prototype);
ClearCacheContext.prototype.constructor = ClearCacheContext;

SparkSqlParser.ClearCacheContext = ClearCacheContext;

ClearCacheContext.prototype.CLEAR = function() {
    return this.getToken(SparkSqlParser.CLEAR, 0);
};

ClearCacheContext.prototype.CACHE = function() {
    return this.getToken(SparkSqlParser.CACHE, 0);
};
ClearCacheContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterClearCache(this);
	}
};

ClearCacheContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitClearCache(this);
	}
};

ClearCacheContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitClearCache(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function DropViewContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DropViewContext.prototype = Object.create(StatementContext.prototype);
DropViewContext.prototype.constructor = DropViewContext;

SparkSqlParser.DropViewContext = DropViewContext;

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

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

DropViewContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

DropViewContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

DropViewContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};
DropViewContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDropView(this);
	}
};

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

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


function ShowTablesContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.pattern = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowTablesContext.prototype = Object.create(StatementContext.prototype);
ShowTablesContext.prototype.constructor = ShowTablesContext;

SparkSqlParser.ShowTablesContext = ShowTablesContext;

ShowTablesContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowTablesContext.prototype.TABLES = function() {
    return this.getToken(SparkSqlParser.TABLES, 0);
};

ShowTablesContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

ShowTablesContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

ShowTablesContext.prototype.IN = function() {
    return this.getToken(SparkSqlParser.IN, 0);
};

ShowTablesContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

ShowTablesContext.prototype.LIKE = function() {
    return this.getToken(SparkSqlParser.LIKE, 0);
};
ShowTablesContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowTables(this);
	}
};

ShowTablesContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowTables(this);
	}
};

ShowTablesContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowTables(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RecoverPartitionsContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RecoverPartitionsContext.prototype = Object.create(StatementContext.prototype);
RecoverPartitionsContext.prototype.constructor = RecoverPartitionsContext;

SparkSqlParser.RecoverPartitionsContext = RecoverPartitionsContext;

RecoverPartitionsContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

RecoverPartitionsContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

RecoverPartitionsContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

RecoverPartitionsContext.prototype.RECOVER = function() {
    return this.getToken(SparkSqlParser.RECOVER, 0);
};

RecoverPartitionsContext.prototype.PARTITIONS = function() {
    return this.getToken(SparkSqlParser.PARTITIONS, 0);
};
RecoverPartitionsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRecoverPartitions(this);
	}
};

RecoverPartitionsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRecoverPartitions(this);
	}
};

RecoverPartitionsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRecoverPartitions(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ShowCurrentNamespaceContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowCurrentNamespaceContext.prototype = Object.create(StatementContext.prototype);
ShowCurrentNamespaceContext.prototype.constructor = ShowCurrentNamespaceContext;

SparkSqlParser.ShowCurrentNamespaceContext = ShowCurrentNamespaceContext;

ShowCurrentNamespaceContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowCurrentNamespaceContext.prototype.CURRENT = function() {
    return this.getToken(SparkSqlParser.CURRENT, 0);
};

ShowCurrentNamespaceContext.prototype.NAMESPACE = function() {
    return this.getToken(SparkSqlParser.NAMESPACE, 0);
};
ShowCurrentNamespaceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowCurrentNamespace(this);
	}
};

ShowCurrentNamespaceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowCurrentNamespace(this);
	}
};

ShowCurrentNamespaceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowCurrentNamespace(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RenameTablePartitionContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.from = null; // PartitionSpecContext;
    this.to = null; // PartitionSpecContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RenameTablePartitionContext.prototype = Object.create(StatementContext.prototype);
RenameTablePartitionContext.prototype.constructor = RenameTablePartitionContext;

SparkSqlParser.RenameTablePartitionContext = RenameTablePartitionContext;

RenameTablePartitionContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

RenameTablePartitionContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

RenameTablePartitionContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

RenameTablePartitionContext.prototype.RENAME = function() {
    return this.getToken(SparkSqlParser.RENAME, 0);
};

RenameTablePartitionContext.prototype.TO = function() {
    return this.getToken(SparkSqlParser.TO, 0);
};

RenameTablePartitionContext.prototype.partitionSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(PartitionSpecContext);
    } else {
        return this.getTypedRuleContext(PartitionSpecContext,i);
    }
};
RenameTablePartitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRenameTablePartition(this);
	}
};

RenameTablePartitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRenameTablePartition(this);
	}
};

RenameTablePartitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRenameTablePartition(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RepairTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RepairTableContext.prototype = Object.create(StatementContext.prototype);
RepairTableContext.prototype.constructor = RepairTableContext;

SparkSqlParser.RepairTableContext = RepairTableContext;

RepairTableContext.prototype.MSCK = function() {
    return this.getToken(SparkSqlParser.MSCK, 0);
};

RepairTableContext.prototype.REPAIR = function() {
    return this.getToken(SparkSqlParser.REPAIR, 0);
};

RepairTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

RepairTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};
RepairTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRepairTable(this);
	}
};

RepairTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRepairTable(this);
	}
};

RepairTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRepairTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RefreshResourceContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RefreshResourceContext.prototype = Object.create(StatementContext.prototype);
RefreshResourceContext.prototype.constructor = RefreshResourceContext;

SparkSqlParser.RefreshResourceContext = RefreshResourceContext;

RefreshResourceContext.prototype.REFRESH = function() {
    return this.getToken(SparkSqlParser.REFRESH, 0);
};

RefreshResourceContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};
RefreshResourceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRefreshResource(this);
	}
};

RefreshResourceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRefreshResource(this);
	}
};

RefreshResourceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRefreshResource(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ShowCreateTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowCreateTableContext.prototype = Object.create(StatementContext.prototype);
ShowCreateTableContext.prototype.constructor = ShowCreateTableContext;

SparkSqlParser.ShowCreateTableContext = ShowCreateTableContext;

ShowCreateTableContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowCreateTableContext.prototype.CREATE = function() {
    return this.getToken(SparkSqlParser.CREATE, 0);
};

ShowCreateTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

ShowCreateTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

ShowCreateTableContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

ShowCreateTableContext.prototype.SERDE = function() {
    return this.getToken(SparkSqlParser.SERDE, 0);
};
ShowCreateTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowCreateTable(this);
	}
};

ShowCreateTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowCreateTable(this);
	}
};

ShowCreateTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowCreateTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ShowNamespacesContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.pattern = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowNamespacesContext.prototype = Object.create(StatementContext.prototype);
ShowNamespacesContext.prototype.constructor = ShowNamespacesContext;

SparkSqlParser.ShowNamespacesContext = ShowNamespacesContext;

ShowNamespacesContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowNamespacesContext.prototype.DATABASES = function() {
    return this.getToken(SparkSqlParser.DATABASES, 0);
};

ShowNamespacesContext.prototype.NAMESPACES = function() {
    return this.getToken(SparkSqlParser.NAMESPACES, 0);
};

ShowNamespacesContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

ShowNamespacesContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

ShowNamespacesContext.prototype.IN = function() {
    return this.getToken(SparkSqlParser.IN, 0);
};

ShowNamespacesContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

ShowNamespacesContext.prototype.LIKE = function() {
    return this.getToken(SparkSqlParser.LIKE, 0);
};
ShowNamespacesContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowNamespaces(this);
	}
};

ShowNamespacesContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowNamespaces(this);
	}
};

ShowNamespacesContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowNamespaces(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ShowColumnsContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.table = null; // MultipartIdentifierContext;
    this.ns = null; // MultipartIdentifierContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowColumnsContext.prototype = Object.create(StatementContext.prototype);
ShowColumnsContext.prototype.constructor = ShowColumnsContext;

SparkSqlParser.ShowColumnsContext = ShowColumnsContext;

ShowColumnsContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowColumnsContext.prototype.COLUMNS = function() {
    return this.getToken(SparkSqlParser.COLUMNS, 0);
};

ShowColumnsContext.prototype.FROM = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.FROM);
    } else {
        return this.getToken(SparkSqlParser.FROM, i);
    }
};


ShowColumnsContext.prototype.IN = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.IN);
    } else {
        return this.getToken(SparkSqlParser.IN, i);
    }
};


ShowColumnsContext.prototype.multipartIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(MultipartIdentifierContext);
    } else {
        return this.getTypedRuleContext(MultipartIdentifierContext,i);
    }
};
ShowColumnsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowColumns(this);
	}
};

ShowColumnsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowColumns(this);
	}
};

ShowColumnsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowColumns(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ReplaceTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ReplaceTableContext.prototype = Object.create(StatementContext.prototype);
ReplaceTableContext.prototype.constructor = ReplaceTableContext;

SparkSqlParser.ReplaceTableContext = ReplaceTableContext;

ReplaceTableContext.prototype.replaceTableHeader = function() {
    return this.getTypedRuleContext(ReplaceTableHeaderContext,0);
};

ReplaceTableContext.prototype.tableProvider = function() {
    return this.getTypedRuleContext(TableProviderContext,0);
};

ReplaceTableContext.prototype.createTableClauses = function() {
    return this.getTypedRuleContext(CreateTableClausesContext,0);
};

ReplaceTableContext.prototype.colTypeList = function() {
    return this.getTypedRuleContext(ColTypeListContext,0);
};

ReplaceTableContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

ReplaceTableContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};
ReplaceTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterReplaceTable(this);
	}
};

ReplaceTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitReplaceTable(this);
	}
};

ReplaceTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitReplaceTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function AddTablePartitionContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AddTablePartitionContext.prototype = Object.create(StatementContext.prototype);
AddTablePartitionContext.prototype.constructor = AddTablePartitionContext;

SparkSqlParser.AddTablePartitionContext = AddTablePartitionContext;

AddTablePartitionContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

AddTablePartitionContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

AddTablePartitionContext.prototype.ADD = function() {
    return this.getToken(SparkSqlParser.ADD, 0);
};

AddTablePartitionContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

AddTablePartitionContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};

AddTablePartitionContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

AddTablePartitionContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

AddTablePartitionContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

AddTablePartitionContext.prototype.partitionSpecLocation = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(PartitionSpecLocationContext);
    } else {
        return this.getTypedRuleContext(PartitionSpecLocationContext,i);
    }
};
AddTablePartitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAddTablePartition(this);
	}
};

AddTablePartitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAddTablePartition(this);
	}
};

AddTablePartitionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAddTablePartition(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SetNamespaceLocationContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetNamespaceLocationContext.prototype = Object.create(StatementContext.prototype);
SetNamespaceLocationContext.prototype.constructor = SetNamespaceLocationContext;

SparkSqlParser.SetNamespaceLocationContext = SetNamespaceLocationContext;

SetNamespaceLocationContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

SetNamespaceLocationContext.prototype.namespace = function() {
    return this.getTypedRuleContext(NamespaceContext,0);
};

SetNamespaceLocationContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

SetNamespaceLocationContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

SetNamespaceLocationContext.prototype.locationSpec = function() {
    return this.getTypedRuleContext(LocationSpecContext,0);
};
SetNamespaceLocationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetNamespaceLocation(this);
	}
};

SetNamespaceLocationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetNamespaceLocation(this);
	}
};

SetNamespaceLocationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetNamespaceLocation(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RefreshTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RefreshTableContext.prototype = Object.create(StatementContext.prototype);
RefreshTableContext.prototype.constructor = RefreshTableContext;

SparkSqlParser.RefreshTableContext = RefreshTableContext;

RefreshTableContext.prototype.REFRESH = function() {
    return this.getToken(SparkSqlParser.REFRESH, 0);
};

RefreshTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

RefreshTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};
RefreshTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRefreshTable(this);
	}
};

RefreshTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRefreshTable(this);
	}
};

RefreshTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRefreshTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SetNamespacePropertiesContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetNamespacePropertiesContext.prototype = Object.create(StatementContext.prototype);
SetNamespacePropertiesContext.prototype.constructor = SetNamespacePropertiesContext;

SparkSqlParser.SetNamespacePropertiesContext = SetNamespacePropertiesContext;

SetNamespacePropertiesContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

SetNamespacePropertiesContext.prototype.namespace = function() {
    return this.getTypedRuleContext(NamespaceContext,0);
};

SetNamespacePropertiesContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

SetNamespacePropertiesContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

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

SetNamespacePropertiesContext.prototype.DBPROPERTIES = function() {
    return this.getToken(SparkSqlParser.DBPROPERTIES, 0);
};

SetNamespacePropertiesContext.prototype.PROPERTIES = function() {
    return this.getToken(SparkSqlParser.PROPERTIES, 0);
};
SetNamespacePropertiesContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetNamespaceProperties(this);
	}
};

SetNamespacePropertiesContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetNamespaceProperties(this);
	}
};

SetNamespacePropertiesContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetNamespaceProperties(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ManageResourceContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.op = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ManageResourceContext.prototype = Object.create(StatementContext.prototype);
ManageResourceContext.prototype.constructor = ManageResourceContext;

SparkSqlParser.ManageResourceContext = ManageResourceContext;

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

ManageResourceContext.prototype.ADD = function() {
    return this.getToken(SparkSqlParser.ADD, 0);
};

ManageResourceContext.prototype.LIST = function() {
    return this.getToken(SparkSqlParser.LIST, 0);
};

ManageResourceContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};
ManageResourceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterManageResource(this);
	}
};

ManageResourceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitManageResource(this);
	}
};

ManageResourceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitManageResource(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SetQuotedConfigurationContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetQuotedConfigurationContext.prototype = Object.create(StatementContext.prototype);
SetQuotedConfigurationContext.prototype.constructor = SetQuotedConfigurationContext;

SparkSqlParser.SetQuotedConfigurationContext = SetQuotedConfigurationContext;

SetQuotedConfigurationContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

SetQuotedConfigurationContext.prototype.configKey = function() {
    return this.getTypedRuleContext(ConfigKeyContext,0);
};

SetQuotedConfigurationContext.prototype.EQ = function() {
    return this.getToken(SparkSqlParser.EQ, 0);
};
SetQuotedConfigurationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetQuotedConfiguration(this);
	}
};

SetQuotedConfigurationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetQuotedConfiguration(this);
	}
};

SetQuotedConfigurationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetQuotedConfiguration(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function AnalyzeContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AnalyzeContext.prototype = Object.create(StatementContext.prototype);
AnalyzeContext.prototype.constructor = AnalyzeContext;

SparkSqlParser.AnalyzeContext = AnalyzeContext;

AnalyzeContext.prototype.ANALYZE = function() {
    return this.getToken(SparkSqlParser.ANALYZE, 0);
};

AnalyzeContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

AnalyzeContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

AnalyzeContext.prototype.COMPUTE = function() {
    return this.getToken(SparkSqlParser.COMPUTE, 0);
};

AnalyzeContext.prototype.STATISTICS = function() {
    return this.getToken(SparkSqlParser.STATISTICS, 0);
};

AnalyzeContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};

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

AnalyzeContext.prototype.FOR = function() {
    return this.getToken(SparkSqlParser.FOR, 0);
};

AnalyzeContext.prototype.COLUMNS = function() {
    return this.getToken(SparkSqlParser.COLUMNS, 0);
};

AnalyzeContext.prototype.identifierSeq = function() {
    return this.getTypedRuleContext(IdentifierSeqContext,0);
};

AnalyzeContext.prototype.ALL = function() {
    return this.getToken(SparkSqlParser.ALL, 0);
};
AnalyzeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAnalyze(this);
	}
};

AnalyzeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAnalyze(this);
	}
};

AnalyzeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAnalyze(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CreateHiveTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.columns = null; // ColTypeListContext;
    this.partitionColumns = null; // ColTypeListContext;
    this.partitionColumnNames = null; // IdentifierListContext;
    this.tableProps = null; // TablePropertyListContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CreateHiveTableContext.prototype = Object.create(StatementContext.prototype);
CreateHiveTableContext.prototype.constructor = CreateHiveTableContext;

SparkSqlParser.CreateHiveTableContext = CreateHiveTableContext;

CreateHiveTableContext.prototype.createTableHeader = function() {
    return this.getTypedRuleContext(CreateTableHeaderContext,0);
};

CreateHiveTableContext.prototype.commentSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(CommentSpecContext);
    } else {
        return this.getTypedRuleContext(CommentSpecContext,i);
    }
};

CreateHiveTableContext.prototype.bucketSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(BucketSpecContext);
    } else {
        return this.getTypedRuleContext(BucketSpecContext,i);
    }
};

CreateHiveTableContext.prototype.skewSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(SkewSpecContext);
    } else {
        return this.getTypedRuleContext(SkewSpecContext,i);
    }
};

CreateHiveTableContext.prototype.rowFormat = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(RowFormatContext);
    } else {
        return this.getTypedRuleContext(RowFormatContext,i);
    }
};

CreateHiveTableContext.prototype.createFileFormat = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(CreateFileFormatContext);
    } else {
        return this.getTypedRuleContext(CreateFileFormatContext,i);
    }
};

CreateHiveTableContext.prototype.locationSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LocationSpecContext);
    } else {
        return this.getTypedRuleContext(LocationSpecContext,i);
    }
};

CreateHiveTableContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

CreateHiveTableContext.prototype.colTypeList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ColTypeListContext);
    } else {
        return this.getTypedRuleContext(ColTypeListContext,i);
    }
};

CreateHiveTableContext.prototype.PARTITIONED = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.PARTITIONED);
    } else {
        return this.getToken(SparkSqlParser.PARTITIONED, i);
    }
};


CreateHiveTableContext.prototype.BY = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.BY);
    } else {
        return this.getToken(SparkSqlParser.BY, i);
    }
};


CreateHiveTableContext.prototype.TBLPROPERTIES = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.TBLPROPERTIES);
    } else {
        return this.getToken(SparkSqlParser.TBLPROPERTIES, i);
    }
};


CreateHiveTableContext.prototype.identifierList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierListContext);
    } else {
        return this.getTypedRuleContext(IdentifierListContext,i);
    }
};

CreateHiveTableContext.prototype.tablePropertyList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TablePropertyListContext);
    } else {
        return this.getTypedRuleContext(TablePropertyListContext,i);
    }
};

CreateHiveTableContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};
CreateHiveTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateHiveTable(this);
	}
};

CreateHiveTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCreateHiveTable(this);
	}
};

CreateHiveTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCreateHiveTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CreateFunctionContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.className = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CreateFunctionContext.prototype = Object.create(StatementContext.prototype);
CreateFunctionContext.prototype.constructor = CreateFunctionContext;

SparkSqlParser.CreateFunctionContext = CreateFunctionContext;

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

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

CreateFunctionContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

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

CreateFunctionContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

CreateFunctionContext.prototype.OR = function() {
    return this.getToken(SparkSqlParser.OR, 0);
};

CreateFunctionContext.prototype.REPLACE = function() {
    return this.getToken(SparkSqlParser.REPLACE, 0);
};

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

CreateFunctionContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

CreateFunctionContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

CreateFunctionContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

CreateFunctionContext.prototype.USING = function() {
    return this.getToken(SparkSqlParser.USING, 0);
};

CreateFunctionContext.prototype.resource = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ResourceContext);
    } else {
        return this.getTypedRuleContext(ResourceContext,i);
    }
};
CreateFunctionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateFunction(this);
	}
};

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

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


function ShowTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.ns = null; // MultipartIdentifierContext;
    this.pattern = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowTableContext.prototype = Object.create(StatementContext.prototype);
ShowTableContext.prototype.constructor = ShowTableContext;

SparkSqlParser.ShowTableContext = ShowTableContext;

ShowTableContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

ShowTableContext.prototype.EXTENDED = function() {
    return this.getToken(SparkSqlParser.EXTENDED, 0);
};

ShowTableContext.prototype.LIKE = function() {
    return this.getToken(SparkSqlParser.LIKE, 0);
};

ShowTableContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

ShowTableContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};

ShowTableContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

ShowTableContext.prototype.IN = function() {
    return this.getToken(SparkSqlParser.IN, 0);
};

ShowTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};
ShowTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowTable(this);
	}
};

ShowTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowTable(this);
	}
};

ShowTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function HiveReplaceColumnsContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.table = null; // MultipartIdentifierContext;
    this.columns = null; // QualifiedColTypeWithPositionListContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

HiveReplaceColumnsContext.prototype = Object.create(StatementContext.prototype);
HiveReplaceColumnsContext.prototype.constructor = HiveReplaceColumnsContext;

SparkSqlParser.HiveReplaceColumnsContext = HiveReplaceColumnsContext;

HiveReplaceColumnsContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

HiveReplaceColumnsContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

HiveReplaceColumnsContext.prototype.REPLACE = function() {
    return this.getToken(SparkSqlParser.REPLACE, 0);
};

HiveReplaceColumnsContext.prototype.COLUMNS = function() {
    return this.getToken(SparkSqlParser.COLUMNS, 0);
};

HiveReplaceColumnsContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

HiveReplaceColumnsContext.prototype.qualifiedColTypeWithPositionList = function() {
    return this.getTypedRuleContext(QualifiedColTypeWithPositionListContext,0);
};

HiveReplaceColumnsContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};
HiveReplaceColumnsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterHiveReplaceColumns(this);
	}
};

HiveReplaceColumnsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitHiveReplaceColumns(this);
	}
};

HiveReplaceColumnsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitHiveReplaceColumns(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CommentNamespaceContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.comment = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CommentNamespaceContext.prototype = Object.create(StatementContext.prototype);
CommentNamespaceContext.prototype.constructor = CommentNamespaceContext;

SparkSqlParser.CommentNamespaceContext = CommentNamespaceContext;

CommentNamespaceContext.prototype.COMMENT = function() {
    return this.getToken(SparkSqlParser.COMMENT, 0);
};

CommentNamespaceContext.prototype.ON = function() {
    return this.getToken(SparkSqlParser.ON, 0);
};

CommentNamespaceContext.prototype.namespace = function() {
    return this.getTypedRuleContext(NamespaceContext,0);
};

CommentNamespaceContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

CommentNamespaceContext.prototype.IS = function() {
    return this.getToken(SparkSqlParser.IS, 0);
};

CommentNamespaceContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

CommentNamespaceContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};
CommentNamespaceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCommentNamespace(this);
	}
};

CommentNamespaceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCommentNamespace(this);
	}
};

CommentNamespaceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCommentNamespace(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ResetQuotedConfigurationContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ResetQuotedConfigurationContext.prototype = Object.create(StatementContext.prototype);
ResetQuotedConfigurationContext.prototype.constructor = ResetQuotedConfigurationContext;

SparkSqlParser.ResetQuotedConfigurationContext = ResetQuotedConfigurationContext;

ResetQuotedConfigurationContext.prototype.RESET = function() {
    return this.getToken(SparkSqlParser.RESET, 0);
};

ResetQuotedConfigurationContext.prototype.configKey = function() {
    return this.getTypedRuleContext(ConfigKeyContext,0);
};
ResetQuotedConfigurationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterResetQuotedConfiguration(this);
	}
};

ResetQuotedConfigurationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitResetQuotedConfiguration(this);
	}
};

ResetQuotedConfigurationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitResetQuotedConfiguration(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CreateTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CreateTableContext.prototype = Object.create(StatementContext.prototype);
CreateTableContext.prototype.constructor = CreateTableContext;

SparkSqlParser.CreateTableContext = CreateTableContext;

CreateTableContext.prototype.createTableHeader = function() {
    return this.getTypedRuleContext(CreateTableHeaderContext,0);
};

CreateTableContext.prototype.tableProvider = function() {
    return this.getTypedRuleContext(TableProviderContext,0);
};

CreateTableContext.prototype.createTableClauses = function() {
    return this.getTypedRuleContext(CreateTableClausesContext,0);
};

CreateTableContext.prototype.colTypeList = function() {
    return this.getTypedRuleContext(ColTypeListContext,0);
};

CreateTableContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

CreateTableContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};
CreateTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateTable(this);
	}
};

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

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


function DmlStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DmlStatementContext.prototype = Object.create(StatementContext.prototype);
DmlStatementContext.prototype.constructor = DmlStatementContext;

SparkSqlParser.DmlStatementContext = DmlStatementContext;

DmlStatementContext.prototype.dmlStatementNoWith = function() {
    return this.getTypedRuleContext(DmlStatementNoWithContext,0);
};

DmlStatementContext.prototype.ctes = function() {
    return this.getTypedRuleContext(CtesContext,0);
};
DmlStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDmlStatement(this);
	}
};

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

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


function CreateTableLikeContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.target = null; // TableIdentifierContext;
    this.source = null; // TableIdentifierContext;
    this.tableProps = null; // TablePropertyListContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CreateTableLikeContext.prototype = Object.create(StatementContext.prototype);
CreateTableLikeContext.prototype.constructor = CreateTableLikeContext;

SparkSqlParser.CreateTableLikeContext = CreateTableLikeContext;

CreateTableLikeContext.prototype.CREATE = function() {
    return this.getToken(SparkSqlParser.CREATE, 0);
};

CreateTableLikeContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

CreateTableLikeContext.prototype.LIKE = function() {
    return this.getToken(SparkSqlParser.LIKE, 0);
};

CreateTableLikeContext.prototype.tableIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TableIdentifierContext);
    } else {
        return this.getTypedRuleContext(TableIdentifierContext,i);
    }
};

CreateTableLikeContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

CreateTableLikeContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

CreateTableLikeContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

CreateTableLikeContext.prototype.tableProvider = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TableProviderContext);
    } else {
        return this.getTypedRuleContext(TableProviderContext,i);
    }
};

CreateTableLikeContext.prototype.rowFormat = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(RowFormatContext);
    } else {
        return this.getTypedRuleContext(RowFormatContext,i);
    }
};

CreateTableLikeContext.prototype.createFileFormat = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(CreateFileFormatContext);
    } else {
        return this.getTypedRuleContext(CreateFileFormatContext,i);
    }
};

CreateTableLikeContext.prototype.locationSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LocationSpecContext);
    } else {
        return this.getTypedRuleContext(LocationSpecContext,i);
    }
};

CreateTableLikeContext.prototype.TBLPROPERTIES = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.TBLPROPERTIES);
    } else {
        return this.getToken(SparkSqlParser.TBLPROPERTIES, i);
    }
};


CreateTableLikeContext.prototype.tablePropertyList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TablePropertyListContext);
    } else {
        return this.getTypedRuleContext(TablePropertyListContext,i);
    }
};
CreateTableLikeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateTableLike(this);
	}
};

CreateTableLikeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCreateTableLike(this);
	}
};

CreateTableLikeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCreateTableLike(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function UncacheTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

UncacheTableContext.prototype = Object.create(StatementContext.prototype);
UncacheTableContext.prototype.constructor = UncacheTableContext;

SparkSqlParser.UncacheTableContext = UncacheTableContext;

UncacheTableContext.prototype.UNCACHE = function() {
    return this.getToken(SparkSqlParser.UNCACHE, 0);
};

UncacheTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

UncacheTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

UncacheTableContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

UncacheTableContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};
UncacheTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterUncacheTable(this);
	}
};

UncacheTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitUncacheTable(this);
	}
};

UncacheTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitUncacheTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function DropFunctionContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DropFunctionContext.prototype = Object.create(StatementContext.prototype);
DropFunctionContext.prototype.constructor = DropFunctionContext;

SparkSqlParser.DropFunctionContext = DropFunctionContext;

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

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

DropFunctionContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

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

DropFunctionContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

DropFunctionContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};
DropFunctionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDropFunction(this);
	}
};

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

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


function DescribeRelationContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.option = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DescribeRelationContext.prototype = Object.create(StatementContext.prototype);
DescribeRelationContext.prototype.constructor = DescribeRelationContext;

SparkSqlParser.DescribeRelationContext = DescribeRelationContext;

DescribeRelationContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

DescribeRelationContext.prototype.DESC = function() {
    return this.getToken(SparkSqlParser.DESC, 0);
};

DescribeRelationContext.prototype.DESCRIBE = function() {
    return this.getToken(SparkSqlParser.DESCRIBE, 0);
};

DescribeRelationContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

DescribeRelationContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};

DescribeRelationContext.prototype.describeColName = function() {
    return this.getTypedRuleContext(DescribeColNameContext,0);
};

DescribeRelationContext.prototype.EXTENDED = function() {
    return this.getToken(SparkSqlParser.EXTENDED, 0);
};

DescribeRelationContext.prototype.FORMATTED = function() {
    return this.getToken(SparkSqlParser.FORMATTED, 0);
};
DescribeRelationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDescribeRelation(this);
	}
};

DescribeRelationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDescribeRelation(this);
	}
};

DescribeRelationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDescribeRelation(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function LoadDataContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.path = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LoadDataContext.prototype = Object.create(StatementContext.prototype);
LoadDataContext.prototype.constructor = LoadDataContext;

SparkSqlParser.LoadDataContext = LoadDataContext;

LoadDataContext.prototype.LOAD = function() {
    return this.getToken(SparkSqlParser.LOAD, 0);
};

LoadDataContext.prototype.DATA = function() {
    return this.getToken(SparkSqlParser.DATA, 0);
};

LoadDataContext.prototype.INPATH = function() {
    return this.getToken(SparkSqlParser.INPATH, 0);
};

LoadDataContext.prototype.INTO = function() {
    return this.getToken(SparkSqlParser.INTO, 0);
};

LoadDataContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

LoadDataContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

LoadDataContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

LoadDataContext.prototype.LOCAL = function() {
    return this.getToken(SparkSqlParser.LOCAL, 0);
};

LoadDataContext.prototype.OVERWRITE = function() {
    return this.getToken(SparkSqlParser.OVERWRITE, 0);
};

LoadDataContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};
LoadDataContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterLoadData(this);
	}
};

LoadDataContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitLoadData(this);
	}
};

LoadDataContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitLoadData(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ShowPartitionsContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowPartitionsContext.prototype = Object.create(StatementContext.prototype);
ShowPartitionsContext.prototype.constructor = ShowPartitionsContext;

SparkSqlParser.ShowPartitionsContext = ShowPartitionsContext;

ShowPartitionsContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowPartitionsContext.prototype.PARTITIONS = function() {
    return this.getToken(SparkSqlParser.PARTITIONS, 0);
};

ShowPartitionsContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

ShowPartitionsContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};
ShowPartitionsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowPartitions(this);
	}
};

ShowPartitionsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowPartitions(this);
	}
};

ShowPartitionsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowPartitions(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function DescribeFunctionContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DescribeFunctionContext.prototype = Object.create(StatementContext.prototype);
DescribeFunctionContext.prototype.constructor = DescribeFunctionContext;

SparkSqlParser.DescribeFunctionContext = DescribeFunctionContext;

DescribeFunctionContext.prototype.FUNCTION = function() {
    return this.getToken(SparkSqlParser.FUNCTION, 0);
};

DescribeFunctionContext.prototype.describeFuncName = function() {
    return this.getTypedRuleContext(DescribeFuncNameContext,0);
};

DescribeFunctionContext.prototype.DESC = function() {
    return this.getToken(SparkSqlParser.DESC, 0);
};

DescribeFunctionContext.prototype.DESCRIBE = function() {
    return this.getToken(SparkSqlParser.DESCRIBE, 0);
};

DescribeFunctionContext.prototype.EXTENDED = function() {
    return this.getToken(SparkSqlParser.EXTENDED, 0);
};
DescribeFunctionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDescribeFunction(this);
	}
};

DescribeFunctionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDescribeFunction(this);
	}
};

DescribeFunctionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDescribeFunction(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RenameTableColumnContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.table = null; // MultipartIdentifierContext;
    this.from = null; // MultipartIdentifierContext;
    this.to = null; // ErrorCapturingIdentifierContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RenameTableColumnContext.prototype = Object.create(StatementContext.prototype);
RenameTableColumnContext.prototype.constructor = RenameTableColumnContext;

SparkSqlParser.RenameTableColumnContext = RenameTableColumnContext;

RenameTableColumnContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

RenameTableColumnContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

RenameTableColumnContext.prototype.RENAME = function() {
    return this.getToken(SparkSqlParser.RENAME, 0);
};

RenameTableColumnContext.prototype.COLUMN = function() {
    return this.getToken(SparkSqlParser.COLUMN, 0);
};

RenameTableColumnContext.prototype.TO = function() {
    return this.getToken(SparkSqlParser.TO, 0);
};

RenameTableColumnContext.prototype.multipartIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(MultipartIdentifierContext);
    } else {
        return this.getTypedRuleContext(MultipartIdentifierContext,i);
    }
};

RenameTableColumnContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};
RenameTableColumnContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRenameTableColumn(this);
	}
};

RenameTableColumnContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRenameTableColumn(this);
	}
};

RenameTableColumnContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRenameTableColumn(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function StatementDefaultContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

StatementDefaultContext.prototype = Object.create(StatementContext.prototype);
StatementDefaultContext.prototype.constructor = StatementDefaultContext;

SparkSqlParser.StatementDefaultContext = StatementDefaultContext;

StatementDefaultContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};
StatementDefaultContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterStatementDefault(this);
	}
};

StatementDefaultContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitStatementDefault(this);
	}
};

StatementDefaultContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitStatementDefault(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function HiveChangeColumnContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.table = null; // MultipartIdentifierContext;
    this.colName = null; // MultipartIdentifierContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

HiveChangeColumnContext.prototype = Object.create(StatementContext.prototype);
HiveChangeColumnContext.prototype.constructor = HiveChangeColumnContext;

SparkSqlParser.HiveChangeColumnContext = HiveChangeColumnContext;

HiveChangeColumnContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

HiveChangeColumnContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

HiveChangeColumnContext.prototype.CHANGE = function() {
    return this.getToken(SparkSqlParser.CHANGE, 0);
};

HiveChangeColumnContext.prototype.colType = function() {
    return this.getTypedRuleContext(ColTypeContext,0);
};

HiveChangeColumnContext.prototype.multipartIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(MultipartIdentifierContext);
    } else {
        return this.getTypedRuleContext(MultipartIdentifierContext,i);
    }
};

HiveChangeColumnContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};

HiveChangeColumnContext.prototype.COLUMN = function() {
    return this.getToken(SparkSqlParser.COLUMN, 0);
};

HiveChangeColumnContext.prototype.colPosition = function() {
    return this.getTypedRuleContext(ColPositionContext,0);
};
HiveChangeColumnContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterHiveChangeColumn(this);
	}
};

HiveChangeColumnContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitHiveChangeColumn(this);
	}
};

HiveChangeColumnContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitHiveChangeColumn(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SetTimeZoneContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.timezone = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetTimeZoneContext.prototype = Object.create(StatementContext.prototype);
SetTimeZoneContext.prototype.constructor = SetTimeZoneContext;

SparkSqlParser.SetTimeZoneContext = SetTimeZoneContext;

SetTimeZoneContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

SetTimeZoneContext.prototype.TIME = function() {
    return this.getToken(SparkSqlParser.TIME, 0);
};

SetTimeZoneContext.prototype.ZONE = function() {
    return this.getToken(SparkSqlParser.ZONE, 0);
};

SetTimeZoneContext.prototype.interval = function() {
    return this.getTypedRuleContext(IntervalContext,0);
};

SetTimeZoneContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

SetTimeZoneContext.prototype.LOCAL = function() {
    return this.getToken(SparkSqlParser.LOCAL, 0);
};
SetTimeZoneContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetTimeZone(this);
	}
};

SetTimeZoneContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetTimeZone(this);
	}
};

SetTimeZoneContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetTimeZone(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function DescribeQueryContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DescribeQueryContext.prototype = Object.create(StatementContext.prototype);
DescribeQueryContext.prototype.constructor = DescribeQueryContext;

SparkSqlParser.DescribeQueryContext = DescribeQueryContext;

DescribeQueryContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

DescribeQueryContext.prototype.DESC = function() {
    return this.getToken(SparkSqlParser.DESC, 0);
};

DescribeQueryContext.prototype.DESCRIBE = function() {
    return this.getToken(SparkSqlParser.DESCRIBE, 0);
};

DescribeQueryContext.prototype.QUERY = function() {
    return this.getToken(SparkSqlParser.QUERY, 0);
};
DescribeQueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDescribeQuery(this);
	}
};

DescribeQueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDescribeQuery(this);
	}
};

DescribeQueryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDescribeQuery(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function TruncateTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TruncateTableContext.prototype = Object.create(StatementContext.prototype);
TruncateTableContext.prototype.constructor = TruncateTableContext;

SparkSqlParser.TruncateTableContext = TruncateTableContext;

TruncateTableContext.prototype.TRUNCATE = function() {
    return this.getToken(SparkSqlParser.TRUNCATE, 0);
};

TruncateTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

TruncateTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

TruncateTableContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};
TruncateTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTruncateTable(this);
	}
};

TruncateTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTruncateTable(this);
	}
};

TruncateTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTruncateTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SetTableSerDeContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetTableSerDeContext.prototype = Object.create(StatementContext.prototype);
SetTableSerDeContext.prototype.constructor = SetTableSerDeContext;

SparkSqlParser.SetTableSerDeContext = SetTableSerDeContext;

SetTableSerDeContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

SetTableSerDeContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

SetTableSerDeContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

SetTableSerDeContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

SetTableSerDeContext.prototype.SERDE = function() {
    return this.getToken(SparkSqlParser.SERDE, 0);
};

SetTableSerDeContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

SetTableSerDeContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};

SetTableSerDeContext.prototype.WITH = function() {
    return this.getToken(SparkSqlParser.WITH, 0);
};

SetTableSerDeContext.prototype.SERDEPROPERTIES = function() {
    return this.getToken(SparkSqlParser.SERDEPROPERTIES, 0);
};

SetTableSerDeContext.prototype.tablePropertyList = function() {
    return this.getTypedRuleContext(TablePropertyListContext,0);
};
SetTableSerDeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetTableSerDe(this);
	}
};

SetTableSerDeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetTableSerDe(this);
	}
};

SetTableSerDeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetTableSerDe(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CreateViewContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CreateViewContext.prototype = Object.create(StatementContext.prototype);
CreateViewContext.prototype.constructor = CreateViewContext;

SparkSqlParser.CreateViewContext = CreateViewContext;

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

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

CreateViewContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

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

CreateViewContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

CreateViewContext.prototype.OR = function() {
    return this.getToken(SparkSqlParser.OR, 0);
};

CreateViewContext.prototype.REPLACE = function() {
    return this.getToken(SparkSqlParser.REPLACE, 0);
};

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

CreateViewContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

CreateViewContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

CreateViewContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

CreateViewContext.prototype.identifierCommentList = function() {
    return this.getTypedRuleContext(IdentifierCommentListContext,0);
};

CreateViewContext.prototype.commentSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(CommentSpecContext);
    } else {
        return this.getTypedRuleContext(CommentSpecContext,i);
    }
};

CreateViewContext.prototype.PARTITIONED = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.PARTITIONED);
    } else {
        return this.getToken(SparkSqlParser.PARTITIONED, i);
    }
};


CreateViewContext.prototype.ON = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.ON);
    } else {
        return this.getToken(SparkSqlParser.ON, i);
    }
};


CreateViewContext.prototype.identifierList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierListContext);
    } else {
        return this.getTypedRuleContext(IdentifierListContext,i);
    }
};

CreateViewContext.prototype.TBLPROPERTIES = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.TBLPROPERTIES);
    } else {
        return this.getToken(SparkSqlParser.TBLPROPERTIES, i);
    }
};


CreateViewContext.prototype.tablePropertyList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TablePropertyListContext);
    } else {
        return this.getTypedRuleContext(TablePropertyListContext,i);
    }
};

CreateViewContext.prototype.GLOBAL = function() {
    return this.getToken(SparkSqlParser.GLOBAL, 0);
};
CreateViewContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateView(this);
	}
};

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

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


function DropTablePartitionsContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DropTablePartitionsContext.prototype = Object.create(StatementContext.prototype);
DropTablePartitionsContext.prototype.constructor = DropTablePartitionsContext;

SparkSqlParser.DropTablePartitionsContext = DropTablePartitionsContext;

DropTablePartitionsContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

DropTablePartitionsContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

DropTablePartitionsContext.prototype.DROP = function() {
    return this.getToken(SparkSqlParser.DROP, 0);
};

DropTablePartitionsContext.prototype.partitionSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(PartitionSpecContext);
    } else {
        return this.getTypedRuleContext(PartitionSpecContext,i);
    }
};

DropTablePartitionsContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

DropTablePartitionsContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};

DropTablePartitionsContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

DropTablePartitionsContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

DropTablePartitionsContext.prototype.PURGE = function() {
    return this.getToken(SparkSqlParser.PURGE, 0);
};
DropTablePartitionsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDropTablePartitions(this);
	}
};

DropTablePartitionsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDropTablePartitions(this);
	}
};

DropTablePartitionsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDropTablePartitions(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SetConfigurationContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetConfigurationContext.prototype = Object.create(StatementContext.prototype);
SetConfigurationContext.prototype.constructor = SetConfigurationContext;

SparkSqlParser.SetConfigurationContext = SetConfigurationContext;

SetConfigurationContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};
SetConfigurationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetConfiguration(this);
	}
};

SetConfigurationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetConfiguration(this);
	}
};

SetConfigurationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetConfiguration(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function DropTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DropTableContext.prototype = Object.create(StatementContext.prototype);
DropTableContext.prototype.constructor = DropTableContext;

SparkSqlParser.DropTableContext = DropTableContext;

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

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

DropTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

DropTableContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

DropTableContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

DropTableContext.prototype.PURGE = function() {
    return this.getToken(SparkSqlParser.PURGE, 0);
};
DropTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDropTable(this);
	}
};

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

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


function DescribeNamespaceContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DescribeNamespaceContext.prototype = Object.create(StatementContext.prototype);
DescribeNamespaceContext.prototype.constructor = DescribeNamespaceContext;

SparkSqlParser.DescribeNamespaceContext = DescribeNamespaceContext;

DescribeNamespaceContext.prototype.namespace = function() {
    return this.getTypedRuleContext(NamespaceContext,0);
};

DescribeNamespaceContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

DescribeNamespaceContext.prototype.DESC = function() {
    return this.getToken(SparkSqlParser.DESC, 0);
};

DescribeNamespaceContext.prototype.DESCRIBE = function() {
    return this.getToken(SparkSqlParser.DESCRIBE, 0);
};

DescribeNamespaceContext.prototype.EXTENDED = function() {
    return this.getToken(SparkSqlParser.EXTENDED, 0);
};
DescribeNamespaceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDescribeNamespace(this);
	}
};

DescribeNamespaceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDescribeNamespace(this);
	}
};

DescribeNamespaceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDescribeNamespace(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function AlterTableAlterColumnContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.table = null; // MultipartIdentifierContext;
    this.column = null; // MultipartIdentifierContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AlterTableAlterColumnContext.prototype = Object.create(StatementContext.prototype);
AlterTableAlterColumnContext.prototype.constructor = AlterTableAlterColumnContext;

SparkSqlParser.AlterTableAlterColumnContext = AlterTableAlterColumnContext;

AlterTableAlterColumnContext.prototype.ALTER = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.ALTER);
    } else {
        return this.getToken(SparkSqlParser.ALTER, i);
    }
};


AlterTableAlterColumnContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

AlterTableAlterColumnContext.prototype.multipartIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(MultipartIdentifierContext);
    } else {
        return this.getTypedRuleContext(MultipartIdentifierContext,i);
    }
};

AlterTableAlterColumnContext.prototype.CHANGE = function() {
    return this.getToken(SparkSqlParser.CHANGE, 0);
};

AlterTableAlterColumnContext.prototype.COLUMN = function() {
    return this.getToken(SparkSqlParser.COLUMN, 0);
};

AlterTableAlterColumnContext.prototype.alterColumnAction = function() {
    return this.getTypedRuleContext(AlterColumnActionContext,0);
};
AlterTableAlterColumnContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAlterTableAlterColumn(this);
	}
};

AlterTableAlterColumnContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAlterTableAlterColumn(this);
	}
};

AlterTableAlterColumnContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAlterTableAlterColumn(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RefreshFunctionContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RefreshFunctionContext.prototype = Object.create(StatementContext.prototype);
RefreshFunctionContext.prototype.constructor = RefreshFunctionContext;

SparkSqlParser.RefreshFunctionContext = RefreshFunctionContext;

RefreshFunctionContext.prototype.REFRESH = function() {
    return this.getToken(SparkSqlParser.REFRESH, 0);
};

RefreshFunctionContext.prototype.FUNCTION = function() {
    return this.getToken(SparkSqlParser.FUNCTION, 0);
};

RefreshFunctionContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};
RefreshFunctionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRefreshFunction(this);
	}
};

RefreshFunctionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRefreshFunction(this);
	}
};

RefreshFunctionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRefreshFunction(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CommentTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.comment = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CommentTableContext.prototype = Object.create(StatementContext.prototype);
CommentTableContext.prototype.constructor = CommentTableContext;

SparkSqlParser.CommentTableContext = CommentTableContext;

CommentTableContext.prototype.COMMENT = function() {
    return this.getToken(SparkSqlParser.COMMENT, 0);
};

CommentTableContext.prototype.ON = function() {
    return this.getToken(SparkSqlParser.ON, 0);
};

CommentTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

CommentTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

CommentTableContext.prototype.IS = function() {
    return this.getToken(SparkSqlParser.IS, 0);
};

CommentTableContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

CommentTableContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};
CommentTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCommentTable(this);
	}
};

CommentTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCommentTable(this);
	}
};

CommentTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCommentTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CreateNamespaceContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CreateNamespaceContext.prototype = Object.create(StatementContext.prototype);
CreateNamespaceContext.prototype.constructor = CreateNamespaceContext;

SparkSqlParser.CreateNamespaceContext = CreateNamespaceContext;

CreateNamespaceContext.prototype.CREATE = function() {
    return this.getToken(SparkSqlParser.CREATE, 0);
};

CreateNamespaceContext.prototype.namespace = function() {
    return this.getTypedRuleContext(NamespaceContext,0);
};

CreateNamespaceContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

CreateNamespaceContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

CreateNamespaceContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

CreateNamespaceContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

CreateNamespaceContext.prototype.commentSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(CommentSpecContext);
    } else {
        return this.getTypedRuleContext(CommentSpecContext,i);
    }
};

CreateNamespaceContext.prototype.locationSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LocationSpecContext);
    } else {
        return this.getTypedRuleContext(LocationSpecContext,i);
    }
};

CreateNamespaceContext.prototype.WITH = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.WITH);
    } else {
        return this.getToken(SparkSqlParser.WITH, i);
    }
};


CreateNamespaceContext.prototype.tablePropertyList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TablePropertyListContext);
    } else {
        return this.getTypedRuleContext(TablePropertyListContext,i);
    }
};

CreateNamespaceContext.prototype.DBPROPERTIES = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.DBPROPERTIES);
    } else {
        return this.getToken(SparkSqlParser.DBPROPERTIES, i);
    }
};


CreateNamespaceContext.prototype.PROPERTIES = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.PROPERTIES);
    } else {
        return this.getToken(SparkSqlParser.PROPERTIES, i);
    }
};

CreateNamespaceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateNamespace(this);
	}
};

CreateNamespaceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCreateNamespace(this);
	}
};

CreateNamespaceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCreateNamespace(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ShowTblPropertiesContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.table = null; // MultipartIdentifierContext;
    this.key = null; // TablePropertyKeyContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowTblPropertiesContext.prototype = Object.create(StatementContext.prototype);
ShowTblPropertiesContext.prototype.constructor = ShowTblPropertiesContext;

SparkSqlParser.ShowTblPropertiesContext = ShowTblPropertiesContext;

ShowTblPropertiesContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowTblPropertiesContext.prototype.TBLPROPERTIES = function() {
    return this.getToken(SparkSqlParser.TBLPROPERTIES, 0);
};

ShowTblPropertiesContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

ShowTblPropertiesContext.prototype.tablePropertyKey = function() {
    return this.getTypedRuleContext(TablePropertyKeyContext,0);
};
ShowTblPropertiesContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowTblProperties(this);
	}
};

ShowTblPropertiesContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowTblProperties(this);
	}
};

ShowTblPropertiesContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowTblProperties(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function UnsetTablePropertiesContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

UnsetTablePropertiesContext.prototype = Object.create(StatementContext.prototype);
UnsetTablePropertiesContext.prototype.constructor = UnsetTablePropertiesContext;

SparkSqlParser.UnsetTablePropertiesContext = UnsetTablePropertiesContext;

UnsetTablePropertiesContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

UnsetTablePropertiesContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

UnsetTablePropertiesContext.prototype.UNSET = function() {
    return this.getToken(SparkSqlParser.UNSET, 0);
};

UnsetTablePropertiesContext.prototype.TBLPROPERTIES = function() {
    return this.getToken(SparkSqlParser.TBLPROPERTIES, 0);
};

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

UnsetTablePropertiesContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

UnsetTablePropertiesContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};

UnsetTablePropertiesContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

UnsetTablePropertiesContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};
UnsetTablePropertiesContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterUnsetTableProperties(this);
	}
};

UnsetTablePropertiesContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitUnsetTableProperties(this);
	}
};

UnsetTablePropertiesContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitUnsetTableProperties(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SetTableLocationContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetTableLocationContext.prototype = Object.create(StatementContext.prototype);
SetTableLocationContext.prototype.constructor = SetTableLocationContext;

SparkSqlParser.SetTableLocationContext = SetTableLocationContext;

SetTableLocationContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

SetTableLocationContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

SetTableLocationContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

SetTableLocationContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

SetTableLocationContext.prototype.locationSpec = function() {
    return this.getTypedRuleContext(LocationSpecContext,0);
};

SetTableLocationContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};
SetTableLocationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetTableLocation(this);
	}
};

SetTableLocationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetTableLocation(this);
	}
};

SetTableLocationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetTableLocation(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function DropTableColumnsContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.columns = null; // MultipartIdentifierListContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DropTableColumnsContext.prototype = Object.create(StatementContext.prototype);
DropTableColumnsContext.prototype.constructor = DropTableColumnsContext;

SparkSqlParser.DropTableColumnsContext = DropTableColumnsContext;

DropTableColumnsContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

DropTableColumnsContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

DropTableColumnsContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

DropTableColumnsContext.prototype.DROP = function() {
    return this.getToken(SparkSqlParser.DROP, 0);
};

DropTableColumnsContext.prototype.COLUMN = function() {
    return this.getToken(SparkSqlParser.COLUMN, 0);
};

DropTableColumnsContext.prototype.COLUMNS = function() {
    return this.getToken(SparkSqlParser.COLUMNS, 0);
};

DropTableColumnsContext.prototype.multipartIdentifierList = function() {
    return this.getTypedRuleContext(MultipartIdentifierListContext,0);
};
DropTableColumnsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDropTableColumns(this);
	}
};

DropTableColumnsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDropTableColumns(this);
	}
};

DropTableColumnsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDropTableColumns(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ShowViewsContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.pattern = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowViewsContext.prototype = Object.create(StatementContext.prototype);
ShowViewsContext.prototype.constructor = ShowViewsContext;

SparkSqlParser.ShowViewsContext = ShowViewsContext;

ShowViewsContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowViewsContext.prototype.VIEWS = function() {
    return this.getToken(SparkSqlParser.VIEWS, 0);
};

ShowViewsContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

ShowViewsContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

ShowViewsContext.prototype.IN = function() {
    return this.getToken(SparkSqlParser.IN, 0);
};

ShowViewsContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

ShowViewsContext.prototype.LIKE = function() {
    return this.getToken(SparkSqlParser.LIKE, 0);
};
ShowViewsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowViews(this);
	}
};

ShowViewsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowViews(this);
	}
};

ShowViewsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowViews(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ShowFunctionsContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.pattern = null; // Token;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ShowFunctionsContext.prototype = Object.create(StatementContext.prototype);
ShowFunctionsContext.prototype.constructor = ShowFunctionsContext;

SparkSqlParser.ShowFunctionsContext = ShowFunctionsContext;

ShowFunctionsContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

ShowFunctionsContext.prototype.FUNCTIONS = function() {
    return this.getToken(SparkSqlParser.FUNCTIONS, 0);
};

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

ShowFunctionsContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

ShowFunctionsContext.prototype.LIKE = function() {
    return this.getToken(SparkSqlParser.LIKE, 0);
};

ShowFunctionsContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};
ShowFunctionsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterShowFunctions(this);
	}
};

ShowFunctionsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitShowFunctions(this);
	}
};

ShowFunctionsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitShowFunctions(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CacheTableContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CacheTableContext.prototype = Object.create(StatementContext.prototype);
CacheTableContext.prototype.constructor = CacheTableContext;

SparkSqlParser.CacheTableContext = CacheTableContext;

CacheTableContext.prototype.CACHE = function() {
    return this.getToken(SparkSqlParser.CACHE, 0);
};

CacheTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

CacheTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

CacheTableContext.prototype.LAZY = function() {
    return this.getToken(SparkSqlParser.LAZY, 0);
};

CacheTableContext.prototype.OPTIONS = function() {
    return this.getToken(SparkSqlParser.OPTIONS, 0);
};

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

CacheTableContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

CacheTableContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};
CacheTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCacheTable(this);
	}
};

CacheTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCacheTable(this);
	}
};

CacheTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCacheTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function AddTableColumnsContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.columns = null; // QualifiedColTypeWithPositionListContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AddTableColumnsContext.prototype = Object.create(StatementContext.prototype);
AddTableColumnsContext.prototype.constructor = AddTableColumnsContext;

SparkSqlParser.AddTableColumnsContext = AddTableColumnsContext;

AddTableColumnsContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

AddTableColumnsContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

AddTableColumnsContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

AddTableColumnsContext.prototype.ADD = function() {
    return this.getToken(SparkSqlParser.ADD, 0);
};

AddTableColumnsContext.prototype.COLUMN = function() {
    return this.getToken(SparkSqlParser.COLUMN, 0);
};

AddTableColumnsContext.prototype.COLUMNS = function() {
    return this.getToken(SparkSqlParser.COLUMNS, 0);
};

AddTableColumnsContext.prototype.qualifiedColTypeWithPositionList = function() {
    return this.getTypedRuleContext(QualifiedColTypeWithPositionListContext,0);
};
AddTableColumnsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAddTableColumns(this);
	}
};

AddTableColumnsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAddTableColumns(this);
	}
};

AddTableColumnsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAddTableColumns(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SetTablePropertiesContext(parser, ctx) {
	StatementContext.call(this, parser);
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetTablePropertiesContext.prototype = Object.create(StatementContext.prototype);
SetTablePropertiesContext.prototype.constructor = SetTablePropertiesContext;

SparkSqlParser.SetTablePropertiesContext = SetTablePropertiesContext;

SetTablePropertiesContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

SetTablePropertiesContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

SetTablePropertiesContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

SetTablePropertiesContext.prototype.TBLPROPERTIES = function() {
    return this.getToken(SparkSqlParser.TBLPROPERTIES, 0);
};

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

SetTablePropertiesContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

SetTablePropertiesContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};
SetTablePropertiesContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetTableProperties(this);
	}
};

SetTablePropertiesContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetTableProperties(this);
	}
};

SetTablePropertiesContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetTableProperties(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.StatementContext = StatementContext;

SparkSqlParser.prototype.statement = function() {

    var localctx = new StatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 16, SparkSqlParser.RULE_statement);
    var _la = 0; // Token type
    try {
        this.state = 1048;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,112,this._ctx);
        switch(la_) {
        case 1:
            localctx = new StatementDefaultContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 304;
            this.query();
            break;

        case 2:
            localctx = new DmlStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 306;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.WITH) {
                this.state = 305;
                this.ctes();
            }

            this.state = 308;
            this.dmlStatementNoWith();
            break;

        case 3:
            localctx = new UseContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 309;
            this.match(SparkSqlParser.USE);
            this.state = 311;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,4,this._ctx);
            if(la_===1) {
                this.state = 310;
                this.match(SparkSqlParser.NAMESPACE);

            }
            this.state = 313;
            this.multipartIdentifier();
            break;

        case 4:
            localctx = new CreateNamespaceContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 314;
            this.match(SparkSqlParser.CREATE);
            this.state = 315;
            this.namespace();
            this.state = 319;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,5,this._ctx);
            if(la_===1) {
                this.state = 316;
                this.match(SparkSqlParser.IF);
                this.state = 317;
                this.match(SparkSqlParser.NOT);
                this.state = 318;
                this.match(SparkSqlParser.EXISTS);

            }
            this.state = 321;
            this.multipartIdentifier();
            this.state = 329;
            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 = 327;
                    this._errHandler.sync(this);
                    switch(this._input.LA(1)) {
                    case SparkSqlParser.COMMENT:
                        this.state = 322;
                        this.commentSpec();
                        break;
                    case SparkSqlParser.LOCATION:
                        this.state = 323;
                        this.locationSpec();
                        break;
                    case SparkSqlParser.WITH:
                        this.state = 324;
                        this.match(SparkSqlParser.WITH);
                        this.state = 325;
                        _la = this._input.LA(1);
                        if(!(_la===SparkSqlParser.DBPROPERTIES || _la===SparkSqlParser.PROPERTIES)) {
                        this._errHandler.recoverInline(this);
                        }
                        else {
                        	this._errHandler.reportMatch(this);
                            this.consume();
                        }
                        this.state = 326;
                        this.tablePropertyList();
                        break;
                    default:
                        throw new antlr4.error.NoViableAltException(this);
                    } 
                }
                this.state = 331;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,7,this._ctx);
            }

            break;

        case 5:
            localctx = new SetNamespacePropertiesContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 332;
            this.match(SparkSqlParser.ALTER);
            this.state = 333;
            this.namespace();
            this.state = 334;
            this.multipartIdentifier();
            this.state = 335;
            this.match(SparkSqlParser.SET);
            this.state = 336;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.DBPROPERTIES || _la===SparkSqlParser.PROPERTIES)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 337;
            this.tablePropertyList();
            break;

        case 6:
            localctx = new SetNamespaceLocationContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 339;
            this.match(SparkSqlParser.ALTER);
            this.state = 340;
            this.namespace();
            this.state = 341;
            this.multipartIdentifier();
            this.state = 342;
            this.match(SparkSqlParser.SET);
            this.state = 343;
            this.locationSpec();
            break;

        case 7:
            localctx = new DropNamespaceContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 345;
            this.match(SparkSqlParser.DROP);
            this.state = 346;
            this.namespace();
            this.state = 349;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,8,this._ctx);
            if(la_===1) {
                this.state = 347;
                this.match(SparkSqlParser.IF);
                this.state = 348;
                this.match(SparkSqlParser.EXISTS);

            }
            this.state = 351;
            this.multipartIdentifier();
            this.state = 353;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.CASCADE || _la===SparkSqlParser.RESTRICT) {
                this.state = 352;
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.CASCADE || _la===SparkSqlParser.RESTRICT)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
            }

            break;

        case 8:
            localctx = new ShowNamespacesContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 355;
            this.match(SparkSqlParser.SHOW);
            this.state = 356;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.DATABASES || _la===SparkSqlParser.NAMESPACES)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 359;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,10,this._ctx);
            if(la_===1) {
                this.state = 357;
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.FROM || _la===SparkSqlParser.IN)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 358;
                this.multipartIdentifier();

            }
            this.state = 365;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.LIKE || _la===SparkSqlParser.STRING) {
                this.state = 362;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.LIKE) {
                    this.state = 361;
                    this.match(SparkSqlParser.LIKE);
                }

                this.state = 364;
                localctx.pattern = this.match(SparkSqlParser.STRING);
            }

            break;

        case 9:
            localctx = new CreateTableContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 367;
            this.createTableHeader();
            this.state = 372;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.T__0) {
                this.state = 368;
                this.match(SparkSqlParser.T__0);
                this.state = 369;
                this.colTypeList();
                this.state = 370;
                this.match(SparkSqlParser.T__1);
            }

            this.state = 374;
            this.tableProvider();
            this.state = 375;
            this.createTableClauses();
            this.state = 380;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,15,this._ctx);
            if(la_===1) {
                this.state = 377;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.AS) {
                    this.state = 376;
                    this.match(SparkSqlParser.AS);
                }

                this.state = 379;
                this.query();

            }
            break;

        case 10:
            localctx = new CreateHiveTableContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 382;
            this.createTableHeader();
            this.state = 387;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,16,this._ctx);
            if(la_===1) {
                this.state = 383;
                this.match(SparkSqlParser.T__0);
                this.state = 384;
                localctx.columns = this.colTypeList();
                this.state = 385;
                this.match(SparkSqlParser.T__1);

            }
            this.state = 410;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,19,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 408;
                    this._errHandler.sync(this);
                    switch(this._input.LA(1)) {
                    case SparkSqlParser.COMMENT:
                        this.state = 389;
                        this.commentSpec();
                        break;
                    case SparkSqlParser.PARTITIONED:
                        this.state = 399;
                        this._errHandler.sync(this);
                        var la_ = this._interp.adaptivePredict(this._input,17,this._ctx);
                        switch(la_) {
                        case 1:
                            this.state = 390;
                            this.match(SparkSqlParser.PARTITIONED);
                            this.state = 391;
                            this.match(SparkSqlParser.BY);
                            this.state = 392;
                            this.match(SparkSqlParser.T__0);
                            this.state = 393;
                            localctx.partitionColumns = this.colTypeList();
                            this.state = 394;
                            this.match(SparkSqlParser.T__1);
                            break;

                        case 2:
                            this.state = 396;
                            this.match(SparkSqlParser.PARTITIONED);
                            this.state = 397;
                            this.match(SparkSqlParser.BY);
                            this.state = 398;
                            localctx.partitionColumnNames = this.identifierList();
                            break;

                        }
                        break;
                    case SparkSqlParser.CLUSTERED:
                        this.state = 401;
                        this.bucketSpec();
                        break;
                    case SparkSqlParser.SKEWED:
                        this.state = 402;
                        this.skewSpec();
                        break;
                    case SparkSqlParser.ROW:
                        this.state = 403;
                        this.rowFormat();
                        break;
                    case SparkSqlParser.STORED:
                        this.state = 404;
                        this.createFileFormat();
                        break;
                    case SparkSqlParser.LOCATION:
                        this.state = 405;
                        this.locationSpec();
                        break;
                    case SparkSqlParser.TBLPROPERTIES:
                        this.state = 406;
                        this.match(SparkSqlParser.TBLPROPERTIES);
                        this.state = 407;
                        localctx.tableProps = this.tablePropertyList();
                        break;
                    default:
                        throw new antlr4.error.NoViableAltException(this);
                    } 
                }
                this.state = 412;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,19,this._ctx);
            }

            this.state = 417;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,21,this._ctx);
            if(la_===1) {
                this.state = 414;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.AS) {
                    this.state = 413;
                    this.match(SparkSqlParser.AS);
                }

                this.state = 416;
                this.query();

            }
            break;

        case 11:
            localctx = new CreateTableLikeContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 419;
            this.match(SparkSqlParser.CREATE);
            this.state = 420;
            this.match(SparkSqlParser.TABLE);
            this.state = 424;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,22,this._ctx);
            if(la_===1) {
                this.state = 421;
                this.match(SparkSqlParser.IF);
                this.state = 422;
                this.match(SparkSqlParser.NOT);
                this.state = 423;
                this.match(SparkSqlParser.EXISTS);

            }
            this.state = 426;
            localctx.target = this.tableIdentifier();
            this.state = 427;
            this.match(SparkSqlParser.LIKE);
            this.state = 428;
            localctx.source = this.tableIdentifier();
            this.state = 437;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.LOCATION || ((((_la - 198)) & ~0x1f) == 0 && ((1 << (_la - 198)) & ((1 << (SparkSqlParser.ROW - 198)) | (1 << (SparkSqlParser.STORED - 198)) | (1 << (SparkSqlParser.TBLPROPERTIES - 198)))) !== 0) || _la===SparkSqlParser.USING) {
                this.state = 435;
                this._errHandler.sync(this);
                switch(this._input.LA(1)) {
                case SparkSqlParser.USING:
                    this.state = 429;
                    this.tableProvider();
                    break;
                case SparkSqlParser.ROW:
                    this.state = 430;
                    this.rowFormat();
                    break;
                case SparkSqlParser.STORED:
                    this.state = 431;
                    this.createFileFormat();
                    break;
                case SparkSqlParser.LOCATION:
                    this.state = 432;
                    this.locationSpec();
                    break;
                case SparkSqlParser.TBLPROPERTIES:
                    this.state = 433;
                    this.match(SparkSqlParser.TBLPROPERTIES);
                    this.state = 434;
                    localctx.tableProps = this.tablePropertyList();
                    break;
                default:
                    throw new antlr4.error.NoViableAltException(this);
                }
                this.state = 439;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            break;

        case 12:
            localctx = new ReplaceTableContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 440;
            this.replaceTableHeader();
            this.state = 445;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.T__0) {
                this.state = 441;
                this.match(SparkSqlParser.T__0);
                this.state = 442;
                this.colTypeList();
                this.state = 443;
                this.match(SparkSqlParser.T__1);
            }

            this.state = 447;
            this.tableProvider();
            this.state = 448;
            this.createTableClauses();
            this.state = 453;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,27,this._ctx);
            if(la_===1) {
                this.state = 450;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.AS) {
                    this.state = 449;
                    this.match(SparkSqlParser.AS);
                }

                this.state = 452;
                this.query();

            }
            break;

        case 13:
            localctx = new AnalyzeContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 455;
            this.match(SparkSqlParser.ANALYZE);
            this.state = 456;
            this.match(SparkSqlParser.TABLE);
            this.state = 457;
            this.multipartIdentifier();
            this.state = 459;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 458;
                this.partitionSpec();
            }

            this.state = 461;
            this.match(SparkSqlParser.COMPUTE);
            this.state = 462;
            this.match(SparkSqlParser.STATISTICS);
            this.state = 470;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,29,this._ctx);
            if(la_===1) {
                this.state = 463;
                this.identifier();

            } else if(la_===2) {
                this.state = 464;
                this.match(SparkSqlParser.FOR);
                this.state = 465;
                this.match(SparkSqlParser.COLUMNS);
                this.state = 466;
                this.identifierSeq();

            } else if(la_===3) {
                this.state = 467;
                this.match(SparkSqlParser.FOR);
                this.state = 468;
                this.match(SparkSqlParser.ALL);
                this.state = 469;
                this.match(SparkSqlParser.COLUMNS);

            }
            break;

        case 14:
            localctx = new AddTableColumnsContext(this, localctx);
            this.enterOuterAlt(localctx, 14);
            this.state = 472;
            this.match(SparkSqlParser.ALTER);
            this.state = 473;
            this.match(SparkSqlParser.TABLE);
            this.state = 474;
            this.multipartIdentifier();
            this.state = 475;
            this.match(SparkSqlParser.ADD);
            this.state = 476;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.COLUMN || _la===SparkSqlParser.COLUMNS)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 477;
            localctx.columns = this.qualifiedColTypeWithPositionList();
            break;

        case 15:
            localctx = new AddTableColumnsContext(this, localctx);
            this.enterOuterAlt(localctx, 15);
            this.state = 479;
            this.match(SparkSqlParser.ALTER);
            this.state = 480;
            this.match(SparkSqlParser.TABLE);
            this.state = 481;
            this.multipartIdentifier();
            this.state = 482;
            this.match(SparkSqlParser.ADD);
            this.state = 483;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.COLUMN || _la===SparkSqlParser.COLUMNS)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 484;
            this.match(SparkSqlParser.T__0);
            this.state = 485;
            localctx.columns = this.qualifiedColTypeWithPositionList();
            this.state = 486;
            this.match(SparkSqlParser.T__1);
            break;

        case 16:
            localctx = new RenameTableColumnContext(this, localctx);
            this.enterOuterAlt(localctx, 16);
            this.state = 488;
            this.match(SparkSqlParser.ALTER);
            this.state = 489;
            this.match(SparkSqlParser.TABLE);
            this.state = 490;
            localctx.table = this.multipartIdentifier();
            this.state = 491;
            this.match(SparkSqlParser.RENAME);
            this.state = 492;
            this.match(SparkSqlParser.COLUMN);
            this.state = 493;
            localctx.from = this.multipartIdentifier();
            this.state = 494;
            this.match(SparkSqlParser.TO);
            this.state = 495;
            localctx.to = this.errorCapturingIdentifier();
            break;

        case 17:
            localctx = new DropTableColumnsContext(this, localctx);
            this.enterOuterAlt(localctx, 17);
            this.state = 497;
            this.match(SparkSqlParser.ALTER);
            this.state = 498;
            this.match(SparkSqlParser.TABLE);
            this.state = 499;
            this.multipartIdentifier();
            this.state = 500;
            this.match(SparkSqlParser.DROP);
            this.state = 501;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.COLUMN || _la===SparkSqlParser.COLUMNS)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 502;
            this.match(SparkSqlParser.T__0);
            this.state = 503;
            localctx.columns = this.multipartIdentifierList();
            this.state = 504;
            this.match(SparkSqlParser.T__1);
            break;

        case 18:
            localctx = new DropTableColumnsContext(this, localctx);
            this.enterOuterAlt(localctx, 18);
            this.state = 506;
            this.match(SparkSqlParser.ALTER);
            this.state = 507;
            this.match(SparkSqlParser.TABLE);
            this.state = 508;
            this.multipartIdentifier();
            this.state = 509;
            this.match(SparkSqlParser.DROP);
            this.state = 510;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.COLUMN || _la===SparkSqlParser.COLUMNS)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 511;
            localctx.columns = this.multipartIdentifierList();
            break;

        case 19:
            localctx = new RenameTableContext(this, localctx);
            this.enterOuterAlt(localctx, 19);
            this.state = 513;
            this.match(SparkSqlParser.ALTER);
            this.state = 514;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.TABLE || _la===SparkSqlParser.VIEW)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 515;
            localctx.from = this.multipartIdentifier();
            this.state = 516;
            this.match(SparkSqlParser.RENAME);
            this.state = 517;
            this.match(SparkSqlParser.TO);
            this.state = 518;
            localctx.to = this.multipartIdentifier();
            break;

        case 20:
            localctx = new SetTablePropertiesContext(this, localctx);
            this.enterOuterAlt(localctx, 20);
            this.state = 520;
            this.match(SparkSqlParser.ALTER);
            this.state = 521;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.TABLE || _la===SparkSqlParser.VIEW)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 522;
            this.multipartIdentifier();
            this.state = 523;
            this.match(SparkSqlParser.SET);
            this.state = 524;
            this.match(SparkSqlParser.TBLPROPERTIES);
            this.state = 525;
            this.tablePropertyList();
            break;

        case 21:
            localctx = new UnsetTablePropertiesContext(this, localctx);
            this.enterOuterAlt(localctx, 21);
            this.state = 527;
            this.match(SparkSqlParser.ALTER);
            this.state = 528;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.TABLE || _la===SparkSqlParser.VIEW)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 529;
            this.multipartIdentifier();
            this.state = 530;
            this.match(SparkSqlParser.UNSET);
            this.state = 531;
            this.match(SparkSqlParser.TBLPROPERTIES);
            this.state = 534;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.IF) {
                this.state = 532;
                this.match(SparkSqlParser.IF);
                this.state = 533;
                this.match(SparkSqlParser.EXISTS);
            }

            this.state = 536;
            this.tablePropertyList();
            break;

        case 22:
            localctx = new AlterTableAlterColumnContext(this, localctx);
            this.enterOuterAlt(localctx, 22);
            this.state = 538;
            this.match(SparkSqlParser.ALTER);
            this.state = 539;
            this.match(SparkSqlParser.TABLE);
            this.state = 540;
            localctx.table = this.multipartIdentifier();
            this.state = 541;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.ALTER || _la===SparkSqlParser.CHANGE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 543;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,31,this._ctx);
            if(la_===1) {
                this.state = 542;
                this.match(SparkSqlParser.COLUMN);

            }
            this.state = 545;
            localctx.column = this.multipartIdentifier();
            this.state = 547;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,32,this._ctx);
            if(la_===1) {
                this.state = 546;
                this.alterColumnAction();

            }
            break;

        case 23:
            localctx = new HiveChangeColumnContext(this, localctx);
            this.enterOuterAlt(localctx, 23);
            this.state = 549;
            this.match(SparkSqlParser.ALTER);
            this.state = 550;
            this.match(SparkSqlParser.TABLE);
            this.state = 551;
            localctx.table = this.multipartIdentifier();
            this.state = 553;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 552;
                this.partitionSpec();
            }

            this.state = 555;
            this.match(SparkSqlParser.CHANGE);
            this.state = 557;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,34,this._ctx);
            if(la_===1) {
                this.state = 556;
                this.match(SparkSqlParser.COLUMN);

            }
            this.state = 559;
            localctx.colName = this.multipartIdentifier();
            this.state = 560;
            this.colType();
            this.state = 562;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.AFTER || _la===SparkSqlParser.FIRST) {
                this.state = 561;
                this.colPosition();
            }

            break;

        case 24:
            localctx = new HiveReplaceColumnsContext(this, localctx);
            this.enterOuterAlt(localctx, 24);
            this.state = 564;
            this.match(SparkSqlParser.ALTER);
            this.state = 565;
            this.match(SparkSqlParser.TABLE);
            this.state = 566;
            localctx.table = this.multipartIdentifier();
            this.state = 568;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 567;
                this.partitionSpec();
            }

            this.state = 570;
            this.match(SparkSqlParser.REPLACE);
            this.state = 571;
            this.match(SparkSqlParser.COLUMNS);
            this.state = 572;
            this.match(SparkSqlParser.T__0);
            this.state = 573;
            localctx.columns = this.qualifiedColTypeWithPositionList();
            this.state = 574;
            this.match(SparkSqlParser.T__1);
            break;

        case 25:
            localctx = new SetTableSerDeContext(this, localctx);
            this.enterOuterAlt(localctx, 25);
            this.state = 576;
            this.match(SparkSqlParser.ALTER);
            this.state = 577;
            this.match(SparkSqlParser.TABLE);
            this.state = 578;
            this.multipartIdentifier();
            this.state = 580;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 579;
                this.partitionSpec();
            }

            this.state = 582;
            this.match(SparkSqlParser.SET);
            this.state = 583;
            this.match(SparkSqlParser.SERDE);
            this.state = 584;
            this.match(SparkSqlParser.STRING);
            this.state = 588;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,38,this._ctx);
            if(la_===1) {
                this.state = 585;
                this.match(SparkSqlParser.WITH);
                this.state = 586;
                this.match(SparkSqlParser.SERDEPROPERTIES);
                this.state = 587;
                this.tablePropertyList();

            }
            break;

        case 26:
            localctx = new SetTableSerDeContext(this, localctx);
            this.enterOuterAlt(localctx, 26);
            this.state = 590;
            this.match(SparkSqlParser.ALTER);
            this.state = 591;
            this.match(SparkSqlParser.TABLE);
            this.state = 592;
            this.multipartIdentifier();
            this.state = 594;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 593;
                this.partitionSpec();
            }

            this.state = 596;
            this.match(SparkSqlParser.SET);
            this.state = 597;
            this.match(SparkSqlParser.SERDEPROPERTIES);
            this.state = 598;
            this.tablePropertyList();
            break;

        case 27:
            localctx = new AddTablePartitionContext(this, localctx);
            this.enterOuterAlt(localctx, 27);
            this.state = 600;
            this.match(SparkSqlParser.ALTER);
            this.state = 601;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.TABLE || _la===SparkSqlParser.VIEW)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 602;
            this.multipartIdentifier();
            this.state = 603;
            this.match(SparkSqlParser.ADD);
            this.state = 607;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.IF) {
                this.state = 604;
                this.match(SparkSqlParser.IF);
                this.state = 605;
                this.match(SparkSqlParser.NOT);
                this.state = 606;
                this.match(SparkSqlParser.EXISTS);
            }

            this.state = 610; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 609;
                this.partitionSpecLocation();
                this.state = 612; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===SparkSqlParser.PARTITION);
            break;

        case 28:
            localctx = new RenameTablePartitionContext(this, localctx);
            this.enterOuterAlt(localctx, 28);
            this.state = 614;
            this.match(SparkSqlParser.ALTER);
            this.state = 615;
            this.match(SparkSqlParser.TABLE);
            this.state = 616;
            this.multipartIdentifier();
            this.state = 617;
            localctx.from = this.partitionSpec();
            this.state = 618;
            this.match(SparkSqlParser.RENAME);
            this.state = 619;
            this.match(SparkSqlParser.TO);
            this.state = 620;
            localctx.to = this.partitionSpec();
            break;

        case 29:
            localctx = new DropTablePartitionsContext(this, localctx);
            this.enterOuterAlt(localctx, 29);
            this.state = 622;
            this.match(SparkSqlParser.ALTER);
            this.state = 623;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.TABLE || _la===SparkSqlParser.VIEW)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 624;
            this.multipartIdentifier();
            this.state = 625;
            this.match(SparkSqlParser.DROP);
            this.state = 628;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.IF) {
                this.state = 626;
                this.match(SparkSqlParser.IF);
                this.state = 627;
                this.match(SparkSqlParser.EXISTS);
            }

            this.state = 630;
            this.partitionSpec();
            this.state = 635;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__2) {
                this.state = 631;
                this.match(SparkSqlParser.T__2);
                this.state = 632;
                this.partitionSpec();
                this.state = 637;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 639;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PURGE) {
                this.state = 638;
                this.match(SparkSqlParser.PURGE);
            }

            break;

        case 30:
            localctx = new SetTableLocationContext(this, localctx);
            this.enterOuterAlt(localctx, 30);
            this.state = 641;
            this.match(SparkSqlParser.ALTER);
            this.state = 642;
            this.match(SparkSqlParser.TABLE);
            this.state = 643;
            this.multipartIdentifier();
            this.state = 645;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 644;
                this.partitionSpec();
            }

            this.state = 647;
            this.match(SparkSqlParser.SET);
            this.state = 648;
            this.locationSpec();
            break;

        case 31:
            localctx = new RecoverPartitionsContext(this, localctx);
            this.enterOuterAlt(localctx, 31);
            this.state = 650;
            this.match(SparkSqlParser.ALTER);
            this.state = 651;
            this.match(SparkSqlParser.TABLE);
            this.state = 652;
            this.multipartIdentifier();
            this.state = 653;
            this.match(SparkSqlParser.RECOVER);
            this.state = 654;
            this.match(SparkSqlParser.PARTITIONS);
            break;

        case 32:
            localctx = new DropTableContext(this, localctx);
            this.enterOuterAlt(localctx, 32);
            this.state = 656;
            this.match(SparkSqlParser.DROP);
            this.state = 657;
            this.match(SparkSqlParser.TABLE);
            this.state = 660;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,46,this._ctx);
            if(la_===1) {
                this.state = 658;
                this.match(SparkSqlParser.IF);
                this.state = 659;
                this.match(SparkSqlParser.EXISTS);

            }
            this.state = 662;
            this.multipartIdentifier();
            this.state = 664;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PURGE) {
                this.state = 663;
                this.match(SparkSqlParser.PURGE);
            }

            break;

        case 33:
            localctx = new DropViewContext(this, localctx);
            this.enterOuterAlt(localctx, 33);
            this.state = 666;
            this.match(SparkSqlParser.DROP);
            this.state = 667;
            this.match(SparkSqlParser.VIEW);
            this.state = 670;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,48,this._ctx);
            if(la_===1) {
                this.state = 668;
                this.match(SparkSqlParser.IF);
                this.state = 669;
                this.match(SparkSqlParser.EXISTS);

            }
            this.state = 672;
            this.multipartIdentifier();
            break;

        case 34:
            localctx = new CreateViewContext(this, localctx);
            this.enterOuterAlt(localctx, 34);
            this.state = 673;
            this.match(SparkSqlParser.CREATE);
            this.state = 676;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OR) {
                this.state = 674;
                this.match(SparkSqlParser.OR);
                this.state = 675;
                this.match(SparkSqlParser.REPLACE);
            }

            this.state = 682;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.GLOBAL || _la===SparkSqlParser.TEMPORARY) {
                this.state = 679;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.GLOBAL) {
                    this.state = 678;
                    this.match(SparkSqlParser.GLOBAL);
                }

                this.state = 681;
                this.match(SparkSqlParser.TEMPORARY);
            }

            this.state = 684;
            this.match(SparkSqlParser.VIEW);
            this.state = 688;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,52,this._ctx);
            if(la_===1) {
                this.state = 685;
                this.match(SparkSqlParser.IF);
                this.state = 686;
                this.match(SparkSqlParser.NOT);
                this.state = 687;
                this.match(SparkSqlParser.EXISTS);

            }
            this.state = 690;
            this.multipartIdentifier();
            this.state = 692;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.T__0) {
                this.state = 691;
                this.identifierCommentList();
            }

            this.state = 702;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.COMMENT || _la===SparkSqlParser.PARTITIONED || _la===SparkSqlParser.TBLPROPERTIES) {
                this.state = 700;
                this._errHandler.sync(this);
                switch(this._input.LA(1)) {
                case SparkSqlParser.COMMENT:
                    this.state = 694;
                    this.commentSpec();
                    break;
                case SparkSqlParser.PARTITIONED:
                    this.state = 695;
                    this.match(SparkSqlParser.PARTITIONED);
                    this.state = 696;
                    this.match(SparkSqlParser.ON);
                    this.state = 697;
                    this.identifierList();
                    break;
                case SparkSqlParser.TBLPROPERTIES:
                    this.state = 698;
                    this.match(SparkSqlParser.TBLPROPERTIES);
                    this.state = 699;
                    this.tablePropertyList();
                    break;
                default:
                    throw new antlr4.error.NoViableAltException(this);
                }
                this.state = 704;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 705;
            this.match(SparkSqlParser.AS);
            this.state = 706;
            this.query();
            break;

        case 35:
            localctx = new CreateTempViewUsingContext(this, localctx);
            this.enterOuterAlt(localctx, 35);
            this.state = 708;
            this.match(SparkSqlParser.CREATE);
            this.state = 711;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OR) {
                this.state = 709;
                this.match(SparkSqlParser.OR);
                this.state = 710;
                this.match(SparkSqlParser.REPLACE);
            }

            this.state = 714;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.GLOBAL) {
                this.state = 713;
                this.match(SparkSqlParser.GLOBAL);
            }

            this.state = 716;
            this.match(SparkSqlParser.TEMPORARY);
            this.state = 717;
            this.match(SparkSqlParser.VIEW);
            this.state = 718;
            this.tableIdentifier();
            this.state = 723;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.T__0) {
                this.state = 719;
                this.match(SparkSqlParser.T__0);
                this.state = 720;
                this.colTypeList();
                this.state = 721;
                this.match(SparkSqlParser.T__1);
            }

            this.state = 725;
            this.tableProvider();
            this.state = 728;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OPTIONS) {
                this.state = 726;
                this.match(SparkSqlParser.OPTIONS);
                this.state = 727;
                this.tablePropertyList();
            }

            break;

        case 36:
            localctx = new AlterViewQueryContext(this, localctx);
            this.enterOuterAlt(localctx, 36);
            this.state = 730;
            this.match(SparkSqlParser.ALTER);
            this.state = 731;
            this.match(SparkSqlParser.VIEW);
            this.state = 732;
            this.multipartIdentifier();
            this.state = 734;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.AS) {
                this.state = 733;
                this.match(SparkSqlParser.AS);
            }

            this.state = 736;
            this.query();
            break;

        case 37:
            localctx = new CreateFunctionContext(this, localctx);
            this.enterOuterAlt(localctx, 37);
            this.state = 738;
            this.match(SparkSqlParser.CREATE);
            this.state = 741;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OR) {
                this.state = 739;
                this.match(SparkSqlParser.OR);
                this.state = 740;
                this.match(SparkSqlParser.REPLACE);
            }

            this.state = 744;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.TEMPORARY) {
                this.state = 743;
                this.match(SparkSqlParser.TEMPORARY);
            }

            this.state = 746;
            this.match(SparkSqlParser.FUNCTION);
            this.state = 750;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,63,this._ctx);
            if(la_===1) {
                this.state = 747;
                this.match(SparkSqlParser.IF);
                this.state = 748;
                this.match(SparkSqlParser.NOT);
                this.state = 749;
                this.match(SparkSqlParser.EXISTS);

            }
            this.state = 752;
            this.multipartIdentifier();
            this.state = 753;
            this.match(SparkSqlParser.AS);
            this.state = 754;
            localctx.className = this.match(SparkSqlParser.STRING);
            this.state = 764;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.USING) {
                this.state = 755;
                this.match(SparkSqlParser.USING);
                this.state = 756;
                this.resource();
                this.state = 761;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===SparkSqlParser.T__2) {
                    this.state = 757;
                    this.match(SparkSqlParser.T__2);
                    this.state = 758;
                    this.resource();
                    this.state = 763;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
            }

            break;

        case 38:
            localctx = new DropFunctionContext(this, localctx);
            this.enterOuterAlt(localctx, 38);
            this.state = 766;
            this.match(SparkSqlParser.DROP);
            this.state = 768;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.TEMPORARY) {
                this.state = 767;
                this.match(SparkSqlParser.TEMPORARY);
            }

            this.state = 770;
            this.match(SparkSqlParser.FUNCTION);
            this.state = 773;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,67,this._ctx);
            if(la_===1) {
                this.state = 771;
                this.match(SparkSqlParser.IF);
                this.state = 772;
                this.match(SparkSqlParser.EXISTS);

            }
            this.state = 775;
            this.multipartIdentifier();
            break;

        case 39:
            localctx = new ExplainContext(this, localctx);
            this.enterOuterAlt(localctx, 39);
            this.state = 776;
            this.match(SparkSqlParser.EXPLAIN);
            this.state = 778;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.CODEGEN || _la===SparkSqlParser.COST || _la===SparkSqlParser.EXTENDED || _la===SparkSqlParser.FORMATTED || _la===SparkSqlParser.LOGICAL) {
                this.state = 777;
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.CODEGEN || _la===SparkSqlParser.COST || _la===SparkSqlParser.EXTENDED || _la===SparkSqlParser.FORMATTED || _la===SparkSqlParser.LOGICAL)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
            }

            this.state = 780;
            this.statement();
            break;

        case 40:
            localctx = new ShowTablesContext(this, localctx);
            this.enterOuterAlt(localctx, 40);
            this.state = 781;
            this.match(SparkSqlParser.SHOW);
            this.state = 782;
            this.match(SparkSqlParser.TABLES);
            this.state = 785;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,69,this._ctx);
            if(la_===1) {
                this.state = 783;
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.FROM || _la===SparkSqlParser.IN)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 784;
                this.multipartIdentifier();

            }
            this.state = 791;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.LIKE || _la===SparkSqlParser.STRING) {
                this.state = 788;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.LIKE) {
                    this.state = 787;
                    this.match(SparkSqlParser.LIKE);
                }

                this.state = 790;
                localctx.pattern = this.match(SparkSqlParser.STRING);
            }

            break;

        case 41:
            localctx = new ShowTableContext(this, localctx);
            this.enterOuterAlt(localctx, 41);
            this.state = 793;
            this.match(SparkSqlParser.SHOW);
            this.state = 794;
            this.match(SparkSqlParser.TABLE);
            this.state = 795;
            this.match(SparkSqlParser.EXTENDED);
            this.state = 798;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.FROM || _la===SparkSqlParser.IN) {
                this.state = 796;
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.FROM || _la===SparkSqlParser.IN)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 797;
                localctx.ns = this.multipartIdentifier();
            }

            this.state = 800;
            this.match(SparkSqlParser.LIKE);
            this.state = 801;
            localctx.pattern = this.match(SparkSqlParser.STRING);
            this.state = 803;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 802;
                this.partitionSpec();
            }

            break;

        case 42:
            localctx = new ShowTblPropertiesContext(this, localctx);
            this.enterOuterAlt(localctx, 42);
            this.state = 805;
            this.match(SparkSqlParser.SHOW);
            this.state = 806;
            this.match(SparkSqlParser.TBLPROPERTIES);
            this.state = 807;
            localctx.table = this.multipartIdentifier();
            this.state = 812;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,74,this._ctx);
            if(la_===1) {
                this.state = 808;
                this.match(SparkSqlParser.T__0);
                this.state = 809;
                localctx.key = this.tablePropertyKey();
                this.state = 810;
                this.match(SparkSqlParser.T__1);

            }
            break;

        case 43:
            localctx = new ShowColumnsContext(this, localctx);
            this.enterOuterAlt(localctx, 43);
            this.state = 814;
            this.match(SparkSqlParser.SHOW);
            this.state = 815;
            this.match(SparkSqlParser.COLUMNS);
            this.state = 816;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.FROM || _la===SparkSqlParser.IN)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 817;
            localctx.table = this.multipartIdentifier();
            this.state = 820;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,75,this._ctx);
            if(la_===1) {
                this.state = 818;
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.FROM || _la===SparkSqlParser.IN)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 819;
                localctx.ns = this.multipartIdentifier();

            }
            break;

        case 44:
            localctx = new ShowViewsContext(this, localctx);
            this.enterOuterAlt(localctx, 44);
            this.state = 822;
            this.match(SparkSqlParser.SHOW);
            this.state = 823;
            this.match(SparkSqlParser.VIEWS);
            this.state = 826;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,76,this._ctx);
            if(la_===1) {
                this.state = 824;
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.FROM || _la===SparkSqlParser.IN)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 825;
                this.multipartIdentifier();

            }
            this.state = 832;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.LIKE || _la===SparkSqlParser.STRING) {
                this.state = 829;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.LIKE) {
                    this.state = 828;
                    this.match(SparkSqlParser.LIKE);
                }

                this.state = 831;
                localctx.pattern = this.match(SparkSqlParser.STRING);
            }

            break;

        case 45:
            localctx = new ShowPartitionsContext(this, localctx);
            this.enterOuterAlt(localctx, 45);
            this.state = 834;
            this.match(SparkSqlParser.SHOW);
            this.state = 835;
            this.match(SparkSqlParser.PARTITIONS);
            this.state = 836;
            this.multipartIdentifier();
            this.state = 838;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 837;
                this.partitionSpec();
            }

            break;

        case 46:
            localctx = new ShowFunctionsContext(this, localctx);
            this.enterOuterAlt(localctx, 46);
            this.state = 840;
            this.match(SparkSqlParser.SHOW);
            this.state = 842;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,80,this._ctx);
            if(la_===1) {
                this.state = 841;
                this.identifier();

            }
            this.state = 844;
            this.match(SparkSqlParser.FUNCTIONS);
            this.state = 852;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,83,this._ctx);
            if(la_===1) {
                this.state = 846;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,81,this._ctx);
                if(la_===1) {
                    this.state = 845;
                    this.match(SparkSqlParser.LIKE);

                }
                this.state = 850;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,82,this._ctx);
                switch(la_) {
                case 1:
                    this.state = 848;
                    this.multipartIdentifier();
                    break;

                case 2:
                    this.state = 849;
                    localctx.pattern = this.match(SparkSqlParser.STRING);
                    break;

                }

            }
            break;

        case 47:
            localctx = new ShowCreateTableContext(this, localctx);
            this.enterOuterAlt(localctx, 47);
            this.state = 854;
            this.match(SparkSqlParser.SHOW);
            this.state = 855;
            this.match(SparkSqlParser.CREATE);
            this.state = 856;
            this.match(SparkSqlParser.TABLE);
            this.state = 857;
            this.multipartIdentifier();
            this.state = 860;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.AS) {
                this.state = 858;
                this.match(SparkSqlParser.AS);
                this.state = 859;
                this.match(SparkSqlParser.SERDE);
            }

            break;

        case 48:
            localctx = new ShowCurrentNamespaceContext(this, localctx);
            this.enterOuterAlt(localctx, 48);
            this.state = 862;
            this.match(SparkSqlParser.SHOW);
            this.state = 863;
            this.match(SparkSqlParser.CURRENT);
            this.state = 864;
            this.match(SparkSqlParser.NAMESPACE);
            break;

        case 49:
            localctx = new DescribeFunctionContext(this, localctx);
            this.enterOuterAlt(localctx, 49);
            this.state = 865;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.DESC || _la===SparkSqlParser.DESCRIBE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 866;
            this.match(SparkSqlParser.FUNCTION);
            this.state = 868;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,85,this._ctx);
            if(la_===1) {
                this.state = 867;
                this.match(SparkSqlParser.EXTENDED);

            }
            this.state = 870;
            this.describeFuncName();
            break;

        case 50:
            localctx = new DescribeNamespaceContext(this, localctx);
            this.enterOuterAlt(localctx, 50);
            this.state = 871;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.DESC || _la===SparkSqlParser.DESCRIBE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 872;
            this.namespace();
            this.state = 874;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,86,this._ctx);
            if(la_===1) {
                this.state = 873;
                this.match(SparkSqlParser.EXTENDED);

            }
            this.state = 876;
            this.multipartIdentifier();
            break;

        case 51:
            localctx = new DescribeRelationContext(this, localctx);
            this.enterOuterAlt(localctx, 51);
            this.state = 878;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.DESC || _la===SparkSqlParser.DESCRIBE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 880;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,87,this._ctx);
            if(la_===1) {
                this.state = 879;
                this.match(SparkSqlParser.TABLE);

            }
            this.state = 883;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,88,this._ctx);
            if(la_===1) {
                this.state = 882;
                localctx.option = this._input.LT(1);
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.EXTENDED || _la===SparkSqlParser.FORMATTED)) {
                    localctx.option = this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }

            }
            this.state = 885;
            this.multipartIdentifier();
            this.state = 887;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,89,this._ctx);
            if(la_===1) {
                this.state = 886;
                this.partitionSpec();

            }
            this.state = 890;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,90,this._ctx);
            if(la_===1) {
                this.state = 889;
                this.describeColName();

            }
            break;

        case 52:
            localctx = new DescribeQueryContext(this, localctx);
            this.enterOuterAlt(localctx, 52);
            this.state = 892;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.DESC || _la===SparkSqlParser.DESCRIBE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 894;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.QUERY) {
                this.state = 893;
                this.match(SparkSqlParser.QUERY);
            }

            this.state = 896;
            this.query();
            break;

        case 53:
            localctx = new CommentNamespaceContext(this, localctx);
            this.enterOuterAlt(localctx, 53);
            this.state = 897;
            this.match(SparkSqlParser.COMMENT);
            this.state = 898;
            this.match(SparkSqlParser.ON);
            this.state = 899;
            this.namespace();
            this.state = 900;
            this.multipartIdentifier();
            this.state = 901;
            this.match(SparkSqlParser.IS);
            this.state = 902;
            localctx.comment = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.NULL || _la===SparkSqlParser.STRING)) {
                localctx.comment = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 54:
            localctx = new CommentTableContext(this, localctx);
            this.enterOuterAlt(localctx, 54);
            this.state = 904;
            this.match(SparkSqlParser.COMMENT);
            this.state = 905;
            this.match(SparkSqlParser.ON);
            this.state = 906;
            this.match(SparkSqlParser.TABLE);
            this.state = 907;
            this.multipartIdentifier();
            this.state = 908;
            this.match(SparkSqlParser.IS);
            this.state = 909;
            localctx.comment = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.NULL || _la===SparkSqlParser.STRING)) {
                localctx.comment = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 55:
            localctx = new RefreshTableContext(this, localctx);
            this.enterOuterAlt(localctx, 55);
            this.state = 911;
            this.match(SparkSqlParser.REFRESH);
            this.state = 912;
            this.match(SparkSqlParser.TABLE);
            this.state = 913;
            this.multipartIdentifier();
            break;

        case 56:
            localctx = new RefreshFunctionContext(this, localctx);
            this.enterOuterAlt(localctx, 56);
            this.state = 914;
            this.match(SparkSqlParser.REFRESH);
            this.state = 915;
            this.match(SparkSqlParser.FUNCTION);
            this.state = 916;
            this.multipartIdentifier();
            break;

        case 57:
            localctx = new RefreshResourceContext(this, localctx);
            this.enterOuterAlt(localctx, 57);
            this.state = 917;
            this.match(SparkSqlParser.REFRESH);
            this.state = 925;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,93,this._ctx);
            switch(la_) {
            case 1:
                this.state = 918;
                this.match(SparkSqlParser.STRING);
                break;

            case 2:
                this.state = 922;
                this._errHandler.sync(this);
                var _alt = this._interp.adaptivePredict(this._input,92,this._ctx)
                while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                    if(_alt===1+1) {
                        this.state = 919;
                        this.matchWildcard(); 
                    }
                    this.state = 924;
                    this._errHandler.sync(this);
                    _alt = this._interp.adaptivePredict(this._input,92,this._ctx);
                }

                break;

            }
            break;

        case 58:
            localctx = new CacheTableContext(this, localctx);
            this.enterOuterAlt(localctx, 58);
            this.state = 927;
            this.match(SparkSqlParser.CACHE);
            this.state = 929;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.LAZY) {
                this.state = 928;
                this.match(SparkSqlParser.LAZY);
            }

            this.state = 931;
            this.match(SparkSqlParser.TABLE);
            this.state = 932;
            this.multipartIdentifier();
            this.state = 935;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OPTIONS) {
                this.state = 933;
                this.match(SparkSqlParser.OPTIONS);
                this.state = 934;
                this.tablePropertyList();
            }

            this.state = 941;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,97,this._ctx);
            if(la_===1) {
                this.state = 938;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.AS) {
                    this.state = 937;
                    this.match(SparkSqlParser.AS);
                }

                this.state = 940;
                this.query();

            }
            break;

        case 59:
            localctx = new UncacheTableContext(this, localctx);
            this.enterOuterAlt(localctx, 59);
            this.state = 943;
            this.match(SparkSqlParser.UNCACHE);
            this.state = 944;
            this.match(SparkSqlParser.TABLE);
            this.state = 947;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,98,this._ctx);
            if(la_===1) {
                this.state = 945;
                this.match(SparkSqlParser.IF);
                this.state = 946;
                this.match(SparkSqlParser.EXISTS);

            }
            this.state = 949;
            this.multipartIdentifier();
            break;

        case 60:
            localctx = new ClearCacheContext(this, localctx);
            this.enterOuterAlt(localctx, 60);
            this.state = 950;
            this.match(SparkSqlParser.CLEAR);
            this.state = 951;
            this.match(SparkSqlParser.CACHE);
            break;

        case 61:
            localctx = new LoadDataContext(this, localctx);
            this.enterOuterAlt(localctx, 61);
            this.state = 952;
            this.match(SparkSqlParser.LOAD);
            this.state = 953;
            this.match(SparkSqlParser.DATA);
            this.state = 955;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.LOCAL) {
                this.state = 954;
                this.match(SparkSqlParser.LOCAL);
            }

            this.state = 957;
            this.match(SparkSqlParser.INPATH);
            this.state = 958;
            localctx.path = this.match(SparkSqlParser.STRING);
            this.state = 960;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OVERWRITE) {
                this.state = 959;
                this.match(SparkSqlParser.OVERWRITE);
            }

            this.state = 962;
            this.match(SparkSqlParser.INTO);
            this.state = 963;
            this.match(SparkSqlParser.TABLE);
            this.state = 964;
            this.multipartIdentifier();
            this.state = 966;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 965;
                this.partitionSpec();
            }

            break;

        case 62:
            localctx = new TruncateTableContext(this, localctx);
            this.enterOuterAlt(localctx, 62);
            this.state = 968;
            this.match(SparkSqlParser.TRUNCATE);
            this.state = 969;
            this.match(SparkSqlParser.TABLE);
            this.state = 970;
            this.multipartIdentifier();
            this.state = 972;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 971;
                this.partitionSpec();
            }

            break;

        case 63:
            localctx = new RepairTableContext(this, localctx);
            this.enterOuterAlt(localctx, 63);
            this.state = 974;
            this.match(SparkSqlParser.MSCK);
            this.state = 975;
            this.match(SparkSqlParser.REPAIR);
            this.state = 976;
            this.match(SparkSqlParser.TABLE);
            this.state = 977;
            this.multipartIdentifier();
            break;

        case 64:
            localctx = new ManageResourceContext(this, localctx);
            this.enterOuterAlt(localctx, 64);
            this.state = 978;
            localctx.op = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.ADD || _la===SparkSqlParser.LIST)) {
                localctx.op = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 979;
            this.identifier();
            this.state = 987;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,104,this._ctx);
            switch(la_) {
            case 1:
                this.state = 980;
                this.match(SparkSqlParser.STRING);
                break;

            case 2:
                this.state = 984;
                this._errHandler.sync(this);
                var _alt = this._interp.adaptivePredict(this._input,103,this._ctx)
                while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                    if(_alt===1+1) {
                        this.state = 981;
                        this.matchWildcard(); 
                    }
                    this.state = 986;
                    this._errHandler.sync(this);
                    _alt = this._interp.adaptivePredict(this._input,103,this._ctx);
                }

                break;

            }
            break;

        case 65:
            localctx = new FailNativeCommandContext(this, localctx);
            this.enterOuterAlt(localctx, 65);
            this.state = 989;
            this.match(SparkSqlParser.SET);
            this.state = 990;
            this.match(SparkSqlParser.ROLE);
            this.state = 994;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,105,this._ctx)
            while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1+1) {
                    this.state = 991;
                    this.matchWildcard(); 
                }
                this.state = 996;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,105,this._ctx);
            }

            break;

        case 66:
            localctx = new SetTimeZoneContext(this, localctx);
            this.enterOuterAlt(localctx, 66);
            this.state = 997;
            this.match(SparkSqlParser.SET);
            this.state = 998;
            this.match(SparkSqlParser.TIME);
            this.state = 999;
            this.match(SparkSqlParser.ZONE);
            this.state = 1000;
            this.interval();
            break;

        case 67:
            localctx = new SetTimeZoneContext(this, localctx);
            this.enterOuterAlt(localctx, 67);
            this.state = 1001;
            this.match(SparkSqlParser.SET);
            this.state = 1002;
            this.match(SparkSqlParser.TIME);
            this.state = 1003;
            this.match(SparkSqlParser.ZONE);
            this.state = 1004;
            localctx.timezone = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.LOCAL || _la===SparkSqlParser.STRING)) {
                localctx.timezone = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 68:
            localctx = new SetTimeZoneContext(this, localctx);
            this.enterOuterAlt(localctx, 68);
            this.state = 1005;
            this.match(SparkSqlParser.SET);
            this.state = 1006;
            this.match(SparkSqlParser.TIME);
            this.state = 1007;
            this.match(SparkSqlParser.ZONE);
            this.state = 1011;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,106,this._ctx)
            while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1+1) {
                    this.state = 1008;
                    this.matchWildcard(); 
                }
                this.state = 1013;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,106,this._ctx);
            }

            break;

        case 69:
            localctx = new SetQuotedConfigurationContext(this, localctx);
            this.enterOuterAlt(localctx, 69);
            this.state = 1014;
            this.match(SparkSqlParser.SET);
            this.state = 1015;
            this.configKey();
            this.state = 1023;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.EQ) {
                this.state = 1016;
                this.match(SparkSqlParser.EQ);
                this.state = 1020;
                this._errHandler.sync(this);
                var _alt = this._interp.adaptivePredict(this._input,107,this._ctx)
                while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                    if(_alt===1+1) {
                        this.state = 1017;
                        this.matchWildcard(); 
                    }
                    this.state = 1022;
                    this._errHandler.sync(this);
                    _alt = this._interp.adaptivePredict(this._input,107,this._ctx);
                }

            }

            break;

        case 70:
            localctx = new SetConfigurationContext(this, localctx);
            this.enterOuterAlt(localctx, 70);
            this.state = 1025;
            this.match(SparkSqlParser.SET);
            this.state = 1029;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,109,this._ctx)
            while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1+1) {
                    this.state = 1026;
                    this.matchWildcard(); 
                }
                this.state = 1031;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,109,this._ctx);
            }

            break;

        case 71:
            localctx = new ResetQuotedConfigurationContext(this, localctx);
            this.enterOuterAlt(localctx, 71);
            this.state = 1032;
            this.match(SparkSqlParser.RESET);
            this.state = 1033;
            this.configKey();
            break;

        case 72:
            localctx = new ResetConfigurationContext(this, localctx);
            this.enterOuterAlt(localctx, 72);
            this.state = 1034;
            this.match(SparkSqlParser.RESET);
            this.state = 1038;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,110,this._ctx)
            while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1+1) {
                    this.state = 1035;
                    this.matchWildcard(); 
                }
                this.state = 1040;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,110,this._ctx);
            }

            break;

        case 73:
            localctx = new FailNativeCommandContext(this, localctx);
            this.enterOuterAlt(localctx, 73);
            this.state = 1041;
            this.unsupportedHiveNativeCommands();
            this.state = 1045;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,111,this._ctx)
            while(_alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1+1) {
                    this.state = 1042;
                    this.matchWildcard(); 
                }
                this.state = 1047;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,111,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 ConfigKeyContext(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 = SparkSqlParser.RULE_configKey;
    return this;
}

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

ConfigKeyContext.prototype.quotedIdentifier = function() {
    return this.getTypedRuleContext(QuotedIdentifierContext,0);
};

ConfigKeyContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterConfigKey(this);
	}
};

ConfigKeyContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitConfigKey(this);
	}
};

ConfigKeyContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitConfigKey(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ConfigKeyContext = ConfigKeyContext;

SparkSqlParser.prototype.configKey = function() {

    var localctx = new ConfigKeyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 18, SparkSqlParser.RULE_configKey);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1050;
        this.quotedIdentifier();
    } 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 UnsupportedHiveNativeCommandsContext(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 = SparkSqlParser.RULE_unsupportedHiveNativeCommands;
    this.kw1 = null; // Token
    this.kw2 = null; // Token
    this.kw3 = null; // Token
    this.kw4 = null; // Token
    this.kw5 = null; // Token
    this.kw6 = null; // Token
    return this;
}

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

UnsupportedHiveNativeCommandsContext.prototype.CREATE = function() {
    return this.getToken(SparkSqlParser.CREATE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.ROLE = function() {
    return this.getToken(SparkSqlParser.ROLE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.DROP = function() {
    return this.getToken(SparkSqlParser.DROP, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.GRANT = function() {
    return this.getToken(SparkSqlParser.GRANT, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.REVOKE = function() {
    return this.getToken(SparkSqlParser.REVOKE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.PRINCIPALS = function() {
    return this.getToken(SparkSqlParser.PRINCIPALS, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.ROLES = function() {
    return this.getToken(SparkSqlParser.ROLES, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.CURRENT = function() {
    return this.getToken(SparkSqlParser.CURRENT, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.EXPORT = function() {
    return this.getToken(SparkSqlParser.EXPORT, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.IMPORT = function() {
    return this.getToken(SparkSqlParser.IMPORT, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.COMPACTIONS = function() {
    return this.getToken(SparkSqlParser.COMPACTIONS, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.TRANSACTIONS = function() {
    return this.getToken(SparkSqlParser.TRANSACTIONS, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.INDEXES = function() {
    return this.getToken(SparkSqlParser.INDEXES, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.LOCKS = function() {
    return this.getToken(SparkSqlParser.LOCKS, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.INDEX = function() {
    return this.getToken(SparkSqlParser.INDEX, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.LOCK = function() {
    return this.getToken(SparkSqlParser.LOCK, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.DATABASE = function() {
    return this.getToken(SparkSqlParser.DATABASE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.UNLOCK = function() {
    return this.getToken(SparkSqlParser.UNLOCK, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.TEMPORARY = function() {
    return this.getToken(SparkSqlParser.TEMPORARY, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.MACRO = function() {
    return this.getToken(SparkSqlParser.MACRO, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.tableIdentifier = function() {
    return this.getTypedRuleContext(TableIdentifierContext,0);
};

UnsupportedHiveNativeCommandsContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.CLUSTERED = function() {
    return this.getToken(SparkSqlParser.CLUSTERED, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.BY = function() {
    return this.getToken(SparkSqlParser.BY, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.SORTED = function() {
    return this.getToken(SparkSqlParser.SORTED, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.SKEWED = function() {
    return this.getToken(SparkSqlParser.SKEWED, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.STORED = function() {
    return this.getToken(SparkSqlParser.STORED, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.DIRECTORIES = function() {
    return this.getToken(SparkSqlParser.DIRECTORIES, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.LOCATION = function() {
    return this.getToken(SparkSqlParser.LOCATION, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.EXCHANGE = function() {
    return this.getToken(SparkSqlParser.EXCHANGE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.PARTITION = function() {
    return this.getToken(SparkSqlParser.PARTITION, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.ARCHIVE = function() {
    return this.getToken(SparkSqlParser.ARCHIVE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.UNARCHIVE = function() {
    return this.getToken(SparkSqlParser.UNARCHIVE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.TOUCH = function() {
    return this.getToken(SparkSqlParser.TOUCH, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.COMPACT = function() {
    return this.getToken(SparkSqlParser.COMPACT, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};

UnsupportedHiveNativeCommandsContext.prototype.CONCATENATE = function() {
    return this.getToken(SparkSqlParser.CONCATENATE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.FILEFORMAT = function() {
    return this.getToken(SparkSqlParser.FILEFORMAT, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.REPLACE = function() {
    return this.getToken(SparkSqlParser.REPLACE, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.COLUMNS = function() {
    return this.getToken(SparkSqlParser.COLUMNS, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.START = function() {
    return this.getToken(SparkSqlParser.START, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.TRANSACTION = function() {
    return this.getToken(SparkSqlParser.TRANSACTION, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.COMMIT = function() {
    return this.getToken(SparkSqlParser.COMMIT, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.ROLLBACK = function() {
    return this.getToken(SparkSqlParser.ROLLBACK, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.DFS = function() {
    return this.getToken(SparkSqlParser.DFS, 0);
};

UnsupportedHiveNativeCommandsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterUnsupportedHiveNativeCommands(this);
	}
};

UnsupportedHiveNativeCommandsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitUnsupportedHiveNativeCommands(this);
	}
};

UnsupportedHiveNativeCommandsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitUnsupportedHiveNativeCommands(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.UnsupportedHiveNativeCommandsContext = UnsupportedHiveNativeCommandsContext;

SparkSqlParser.prototype.unsupportedHiveNativeCommands = function() {

    var localctx = new UnsupportedHiveNativeCommandsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 20, SparkSqlParser.RULE_unsupportedHiveNativeCommands);
    var _la = 0; // Token type
    try {
        this.state = 1220;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,120,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1052;
            localctx.kw1 = this.match(SparkSqlParser.CREATE);
            this.state = 1053;
            localctx.kw2 = this.match(SparkSqlParser.ROLE);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1054;
            localctx.kw1 = this.match(SparkSqlParser.DROP);
            this.state = 1055;
            localctx.kw2 = this.match(SparkSqlParser.ROLE);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1056;
            localctx.kw1 = this.match(SparkSqlParser.GRANT);
            this.state = 1058;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,113,this._ctx);
            if(la_===1) {
                this.state = 1057;
                localctx.kw2 = this.match(SparkSqlParser.ROLE);

            }
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1060;
            localctx.kw1 = this.match(SparkSqlParser.REVOKE);
            this.state = 1062;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,114,this._ctx);
            if(la_===1) {
                this.state = 1061;
                localctx.kw2 = this.match(SparkSqlParser.ROLE);

            }
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1064;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1065;
            localctx.kw2 = this.match(SparkSqlParser.GRANT);
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1066;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1067;
            localctx.kw2 = this.match(SparkSqlParser.ROLE);
            this.state = 1069;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,115,this._ctx);
            if(la_===1) {
                this.state = 1068;
                localctx.kw3 = this.match(SparkSqlParser.GRANT);

            }
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 1071;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1072;
            localctx.kw2 = this.match(SparkSqlParser.PRINCIPALS);
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 1073;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1074;
            localctx.kw2 = this.match(SparkSqlParser.ROLES);
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 1075;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1076;
            localctx.kw2 = this.match(SparkSqlParser.CURRENT);
            this.state = 1077;
            localctx.kw3 = this.match(SparkSqlParser.ROLES);
            break;

        case 10:
            this.enterOuterAlt(localctx, 10);
            this.state = 1078;
            localctx.kw1 = this.match(SparkSqlParser.EXPORT);
            this.state = 1079;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            break;

        case 11:
            this.enterOuterAlt(localctx, 11);
            this.state = 1080;
            localctx.kw1 = this.match(SparkSqlParser.IMPORT);
            this.state = 1081;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            break;

        case 12:
            this.enterOuterAlt(localctx, 12);
            this.state = 1082;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1083;
            localctx.kw2 = this.match(SparkSqlParser.COMPACTIONS);
            break;

        case 13:
            this.enterOuterAlt(localctx, 13);
            this.state = 1084;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1085;
            localctx.kw2 = this.match(SparkSqlParser.CREATE);
            this.state = 1086;
            localctx.kw3 = this.match(SparkSqlParser.TABLE);
            break;

        case 14:
            this.enterOuterAlt(localctx, 14);
            this.state = 1087;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1088;
            localctx.kw2 = this.match(SparkSqlParser.TRANSACTIONS);
            break;

        case 15:
            this.enterOuterAlt(localctx, 15);
            this.state = 1089;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1090;
            localctx.kw2 = this.match(SparkSqlParser.INDEXES);
            break;

        case 16:
            this.enterOuterAlt(localctx, 16);
            this.state = 1091;
            localctx.kw1 = this.match(SparkSqlParser.SHOW);
            this.state = 1092;
            localctx.kw2 = this.match(SparkSqlParser.LOCKS);
            break;

        case 17:
            this.enterOuterAlt(localctx, 17);
            this.state = 1093;
            localctx.kw1 = this.match(SparkSqlParser.CREATE);
            this.state = 1094;
            localctx.kw2 = this.match(SparkSqlParser.INDEX);
            break;

        case 18:
            this.enterOuterAlt(localctx, 18);
            this.state = 1095;
            localctx.kw1 = this.match(SparkSqlParser.DROP);
            this.state = 1096;
            localctx.kw2 = this.match(SparkSqlParser.INDEX);
            break;

        case 19:
            this.enterOuterAlt(localctx, 19);
            this.state = 1097;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1098;
            localctx.kw2 = this.match(SparkSqlParser.INDEX);
            break;

        case 20:
            this.enterOuterAlt(localctx, 20);
            this.state = 1099;
            localctx.kw1 = this.match(SparkSqlParser.LOCK);
            this.state = 1100;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            break;

        case 21:
            this.enterOuterAlt(localctx, 21);
            this.state = 1101;
            localctx.kw1 = this.match(SparkSqlParser.LOCK);
            this.state = 1102;
            localctx.kw2 = this.match(SparkSqlParser.DATABASE);
            break;

        case 22:
            this.enterOuterAlt(localctx, 22);
            this.state = 1103;
            localctx.kw1 = this.match(SparkSqlParser.UNLOCK);
            this.state = 1104;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            break;

        case 23:
            this.enterOuterAlt(localctx, 23);
            this.state = 1105;
            localctx.kw1 = this.match(SparkSqlParser.UNLOCK);
            this.state = 1106;
            localctx.kw2 = this.match(SparkSqlParser.DATABASE);
            break;

        case 24:
            this.enterOuterAlt(localctx, 24);
            this.state = 1107;
            localctx.kw1 = this.match(SparkSqlParser.CREATE);
            this.state = 1108;
            localctx.kw2 = this.match(SparkSqlParser.TEMPORARY);
            this.state = 1109;
            localctx.kw3 = this.match(SparkSqlParser.MACRO);
            break;

        case 25:
            this.enterOuterAlt(localctx, 25);
            this.state = 1110;
            localctx.kw1 = this.match(SparkSqlParser.DROP);
            this.state = 1111;
            localctx.kw2 = this.match(SparkSqlParser.TEMPORARY);
            this.state = 1112;
            localctx.kw3 = this.match(SparkSqlParser.MACRO);
            break;

        case 26:
            this.enterOuterAlt(localctx, 26);
            this.state = 1113;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1114;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1115;
            this.tableIdentifier();
            this.state = 1116;
            localctx.kw3 = this.match(SparkSqlParser.NOT);
            this.state = 1117;
            localctx.kw4 = this.match(SparkSqlParser.CLUSTERED);
            break;

        case 27:
            this.enterOuterAlt(localctx, 27);
            this.state = 1119;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1120;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1121;
            this.tableIdentifier();
            this.state = 1122;
            localctx.kw3 = this.match(SparkSqlParser.CLUSTERED);
            this.state = 1123;
            localctx.kw4 = this.match(SparkSqlParser.BY);
            break;

        case 28:
            this.enterOuterAlt(localctx, 28);
            this.state = 1125;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1126;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1127;
            this.tableIdentifier();
            this.state = 1128;
            localctx.kw3 = this.match(SparkSqlParser.NOT);
            this.state = 1129;
            localctx.kw4 = this.match(SparkSqlParser.SORTED);
            break;

        case 29:
            this.enterOuterAlt(localctx, 29);
            this.state = 1131;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1132;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1133;
            this.tableIdentifier();
            this.state = 1134;
            localctx.kw3 = this.match(SparkSqlParser.SKEWED);
            this.state = 1135;
            localctx.kw4 = this.match(SparkSqlParser.BY);
            break;

        case 30:
            this.enterOuterAlt(localctx, 30);
            this.state = 1137;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1138;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1139;
            this.tableIdentifier();
            this.state = 1140;
            localctx.kw3 = this.match(SparkSqlParser.NOT);
            this.state = 1141;
            localctx.kw4 = this.match(SparkSqlParser.SKEWED);
            break;

        case 31:
            this.enterOuterAlt(localctx, 31);
            this.state = 1143;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1144;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1145;
            this.tableIdentifier();
            this.state = 1146;
            localctx.kw3 = this.match(SparkSqlParser.NOT);
            this.state = 1147;
            localctx.kw4 = this.match(SparkSqlParser.STORED);
            this.state = 1148;
            localctx.kw5 = this.match(SparkSqlParser.AS);
            this.state = 1149;
            localctx.kw6 = this.match(SparkSqlParser.DIRECTORIES);
            break;

        case 32:
            this.enterOuterAlt(localctx, 32);
            this.state = 1151;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1152;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1153;
            this.tableIdentifier();
            this.state = 1154;
            localctx.kw3 = this.match(SparkSqlParser.SET);
            this.state = 1155;
            localctx.kw4 = this.match(SparkSqlParser.SKEWED);
            this.state = 1156;
            localctx.kw5 = this.match(SparkSqlParser.LOCATION);
            break;

        case 33:
            this.enterOuterAlt(localctx, 33);
            this.state = 1158;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1159;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1160;
            this.tableIdentifier();
            this.state = 1161;
            localctx.kw3 = this.match(SparkSqlParser.EXCHANGE);
            this.state = 1162;
            localctx.kw4 = this.match(SparkSqlParser.PARTITION);
            break;

        case 34:
            this.enterOuterAlt(localctx, 34);
            this.state = 1164;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1165;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1166;
            this.tableIdentifier();
            this.state = 1167;
            localctx.kw3 = this.match(SparkSqlParser.ARCHIVE);
            this.state = 1168;
            localctx.kw4 = this.match(SparkSqlParser.PARTITION);
            break;

        case 35:
            this.enterOuterAlt(localctx, 35);
            this.state = 1170;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1171;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1172;
            this.tableIdentifier();
            this.state = 1173;
            localctx.kw3 = this.match(SparkSqlParser.UNARCHIVE);
            this.state = 1174;
            localctx.kw4 = this.match(SparkSqlParser.PARTITION);
            break;

        case 36:
            this.enterOuterAlt(localctx, 36);
            this.state = 1176;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1177;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1178;
            this.tableIdentifier();
            this.state = 1179;
            localctx.kw3 = this.match(SparkSqlParser.TOUCH);
            break;

        case 37:
            this.enterOuterAlt(localctx, 37);
            this.state = 1181;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1182;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1183;
            this.tableIdentifier();
            this.state = 1185;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 1184;
                this.partitionSpec();
            }

            this.state = 1187;
            localctx.kw3 = this.match(SparkSqlParser.COMPACT);
            break;

        case 38:
            this.enterOuterAlt(localctx, 38);
            this.state = 1189;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1190;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1191;
            this.tableIdentifier();
            this.state = 1193;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 1192;
                this.partitionSpec();
            }

            this.state = 1195;
            localctx.kw3 = this.match(SparkSqlParser.CONCATENATE);
            break;

        case 39:
            this.enterOuterAlt(localctx, 39);
            this.state = 1197;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1198;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1199;
            this.tableIdentifier();
            this.state = 1201;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 1200;
                this.partitionSpec();
            }

            this.state = 1203;
            localctx.kw3 = this.match(SparkSqlParser.SET);
            this.state = 1204;
            localctx.kw4 = this.match(SparkSqlParser.FILEFORMAT);
            break;

        case 40:
            this.enterOuterAlt(localctx, 40);
            this.state = 1206;
            localctx.kw1 = this.match(SparkSqlParser.ALTER);
            this.state = 1207;
            localctx.kw2 = this.match(SparkSqlParser.TABLE);
            this.state = 1208;
            this.tableIdentifier();
            this.state = 1210;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 1209;
                this.partitionSpec();
            }

            this.state = 1212;
            localctx.kw3 = this.match(SparkSqlParser.REPLACE);
            this.state = 1213;
            localctx.kw4 = this.match(SparkSqlParser.COLUMNS);
            break;

        case 41:
            this.enterOuterAlt(localctx, 41);
            this.state = 1215;
            localctx.kw1 = this.match(SparkSqlParser.START);
            this.state = 1216;
            localctx.kw2 = this.match(SparkSqlParser.TRANSACTION);
            break;

        case 42:
            this.enterOuterAlt(localctx, 42);
            this.state = 1217;
            localctx.kw1 = this.match(SparkSqlParser.COMMIT);
            break;

        case 43:
            this.enterOuterAlt(localctx, 43);
            this.state = 1218;
            localctx.kw1 = this.match(SparkSqlParser.ROLLBACK);
            break;

        case 44:
            this.enterOuterAlt(localctx, 44);
            this.state = 1219;
            localctx.kw1 = this.match(SparkSqlParser.DFS);
            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 CreateTableHeaderContext(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 = SparkSqlParser.RULE_createTableHeader;
    return this;
}

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

CreateTableHeaderContext.prototype.CREATE = function() {
    return this.getToken(SparkSqlParser.CREATE, 0);
};

CreateTableHeaderContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

CreateTableHeaderContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

CreateTableHeaderContext.prototype.TEMPORARY = function() {
    return this.getToken(SparkSqlParser.TEMPORARY, 0);
};

CreateTableHeaderContext.prototype.EXTERNAL = function() {
    return this.getToken(SparkSqlParser.EXTERNAL, 0);
};

CreateTableHeaderContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

CreateTableHeaderContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

CreateTableHeaderContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

CreateTableHeaderContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateTableHeader(this);
	}
};

CreateTableHeaderContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCreateTableHeader(this);
	}
};

CreateTableHeaderContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCreateTableHeader(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.CreateTableHeaderContext = CreateTableHeaderContext;

SparkSqlParser.prototype.createTableHeader = function() {

    var localctx = new CreateTableHeaderContext(this, this._ctx, this.state);
    this.enterRule(localctx, 22, SparkSqlParser.RULE_createTableHeader);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1222;
        this.match(SparkSqlParser.CREATE);
        this.state = 1224;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.TEMPORARY) {
            this.state = 1223;
            this.match(SparkSqlParser.TEMPORARY);
        }

        this.state = 1227;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.EXTERNAL) {
            this.state = 1226;
            this.match(SparkSqlParser.EXTERNAL);
        }

        this.state = 1229;
        this.match(SparkSqlParser.TABLE);
        this.state = 1233;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,123,this._ctx);
        if(la_===1) {
            this.state = 1230;
            this.match(SparkSqlParser.IF);
            this.state = 1231;
            this.match(SparkSqlParser.NOT);
            this.state = 1232;
            this.match(SparkSqlParser.EXISTS);

        }
        this.state = 1235;
        this.multipartIdentifier();
    } 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 ReplaceTableHeaderContext(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 = SparkSqlParser.RULE_replaceTableHeader;
    return this;
}

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

ReplaceTableHeaderContext.prototype.REPLACE = function() {
    return this.getToken(SparkSqlParser.REPLACE, 0);
};

ReplaceTableHeaderContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

ReplaceTableHeaderContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

ReplaceTableHeaderContext.prototype.CREATE = function() {
    return this.getToken(SparkSqlParser.CREATE, 0);
};

ReplaceTableHeaderContext.prototype.OR = function() {
    return this.getToken(SparkSqlParser.OR, 0);
};

ReplaceTableHeaderContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterReplaceTableHeader(this);
	}
};

ReplaceTableHeaderContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitReplaceTableHeader(this);
	}
};

ReplaceTableHeaderContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitReplaceTableHeader(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ReplaceTableHeaderContext = ReplaceTableHeaderContext;

SparkSqlParser.prototype.replaceTableHeader = function() {

    var localctx = new ReplaceTableHeaderContext(this, this._ctx, this.state);
    this.enterRule(localctx, 24, SparkSqlParser.RULE_replaceTableHeader);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1239;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.CREATE) {
            this.state = 1237;
            this.match(SparkSqlParser.CREATE);
            this.state = 1238;
            this.match(SparkSqlParser.OR);
        }

        this.state = 1241;
        this.match(SparkSqlParser.REPLACE);
        this.state = 1242;
        this.match(SparkSqlParser.TABLE);
        this.state = 1243;
        this.multipartIdentifier();
    } 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 BucketSpecContext(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 = SparkSqlParser.RULE_bucketSpec;
    return this;
}

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

BucketSpecContext.prototype.CLUSTERED = function() {
    return this.getToken(SparkSqlParser.CLUSTERED, 0);
};

BucketSpecContext.prototype.BY = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.BY);
    } else {
        return this.getToken(SparkSqlParser.BY, i);
    }
};


BucketSpecContext.prototype.identifierList = function() {
    return this.getTypedRuleContext(IdentifierListContext,0);
};

BucketSpecContext.prototype.INTO = function() {
    return this.getToken(SparkSqlParser.INTO, 0);
};

BucketSpecContext.prototype.INTEGER_VALUE = function() {
    return this.getToken(SparkSqlParser.INTEGER_VALUE, 0);
};

BucketSpecContext.prototype.BUCKETS = function() {
    return this.getToken(SparkSqlParser.BUCKETS, 0);
};

BucketSpecContext.prototype.SORTED = function() {
    return this.getToken(SparkSqlParser.SORTED, 0);
};

BucketSpecContext.prototype.orderedIdentifierList = function() {
    return this.getTypedRuleContext(OrderedIdentifierListContext,0);
};

BucketSpecContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterBucketSpec(this);
	}
};

BucketSpecContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitBucketSpec(this);
	}
};

BucketSpecContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitBucketSpec(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.BucketSpecContext = BucketSpecContext;

SparkSqlParser.prototype.bucketSpec = function() {

    var localctx = new BucketSpecContext(this, this._ctx, this.state);
    this.enterRule(localctx, 26, SparkSqlParser.RULE_bucketSpec);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1245;
        this.match(SparkSqlParser.CLUSTERED);
        this.state = 1246;
        this.match(SparkSqlParser.BY);
        this.state = 1247;
        this.identifierList();
        this.state = 1251;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.SORTED) {
            this.state = 1248;
            this.match(SparkSqlParser.SORTED);
            this.state = 1249;
            this.match(SparkSqlParser.BY);
            this.state = 1250;
            this.orderedIdentifierList();
        }

        this.state = 1253;
        this.match(SparkSqlParser.INTO);
        this.state = 1254;
        this.match(SparkSqlParser.INTEGER_VALUE);
        this.state = 1255;
        this.match(SparkSqlParser.BUCKETS);
    } 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 SkewSpecContext(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 = SparkSqlParser.RULE_skewSpec;
    return this;
}

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

SkewSpecContext.prototype.SKEWED = function() {
    return this.getToken(SparkSqlParser.SKEWED, 0);
};

SkewSpecContext.prototype.BY = function() {
    return this.getToken(SparkSqlParser.BY, 0);
};

SkewSpecContext.prototype.identifierList = function() {
    return this.getTypedRuleContext(IdentifierListContext,0);
};

SkewSpecContext.prototype.ON = function() {
    return this.getToken(SparkSqlParser.ON, 0);
};

SkewSpecContext.prototype.constantList = function() {
    return this.getTypedRuleContext(ConstantListContext,0);
};

SkewSpecContext.prototype.nestedConstantList = function() {
    return this.getTypedRuleContext(NestedConstantListContext,0);
};

SkewSpecContext.prototype.STORED = function() {
    return this.getToken(SparkSqlParser.STORED, 0);
};

SkewSpecContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

SkewSpecContext.prototype.DIRECTORIES = function() {
    return this.getToken(SparkSqlParser.DIRECTORIES, 0);
};

SkewSpecContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSkewSpec(this);
	}
};

SkewSpecContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSkewSpec(this);
	}
};

SkewSpecContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSkewSpec(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SkewSpecContext = SkewSpecContext;

SparkSqlParser.prototype.skewSpec = function() {

    var localctx = new SkewSpecContext(this, this._ctx, this.state);
    this.enterRule(localctx, 28, SparkSqlParser.RULE_skewSpec);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1257;
        this.match(SparkSqlParser.SKEWED);
        this.state = 1258;
        this.match(SparkSqlParser.BY);
        this.state = 1259;
        this.identifierList();
        this.state = 1260;
        this.match(SparkSqlParser.ON);
        this.state = 1263;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,126,this._ctx);
        switch(la_) {
        case 1:
            this.state = 1261;
            this.constantList();
            break;

        case 2:
            this.state = 1262;
            this.nestedConstantList();
            break;

        }
        this.state = 1268;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,127,this._ctx);
        if(la_===1) {
            this.state = 1265;
            this.match(SparkSqlParser.STORED);
            this.state = 1266;
            this.match(SparkSqlParser.AS);
            this.state = 1267;
            this.match(SparkSqlParser.DIRECTORIES);

        }
    } 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 LocationSpecContext(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 = SparkSqlParser.RULE_locationSpec;
    return this;
}

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

LocationSpecContext.prototype.LOCATION = function() {
    return this.getToken(SparkSqlParser.LOCATION, 0);
};

LocationSpecContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

LocationSpecContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterLocationSpec(this);
	}
};

LocationSpecContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitLocationSpec(this);
	}
};

LocationSpecContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitLocationSpec(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.LocationSpecContext = LocationSpecContext;

SparkSqlParser.prototype.locationSpec = function() {

    var localctx = new LocationSpecContext(this, this._ctx, this.state);
    this.enterRule(localctx, 30, SparkSqlParser.RULE_locationSpec);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1270;
        this.match(SparkSqlParser.LOCATION);
        this.state = 1271;
        this.match(SparkSqlParser.STRING);
    } 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 = SparkSqlParser.RULE_commentSpec;
    return this;
}

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

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

CommentSpecContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

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

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

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




SparkSqlParser.CommentSpecContext = CommentSpecContext;

SparkSqlParser.prototype.commentSpec = function() {

    var localctx = new CommentSpecContext(this, this._ctx, this.state);
    this.enterRule(localctx, 32, SparkSqlParser.RULE_commentSpec);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1273;
        this.match(SparkSqlParser.COMMENT);
        this.state = 1274;
        this.match(SparkSqlParser.STRING);
    } 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 QueryContext(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 = SparkSqlParser.RULE_query;
    return this;
}

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

QueryContext.prototype.queryTerm = function() {
    return this.getTypedRuleContext(QueryTermContext,0);
};

QueryContext.prototype.queryOrganization = function() {
    return this.getTypedRuleContext(QueryOrganizationContext,0);
};

QueryContext.prototype.ctes = function() {
    return this.getTypedRuleContext(CtesContext,0);
};

QueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQuery(this);
	}
};

QueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQuery(this);
	}
};

QueryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQuery(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.QueryContext = QueryContext;

SparkSqlParser.prototype.query = function() {

    var localctx = new QueryContext(this, this._ctx, this.state);
    this.enterRule(localctx, 34, SparkSqlParser.RULE_query);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1277;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.WITH) {
            this.state = 1276;
            this.ctes();
        }

        this.state = 1279;
        this.queryTerm(0);
        this.state = 1280;
        this.queryOrganization();
    } 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 InsertIntoContext(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 = SparkSqlParser.RULE_insertInto;
    return this;
}

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


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


function InsertOverwriteHiveDirContext(parser, ctx) {
	InsertIntoContext.call(this, parser);
    this.path = null; // Token;
    InsertIntoContext.prototype.copyFrom.call(this, ctx);
    return this;
}

InsertOverwriteHiveDirContext.prototype = Object.create(InsertIntoContext.prototype);
InsertOverwriteHiveDirContext.prototype.constructor = InsertOverwriteHiveDirContext;

SparkSqlParser.InsertOverwriteHiveDirContext = InsertOverwriteHiveDirContext;

InsertOverwriteHiveDirContext.prototype.INSERT = function() {
    return this.getToken(SparkSqlParser.INSERT, 0);
};

InsertOverwriteHiveDirContext.prototype.OVERWRITE = function() {
    return this.getToken(SparkSqlParser.OVERWRITE, 0);
};

InsertOverwriteHiveDirContext.prototype.DIRECTORY = function() {
    return this.getToken(SparkSqlParser.DIRECTORY, 0);
};

InsertOverwriteHiveDirContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

InsertOverwriteHiveDirContext.prototype.LOCAL = function() {
    return this.getToken(SparkSqlParser.LOCAL, 0);
};

InsertOverwriteHiveDirContext.prototype.rowFormat = function() {
    return this.getTypedRuleContext(RowFormatContext,0);
};

InsertOverwriteHiveDirContext.prototype.createFileFormat = function() {
    return this.getTypedRuleContext(CreateFileFormatContext,0);
};
InsertOverwriteHiveDirContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterInsertOverwriteHiveDir(this);
	}
};

InsertOverwriteHiveDirContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitInsertOverwriteHiveDir(this);
	}
};

InsertOverwriteHiveDirContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitInsertOverwriteHiveDir(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function InsertOverwriteDirContext(parser, ctx) {
	InsertIntoContext.call(this, parser);
    this.path = null; // Token;
    InsertIntoContext.prototype.copyFrom.call(this, ctx);
    return this;
}

InsertOverwriteDirContext.prototype = Object.create(InsertIntoContext.prototype);
InsertOverwriteDirContext.prototype.constructor = InsertOverwriteDirContext;

SparkSqlParser.InsertOverwriteDirContext = InsertOverwriteDirContext;

InsertOverwriteDirContext.prototype.INSERT = function() {
    return this.getToken(SparkSqlParser.INSERT, 0);
};

InsertOverwriteDirContext.prototype.OVERWRITE = function() {
    return this.getToken(SparkSqlParser.OVERWRITE, 0);
};

InsertOverwriteDirContext.prototype.DIRECTORY = function() {
    return this.getToken(SparkSqlParser.DIRECTORY, 0);
};

InsertOverwriteDirContext.prototype.tableProvider = function() {
    return this.getTypedRuleContext(TableProviderContext,0);
};

InsertOverwriteDirContext.prototype.LOCAL = function() {
    return this.getToken(SparkSqlParser.LOCAL, 0);
};

InsertOverwriteDirContext.prototype.OPTIONS = function() {
    return this.getToken(SparkSqlParser.OPTIONS, 0);
};

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

InsertOverwriteDirContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};
InsertOverwriteDirContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterInsertOverwriteDir(this);
	}
};

InsertOverwriteDirContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitInsertOverwriteDir(this);
	}
};

InsertOverwriteDirContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitInsertOverwriteDir(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function InsertOverwriteTableContext(parser, ctx) {
	InsertIntoContext.call(this, parser);
    InsertIntoContext.prototype.copyFrom.call(this, ctx);
    return this;
}

InsertOverwriteTableContext.prototype = Object.create(InsertIntoContext.prototype);
InsertOverwriteTableContext.prototype.constructor = InsertOverwriteTableContext;

SparkSqlParser.InsertOverwriteTableContext = InsertOverwriteTableContext;

InsertOverwriteTableContext.prototype.INSERT = function() {
    return this.getToken(SparkSqlParser.INSERT, 0);
};

InsertOverwriteTableContext.prototype.OVERWRITE = function() {
    return this.getToken(SparkSqlParser.OVERWRITE, 0);
};

InsertOverwriteTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

InsertOverwriteTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

InsertOverwriteTableContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};

InsertOverwriteTableContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

InsertOverwriteTableContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

InsertOverwriteTableContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};
InsertOverwriteTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterInsertOverwriteTable(this);
	}
};

InsertOverwriteTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitInsertOverwriteTable(this);
	}
};

InsertOverwriteTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitInsertOverwriteTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function InsertIntoTableContext(parser, ctx) {
	InsertIntoContext.call(this, parser);
    InsertIntoContext.prototype.copyFrom.call(this, ctx);
    return this;
}

InsertIntoTableContext.prototype = Object.create(InsertIntoContext.prototype);
InsertIntoTableContext.prototype.constructor = InsertIntoTableContext;

SparkSqlParser.InsertIntoTableContext = InsertIntoTableContext;

InsertIntoTableContext.prototype.INSERT = function() {
    return this.getToken(SparkSqlParser.INSERT, 0);
};

InsertIntoTableContext.prototype.INTO = function() {
    return this.getToken(SparkSqlParser.INTO, 0);
};

InsertIntoTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

InsertIntoTableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

InsertIntoTableContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};

InsertIntoTableContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

InsertIntoTableContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

InsertIntoTableContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};
InsertIntoTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterInsertIntoTable(this);
	}
};

InsertIntoTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitInsertIntoTable(this);
	}
};

InsertIntoTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitInsertIntoTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.InsertIntoContext = InsertIntoContext;

SparkSqlParser.prototype.insertInto = function() {

    var localctx = new InsertIntoContext(this, this._ctx, this.state);
    this.enterRule(localctx, 36, SparkSqlParser.RULE_insertInto);
    var _la = 0; // Token type
    try {
        this.state = 1337;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,141,this._ctx);
        switch(la_) {
        case 1:
            localctx = new InsertOverwriteTableContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1282;
            this.match(SparkSqlParser.INSERT);
            this.state = 1283;
            this.match(SparkSqlParser.OVERWRITE);
            this.state = 1285;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,129,this._ctx);
            if(la_===1) {
                this.state = 1284;
                this.match(SparkSqlParser.TABLE);

            }
            this.state = 1287;
            this.multipartIdentifier();
            this.state = 1294;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 1288;
                this.partitionSpec();
                this.state = 1292;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.IF) {
                    this.state = 1289;
                    this.match(SparkSqlParser.IF);
                    this.state = 1290;
                    this.match(SparkSqlParser.NOT);
                    this.state = 1291;
                    this.match(SparkSqlParser.EXISTS);
                }

            }

            break;

        case 2:
            localctx = new InsertIntoTableContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1296;
            this.match(SparkSqlParser.INSERT);
            this.state = 1297;
            this.match(SparkSqlParser.INTO);
            this.state = 1299;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,132,this._ctx);
            if(la_===1) {
                this.state = 1298;
                this.match(SparkSqlParser.TABLE);

            }
            this.state = 1301;
            this.multipartIdentifier();
            this.state = 1303;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PARTITION) {
                this.state = 1302;
                this.partitionSpec();
            }

            this.state = 1308;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.IF) {
                this.state = 1305;
                this.match(SparkSqlParser.IF);
                this.state = 1306;
                this.match(SparkSqlParser.NOT);
                this.state = 1307;
                this.match(SparkSqlParser.EXISTS);
            }

            break;

        case 3:
            localctx = new InsertOverwriteHiveDirContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1310;
            this.match(SparkSqlParser.INSERT);
            this.state = 1311;
            this.match(SparkSqlParser.OVERWRITE);
            this.state = 1313;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.LOCAL) {
                this.state = 1312;
                this.match(SparkSqlParser.LOCAL);
            }

            this.state = 1315;
            this.match(SparkSqlParser.DIRECTORY);
            this.state = 1316;
            localctx.path = this.match(SparkSqlParser.STRING);
            this.state = 1318;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.ROW) {
                this.state = 1317;
                this.rowFormat();
            }

            this.state = 1321;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.STORED) {
                this.state = 1320;
                this.createFileFormat();
            }

            break;

        case 4:
            localctx = new InsertOverwriteDirContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1323;
            this.match(SparkSqlParser.INSERT);
            this.state = 1324;
            this.match(SparkSqlParser.OVERWRITE);
            this.state = 1326;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.LOCAL) {
                this.state = 1325;
                this.match(SparkSqlParser.LOCAL);
            }

            this.state = 1328;
            this.match(SparkSqlParser.DIRECTORY);
            this.state = 1330;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.STRING) {
                this.state = 1329;
                localctx.path = this.match(SparkSqlParser.STRING);
            }

            this.state = 1332;
            this.tableProvider();
            this.state = 1335;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OPTIONS) {
                this.state = 1333;
                this.match(SparkSqlParser.OPTIONS);
                this.state = 1334;
                this.tablePropertyList();
            }

            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 PartitionSpecLocationContext(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 = SparkSqlParser.RULE_partitionSpecLocation;
    return this;
}

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

PartitionSpecLocationContext.prototype.partitionSpec = function() {
    return this.getTypedRuleContext(PartitionSpecContext,0);
};

PartitionSpecLocationContext.prototype.locationSpec = function() {
    return this.getTypedRuleContext(LocationSpecContext,0);
};

PartitionSpecLocationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterPartitionSpecLocation(this);
	}
};

PartitionSpecLocationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPartitionSpecLocation(this);
	}
};

PartitionSpecLocationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitPartitionSpecLocation(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.PartitionSpecLocationContext = PartitionSpecLocationContext;

SparkSqlParser.prototype.partitionSpecLocation = function() {

    var localctx = new PartitionSpecLocationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 38, SparkSqlParser.RULE_partitionSpecLocation);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1339;
        this.partitionSpec();
        this.state = 1341;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.LOCATION) {
            this.state = 1340;
            this.locationSpec();
        }

    } 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 PartitionSpecContext(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 = SparkSqlParser.RULE_partitionSpec;
    return this;
}

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

PartitionSpecContext.prototype.PARTITION = function() {
    return this.getToken(SparkSqlParser.PARTITION, 0);
};

PartitionSpecContext.prototype.partitionVal = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(PartitionValContext);
    } else {
        return this.getTypedRuleContext(PartitionValContext,i);
    }
};

PartitionSpecContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterPartitionSpec(this);
	}
};

PartitionSpecContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPartitionSpec(this);
	}
};

PartitionSpecContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitPartitionSpec(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.PartitionSpecContext = PartitionSpecContext;

SparkSqlParser.prototype.partitionSpec = function() {

    var localctx = new PartitionSpecContext(this, this._ctx, this.state);
    this.enterRule(localctx, 40, SparkSqlParser.RULE_partitionSpec);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1343;
        this.match(SparkSqlParser.PARTITION);
        this.state = 1344;
        this.match(SparkSqlParser.T__0);
        this.state = 1345;
        this.partitionVal();
        this.state = 1350;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 1346;
            this.match(SparkSqlParser.T__2);
            this.state = 1347;
            this.partitionVal();
            this.state = 1352;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1353;
        this.match(SparkSqlParser.T__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 PartitionValContext(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 = SparkSqlParser.RULE_partitionVal;
    return this;
}

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

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

PartitionValContext.prototype.EQ = function() {
    return this.getToken(SparkSqlParser.EQ, 0);
};

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

PartitionValContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterPartitionVal(this);
	}
};

PartitionValContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPartitionVal(this);
	}
};

PartitionValContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitPartitionVal(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.PartitionValContext = PartitionValContext;

SparkSqlParser.prototype.partitionVal = function() {

    var localctx = new PartitionValContext(this, this._ctx, this.state);
    this.enterRule(localctx, 42, SparkSqlParser.RULE_partitionVal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1355;
        this.identifier();
        this.state = 1358;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.EQ) {
            this.state = 1356;
            this.match(SparkSqlParser.EQ);
            this.state = 1357;
            this.constant();
        }

    } 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 NamespaceContext(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 = SparkSqlParser.RULE_namespace;
    return this;
}

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

NamespaceContext.prototype.NAMESPACE = function() {
    return this.getToken(SparkSqlParser.NAMESPACE, 0);
};

NamespaceContext.prototype.DATABASE = function() {
    return this.getToken(SparkSqlParser.DATABASE, 0);
};

NamespaceContext.prototype.SCHEMA = function() {
    return this.getToken(SparkSqlParser.SCHEMA, 0);
};

NamespaceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNamespace(this);
	}
};

NamespaceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNamespace(this);
	}
};

NamespaceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNamespace(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.NamespaceContext = NamespaceContext;

SparkSqlParser.prototype.namespace = function() {

    var localctx = new NamespaceContext(this, this._ctx, this.state);
    this.enterRule(localctx, 44, SparkSqlParser.RULE_namespace);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1360;
        _la = this._input.LA(1);
        if(!(_la===SparkSqlParser.DATABASE || _la===SparkSqlParser.NAMESPACE || _la===SparkSqlParser.SCHEMA)) {
        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 DescribeFuncNameContext(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 = SparkSqlParser.RULE_describeFuncName;
    return this;
}

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

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

DescribeFuncNameContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

DescribeFuncNameContext.prototype.comparisonOperator = function() {
    return this.getTypedRuleContext(ComparisonOperatorContext,0);
};

DescribeFuncNameContext.prototype.arithmeticOperator = function() {
    return this.getTypedRuleContext(ArithmeticOperatorContext,0);
};

DescribeFuncNameContext.prototype.predicateOperator = function() {
    return this.getTypedRuleContext(PredicateOperatorContext,0);
};

DescribeFuncNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDescribeFuncName(this);
	}
};

DescribeFuncNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDescribeFuncName(this);
	}
};

DescribeFuncNameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDescribeFuncName(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.DescribeFuncNameContext = DescribeFuncNameContext;

SparkSqlParser.prototype.describeFuncName = function() {

    var localctx = new DescribeFuncNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 46, SparkSqlParser.RULE_describeFuncName);
    try {
        this.state = 1367;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,145,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1362;
            this.qualifiedName();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1363;
            this.match(SparkSqlParser.STRING);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1364;
            this.comparisonOperator();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1365;
            this.arithmeticOperator();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1366;
            this.predicateOperator();
            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 DescribeColNameContext(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 = SparkSqlParser.RULE_describeColName;
    this._identifier = null; // IdentifierContext
    this.nameParts = []; // of IdentifierContexts
    return this;
}

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

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

DescribeColNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDescribeColName(this);
	}
};

DescribeColNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDescribeColName(this);
	}
};

DescribeColNameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDescribeColName(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.DescribeColNameContext = DescribeColNameContext;

SparkSqlParser.prototype.describeColName = function() {

    var localctx = new DescribeColNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 48, SparkSqlParser.RULE_describeColName);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1369;
        localctx._identifier = this.identifier();
        localctx.nameParts.push(localctx._identifier);
        this.state = 1374;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__3) {
            this.state = 1370;
            this.match(SparkSqlParser.T__3);
            this.state = 1371;
            localctx._identifier = this.identifier();
            localctx.nameParts.push(localctx._identifier);
            this.state = 1376;
            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 CtesContext(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 = SparkSqlParser.RULE_ctes;
    return this;
}

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

CtesContext.prototype.WITH = function() {
    return this.getToken(SparkSqlParser.WITH, 0);
};

CtesContext.prototype.namedQuery = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(NamedQueryContext);
    } else {
        return this.getTypedRuleContext(NamedQueryContext,i);
    }
};

CtesContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCtes(this);
	}
};

CtesContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCtes(this);
	}
};

CtesContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCtes(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.CtesContext = CtesContext;

SparkSqlParser.prototype.ctes = function() {

    var localctx = new CtesContext(this, this._ctx, this.state);
    this.enterRule(localctx, 50, SparkSqlParser.RULE_ctes);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1377;
        this.match(SparkSqlParser.WITH);
        this.state = 1378;
        this.namedQuery();
        this.state = 1383;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 1379;
            this.match(SparkSqlParser.T__2);
            this.state = 1380;
            this.namedQuery();
            this.state = 1385;
            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 NamedQueryContext(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 = SparkSqlParser.RULE_namedQuery;
    this.name = null; // ErrorCapturingIdentifierContext
    this.columnAliases = null; // IdentifierListContext
    return this;
}

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

NamedQueryContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

NamedQueryContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};

NamedQueryContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

NamedQueryContext.prototype.identifierList = function() {
    return this.getTypedRuleContext(IdentifierListContext,0);
};

NamedQueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNamedQuery(this);
	}
};

NamedQueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNamedQuery(this);
	}
};

NamedQueryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNamedQuery(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.NamedQueryContext = NamedQueryContext;

SparkSqlParser.prototype.namedQuery = function() {

    var localctx = new NamedQueryContext(this, this._ctx, this.state);
    this.enterRule(localctx, 52, SparkSqlParser.RULE_namedQuery);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1386;
        localctx.name = this.errorCapturingIdentifier();
        this.state = 1388;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,148,this._ctx);
        if(la_===1) {
            this.state = 1387;
            localctx.columnAliases = this.identifierList();

        }
        this.state = 1391;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.AS) {
            this.state = 1390;
            this.match(SparkSqlParser.AS);
        }

        this.state = 1393;
        this.match(SparkSqlParser.T__0);
        this.state = 1394;
        this.query();
        this.state = 1395;
        this.match(SparkSqlParser.T__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 TableProviderContext(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 = SparkSqlParser.RULE_tableProvider;
    return this;
}

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

TableProviderContext.prototype.USING = function() {
    return this.getToken(SparkSqlParser.USING, 0);
};

TableProviderContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

TableProviderContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTableProvider(this);
	}
};

TableProviderContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTableProvider(this);
	}
};

TableProviderContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTableProvider(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.TableProviderContext = TableProviderContext;

SparkSqlParser.prototype.tableProvider = function() {

    var localctx = new TableProviderContext(this, this._ctx, this.state);
    this.enterRule(localctx, 54, SparkSqlParser.RULE_tableProvider);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1397;
        this.match(SparkSqlParser.USING);
        this.state = 1398;
        this.multipartIdentifier();
    } 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 CreateTableClausesContext(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 = SparkSqlParser.RULE_createTableClauses;
    this.partitioning = null; // TransformListContext
    this.tableProps = null; // TablePropertyListContext
    return this;
}

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

CreateTableClausesContext.prototype.bucketSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(BucketSpecContext);
    } else {
        return this.getTypedRuleContext(BucketSpecContext,i);
    }
};

CreateTableClausesContext.prototype.locationSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LocationSpecContext);
    } else {
        return this.getTypedRuleContext(LocationSpecContext,i);
    }
};

CreateTableClausesContext.prototype.commentSpec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(CommentSpecContext);
    } else {
        return this.getTypedRuleContext(CommentSpecContext,i);
    }
};

CreateTableClausesContext.prototype.OPTIONS = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.OPTIONS);
    } else {
        return this.getToken(SparkSqlParser.OPTIONS, i);
    }
};


CreateTableClausesContext.prototype.tablePropertyList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TablePropertyListContext);
    } else {
        return this.getTypedRuleContext(TablePropertyListContext,i);
    }
};

CreateTableClausesContext.prototype.PARTITIONED = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.PARTITIONED);
    } else {
        return this.getToken(SparkSqlParser.PARTITIONED, i);
    }
};


CreateTableClausesContext.prototype.BY = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.BY);
    } else {
        return this.getToken(SparkSqlParser.BY, i);
    }
};


CreateTableClausesContext.prototype.TBLPROPERTIES = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.TBLPROPERTIES);
    } else {
        return this.getToken(SparkSqlParser.TBLPROPERTIES, i);
    }
};


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

CreateTableClausesContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateTableClauses(this);
	}
};

CreateTableClausesContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCreateTableClauses(this);
	}
};

CreateTableClausesContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCreateTableClauses(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.CreateTableClausesContext = CreateTableClausesContext;

SparkSqlParser.prototype.createTableClauses = function() {

    var localctx = new CreateTableClausesContext(this, this._ctx, this.state);
    this.enterRule(localctx, 56, SparkSqlParser.RULE_createTableClauses);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1412;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,151,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1410;
                this._errHandler.sync(this);
                switch(this._input.LA(1)) {
                case SparkSqlParser.OPTIONS:
                    this.state = 1400;
                    this.match(SparkSqlParser.OPTIONS);
                    this.state = 1401;
                    this.tablePropertyList();
                    break;
                case SparkSqlParser.PARTITIONED:
                    this.state = 1402;
                    this.match(SparkSqlParser.PARTITIONED);
                    this.state = 1403;
                    this.match(SparkSqlParser.BY);
                    this.state = 1404;
                    localctx.partitioning = this.transformList();
                    break;
                case SparkSqlParser.CLUSTERED:
                    this.state = 1405;
                    this.bucketSpec();
                    break;
                case SparkSqlParser.LOCATION:
                    this.state = 1406;
                    this.locationSpec();
                    break;
                case SparkSqlParser.COMMENT:
                    this.state = 1407;
                    this.commentSpec();
                    break;
                case SparkSqlParser.TBLPROPERTIES:
                    this.state = 1408;
                    this.match(SparkSqlParser.TBLPROPERTIES);
                    this.state = 1409;
                    localctx.tableProps = this.tablePropertyList();
                    break;
                default:
                    throw new antlr4.error.NoViableAltException(this);
                } 
            }
            this.state = 1414;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,151,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 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 = SparkSqlParser.RULE_tablePropertyList;
    return this;
}

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

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.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTablePropertyList(this);
	}
};

TablePropertyListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTablePropertyList(this);
	}
};

TablePropertyListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTablePropertyList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.TablePropertyListContext = TablePropertyListContext;

SparkSqlParser.prototype.tablePropertyList = function() {

    var localctx = new TablePropertyListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 58, SparkSqlParser.RULE_tablePropertyList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1415;
        this.match(SparkSqlParser.T__0);
        this.state = 1416;
        this.tableProperty();
        this.state = 1421;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 1417;
            this.match(SparkSqlParser.T__2);
            this.state = 1418;
            this.tableProperty();
            this.state = 1423;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1424;
        this.match(SparkSqlParser.T__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 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 = SparkSqlParser.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.EQ = function() {
    return this.getToken(SparkSqlParser.EQ, 0);
};

TablePropertyContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTableProperty(this);
	}
};

TablePropertyContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTableProperty(this);
	}
};

TablePropertyContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTableProperty(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.TablePropertyContext = TablePropertyContext;

SparkSqlParser.prototype.tableProperty = function() {

    var localctx = new TablePropertyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 60, SparkSqlParser.RULE_tableProperty);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1426;
        localctx.key = this.tablePropertyKey();
        this.state = 1431;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.FALSE || _la===SparkSqlParser.TRUE || _la===SparkSqlParser.EQ || ((((_la - 279)) & ~0x1f) == 0 && ((1 << (_la - 279)) & ((1 << (SparkSqlParser.STRING - 279)) | (1 << (SparkSqlParser.INTEGER_VALUE - 279)) | (1 << (SparkSqlParser.DECIMAL_VALUE - 279)))) !== 0)) {
            this.state = 1428;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.EQ) {
                this.state = 1427;
                this.match(SparkSqlParser.EQ);
            }

            this.state = 1430;
            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 = SparkSqlParser.RULE_tablePropertyKey;
    return this;
}

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

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

TablePropertyKeyContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

TablePropertyKeyContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTablePropertyKey(this);
	}
};

TablePropertyKeyContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTablePropertyKey(this);
	}
};

TablePropertyKeyContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTablePropertyKey(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.TablePropertyKeyContext = TablePropertyKeyContext;

SparkSqlParser.prototype.tablePropertyKey = function() {

    var localctx = new TablePropertyKeyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 62, SparkSqlParser.RULE_tablePropertyKey);
    var _la = 0; // Token type
    try {
        this.state = 1442;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,156,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1433;
            this.identifier();
            this.state = 1438;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__3) {
                this.state = 1434;
                this.match(SparkSqlParser.T__3);
                this.state = 1435;
                this.identifier();
                this.state = 1440;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1441;
            this.match(SparkSqlParser.STRING);
            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 = SparkSqlParser.RULE_tablePropertyValue;
    return this;
}

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

TablePropertyValueContext.prototype.INTEGER_VALUE = function() {
    return this.getToken(SparkSqlParser.INTEGER_VALUE, 0);
};

TablePropertyValueContext.prototype.DECIMAL_VALUE = function() {
    return this.getToken(SparkSqlParser.DECIMAL_VALUE, 0);
};

TablePropertyValueContext.prototype.booleanValue = function() {
    return this.getTypedRuleContext(BooleanValueContext,0);
};

TablePropertyValueContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

TablePropertyValueContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTablePropertyValue(this);
	}
};

TablePropertyValueContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTablePropertyValue(this);
	}
};

TablePropertyValueContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTablePropertyValue(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.TablePropertyValueContext = TablePropertyValueContext;

SparkSqlParser.prototype.tablePropertyValue = function() {

    var localctx = new TablePropertyValueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 64, SparkSqlParser.RULE_tablePropertyValue);
    try {
        this.state = 1448;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SparkSqlParser.INTEGER_VALUE:
            this.enterOuterAlt(localctx, 1);
            this.state = 1444;
            this.match(SparkSqlParser.INTEGER_VALUE);
            break;
        case SparkSqlParser.DECIMAL_VALUE:
            this.enterOuterAlt(localctx, 2);
            this.state = 1445;
            this.match(SparkSqlParser.DECIMAL_VALUE);
            break;
        case SparkSqlParser.FALSE:
        case SparkSqlParser.TRUE:
            this.enterOuterAlt(localctx, 3);
            this.state = 1446;
            this.booleanValue();
            break;
        case SparkSqlParser.STRING:
            this.enterOuterAlt(localctx, 4);
            this.state = 1447;
            this.match(SparkSqlParser.STRING);
            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 ConstantListContext(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 = SparkSqlParser.RULE_constantList;
    return this;
}

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

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

ConstantListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterConstantList(this);
	}
};

ConstantListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitConstantList(this);
	}
};

ConstantListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitConstantList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ConstantListContext = ConstantListContext;

SparkSqlParser.prototype.constantList = function() {

    var localctx = new ConstantListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 66, SparkSqlParser.RULE_constantList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1450;
        this.match(SparkSqlParser.T__0);
        this.state = 1451;
        this.constant();
        this.state = 1456;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 1452;
            this.match(SparkSqlParser.T__2);
            this.state = 1453;
            this.constant();
            this.state = 1458;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1459;
        this.match(SparkSqlParser.T__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 NestedConstantListContext(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 = SparkSqlParser.RULE_nestedConstantList;
    return this;
}

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

NestedConstantListContext.prototype.constantList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ConstantListContext);
    } else {
        return this.getTypedRuleContext(ConstantListContext,i);
    }
};

NestedConstantListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNestedConstantList(this);
	}
};

NestedConstantListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNestedConstantList(this);
	}
};

NestedConstantListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNestedConstantList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.NestedConstantListContext = NestedConstantListContext;

SparkSqlParser.prototype.nestedConstantList = function() {

    var localctx = new NestedConstantListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 68, SparkSqlParser.RULE_nestedConstantList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1461;
        this.match(SparkSqlParser.T__0);
        this.state = 1462;
        this.constantList();
        this.state = 1467;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 1463;
            this.match(SparkSqlParser.T__2);
            this.state = 1464;
            this.constantList();
            this.state = 1469;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1470;
        this.match(SparkSqlParser.T__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 CreateFileFormatContext(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 = SparkSqlParser.RULE_createFileFormat;
    return this;
}

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

CreateFileFormatContext.prototype.STORED = function() {
    return this.getToken(SparkSqlParser.STORED, 0);
};

CreateFileFormatContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

CreateFileFormatContext.prototype.fileFormat = function() {
    return this.getTypedRuleContext(FileFormatContext,0);
};

CreateFileFormatContext.prototype.BY = function() {
    return this.getToken(SparkSqlParser.BY, 0);
};

CreateFileFormatContext.prototype.storageHandler = function() {
    return this.getTypedRuleContext(StorageHandlerContext,0);
};

CreateFileFormatContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCreateFileFormat(this);
	}
};

CreateFileFormatContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCreateFileFormat(this);
	}
};

CreateFileFormatContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCreateFileFormat(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.CreateFileFormatContext = CreateFileFormatContext;

SparkSqlParser.prototype.createFileFormat = function() {

    var localctx = new CreateFileFormatContext(this, this._ctx, this.state);
    this.enterRule(localctx, 70, SparkSqlParser.RULE_createFileFormat);
    try {
        this.state = 1478;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,160,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1472;
            this.match(SparkSqlParser.STORED);
            this.state = 1473;
            this.match(SparkSqlParser.AS);
            this.state = 1474;
            this.fileFormat();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1475;
            this.match(SparkSqlParser.STORED);
            this.state = 1476;
            this.match(SparkSqlParser.BY);
            this.state = 1477;
            this.storageHandler();
            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 FileFormatContext(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 = SparkSqlParser.RULE_fileFormat;
    return this;
}

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


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


function TableFileFormatContext(parser, ctx) {
	FileFormatContext.call(this, parser);
    this.inFmt = null; // Token;
    this.outFmt = null; // Token;
    FileFormatContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TableFileFormatContext.prototype = Object.create(FileFormatContext.prototype);
TableFileFormatContext.prototype.constructor = TableFileFormatContext;

SparkSqlParser.TableFileFormatContext = TableFileFormatContext;

TableFileFormatContext.prototype.INPUTFORMAT = function() {
    return this.getToken(SparkSqlParser.INPUTFORMAT, 0);
};

TableFileFormatContext.prototype.OUTPUTFORMAT = function() {
    return this.getToken(SparkSqlParser.OUTPUTFORMAT, 0);
};

TableFileFormatContext.prototype.STRING = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.STRING);
    } else {
        return this.getToken(SparkSqlParser.STRING, i);
    }
};

TableFileFormatContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTableFileFormat(this);
	}
};

TableFileFormatContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTableFileFormat(this);
	}
};

TableFileFormatContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTableFileFormat(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function GenericFileFormatContext(parser, ctx) {
	FileFormatContext.call(this, parser);
    FileFormatContext.prototype.copyFrom.call(this, ctx);
    return this;
}

GenericFileFormatContext.prototype = Object.create(FileFormatContext.prototype);
GenericFileFormatContext.prototype.constructor = GenericFileFormatContext;

SparkSqlParser.GenericFileFormatContext = GenericFileFormatContext;

GenericFileFormatContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};
GenericFileFormatContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterGenericFileFormat(this);
	}
};

GenericFileFormatContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitGenericFileFormat(this);
	}
};

GenericFileFormatContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitGenericFileFormat(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.FileFormatContext = FileFormatContext;

SparkSqlParser.prototype.fileFormat = function() {

    var localctx = new FileFormatContext(this, this._ctx, this.state);
    this.enterRule(localctx, 72, SparkSqlParser.RULE_fileFormat);
    try {
        this.state = 1485;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,161,this._ctx);
        switch(la_) {
        case 1:
            localctx = new TableFileFormatContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1480;
            this.match(SparkSqlParser.INPUTFORMAT);
            this.state = 1481;
            localctx.inFmt = this.match(SparkSqlParser.STRING);
            this.state = 1482;
            this.match(SparkSqlParser.OUTPUTFORMAT);
            this.state = 1483;
            localctx.outFmt = this.match(SparkSqlParser.STRING);
            break;

        case 2:
            localctx = new GenericFileFormatContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1484;
            this.identifier();
            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 StorageHandlerContext(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 = SparkSqlParser.RULE_storageHandler;
    return this;
}

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

StorageHandlerContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

StorageHandlerContext.prototype.WITH = function() {
    return this.getToken(SparkSqlParser.WITH, 0);
};

StorageHandlerContext.prototype.SERDEPROPERTIES = function() {
    return this.getToken(SparkSqlParser.SERDEPROPERTIES, 0);
};

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

StorageHandlerContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterStorageHandler(this);
	}
};

StorageHandlerContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitStorageHandler(this);
	}
};

StorageHandlerContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitStorageHandler(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.StorageHandlerContext = StorageHandlerContext;

SparkSqlParser.prototype.storageHandler = function() {

    var localctx = new StorageHandlerContext(this, this._ctx, this.state);
    this.enterRule(localctx, 74, SparkSqlParser.RULE_storageHandler);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1487;
        this.match(SparkSqlParser.STRING);
        this.state = 1491;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,162,this._ctx);
        if(la_===1) {
            this.state = 1488;
            this.match(SparkSqlParser.WITH);
            this.state = 1489;
            this.match(SparkSqlParser.SERDEPROPERTIES);
            this.state = 1490;
            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 ResourceContext(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 = SparkSqlParser.RULE_resource;
    return this;
}

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

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

ResourceContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

ResourceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterResource(this);
	}
};

ResourceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitResource(this);
	}
};

ResourceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitResource(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ResourceContext = ResourceContext;

SparkSqlParser.prototype.resource = function() {

    var localctx = new ResourceContext(this, this._ctx, this.state);
    this.enterRule(localctx, 76, SparkSqlParser.RULE_resource);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1493;
        this.identifier();
        this.state = 1494;
        this.match(SparkSqlParser.STRING);
    } 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 DmlStatementNoWithContext(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 = SparkSqlParser.RULE_dmlStatementNoWith;
    return this;
}

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


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


function DeleteFromTableContext(parser, ctx) {
	DmlStatementNoWithContext.call(this, parser);
    DmlStatementNoWithContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DeleteFromTableContext.prototype = Object.create(DmlStatementNoWithContext.prototype);
DeleteFromTableContext.prototype.constructor = DeleteFromTableContext;

SparkSqlParser.DeleteFromTableContext = DeleteFromTableContext;

DeleteFromTableContext.prototype.DELETE = function() {
    return this.getToken(SparkSqlParser.DELETE, 0);
};

DeleteFromTableContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

DeleteFromTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

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

DeleteFromTableContext.prototype.whereClause = function() {
    return this.getTypedRuleContext(WhereClauseContext,0);
};
DeleteFromTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDeleteFromTable(this);
	}
};

DeleteFromTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDeleteFromTable(this);
	}
};

DeleteFromTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDeleteFromTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SingleInsertQueryContext(parser, ctx) {
	DmlStatementNoWithContext.call(this, parser);
    DmlStatementNoWithContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SingleInsertQueryContext.prototype = Object.create(DmlStatementNoWithContext.prototype);
SingleInsertQueryContext.prototype.constructor = SingleInsertQueryContext;

SparkSqlParser.SingleInsertQueryContext = SingleInsertQueryContext;

SingleInsertQueryContext.prototype.insertInto = function() {
    return this.getTypedRuleContext(InsertIntoContext,0);
};

SingleInsertQueryContext.prototype.queryTerm = function() {
    return this.getTypedRuleContext(QueryTermContext,0);
};

SingleInsertQueryContext.prototype.queryOrganization = function() {
    return this.getTypedRuleContext(QueryOrganizationContext,0);
};
SingleInsertQueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSingleInsertQuery(this);
	}
};

SingleInsertQueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSingleInsertQuery(this);
	}
};

SingleInsertQueryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSingleInsertQuery(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function MultiInsertQueryContext(parser, ctx) {
	DmlStatementNoWithContext.call(this, parser);
    DmlStatementNoWithContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MultiInsertQueryContext.prototype = Object.create(DmlStatementNoWithContext.prototype);
MultiInsertQueryContext.prototype.constructor = MultiInsertQueryContext;

SparkSqlParser.MultiInsertQueryContext = MultiInsertQueryContext;

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

MultiInsertQueryContext.prototype.multiInsertQueryBody = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(MultiInsertQueryBodyContext);
    } else {
        return this.getTypedRuleContext(MultiInsertQueryBodyContext,i);
    }
};
MultiInsertQueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterMultiInsertQuery(this);
	}
};

MultiInsertQueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitMultiInsertQuery(this);
	}
};

MultiInsertQueryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitMultiInsertQuery(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function UpdateTableContext(parser, ctx) {
	DmlStatementNoWithContext.call(this, parser);
    DmlStatementNoWithContext.prototype.copyFrom.call(this, ctx);
    return this;
}

UpdateTableContext.prototype = Object.create(DmlStatementNoWithContext.prototype);
UpdateTableContext.prototype.constructor = UpdateTableContext;

SparkSqlParser.UpdateTableContext = UpdateTableContext;

UpdateTableContext.prototype.UPDATE = function() {
    return this.getToken(SparkSqlParser.UPDATE, 0);
};

UpdateTableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

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

UpdateTableContext.prototype.setClause = function() {
    return this.getTypedRuleContext(SetClauseContext,0);
};

UpdateTableContext.prototype.whereClause = function() {
    return this.getTypedRuleContext(WhereClauseContext,0);
};
UpdateTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterUpdateTable(this);
	}
};

UpdateTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitUpdateTable(this);
	}
};

UpdateTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitUpdateTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function MergeIntoTableContext(parser, ctx) {
	DmlStatementNoWithContext.call(this, parser);
    this.target = null; // MultipartIdentifierContext;
    this.targetAlias = null; // TableAliasContext;
    this.source = null; // MultipartIdentifierContext;
    this.sourceQuery = null; // QueryContext;
    this.sourceAlias = null; // TableAliasContext;
    this.mergeCondition = null; // BooleanExpressionContext;
    DmlStatementNoWithContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MergeIntoTableContext.prototype = Object.create(DmlStatementNoWithContext.prototype);
MergeIntoTableContext.prototype.constructor = MergeIntoTableContext;

SparkSqlParser.MergeIntoTableContext = MergeIntoTableContext;

MergeIntoTableContext.prototype.MERGE = function() {
    return this.getToken(SparkSqlParser.MERGE, 0);
};

MergeIntoTableContext.prototype.INTO = function() {
    return this.getToken(SparkSqlParser.INTO, 0);
};

MergeIntoTableContext.prototype.USING = function() {
    return this.getToken(SparkSqlParser.USING, 0);
};

MergeIntoTableContext.prototype.ON = function() {
    return this.getToken(SparkSqlParser.ON, 0);
};

MergeIntoTableContext.prototype.multipartIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(MultipartIdentifierContext);
    } else {
        return this.getTypedRuleContext(MultipartIdentifierContext,i);
    }
};

MergeIntoTableContext.prototype.tableAlias = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(TableAliasContext);
    } else {
        return this.getTypedRuleContext(TableAliasContext,i);
    }
};

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

MergeIntoTableContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

MergeIntoTableContext.prototype.matchedClause = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(MatchedClauseContext);
    } else {
        return this.getTypedRuleContext(MatchedClauseContext,i);
    }
};

MergeIntoTableContext.prototype.notMatchedClause = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(NotMatchedClauseContext);
    } else {
        return this.getTypedRuleContext(NotMatchedClauseContext,i);
    }
};
MergeIntoTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterMergeIntoTable(this);
	}
};

MergeIntoTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitMergeIntoTable(this);
	}
};

MergeIntoTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitMergeIntoTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.DmlStatementNoWithContext = DmlStatementNoWithContext;

SparkSqlParser.prototype.dmlStatementNoWith = function() {

    var localctx = new DmlStatementNoWithContext(this, this._ctx, this.state);
    this.enterRule(localctx, 78, SparkSqlParser.RULE_dmlStatementNoWith);
    var _la = 0; // Token type
    try {
        this.state = 1547;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SparkSqlParser.INSERT:
            localctx = new SingleInsertQueryContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1496;
            this.insertInto();
            this.state = 1497;
            this.queryTerm(0);
            this.state = 1498;
            this.queryOrganization();
            break;
        case SparkSqlParser.FROM:
            localctx = new MultiInsertQueryContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1500;
            this.fromClause();
            this.state = 1502; 
            this._errHandler.sync(this);
            var _alt = 1;
            do {
            	switch (_alt) {
            	case 1:
            		this.state = 1501;
            		this.multiInsertQueryBody();
            		break;
            	default:
            		throw new antlr4.error.NoViableAltException(this);
            	}
            	this.state = 1504; 
            	this._errHandler.sync(this);
            	_alt = this._interp.adaptivePredict(this._input,163, this._ctx);
            } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
            break;
        case SparkSqlParser.DELETE:
            localctx = new DeleteFromTableContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1506;
            this.match(SparkSqlParser.DELETE);
            this.state = 1507;
            this.match(SparkSqlParser.FROM);
            this.state = 1508;
            this.multipartIdentifier();
            this.state = 1509;
            this.tableAlias();
            this.state = 1511;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.WHERE) {
                this.state = 1510;
                this.whereClause();
            }

            break;
        case SparkSqlParser.UPDATE:
            localctx = new UpdateTableContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1513;
            this.match(SparkSqlParser.UPDATE);
            this.state = 1514;
            this.multipartIdentifier();
            this.state = 1515;
            this.tableAlias();
            this.state = 1516;
            this.setClause();
            this.state = 1518;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.WHERE) {
                this.state = 1517;
                this.whereClause();
            }

            break;
        case SparkSqlParser.MERGE:
            localctx = new MergeIntoTableContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1520;
            this.match(SparkSqlParser.MERGE);
            this.state = 1521;
            this.match(SparkSqlParser.INTO);
            this.state = 1522;
            localctx.target = this.multipartIdentifier();
            this.state = 1523;
            localctx.targetAlias = this.tableAlias();
            this.state = 1524;
            this.match(SparkSqlParser.USING);
            this.state = 1530;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,166,this._ctx);
            switch(la_) {
            case 1:
                this.state = 1525;
                localctx.source = this.multipartIdentifier();
                break;

            case 2:
                this.state = 1526;
                this.match(SparkSqlParser.T__0);
                this.state = 1527;
                localctx.sourceQuery = this.query();
                this.state = 1528;
                this.match(SparkSqlParser.T__1);
                break;

            }
            this.state = 1532;
            localctx.sourceAlias = this.tableAlias();
            this.state = 1533;
            this.match(SparkSqlParser.ON);
            this.state = 1534;
            localctx.mergeCondition = this.booleanExpression(0);
            this.state = 1538;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,167,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 1535;
                    this.matchedClause(); 
                }
                this.state = 1540;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,167,this._ctx);
            }

            this.state = 1544;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.WHEN) {
                this.state = 1541;
                this.notMatchedClause();
                this.state = 1546;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            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 QueryOrganizationContext(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 = SparkSqlParser.RULE_queryOrganization;
    this._sortItem = null; // SortItemContext
    this.order = []; // of SortItemContexts
    this._expression = null; // ExpressionContext
    this.clusterBy = []; // of ExpressionContexts
    this.distributeBy = []; // of ExpressionContexts
    this.sort = []; // of SortItemContexts
    this.limit = null; // ExpressionContext
    return this;
}

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

QueryOrganizationContext.prototype.ORDER = function() {
    return this.getToken(SparkSqlParser.ORDER, 0);
};

QueryOrganizationContext.prototype.BY = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.BY);
    } else {
        return this.getToken(SparkSqlParser.BY, i);
    }
};


QueryOrganizationContext.prototype.CLUSTER = function() {
    return this.getToken(SparkSqlParser.CLUSTER, 0);
};

QueryOrganizationContext.prototype.DISTRIBUTE = function() {
    return this.getToken(SparkSqlParser.DISTRIBUTE, 0);
};

QueryOrganizationContext.prototype.SORT = function() {
    return this.getToken(SparkSqlParser.SORT, 0);
};

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

QueryOrganizationContext.prototype.LIMIT = function() {
    return this.getToken(SparkSqlParser.LIMIT, 0);
};

QueryOrganizationContext.prototype.sortItem = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(SortItemContext);
    } else {
        return this.getTypedRuleContext(SortItemContext,i);
    }
};

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

QueryOrganizationContext.prototype.ALL = function() {
    return this.getToken(SparkSqlParser.ALL, 0);
};

QueryOrganizationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQueryOrganization(this);
	}
};

QueryOrganizationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQueryOrganization(this);
	}
};

QueryOrganizationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQueryOrganization(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.QueryOrganizationContext = QueryOrganizationContext;

SparkSqlParser.prototype.queryOrganization = function() {

    var localctx = new QueryOrganizationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 80, SparkSqlParser.RULE_queryOrganization);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1559;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,171,this._ctx);
        if(la_===1) {
            this.state = 1549;
            this.match(SparkSqlParser.ORDER);
            this.state = 1550;
            this.match(SparkSqlParser.BY);
            this.state = 1551;
            localctx._sortItem = this.sortItem();
            localctx.order.push(localctx._sortItem);
            this.state = 1556;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,170,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 1552;
                    this.match(SparkSqlParser.T__2);
                    this.state = 1553;
                    localctx._sortItem = this.sortItem();
                    localctx.order.push(localctx._sortItem); 
                }
                this.state = 1558;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,170,this._ctx);
            }


        }
        this.state = 1571;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,173,this._ctx);
        if(la_===1) {
            this.state = 1561;
            this.match(SparkSqlParser.CLUSTER);
            this.state = 1562;
            this.match(SparkSqlParser.BY);
            this.state = 1563;
            localctx._expression = this.expression();
            localctx.clusterBy.push(localctx._expression);
            this.state = 1568;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,172,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 1564;
                    this.match(SparkSqlParser.T__2);
                    this.state = 1565;
                    localctx._expression = this.expression();
                    localctx.clusterBy.push(localctx._expression); 
                }
                this.state = 1570;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,172,this._ctx);
            }


        }
        this.state = 1583;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,175,this._ctx);
        if(la_===1) {
            this.state = 1573;
            this.match(SparkSqlParser.DISTRIBUTE);
            this.state = 1574;
            this.match(SparkSqlParser.BY);
            this.state = 1575;
            localctx._expression = this.expression();
            localctx.distributeBy.push(localctx._expression);
            this.state = 1580;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,174,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 1576;
                    this.match(SparkSqlParser.T__2);
                    this.state = 1577;
                    localctx._expression = this.expression();
                    localctx.distributeBy.push(localctx._expression); 
                }
                this.state = 1582;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,174,this._ctx);
            }


        }
        this.state = 1595;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,177,this._ctx);
        if(la_===1) {
            this.state = 1585;
            this.match(SparkSqlParser.SORT);
            this.state = 1586;
            this.match(SparkSqlParser.BY);
            this.state = 1587;
            localctx._sortItem = this.sortItem();
            localctx.sort.push(localctx._sortItem);
            this.state = 1592;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,176,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 1588;
                    this.match(SparkSqlParser.T__2);
                    this.state = 1589;
                    localctx._sortItem = this.sortItem();
                    localctx.sort.push(localctx._sortItem); 
                }
                this.state = 1594;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,176,this._ctx);
            }


        }
        this.state = 1598;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,178,this._ctx);
        if(la_===1) {
            this.state = 1597;
            this.windowClause();

        }
        this.state = 1605;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,180,this._ctx);
        if(la_===1) {
            this.state = 1600;
            this.match(SparkSqlParser.LIMIT);
            this.state = 1603;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,179,this._ctx);
            switch(la_) {
            case 1:
                this.state = 1601;
                this.match(SparkSqlParser.ALL);
                break;

            case 2:
                this.state = 1602;
                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 MultiInsertQueryBodyContext(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 = SparkSqlParser.RULE_multiInsertQueryBody;
    return this;
}

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

MultiInsertQueryBodyContext.prototype.insertInto = function() {
    return this.getTypedRuleContext(InsertIntoContext,0);
};

MultiInsertQueryBodyContext.prototype.fromStatementBody = function() {
    return this.getTypedRuleContext(FromStatementBodyContext,0);
};

MultiInsertQueryBodyContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterMultiInsertQueryBody(this);
	}
};

MultiInsertQueryBodyContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitMultiInsertQueryBody(this);
	}
};

MultiInsertQueryBodyContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitMultiInsertQueryBody(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.MultiInsertQueryBodyContext = MultiInsertQueryBodyContext;

SparkSqlParser.prototype.multiInsertQueryBody = function() {

    var localctx = new MultiInsertQueryBodyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 82, SparkSqlParser.RULE_multiInsertQueryBody);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1607;
        this.insertInto();
        this.state = 1608;
        this.fromStatementBody();
    } 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 QueryTermContext(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 = SparkSqlParser.RULE_queryTerm;
    return this;
}

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


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

function QueryTermDefaultContext(parser, ctx) {
	QueryTermContext.call(this, parser);
    QueryTermContext.prototype.copyFrom.call(this, ctx);
    return this;
}

QueryTermDefaultContext.prototype = Object.create(QueryTermContext.prototype);
QueryTermDefaultContext.prototype.constructor = QueryTermDefaultContext;

SparkSqlParser.QueryTermDefaultContext = QueryTermDefaultContext;

QueryTermDefaultContext.prototype.queryPrimary = function() {
    return this.getTypedRuleContext(QueryPrimaryContext,0);
};
QueryTermDefaultContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQueryTermDefault(this);
	}
};

QueryTermDefaultContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQueryTermDefault(this);
	}
};

QueryTermDefaultContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQueryTermDefault(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SetOperationContext(parser, ctx) {
	QueryTermContext.call(this, parser);
    this.left = null; // QueryTermContext;
    this.operator = null; // Token;
    this.right = null; // QueryTermContext;
    QueryTermContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetOperationContext.prototype = Object.create(QueryTermContext.prototype);
SetOperationContext.prototype.constructor = SetOperationContext;

SparkSqlParser.SetOperationContext = SetOperationContext;

SetOperationContext.prototype.queryTerm = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(QueryTermContext);
    } else {
        return this.getTypedRuleContext(QueryTermContext,i);
    }
};

SetOperationContext.prototype.INTERSECT = function() {
    return this.getToken(SparkSqlParser.INTERSECT, 0);
};

SetOperationContext.prototype.UNION = function() {
    return this.getToken(SparkSqlParser.UNION, 0);
};

SetOperationContext.prototype.EXCEPT = function() {
    return this.getToken(SparkSqlParser.EXCEPT, 0);
};

SetOperationContext.prototype.SETMINUS = function() {
    return this.getToken(SparkSqlParser.SETMINUS, 0);
};

SetOperationContext.prototype.setQuantifier = function() {
    return this.getTypedRuleContext(SetQuantifierContext,0);
};
SetOperationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetOperation(this);
	}
};

SetOperationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetOperation(this);
	}
};

SetOperationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetOperation(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.prototype.queryTerm = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new QueryTermContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 84;
    this.enterRecursionRule(localctx, 84, SparkSqlParser.RULE_queryTerm, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new QueryTermDefaultContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1611;
        this.queryPrimary();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1636;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,185,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 = 1634;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,184,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new SetOperationContext(this, new QueryTermContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_queryTerm);
                    this.state = 1613;
                    if (!( this.precpred(this._ctx, 3))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                    }
                    this.state = 1614;
                    if (!( legacy_setops_precedence_enbled)) {
                        throw new antlr4.error.FailedPredicateException(this, "legacy_setops_precedence_enbled");
                    }
                    this.state = 1615;
                    localctx.operator = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(_la===SparkSqlParser.EXCEPT || _la===SparkSqlParser.INTERSECT || _la===SparkSqlParser.SETMINUS || _la===SparkSqlParser.UNION)) {
                        localctx.operator = this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 1617;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                    if(_la===SparkSqlParser.ALL || _la===SparkSqlParser.DISTINCT) {
                        this.state = 1616;
                        this.setQuantifier();
                    }

                    this.state = 1619;
                    localctx.right = this.queryTerm(4);
                    break;

                case 2:
                    localctx = new SetOperationContext(this, new QueryTermContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_queryTerm);
                    this.state = 1620;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 1621;
                    if (!( !legacy_setops_precedence_enbled)) {
                        throw new antlr4.error.FailedPredicateException(this, "!legacy_setops_precedence_enbled");
                    }
                    this.state = 1622;
                    localctx.operator = this.match(SparkSqlParser.INTERSECT);
                    this.state = 1624;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                    if(_la===SparkSqlParser.ALL || _la===SparkSqlParser.DISTINCT) {
                        this.state = 1623;
                        this.setQuantifier();
                    }

                    this.state = 1626;
                    localctx.right = this.queryTerm(3);
                    break;

                case 3:
                    localctx = new SetOperationContext(this, new QueryTermContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_queryTerm);
                    this.state = 1627;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 1628;
                    if (!( !legacy_setops_precedence_enbled)) {
                        throw new antlr4.error.FailedPredicateException(this, "!legacy_setops_precedence_enbled");
                    }
                    this.state = 1629;
                    localctx.operator = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(_la===SparkSqlParser.EXCEPT || _la===SparkSqlParser.SETMINUS || _la===SparkSqlParser.UNION)) {
                        localctx.operator = this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 1631;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                    if(_la===SparkSqlParser.ALL || _la===SparkSqlParser.DISTINCT) {
                        this.state = 1630;
                        this.setQuantifier();
                    }

                    this.state = 1633;
                    localctx.right = this.queryTerm(2);
                    break;

                } 
            }
            this.state = 1638;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,185,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 QueryPrimaryContext(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 = SparkSqlParser.RULE_queryPrimary;
    return this;
}

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


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


function SubqueryContext(parser, ctx) {
	QueryPrimaryContext.call(this, parser);
    QueryPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SubqueryContext.prototype = Object.create(QueryPrimaryContext.prototype);
SubqueryContext.prototype.constructor = SubqueryContext;

SparkSqlParser.SubqueryContext = SubqueryContext;

SubqueryContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};
SubqueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSubquery(this);
	}
};

SubqueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSubquery(this);
	}
};

SubqueryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSubquery(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function QueryPrimaryDefaultContext(parser, ctx) {
	QueryPrimaryContext.call(this, parser);
    QueryPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

QueryPrimaryDefaultContext.prototype = Object.create(QueryPrimaryContext.prototype);
QueryPrimaryDefaultContext.prototype.constructor = QueryPrimaryDefaultContext;

SparkSqlParser.QueryPrimaryDefaultContext = QueryPrimaryDefaultContext;

QueryPrimaryDefaultContext.prototype.querySpecification = function() {
    return this.getTypedRuleContext(QuerySpecificationContext,0);
};
QueryPrimaryDefaultContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQueryPrimaryDefault(this);
	}
};

QueryPrimaryDefaultContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQueryPrimaryDefault(this);
	}
};

QueryPrimaryDefaultContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQueryPrimaryDefault(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function InlineTableDefault1Context(parser, ctx) {
	QueryPrimaryContext.call(this, parser);
    QueryPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

InlineTableDefault1Context.prototype = Object.create(QueryPrimaryContext.prototype);
InlineTableDefault1Context.prototype.constructor = InlineTableDefault1Context;

SparkSqlParser.InlineTableDefault1Context = InlineTableDefault1Context;

InlineTableDefault1Context.prototype.inlineTable = function() {
    return this.getTypedRuleContext(InlineTableContext,0);
};
InlineTableDefault1Context.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterInlineTableDefault1(this);
	}
};

InlineTableDefault1Context.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitInlineTableDefault1(this);
	}
};

InlineTableDefault1Context.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitInlineTableDefault1(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function FromStmtContext(parser, ctx) {
	QueryPrimaryContext.call(this, parser);
    QueryPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

FromStmtContext.prototype = Object.create(QueryPrimaryContext.prototype);
FromStmtContext.prototype.constructor = FromStmtContext;

SparkSqlParser.FromStmtContext = FromStmtContext;

FromStmtContext.prototype.fromStatement = function() {
    return this.getTypedRuleContext(FromStatementContext,0);
};
FromStmtContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFromStmt(this);
	}
};

FromStmtContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFromStmt(this);
	}
};

FromStmtContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitFromStmt(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function TableContext(parser, ctx) {
	QueryPrimaryContext.call(this, parser);
    QueryPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TableContext.prototype = Object.create(QueryPrimaryContext.prototype);
TableContext.prototype.constructor = TableContext;

SparkSqlParser.TableContext = TableContext;

TableContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

TableContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};
TableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTable(this);
	}
};

TableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTable(this);
	}
};

TableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.QueryPrimaryContext = QueryPrimaryContext;

SparkSqlParser.prototype.queryPrimary = function() {

    var localctx = new QueryPrimaryContext(this, this._ctx, this.state);
    this.enterRule(localctx, 86, SparkSqlParser.RULE_queryPrimary);
    try {
        this.state = 1648;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SparkSqlParser.MAP:
        case SparkSqlParser.REDUCE:
        case SparkSqlParser.SELECT:
            localctx = new QueryPrimaryDefaultContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1639;
            this.querySpecification();
            break;
        case SparkSqlParser.FROM:
            localctx = new FromStmtContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1640;
            this.fromStatement();
            break;
        case SparkSqlParser.TABLE:
            localctx = new TableContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1641;
            this.match(SparkSqlParser.TABLE);
            this.state = 1642;
            this.multipartIdentifier();
            break;
        case SparkSqlParser.VALUES:
            localctx = new InlineTableDefault1Context(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1643;
            this.inlineTable();
            break;
        case SparkSqlParser.T__0:
            localctx = new SubqueryContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1644;
            this.match(SparkSqlParser.T__0);
            this.state = 1645;
            this.query();
            this.state = 1646;
            this.match(SparkSqlParser.T__1);
            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 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 = SparkSqlParser.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(SparkSqlParser.NULLS, 0);
};

SortItemContext.prototype.ASC = function() {
    return this.getToken(SparkSqlParser.ASC, 0);
};

SortItemContext.prototype.DESC = function() {
    return this.getToken(SparkSqlParser.DESC, 0);
};

SortItemContext.prototype.LAST = function() {
    return this.getToken(SparkSqlParser.LAST, 0);
};

SortItemContext.prototype.FIRST = function() {
    return this.getToken(SparkSqlParser.FIRST, 0);
};

SortItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSortItem(this);
	}
};

SortItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSortItem(this);
	}
};

SortItemContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSortItem(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SortItemContext = SortItemContext;

SparkSqlParser.prototype.sortItem = function() {

    var localctx = new SortItemContext(this, this._ctx, this.state);
    this.enterRule(localctx, 88, SparkSqlParser.RULE_sortItem);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1650;
        this.expression();
        this.state = 1652;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,187,this._ctx);
        if(la_===1) {
            this.state = 1651;
            localctx.ordering = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.ASC || _la===SparkSqlParser.DESC)) {
                localctx.ordering = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }

        }
        this.state = 1656;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,188,this._ctx);
        if(la_===1) {
            this.state = 1654;
            this.match(SparkSqlParser.NULLS);
            this.state = 1655;
            localctx.nullOrder = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.FIRST || _la===SparkSqlParser.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 FromStatementContext(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 = SparkSqlParser.RULE_fromStatement;
    return this;
}

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

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

FromStatementContext.prototype.fromStatementBody = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(FromStatementBodyContext);
    } else {
        return this.getTypedRuleContext(FromStatementBodyContext,i);
    }
};

FromStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFromStatement(this);
	}
};

FromStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFromStatement(this);
	}
};

FromStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitFromStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.FromStatementContext = FromStatementContext;

SparkSqlParser.prototype.fromStatement = function() {

    var localctx = new FromStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 90, SparkSqlParser.RULE_fromStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1658;
        this.fromClause();
        this.state = 1660; 
        this._errHandler.sync(this);
        var _alt = 1;
        do {
        	switch (_alt) {
        	case 1:
        		this.state = 1659;
        		this.fromStatementBody();
        		break;
        	default:
        		throw new antlr4.error.NoViableAltException(this);
        	}
        	this.state = 1662; 
        	this._errHandler.sync(this);
        	_alt = this._interp.adaptivePredict(this._input,189, 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 FromStatementBodyContext(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 = SparkSqlParser.RULE_fromStatementBody;
    return this;
}

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

FromStatementBodyContext.prototype.transformClause = function() {
    return this.getTypedRuleContext(TransformClauseContext,0);
};

FromStatementBodyContext.prototype.queryOrganization = function() {
    return this.getTypedRuleContext(QueryOrganizationContext,0);
};

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

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

FromStatementBodyContext.prototype.lateralView = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LateralViewContext);
    } else {
        return this.getTypedRuleContext(LateralViewContext,i);
    }
};

FromStatementBodyContext.prototype.aggregationClause = function() {
    return this.getTypedRuleContext(AggregationClauseContext,0);
};

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

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

FromStatementBodyContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFromStatementBody(this);
	}
};

FromStatementBodyContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFromStatementBody(this);
	}
};

FromStatementBodyContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitFromStatementBody(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.FromStatementBodyContext = FromStatementBodyContext;

SparkSqlParser.prototype.fromStatementBody = function() {

    var localctx = new FromStatementBodyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 92, SparkSqlParser.RULE_fromStatementBody);
    try {
        this.state = 1691;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,196,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1664;
            this.transformClause();
            this.state = 1666;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,190,this._ctx);
            if(la_===1) {
                this.state = 1665;
                this.whereClause();

            }
            this.state = 1668;
            this.queryOrganization();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1670;
            this.selectClause();
            this.state = 1674;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,191,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 1671;
                    this.lateralView(); 
                }
                this.state = 1676;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,191,this._ctx);
            }

            this.state = 1678;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,192,this._ctx);
            if(la_===1) {
                this.state = 1677;
                this.whereClause();

            }
            this.state = 1681;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,193,this._ctx);
            if(la_===1) {
                this.state = 1680;
                this.aggregationClause();

            }
            this.state = 1684;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,194,this._ctx);
            if(la_===1) {
                this.state = 1683;
                this.havingClause();

            }
            this.state = 1687;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,195,this._ctx);
            if(la_===1) {
                this.state = 1686;
                this.windowClause();

            }
            this.state = 1689;
            this.queryOrganization();
            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 QuerySpecificationContext(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 = SparkSqlParser.RULE_querySpecification;
    return this;
}

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


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


function RegularQuerySpecificationContext(parser, ctx) {
	QuerySpecificationContext.call(this, parser);
    QuerySpecificationContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RegularQuerySpecificationContext.prototype = Object.create(QuerySpecificationContext.prototype);
RegularQuerySpecificationContext.prototype.constructor = RegularQuerySpecificationContext;

SparkSqlParser.RegularQuerySpecificationContext = RegularQuerySpecificationContext;

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

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

RegularQuerySpecificationContext.prototype.lateralView = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LateralViewContext);
    } else {
        return this.getTypedRuleContext(LateralViewContext,i);
    }
};

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

RegularQuerySpecificationContext.prototype.aggregationClause = function() {
    return this.getTypedRuleContext(AggregationClauseContext,0);
};

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

RegularQuerySpecificationContext.prototype.windowClause = function() {
    return this.getTypedRuleContext(WindowClauseContext,0);
};
RegularQuerySpecificationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRegularQuerySpecification(this);
	}
};

RegularQuerySpecificationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRegularQuerySpecification(this);
	}
};

RegularQuerySpecificationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRegularQuerySpecification(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function TransformQuerySpecificationContext(parser, ctx) {
	QuerySpecificationContext.call(this, parser);
    QuerySpecificationContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TransformQuerySpecificationContext.prototype = Object.create(QuerySpecificationContext.prototype);
TransformQuerySpecificationContext.prototype.constructor = TransformQuerySpecificationContext;

SparkSqlParser.TransformQuerySpecificationContext = TransformQuerySpecificationContext;

TransformQuerySpecificationContext.prototype.transformClause = function() {
    return this.getTypedRuleContext(TransformClauseContext,0);
};

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

TransformQuerySpecificationContext.prototype.whereClause = function() {
    return this.getTypedRuleContext(WhereClauseContext,0);
};
TransformQuerySpecificationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTransformQuerySpecification(this);
	}
};

TransformQuerySpecificationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTransformQuerySpecification(this);
	}
};

TransformQuerySpecificationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTransformQuerySpecification(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.QuerySpecificationContext = QuerySpecificationContext;

SparkSqlParser.prototype.querySpecification = function() {

    var localctx = new QuerySpecificationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 94, SparkSqlParser.RULE_querySpecification);
    try {
        this.state = 1722;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,205,this._ctx);
        switch(la_) {
        case 1:
            localctx = new TransformQuerySpecificationContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1693;
            this.transformClause();
            this.state = 1695;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,197,this._ctx);
            if(la_===1) {
                this.state = 1694;
                this.fromClause();

            }
            this.state = 1698;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,198,this._ctx);
            if(la_===1) {
                this.state = 1697;
                this.whereClause();

            }
            break;

        case 2:
            localctx = new RegularQuerySpecificationContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1700;
            this.selectClause();
            this.state = 1702;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,199,this._ctx);
            if(la_===1) {
                this.state = 1701;
                this.fromClause();

            }
            this.state = 1707;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,200,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 1704;
                    this.lateralView(); 
                }
                this.state = 1709;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,200,this._ctx);
            }

            this.state = 1711;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,201,this._ctx);
            if(la_===1) {
                this.state = 1710;
                this.whereClause();

            }
            this.state = 1714;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,202,this._ctx);
            if(la_===1) {
                this.state = 1713;
                this.aggregationClause();

            }
            this.state = 1717;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,203,this._ctx);
            if(la_===1) {
                this.state = 1716;
                this.havingClause();

            }
            this.state = 1720;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,204,this._ctx);
            if(la_===1) {
                this.state = 1719;
                this.windowClause();

            }
            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 TransformClauseContext(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 = SparkSqlParser.RULE_transformClause;
    this.kind = null; // Token
    this.inRowFormat = null; // RowFormatContext
    this.recordWriter = null; // Token
    this.script = null; // Token
    this.outRowFormat = null; // RowFormatContext
    this.recordReader = null; // Token
    return this;
}

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

TransformClauseContext.prototype.USING = function() {
    return this.getToken(SparkSqlParser.USING, 0);
};

TransformClauseContext.prototype.STRING = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.STRING);
    } else {
        return this.getToken(SparkSqlParser.STRING, i);
    }
};


TransformClauseContext.prototype.SELECT = function() {
    return this.getToken(SparkSqlParser.SELECT, 0);
};

TransformClauseContext.prototype.namedExpressionSeq = function() {
    return this.getTypedRuleContext(NamedExpressionSeqContext,0);
};

TransformClauseContext.prototype.TRANSFORM = function() {
    return this.getToken(SparkSqlParser.TRANSFORM, 0);
};

TransformClauseContext.prototype.MAP = function() {
    return this.getToken(SparkSqlParser.MAP, 0);
};

TransformClauseContext.prototype.REDUCE = function() {
    return this.getToken(SparkSqlParser.REDUCE, 0);
};

TransformClauseContext.prototype.RECORDWRITER = function() {
    return this.getToken(SparkSqlParser.RECORDWRITER, 0);
};

TransformClauseContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

TransformClauseContext.prototype.RECORDREADER = function() {
    return this.getToken(SparkSqlParser.RECORDREADER, 0);
};

TransformClauseContext.prototype.rowFormat = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(RowFormatContext);
    } else {
        return this.getTypedRuleContext(RowFormatContext,i);
    }
};

TransformClauseContext.prototype.identifierSeq = function() {
    return this.getTypedRuleContext(IdentifierSeqContext,0);
};

TransformClauseContext.prototype.colTypeList = function() {
    return this.getTypedRuleContext(ColTypeListContext,0);
};

TransformClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTransformClause(this);
	}
};

TransformClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTransformClause(this);
	}
};

TransformClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTransformClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.TransformClauseContext = TransformClauseContext;

SparkSqlParser.prototype.transformClause = function() {

    var localctx = new TransformClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 96, SparkSqlParser.RULE_transformClause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1734;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SparkSqlParser.SELECT:
            this.state = 1724;
            this.match(SparkSqlParser.SELECT);
            this.state = 1725;
            localctx.kind = this.match(SparkSqlParser.TRANSFORM);
            this.state = 1726;
            this.match(SparkSqlParser.T__0);
            this.state = 1727;
            this.namedExpressionSeq();
            this.state = 1728;
            this.match(SparkSqlParser.T__1);
            break;
        case SparkSqlParser.MAP:
            this.state = 1730;
            localctx.kind = this.match(SparkSqlParser.MAP);
            this.state = 1731;
            this.namedExpressionSeq();
            break;
        case SparkSqlParser.REDUCE:
            this.state = 1732;
            localctx.kind = this.match(SparkSqlParser.REDUCE);
            this.state = 1733;
            this.namedExpressionSeq();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 1737;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.ROW) {
            this.state = 1736;
            localctx.inRowFormat = this.rowFormat();
        }

        this.state = 1741;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.RECORDWRITER) {
            this.state = 1739;
            this.match(SparkSqlParser.RECORDWRITER);
            this.state = 1740;
            localctx.recordWriter = this.match(SparkSqlParser.STRING);
        }

        this.state = 1743;
        this.match(SparkSqlParser.USING);
        this.state = 1744;
        localctx.script = this.match(SparkSqlParser.STRING);
        this.state = 1757;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,211,this._ctx);
        if(la_===1) {
            this.state = 1745;
            this.match(SparkSqlParser.AS);
            this.state = 1755;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,210,this._ctx);
            switch(la_) {
            case 1:
                this.state = 1746;
                this.identifierSeq();
                break;

            case 2:
                this.state = 1747;
                this.colTypeList();
                break;

            case 3:
                this.state = 1748;
                this.match(SparkSqlParser.T__0);
                this.state = 1751;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,209,this._ctx);
                switch(la_) {
                case 1:
                    this.state = 1749;
                    this.identifierSeq();
                    break;

                case 2:
                    this.state = 1750;
                    this.colTypeList();
                    break;

                }
                this.state = 1753;
                this.match(SparkSqlParser.T__1);
                break;

            }

        }
        this.state = 1760;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,212,this._ctx);
        if(la_===1) {
            this.state = 1759;
            localctx.outRowFormat = this.rowFormat();

        }
        this.state = 1764;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,213,this._ctx);
        if(la_===1) {
            this.state = 1762;
            this.match(SparkSqlParser.RECORDREADER);
            this.state = 1763;
            localctx.recordReader = this.match(SparkSqlParser.STRING);

        }
    } 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 = SparkSqlParser.RULE_selectClause;
    this._hint = null; // HintContext
    this.hints = []; // of HintContexts
    return this;
}

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

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

SelectClauseContext.prototype.namedExpressionSeq = function() {
    return this.getTypedRuleContext(NamedExpressionSeqContext,0);
};

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

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

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

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

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




SparkSqlParser.SelectClauseContext = SelectClauseContext;

SparkSqlParser.prototype.selectClause = function() {

    var localctx = new SelectClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 98, SparkSqlParser.RULE_selectClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1766;
        this.match(SparkSqlParser.SELECT);
        this.state = 1770;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,214,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1767;
                localctx._hint = this.hint();
                localctx.hints.push(localctx._hint); 
            }
            this.state = 1772;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,214,this._ctx);
        }

        this.state = 1774;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,215,this._ctx);
        if(la_===1) {
            this.state = 1773;
            this.setQuantifier();

        }
        this.state = 1776;
        this.namedExpressionSeq();
    } 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 SetClauseContext(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 = SparkSqlParser.RULE_setClause;
    return this;
}

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

SetClauseContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

SetClauseContext.prototype.assignmentList = function() {
    return this.getTypedRuleContext(AssignmentListContext,0);
};

SetClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetClause(this);
	}
};

SetClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetClause(this);
	}
};

SetClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SetClauseContext = SetClauseContext;

SparkSqlParser.prototype.setClause = function() {

    var localctx = new SetClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 100, SparkSqlParser.RULE_setClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1778;
        this.match(SparkSqlParser.SET);
        this.state = 1779;
        this.assignmentList();
    } 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 MatchedClauseContext(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 = SparkSqlParser.RULE_matchedClause;
    this.matchedCond = null; // BooleanExpressionContext
    return this;
}

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

MatchedClauseContext.prototype.WHEN = function() {
    return this.getToken(SparkSqlParser.WHEN, 0);
};

MatchedClauseContext.prototype.MATCHED = function() {
    return this.getToken(SparkSqlParser.MATCHED, 0);
};

MatchedClauseContext.prototype.THEN = function() {
    return this.getToken(SparkSqlParser.THEN, 0);
};

MatchedClauseContext.prototype.matchedAction = function() {
    return this.getTypedRuleContext(MatchedActionContext,0);
};

MatchedClauseContext.prototype.AND = function() {
    return this.getToken(SparkSqlParser.AND, 0);
};

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

MatchedClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterMatchedClause(this);
	}
};

MatchedClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitMatchedClause(this);
	}
};

MatchedClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitMatchedClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.MatchedClauseContext = MatchedClauseContext;

SparkSqlParser.prototype.matchedClause = function() {

    var localctx = new MatchedClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 102, SparkSqlParser.RULE_matchedClause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1781;
        this.match(SparkSqlParser.WHEN);
        this.state = 1782;
        this.match(SparkSqlParser.MATCHED);
        this.state = 1785;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.AND) {
            this.state = 1783;
            this.match(SparkSqlParser.AND);
            this.state = 1784;
            localctx.matchedCond = this.booleanExpression(0);
        }

        this.state = 1787;
        this.match(SparkSqlParser.THEN);
        this.state = 1788;
        this.matchedAction();
    } 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 NotMatchedClauseContext(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 = SparkSqlParser.RULE_notMatchedClause;
    this.notMatchedCond = null; // BooleanExpressionContext
    return this;
}

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

NotMatchedClauseContext.prototype.WHEN = function() {
    return this.getToken(SparkSqlParser.WHEN, 0);
};

NotMatchedClauseContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

NotMatchedClauseContext.prototype.MATCHED = function() {
    return this.getToken(SparkSqlParser.MATCHED, 0);
};

NotMatchedClauseContext.prototype.THEN = function() {
    return this.getToken(SparkSqlParser.THEN, 0);
};

NotMatchedClauseContext.prototype.notMatchedAction = function() {
    return this.getTypedRuleContext(NotMatchedActionContext,0);
};

NotMatchedClauseContext.prototype.AND = function() {
    return this.getToken(SparkSqlParser.AND, 0);
};

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

NotMatchedClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNotMatchedClause(this);
	}
};

NotMatchedClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNotMatchedClause(this);
	}
};

NotMatchedClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNotMatchedClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.NotMatchedClauseContext = NotMatchedClauseContext;

SparkSqlParser.prototype.notMatchedClause = function() {

    var localctx = new NotMatchedClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 104, SparkSqlParser.RULE_notMatchedClause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1790;
        this.match(SparkSqlParser.WHEN);
        this.state = 1791;
        this.match(SparkSqlParser.NOT);
        this.state = 1792;
        this.match(SparkSqlParser.MATCHED);
        this.state = 1795;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.AND) {
            this.state = 1793;
            this.match(SparkSqlParser.AND);
            this.state = 1794;
            localctx.notMatchedCond = this.booleanExpression(0);
        }

        this.state = 1797;
        this.match(SparkSqlParser.THEN);
        this.state = 1798;
        this.notMatchedAction();
    } 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 MatchedActionContext(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 = SparkSqlParser.RULE_matchedAction;
    return this;
}

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

MatchedActionContext.prototype.DELETE = function() {
    return this.getToken(SparkSqlParser.DELETE, 0);
};

MatchedActionContext.prototype.UPDATE = function() {
    return this.getToken(SparkSqlParser.UPDATE, 0);
};

MatchedActionContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

MatchedActionContext.prototype.ASTERISK = function() {
    return this.getToken(SparkSqlParser.ASTERISK, 0);
};

MatchedActionContext.prototype.assignmentList = function() {
    return this.getTypedRuleContext(AssignmentListContext,0);
};

MatchedActionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterMatchedAction(this);
	}
};

MatchedActionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitMatchedAction(this);
	}
};

MatchedActionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitMatchedAction(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.MatchedActionContext = MatchedActionContext;

SparkSqlParser.prototype.matchedAction = function() {

    var localctx = new MatchedActionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 106, SparkSqlParser.RULE_matchedAction);
    try {
        this.state = 1807;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,218,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1800;
            this.match(SparkSqlParser.DELETE);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1801;
            this.match(SparkSqlParser.UPDATE);
            this.state = 1802;
            this.match(SparkSqlParser.SET);
            this.state = 1803;
            this.match(SparkSqlParser.ASTERISK);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1804;
            this.match(SparkSqlParser.UPDATE);
            this.state = 1805;
            this.match(SparkSqlParser.SET);
            this.state = 1806;
            this.assignmentList();
            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 NotMatchedActionContext(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 = SparkSqlParser.RULE_notMatchedAction;
    this.columns = null; // MultipartIdentifierListContext
    return this;
}

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

NotMatchedActionContext.prototype.INSERT = function() {
    return this.getToken(SparkSqlParser.INSERT, 0);
};

NotMatchedActionContext.prototype.ASTERISK = function() {
    return this.getToken(SparkSqlParser.ASTERISK, 0);
};

NotMatchedActionContext.prototype.VALUES = function() {
    return this.getToken(SparkSqlParser.VALUES, 0);
};

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

NotMatchedActionContext.prototype.multipartIdentifierList = function() {
    return this.getTypedRuleContext(MultipartIdentifierListContext,0);
};

NotMatchedActionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNotMatchedAction(this);
	}
};

NotMatchedActionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNotMatchedAction(this);
	}
};

NotMatchedActionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNotMatchedAction(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.NotMatchedActionContext = NotMatchedActionContext;

SparkSqlParser.prototype.notMatchedAction = function() {

    var localctx = new NotMatchedActionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 108, SparkSqlParser.RULE_notMatchedAction);
    var _la = 0; // Token type
    try {
        this.state = 1827;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,220,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1809;
            this.match(SparkSqlParser.INSERT);
            this.state = 1810;
            this.match(SparkSqlParser.ASTERISK);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1811;
            this.match(SparkSqlParser.INSERT);
            this.state = 1812;
            this.match(SparkSqlParser.T__0);
            this.state = 1813;
            localctx.columns = this.multipartIdentifierList();
            this.state = 1814;
            this.match(SparkSqlParser.T__1);
            this.state = 1815;
            this.match(SparkSqlParser.VALUES);
            this.state = 1816;
            this.match(SparkSqlParser.T__0);
            this.state = 1817;
            this.expression();
            this.state = 1822;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__2) {
                this.state = 1818;
                this.match(SparkSqlParser.T__2);
                this.state = 1819;
                this.expression();
                this.state = 1824;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 1825;
            this.match(SparkSqlParser.T__1);
            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 AssignmentListContext(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 = SparkSqlParser.RULE_assignmentList;
    return this;
}

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

AssignmentListContext.prototype.assignment = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(AssignmentContext);
    } else {
        return this.getTypedRuleContext(AssignmentContext,i);
    }
};

AssignmentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAssignmentList(this);
	}
};

AssignmentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAssignmentList(this);
	}
};

AssignmentListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAssignmentList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.AssignmentListContext = AssignmentListContext;

SparkSqlParser.prototype.assignmentList = function() {

    var localctx = new AssignmentListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 110, SparkSqlParser.RULE_assignmentList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1829;
        this.assignment();
        this.state = 1834;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 1830;
            this.match(SparkSqlParser.T__2);
            this.state = 1831;
            this.assignment();
            this.state = 1836;
            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 AssignmentContext(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 = SparkSqlParser.RULE_assignment;
    this.key = null; // MultipartIdentifierContext
    this.value = null; // ExpressionContext
    return this;
}

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

AssignmentContext.prototype.EQ = function() {
    return this.getToken(SparkSqlParser.EQ, 0);
};

AssignmentContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

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

AssignmentContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAssignment(this);
	}
};

AssignmentContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAssignment(this);
	}
};

AssignmentContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAssignment(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.AssignmentContext = AssignmentContext;

SparkSqlParser.prototype.assignment = function() {

    var localctx = new AssignmentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 112, SparkSqlParser.RULE_assignment);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1837;
        localctx.key = this.multipartIdentifier();
        this.state = 1838;
        this.match(SparkSqlParser.EQ);
        this.state = 1839;
        localctx.value = 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 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 = SparkSqlParser.RULE_whereClause;
    return this;
}

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

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

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

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

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

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




SparkSqlParser.WhereClauseContext = WhereClauseContext;

SparkSqlParser.prototype.whereClause = function() {

    var localctx = new WhereClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 114, SparkSqlParser.RULE_whereClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1841;
        this.match(SparkSqlParser.WHERE);
        this.state = 1842;
        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 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 = SparkSqlParser.RULE_havingClause;
    return this;
}

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

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

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

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

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

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




SparkSqlParser.HavingClauseContext = HavingClauseContext;

SparkSqlParser.prototype.havingClause = function() {

    var localctx = new HavingClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 116, SparkSqlParser.RULE_havingClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1844;
        this.match(SparkSqlParser.HAVING);
        this.state = 1845;
        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 HintContext(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 = SparkSqlParser.RULE_hint;
    this._hintStatement = null; // HintStatementContext
    this.hintStatements = []; // of HintStatementContexts
    return this;
}

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

HintContext.prototype.hintStatement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(HintStatementContext);
    } else {
        return this.getTypedRuleContext(HintStatementContext,i);
    }
};

HintContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterHint(this);
	}
};

HintContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitHint(this);
	}
};

HintContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitHint(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.HintContext = HintContext;

SparkSqlParser.prototype.hint = function() {

    var localctx = new HintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 118, SparkSqlParser.RULE_hint);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1847;
        this.match(SparkSqlParser.T__4);
        this.state = 1848;
        localctx._hintStatement = this.hintStatement();
        localctx.hintStatements.push(localctx._hintStatement);
        this.state = 1855;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,223,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1850;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,222,this._ctx);
                if(la_===1) {
                    this.state = 1849;
                    this.match(SparkSqlParser.T__2);

                }
                this.state = 1852;
                localctx._hintStatement = this.hintStatement();
                localctx.hintStatements.push(localctx._hintStatement); 
            }
            this.state = 1857;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,223,this._ctx);
        }

        this.state = 1858;
        this.match(SparkSqlParser.T__5);
    } 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 HintStatementContext(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 = SparkSqlParser.RULE_hintStatement;
    this.hintName = null; // IdentifierContext
    this._primaryExpression = null; // PrimaryExpressionContext
    this.parameters = []; // of PrimaryExpressionContexts
    return this;
}

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

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

HintStatementContext.prototype.primaryExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(PrimaryExpressionContext);
    } else {
        return this.getTypedRuleContext(PrimaryExpressionContext,i);
    }
};

HintStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterHintStatement(this);
	}
};

HintStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitHintStatement(this);
	}
};

HintStatementContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitHintStatement(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.HintStatementContext = HintStatementContext;

SparkSqlParser.prototype.hintStatement = function() {

    var localctx = new HintStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 120, SparkSqlParser.RULE_hintStatement);
    var _la = 0; // Token type
    try {
        this.state = 1873;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,225,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1860;
            localctx.hintName = this.identifier();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1861;
            localctx.hintName = this.identifier();
            this.state = 1862;
            this.match(SparkSqlParser.T__0);
            this.state = 1863;
            localctx._primaryExpression = this.primaryExpression(0);
            localctx.parameters.push(localctx._primaryExpression);
            this.state = 1868;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__2) {
                this.state = 1864;
                this.match(SparkSqlParser.T__2);
                this.state = 1865;
                localctx._primaryExpression = this.primaryExpression(0);
                localctx.parameters.push(localctx._primaryExpression);
                this.state = 1870;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 1871;
            this.match(SparkSqlParser.T__1);
            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 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 = SparkSqlParser.RULE_fromClause;
    return this;
}

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

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

FromClauseContext.prototype.relation = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(RelationContext);
    } else {
        return this.getTypedRuleContext(RelationContext,i);
    }
};

FromClauseContext.prototype.lateralView = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LateralViewContext);
    } else {
        return this.getTypedRuleContext(LateralViewContext,i);
    }
};

FromClauseContext.prototype.pivotClause = function() {
    return this.getTypedRuleContext(PivotClauseContext,0);
};

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

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

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




SparkSqlParser.FromClauseContext = FromClauseContext;

SparkSqlParser.prototype.fromClause = function() {

    var localctx = new FromClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 122, SparkSqlParser.RULE_fromClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1875;
        this.match(SparkSqlParser.FROM);
        this.state = 1876;
        this.relation();
        this.state = 1881;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,226,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1877;
                this.match(SparkSqlParser.T__2);
                this.state = 1878;
                this.relation(); 
            }
            this.state = 1883;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,226,this._ctx);
        }

        this.state = 1887;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,227,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1884;
                this.lateralView(); 
            }
            this.state = 1889;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,227,this._ctx);
        }

        this.state = 1891;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,228,this._ctx);
        if(la_===1) {
            this.state = 1890;
            this.pivotClause();

        }
    } 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 AggregationClauseContext(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 = SparkSqlParser.RULE_aggregationClause;
    this._expression = null; // ExpressionContext
    this.groupingExpressions = []; // of ExpressionContexts
    this.kind = null; // Token
    return this;
}

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

AggregationClauseContext.prototype.GROUP = function() {
    return this.getToken(SparkSqlParser.GROUP, 0);
};

AggregationClauseContext.prototype.BY = function() {
    return this.getToken(SparkSqlParser.BY, 0);
};

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

AggregationClauseContext.prototype.WITH = function() {
    return this.getToken(SparkSqlParser.WITH, 0);
};

AggregationClauseContext.prototype.SETS = function() {
    return this.getToken(SparkSqlParser.SETS, 0);
};

AggregationClauseContext.prototype.groupingSet = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(GroupingSetContext);
    } else {
        return this.getTypedRuleContext(GroupingSetContext,i);
    }
};

AggregationClauseContext.prototype.ROLLUP = function() {
    return this.getToken(SparkSqlParser.ROLLUP, 0);
};

AggregationClauseContext.prototype.CUBE = function() {
    return this.getToken(SparkSqlParser.CUBE, 0);
};

AggregationClauseContext.prototype.GROUPING = function() {
    return this.getToken(SparkSqlParser.GROUPING, 0);
};

AggregationClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAggregationClause(this);
	}
};

AggregationClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAggregationClause(this);
	}
};

AggregationClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAggregationClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.AggregationClauseContext = AggregationClauseContext;

SparkSqlParser.prototype.aggregationClause = function() {

    var localctx = new AggregationClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 124, SparkSqlParser.RULE_aggregationClause);
    var _la = 0; // Token type
    try {
        this.state = 1937;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,233,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1893;
            this.match(SparkSqlParser.GROUP);
            this.state = 1894;
            this.match(SparkSqlParser.BY);
            this.state = 1895;
            localctx._expression = this.expression();
            localctx.groupingExpressions.push(localctx._expression);
            this.state = 1900;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,229,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 1896;
                    this.match(SparkSqlParser.T__2);
                    this.state = 1897;
                    localctx._expression = this.expression();
                    localctx.groupingExpressions.push(localctx._expression); 
                }
                this.state = 1902;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,229,this._ctx);
            }

            this.state = 1920;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,231,this._ctx);
            if(la_===1) {
                this.state = 1903;
                this.match(SparkSqlParser.WITH);
                this.state = 1904;
                localctx.kind = this.match(SparkSqlParser.ROLLUP);

            } else if(la_===2) {
                this.state = 1905;
                this.match(SparkSqlParser.WITH);
                this.state = 1906;
                localctx.kind = this.match(SparkSqlParser.CUBE);

            } else if(la_===3) {
                this.state = 1907;
                localctx.kind = this.match(SparkSqlParser.GROUPING);
                this.state = 1908;
                this.match(SparkSqlParser.SETS);
                this.state = 1909;
                this.match(SparkSqlParser.T__0);
                this.state = 1910;
                this.groupingSet();
                this.state = 1915;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===SparkSqlParser.T__2) {
                    this.state = 1911;
                    this.match(SparkSqlParser.T__2);
                    this.state = 1912;
                    this.groupingSet();
                    this.state = 1917;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
                this.state = 1918;
                this.match(SparkSqlParser.T__1);

            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1922;
            this.match(SparkSqlParser.GROUP);
            this.state = 1923;
            this.match(SparkSqlParser.BY);
            this.state = 1924;
            localctx.kind = this.match(SparkSqlParser.GROUPING);
            this.state = 1925;
            this.match(SparkSqlParser.SETS);
            this.state = 1926;
            this.match(SparkSqlParser.T__0);
            this.state = 1927;
            this.groupingSet();
            this.state = 1932;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__2) {
                this.state = 1928;
                this.match(SparkSqlParser.T__2);
                this.state = 1929;
                this.groupingSet();
                this.state = 1934;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 1935;
            this.match(SparkSqlParser.T__1);
            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 GroupingSetContext(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 = SparkSqlParser.RULE_groupingSet;
    return this;
}

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

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

GroupingSetContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterGroupingSet(this);
	}
};

GroupingSetContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitGroupingSet(this);
	}
};

GroupingSetContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitGroupingSet(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.GroupingSetContext = GroupingSetContext;

SparkSqlParser.prototype.groupingSet = function() {

    var localctx = new GroupingSetContext(this, this._ctx, this.state);
    this.enterRule(localctx, 126, SparkSqlParser.RULE_groupingSet);
    var _la = 0; // Token type
    try {
        this.state = 1952;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,236,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1939;
            this.match(SparkSqlParser.T__0);
            this.state = 1948;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,235,this._ctx);
            if(la_===1) {
                this.state = 1940;
                this.expression();
                this.state = 1945;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===SparkSqlParser.T__2) {
                    this.state = 1941;
                    this.match(SparkSqlParser.T__2);
                    this.state = 1942;
                    this.expression();
                    this.state = 1947;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }

            }
            this.state = 1950;
            this.match(SparkSqlParser.T__1);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1951;
            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 PivotClauseContext(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 = SparkSqlParser.RULE_pivotClause;
    this.aggregates = null; // NamedExpressionSeqContext
    this._pivotValue = null; // PivotValueContext
    this.pivotValues = []; // of PivotValueContexts
    return this;
}

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

PivotClauseContext.prototype.PIVOT = function() {
    return this.getToken(SparkSqlParser.PIVOT, 0);
};

PivotClauseContext.prototype.FOR = function() {
    return this.getToken(SparkSqlParser.FOR, 0);
};

PivotClauseContext.prototype.pivotColumn = function() {
    return this.getTypedRuleContext(PivotColumnContext,0);
};

PivotClauseContext.prototype.IN = function() {
    return this.getToken(SparkSqlParser.IN, 0);
};

PivotClauseContext.prototype.namedExpressionSeq = function() {
    return this.getTypedRuleContext(NamedExpressionSeqContext,0);
};

PivotClauseContext.prototype.pivotValue = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(PivotValueContext);
    } else {
        return this.getTypedRuleContext(PivotValueContext,i);
    }
};

PivotClauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterPivotClause(this);
	}
};

PivotClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPivotClause(this);
	}
};

PivotClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitPivotClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.PivotClauseContext = PivotClauseContext;

SparkSqlParser.prototype.pivotClause = function() {

    var localctx = new PivotClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 128, SparkSqlParser.RULE_pivotClause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1954;
        this.match(SparkSqlParser.PIVOT);
        this.state = 1955;
        this.match(SparkSqlParser.T__0);
        this.state = 1956;
        localctx.aggregates = this.namedExpressionSeq();
        this.state = 1957;
        this.match(SparkSqlParser.FOR);
        this.state = 1958;
        this.pivotColumn();
        this.state = 1959;
        this.match(SparkSqlParser.IN);
        this.state = 1960;
        this.match(SparkSqlParser.T__0);
        this.state = 1961;
        localctx._pivotValue = this.pivotValue();
        localctx.pivotValues.push(localctx._pivotValue);
        this.state = 1966;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 1962;
            this.match(SparkSqlParser.T__2);
            this.state = 1963;
            localctx._pivotValue = this.pivotValue();
            localctx.pivotValues.push(localctx._pivotValue);
            this.state = 1968;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1969;
        this.match(SparkSqlParser.T__1);
        this.state = 1970;
        this.match(SparkSqlParser.T__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 PivotColumnContext(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 = SparkSqlParser.RULE_pivotColumn;
    this._identifier = null; // IdentifierContext
    this.identifiers = []; // of IdentifierContexts
    return this;
}

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

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

PivotColumnContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterPivotColumn(this);
	}
};

PivotColumnContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPivotColumn(this);
	}
};

PivotColumnContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitPivotColumn(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.PivotColumnContext = PivotColumnContext;

SparkSqlParser.prototype.pivotColumn = function() {

    var localctx = new PivotColumnContext(this, this._ctx, this.state);
    this.enterRule(localctx, 130, SparkSqlParser.RULE_pivotColumn);
    var _la = 0; // Token type
    try {
        this.state = 1984;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,239,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1972;
            localctx._identifier = this.identifier();
            localctx.identifiers.push(localctx._identifier);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1973;
            this.match(SparkSqlParser.T__0);
            this.state = 1974;
            localctx._identifier = this.identifier();
            localctx.identifiers.push(localctx._identifier);
            this.state = 1979;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__2) {
                this.state = 1975;
                this.match(SparkSqlParser.T__2);
                this.state = 1976;
                localctx._identifier = this.identifier();
                localctx.identifiers.push(localctx._identifier);
                this.state = 1981;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 1982;
            this.match(SparkSqlParser.T__1);
            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 PivotValueContext(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 = SparkSqlParser.RULE_pivotValue;
    return this;
}

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

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

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

PivotValueContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

PivotValueContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterPivotValue(this);
	}
};

PivotValueContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPivotValue(this);
	}
};

PivotValueContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitPivotValue(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.PivotValueContext = PivotValueContext;

SparkSqlParser.prototype.pivotValue = function() {

    var localctx = new PivotValueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 132, SparkSqlParser.RULE_pivotValue);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1986;
        this.expression();
        this.state = 1991;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,241,this._ctx);
        if(la_===1) {
            this.state = 1988;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,240,this._ctx);
            if(la_===1) {
                this.state = 1987;
                this.match(SparkSqlParser.AS);

            }
            this.state = 1990;
            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 LateralViewContext(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 = SparkSqlParser.RULE_lateralView;
    this.tblName = null; // IdentifierContext
    this._identifier = null; // IdentifierContext
    this.colName = []; // of IdentifierContexts
    return this;
}

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

LateralViewContext.prototype.LATERAL = function() {
    return this.getToken(SparkSqlParser.LATERAL, 0);
};

LateralViewContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};

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

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

LateralViewContext.prototype.OUTER = function() {
    return this.getToken(SparkSqlParser.OUTER, 0);
};

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

LateralViewContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

LateralViewContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterLateralView(this);
	}
};

LateralViewContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitLateralView(this);
	}
};

LateralViewContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitLateralView(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.LateralViewContext = LateralViewContext;

SparkSqlParser.prototype.lateralView = function() {

    var localctx = new LateralViewContext(this, this._ctx, this.state);
    this.enterRule(localctx, 134, SparkSqlParser.RULE_lateralView);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1993;
        this.match(SparkSqlParser.LATERAL);
        this.state = 1994;
        this.match(SparkSqlParser.VIEW);
        this.state = 1996;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,242,this._ctx);
        if(la_===1) {
            this.state = 1995;
            this.match(SparkSqlParser.OUTER);

        }
        this.state = 1998;
        this.qualifiedName();
        this.state = 1999;
        this.match(SparkSqlParser.T__0);
        this.state = 2008;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,244,this._ctx);
        if(la_===1) {
            this.state = 2000;
            this.expression();
            this.state = 2005;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__2) {
                this.state = 2001;
                this.match(SparkSqlParser.T__2);
                this.state = 2002;
                this.expression();
                this.state = 2007;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }

        }
        this.state = 2010;
        this.match(SparkSqlParser.T__1);
        this.state = 2011;
        localctx.tblName = this.identifier();
        this.state = 2023;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,247,this._ctx);
        if(la_===1) {
            this.state = 2013;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,245,this._ctx);
            if(la_===1) {
                this.state = 2012;
                this.match(SparkSqlParser.AS);

            }
            this.state = 2015;
            localctx._identifier = this.identifier();
            localctx.colName.push(localctx._identifier);
            this.state = 2020;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,246,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 2016;
                    this.match(SparkSqlParser.T__2);
                    this.state = 2017;
                    localctx._identifier = this.identifier();
                    localctx.colName.push(localctx._identifier); 
                }
                this.state = 2022;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,246,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 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 = SparkSqlParser.RULE_setQuantifier;
    return this;
}

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

SetQuantifierContext.prototype.DISTINCT = function() {
    return this.getToken(SparkSqlParser.DISTINCT, 0);
};

SetQuantifierContext.prototype.ALL = function() {
    return this.getToken(SparkSqlParser.ALL, 0);
};

SetQuantifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSetQuantifier(this);
	}
};

SetQuantifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSetQuantifier(this);
	}
};

SetQuantifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSetQuantifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SetQuantifierContext = SetQuantifierContext;

SparkSqlParser.prototype.setQuantifier = function() {

    var localctx = new SetQuantifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 136, SparkSqlParser.RULE_setQuantifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2025;
        _la = this._input.LA(1);
        if(!(_la===SparkSqlParser.ALL || _la===SparkSqlParser.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 RelationContext(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 = SparkSqlParser.RULE_relation;
    return this;
}

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

RelationContext.prototype.relationPrimary = function() {
    return this.getTypedRuleContext(RelationPrimaryContext,0);
};

RelationContext.prototype.joinRelation = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(JoinRelationContext);
    } else {
        return this.getTypedRuleContext(JoinRelationContext,i);
    }
};

RelationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRelation(this);
	}
};

RelationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRelation(this);
	}
};

RelationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRelation(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.RelationContext = RelationContext;

SparkSqlParser.prototype.relation = function() {

    var localctx = new RelationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 138, SparkSqlParser.RULE_relation);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2027;
        this.relationPrimary();
        this.state = 2031;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,248,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2028;
                this.joinRelation(); 
            }
            this.state = 2033;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,248,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 JoinRelationContext(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 = SparkSqlParser.RULE_joinRelation;
    this.right = null; // RelationPrimaryContext
    return this;
}

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

JoinRelationContext.prototype.JOIN = function() {
    return this.getToken(SparkSqlParser.JOIN, 0);
};

JoinRelationContext.prototype.relationPrimary = function() {
    return this.getTypedRuleContext(RelationPrimaryContext,0);
};

JoinRelationContext.prototype.joinType = function() {
    return this.getTypedRuleContext(JoinTypeContext,0);
};

JoinRelationContext.prototype.joinCriteria = function() {
    return this.getTypedRuleContext(JoinCriteriaContext,0);
};

JoinRelationContext.prototype.NATURAL = function() {
    return this.getToken(SparkSqlParser.NATURAL, 0);
};

JoinRelationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterJoinRelation(this);
	}
};

JoinRelationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitJoinRelation(this);
	}
};

JoinRelationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitJoinRelation(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.JoinRelationContext = JoinRelationContext;

SparkSqlParser.prototype.joinRelation = function() {

    var localctx = new JoinRelationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 140, SparkSqlParser.RULE_joinRelation);
    try {
        this.state = 2045;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SparkSqlParser.ANTI:
        case SparkSqlParser.CROSS:
        case SparkSqlParser.FULL:
        case SparkSqlParser.INNER:
        case SparkSqlParser.JOIN:
        case SparkSqlParser.LEFT:
        case SparkSqlParser.RIGHT:
        case SparkSqlParser.SEMI:
            this.enterOuterAlt(localctx, 1);
            this.state = 2034;
            this.joinType();
            this.state = 2035;
            this.match(SparkSqlParser.JOIN);
            this.state = 2036;
            localctx.right = this.relationPrimary();
            this.state = 2038;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,249,this._ctx);
            if(la_===1) {
                this.state = 2037;
                this.joinCriteria();

            }
            break;
        case SparkSqlParser.NATURAL:
            this.enterOuterAlt(localctx, 2);
            this.state = 2040;
            this.match(SparkSqlParser.NATURAL);
            this.state = 2041;
            this.joinType();
            this.state = 2042;
            this.match(SparkSqlParser.JOIN);
            this.state = 2043;
            localctx.right = this.relationPrimary();
            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 JoinTypeContext(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 = SparkSqlParser.RULE_joinType;
    return this;
}

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

JoinTypeContext.prototype.INNER = function() {
    return this.getToken(SparkSqlParser.INNER, 0);
};

JoinTypeContext.prototype.CROSS = function() {
    return this.getToken(SparkSqlParser.CROSS, 0);
};

JoinTypeContext.prototype.LEFT = function() {
    return this.getToken(SparkSqlParser.LEFT, 0);
};

JoinTypeContext.prototype.OUTER = function() {
    return this.getToken(SparkSqlParser.OUTER, 0);
};

JoinTypeContext.prototype.SEMI = function() {
    return this.getToken(SparkSqlParser.SEMI, 0);
};

JoinTypeContext.prototype.RIGHT = function() {
    return this.getToken(SparkSqlParser.RIGHT, 0);
};

JoinTypeContext.prototype.FULL = function() {
    return this.getToken(SparkSqlParser.FULL, 0);
};

JoinTypeContext.prototype.ANTI = function() {
    return this.getToken(SparkSqlParser.ANTI, 0);
};

JoinTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterJoinType(this);
	}
};

JoinTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitJoinType(this);
	}
};

JoinTypeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitJoinType(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.JoinTypeContext = JoinTypeContext;

SparkSqlParser.prototype.joinType = function() {

    var localctx = new JoinTypeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 142, SparkSqlParser.RULE_joinType);
    var _la = 0; // Token type
    try {
        this.state = 2071;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,257,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2048;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.INNER) {
                this.state = 2047;
                this.match(SparkSqlParser.INNER);
            }

            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2050;
            this.match(SparkSqlParser.CROSS);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2051;
            this.match(SparkSqlParser.LEFT);
            this.state = 2053;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OUTER) {
                this.state = 2052;
                this.match(SparkSqlParser.OUTER);
            }

            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2056;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.LEFT) {
                this.state = 2055;
                this.match(SparkSqlParser.LEFT);
            }

            this.state = 2058;
            this.match(SparkSqlParser.SEMI);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2059;
            this.match(SparkSqlParser.RIGHT);
            this.state = 2061;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OUTER) {
                this.state = 2060;
                this.match(SparkSqlParser.OUTER);
            }

            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 2063;
            this.match(SparkSqlParser.FULL);
            this.state = 2065;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.OUTER) {
                this.state = 2064;
                this.match(SparkSqlParser.OUTER);
            }

            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 2068;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.LEFT) {
                this.state = 2067;
                this.match(SparkSqlParser.LEFT);
            }

            this.state = 2070;
            this.match(SparkSqlParser.ANTI);
            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 JoinCriteriaContext(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 = SparkSqlParser.RULE_joinCriteria;
    return this;
}

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

JoinCriteriaContext.prototype.ON = function() {
    return this.getToken(SparkSqlParser.ON, 0);
};

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

JoinCriteriaContext.prototype.USING = function() {
    return this.getToken(SparkSqlParser.USING, 0);
};

JoinCriteriaContext.prototype.identifierList = function() {
    return this.getTypedRuleContext(IdentifierListContext,0);
};

JoinCriteriaContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterJoinCriteria(this);
	}
};

JoinCriteriaContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitJoinCriteria(this);
	}
};

JoinCriteriaContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitJoinCriteria(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.JoinCriteriaContext = JoinCriteriaContext;

SparkSqlParser.prototype.joinCriteria = function() {

    var localctx = new JoinCriteriaContext(this, this._ctx, this.state);
    this.enterRule(localctx, 144, SparkSqlParser.RULE_joinCriteria);
    try {
        this.state = 2077;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SparkSqlParser.ON:
            this.enterOuterAlt(localctx, 1);
            this.state = 2073;
            this.match(SparkSqlParser.ON);
            this.state = 2074;
            this.booleanExpression(0);
            break;
        case SparkSqlParser.USING:
            this.enterOuterAlt(localctx, 2);
            this.state = 2075;
            this.match(SparkSqlParser.USING);
            this.state = 2076;
            this.identifierList();
            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 SampleContext(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 = SparkSqlParser.RULE_sample;
    return this;
}

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

SampleContext.prototype.TABLESAMPLE = function() {
    return this.getToken(SparkSqlParser.TABLESAMPLE, 0);
};

SampleContext.prototype.sampleMethod = function() {
    return this.getTypedRuleContext(SampleMethodContext,0);
};

SampleContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSample(this);
	}
};

SampleContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSample(this);
	}
};

SampleContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSample(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.SampleContext = SampleContext;

SparkSqlParser.prototype.sample = function() {

    var localctx = new SampleContext(this, this._ctx, this.state);
    this.enterRule(localctx, 146, SparkSqlParser.RULE_sample);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2079;
        this.match(SparkSqlParser.TABLESAMPLE);
        this.state = 2080;
        this.match(SparkSqlParser.T__0);
        this.state = 2082;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,259,this._ctx);
        if(la_===1) {
            this.state = 2081;
            this.sampleMethod();

        }
        this.state = 2084;
        this.match(SparkSqlParser.T__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 SampleMethodContext(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 = SparkSqlParser.RULE_sampleMethod;
    return this;
}

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


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


function SampleByRowsContext(parser, ctx) {
	SampleMethodContext.call(this, parser);
    SampleMethodContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SampleByRowsContext.prototype = Object.create(SampleMethodContext.prototype);
SampleByRowsContext.prototype.constructor = SampleByRowsContext;

SparkSqlParser.SampleByRowsContext = SampleByRowsContext;

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

SampleByRowsContext.prototype.ROWS = function() {
    return this.getToken(SparkSqlParser.ROWS, 0);
};
SampleByRowsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSampleByRows(this);
	}
};

SampleByRowsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSampleByRows(this);
	}
};

SampleByRowsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSampleByRows(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SampleByPercentileContext(parser, ctx) {
	SampleMethodContext.call(this, parser);
    this.negativeSign = null; // Token;
    this.percentage = null; // Token;
    SampleMethodContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SampleByPercentileContext.prototype = Object.create(SampleMethodContext.prototype);
SampleByPercentileContext.prototype.constructor = SampleByPercentileContext;

SparkSqlParser.SampleByPercentileContext = SampleByPercentileContext;

SampleByPercentileContext.prototype.PERCENTLIT = function() {
    return this.getToken(SparkSqlParser.PERCENTLIT, 0);
};

SampleByPercentileContext.prototype.INTEGER_VALUE = function() {
    return this.getToken(SparkSqlParser.INTEGER_VALUE, 0);
};

SampleByPercentileContext.prototype.DECIMAL_VALUE = function() {
    return this.getToken(SparkSqlParser.DECIMAL_VALUE, 0);
};

SampleByPercentileContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
SampleByPercentileContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSampleByPercentile(this);
	}
};

SampleByPercentileContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSampleByPercentile(this);
	}
};

SampleByPercentileContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSampleByPercentile(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SampleByBucketContext(parser, ctx) {
	SampleMethodContext.call(this, parser);
    this.sampleType = null; // Token;
    this.numerator = null; // Token;
    this.denominator = null; // Token;
    SampleMethodContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SampleByBucketContext.prototype = Object.create(SampleMethodContext.prototype);
SampleByBucketContext.prototype.constructor = SampleByBucketContext;

SparkSqlParser.SampleByBucketContext = SampleByBucketContext;

SampleByBucketContext.prototype.OUT = function() {
    return this.getToken(SparkSqlParser.OUT, 0);
};

SampleByBucketContext.prototype.OF = function() {
    return this.getToken(SparkSqlParser.OF, 0);
};

SampleByBucketContext.prototype.BUCKET = function() {
    return this.getToken(SparkSqlParser.BUCKET, 0);
};

SampleByBucketContext.prototype.INTEGER_VALUE = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.INTEGER_VALUE);
    } else {
        return this.getToken(SparkSqlParser.INTEGER_VALUE, i);
    }
};


SampleByBucketContext.prototype.ON = function() {
    return this.getToken(SparkSqlParser.ON, 0);
};

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

SampleByBucketContext.prototype.qualifiedName = function() {
    return this.getTypedRuleContext(QualifiedNameContext,0);
};
SampleByBucketContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSampleByBucket(this);
	}
};

SampleByBucketContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSampleByBucket(this);
	}
};

SampleByBucketContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSampleByBucket(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SampleByBytesContext(parser, ctx) {
	SampleMethodContext.call(this, parser);
    this.bytes = null; // ExpressionContext;
    SampleMethodContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SampleByBytesContext.prototype = Object.create(SampleMethodContext.prototype);
SampleByBytesContext.prototype.constructor = SampleByBytesContext;

SparkSqlParser.SampleByBytesContext = SampleByBytesContext;

SampleByBytesContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
SampleByBytesContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSampleByBytes(this);
	}
};

SampleByBytesContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSampleByBytes(this);
	}
};

SampleByBytesContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSampleByBytes(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.SampleMethodContext = SampleMethodContext;

SparkSqlParser.prototype.sampleMethod = function() {

    var localctx = new SampleMethodContext(this, this._ctx, this.state);
    this.enterRule(localctx, 148, SparkSqlParser.RULE_sampleMethod);
    var _la = 0; // Token type
    try {
        this.state = 2110;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,263,this._ctx);
        switch(la_) {
        case 1:
            localctx = new SampleByPercentileContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2087;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 2086;
                localctx.negativeSign = this.match(SparkSqlParser.MINUS);
            }

            this.state = 2089;
            localctx.percentage = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.INTEGER_VALUE || _la===SparkSqlParser.DECIMAL_VALUE)) {
                localctx.percentage = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2090;
            this.match(SparkSqlParser.PERCENTLIT);
            break;

        case 2:
            localctx = new SampleByRowsContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2091;
            this.expression();
            this.state = 2092;
            this.match(SparkSqlParser.ROWS);
            break;

        case 3:
            localctx = new SampleByBucketContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2094;
            localctx.sampleType = this.match(SparkSqlParser.BUCKET);
            this.state = 2095;
            localctx.numerator = this.match(SparkSqlParser.INTEGER_VALUE);
            this.state = 2096;
            this.match(SparkSqlParser.OUT);
            this.state = 2097;
            this.match(SparkSqlParser.OF);
            this.state = 2098;
            localctx.denominator = this.match(SparkSqlParser.INTEGER_VALUE);
            this.state = 2107;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.ON) {
                this.state = 2099;
                this.match(SparkSqlParser.ON);
                this.state = 2105;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,261,this._ctx);
                switch(la_) {
                case 1:
                    this.state = 2100;
                    this.identifier();
                    break;

                case 2:
                    this.state = 2101;
                    this.qualifiedName();
                    this.state = 2102;
                    this.match(SparkSqlParser.T__0);
                    this.state = 2103;
                    this.match(SparkSqlParser.T__1);
                    break;

                }
            }

            break;

        case 4:
            localctx = new SampleByBytesContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2109;
            localctx.bytes = 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 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 = SparkSqlParser.RULE_identifierList;
    return this;
}

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

IdentifierListContext.prototype.identifierSeq = function() {
    return this.getTypedRuleContext(IdentifierSeqContext,0);
};

IdentifierListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterIdentifierList(this);
	}
};

IdentifierListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitIdentifierList(this);
	}
};

IdentifierListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitIdentifierList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.IdentifierListContext = IdentifierListContext;

SparkSqlParser.prototype.identifierList = function() {

    var localctx = new IdentifierListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 150, SparkSqlParser.RULE_identifierList);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2112;
        this.match(SparkSqlParser.T__0);
        this.state = 2113;
        this.identifierSeq();
        this.state = 2114;
        this.match(SparkSqlParser.T__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 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 = SparkSqlParser.RULE_identifierSeq;
    this._errorCapturingIdentifier = null; // ErrorCapturingIdentifierContext
    this.ident = []; // of ErrorCapturingIdentifierContexts
    return this;
}

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

IdentifierSeqContext.prototype.errorCapturingIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ErrorCapturingIdentifierContext);
    } else {
        return this.getTypedRuleContext(ErrorCapturingIdentifierContext,i);
    }
};

IdentifierSeqContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterIdentifierSeq(this);
	}
};

IdentifierSeqContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitIdentifierSeq(this);
	}
};

IdentifierSeqContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitIdentifierSeq(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.IdentifierSeqContext = IdentifierSeqContext;

SparkSqlParser.prototype.identifierSeq = function() {

    var localctx = new IdentifierSeqContext(this, this._ctx, this.state);
    this.enterRule(localctx, 152, SparkSqlParser.RULE_identifierSeq);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2116;
        localctx._errorCapturingIdentifier = this.errorCapturingIdentifier();
        localctx.ident.push(localctx._errorCapturingIdentifier);
        this.state = 2121;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,264,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2117;
                this.match(SparkSqlParser.T__2);
                this.state = 2118;
                localctx._errorCapturingIdentifier = this.errorCapturingIdentifier();
                localctx.ident.push(localctx._errorCapturingIdentifier); 
            }
            this.state = 2123;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,264,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 OrderedIdentifierListContext(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 = SparkSqlParser.RULE_orderedIdentifierList;
    return this;
}

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

OrderedIdentifierListContext.prototype.orderedIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(OrderedIdentifierContext);
    } else {
        return this.getTypedRuleContext(OrderedIdentifierContext,i);
    }
};

OrderedIdentifierListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterOrderedIdentifierList(this);
	}
};

OrderedIdentifierListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitOrderedIdentifierList(this);
	}
};

OrderedIdentifierListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitOrderedIdentifierList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.OrderedIdentifierListContext = OrderedIdentifierListContext;

SparkSqlParser.prototype.orderedIdentifierList = function() {

    var localctx = new OrderedIdentifierListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 154, SparkSqlParser.RULE_orderedIdentifierList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2124;
        this.match(SparkSqlParser.T__0);
        this.state = 2125;
        this.orderedIdentifier();
        this.state = 2130;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 2126;
            this.match(SparkSqlParser.T__2);
            this.state = 2127;
            this.orderedIdentifier();
            this.state = 2132;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 2133;
        this.match(SparkSqlParser.T__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 OrderedIdentifierContext(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 = SparkSqlParser.RULE_orderedIdentifier;
    this.ident = null; // ErrorCapturingIdentifierContext
    this.ordering = null; // Token
    return this;
}

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

OrderedIdentifierContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};

OrderedIdentifierContext.prototype.ASC = function() {
    return this.getToken(SparkSqlParser.ASC, 0);
};

OrderedIdentifierContext.prototype.DESC = function() {
    return this.getToken(SparkSqlParser.DESC, 0);
};

OrderedIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterOrderedIdentifier(this);
	}
};

OrderedIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitOrderedIdentifier(this);
	}
};

OrderedIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitOrderedIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.OrderedIdentifierContext = OrderedIdentifierContext;

SparkSqlParser.prototype.orderedIdentifier = function() {

    var localctx = new OrderedIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 156, SparkSqlParser.RULE_orderedIdentifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2135;
        localctx.ident = this.errorCapturingIdentifier();
        this.state = 2137;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.ASC || _la===SparkSqlParser.DESC) {
            this.state = 2136;
            localctx.ordering = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.ASC || _la===SparkSqlParser.DESC)) {
                localctx.ordering = 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 IdentifierCommentListContext(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 = SparkSqlParser.RULE_identifierCommentList;
    return this;
}

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

IdentifierCommentListContext.prototype.identifierComment = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierCommentContext);
    } else {
        return this.getTypedRuleContext(IdentifierCommentContext,i);
    }
};

IdentifierCommentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterIdentifierCommentList(this);
	}
};

IdentifierCommentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitIdentifierCommentList(this);
	}
};

IdentifierCommentListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitIdentifierCommentList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.IdentifierCommentListContext = IdentifierCommentListContext;

SparkSqlParser.prototype.identifierCommentList = function() {

    var localctx = new IdentifierCommentListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 158, SparkSqlParser.RULE_identifierCommentList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2139;
        this.match(SparkSqlParser.T__0);
        this.state = 2140;
        this.identifierComment();
        this.state = 2145;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 2141;
            this.match(SparkSqlParser.T__2);
            this.state = 2142;
            this.identifierComment();
            this.state = 2147;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 2148;
        this.match(SparkSqlParser.T__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 IdentifierCommentContext(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 = SparkSqlParser.RULE_identifierComment;
    return this;
}

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

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

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

IdentifierCommentContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterIdentifierComment(this);
	}
};

IdentifierCommentContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitIdentifierComment(this);
	}
};

IdentifierCommentContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitIdentifierComment(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.IdentifierCommentContext = IdentifierCommentContext;

SparkSqlParser.prototype.identifierComment = function() {

    var localctx = new IdentifierCommentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 160, SparkSqlParser.RULE_identifierComment);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2150;
        this.identifier();
        this.state = 2152;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.COMMENT) {
            this.state = 2151;
            this.commentSpec();
        }

    } 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 RelationPrimaryContext(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 = SparkSqlParser.RULE_relationPrimary;
    return this;
}

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


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


function TableValuedFunctionContext(parser, ctx) {
	RelationPrimaryContext.call(this, parser);
    RelationPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TableValuedFunctionContext.prototype = Object.create(RelationPrimaryContext.prototype);
TableValuedFunctionContext.prototype.constructor = TableValuedFunctionContext;

SparkSqlParser.TableValuedFunctionContext = TableValuedFunctionContext;

TableValuedFunctionContext.prototype.functionTable = function() {
    return this.getTypedRuleContext(FunctionTableContext,0);
};
TableValuedFunctionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTableValuedFunction(this);
	}
};

TableValuedFunctionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTableValuedFunction(this);
	}
};

TableValuedFunctionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTableValuedFunction(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function InlineTableDefault2Context(parser, ctx) {
	RelationPrimaryContext.call(this, parser);
    RelationPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

InlineTableDefault2Context.prototype = Object.create(RelationPrimaryContext.prototype);
InlineTableDefault2Context.prototype.constructor = InlineTableDefault2Context;

SparkSqlParser.InlineTableDefault2Context = InlineTableDefault2Context;

InlineTableDefault2Context.prototype.inlineTable = function() {
    return this.getTypedRuleContext(InlineTableContext,0);
};
InlineTableDefault2Context.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterInlineTableDefault2(this);
	}
};

InlineTableDefault2Context.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitInlineTableDefault2(this);
	}
};

InlineTableDefault2Context.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitInlineTableDefault2(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function AliasedRelationContext(parser, ctx) {
	RelationPrimaryContext.call(this, parser);
    RelationPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AliasedRelationContext.prototype = Object.create(RelationPrimaryContext.prototype);
AliasedRelationContext.prototype.constructor = AliasedRelationContext;

SparkSqlParser.AliasedRelationContext = AliasedRelationContext;

AliasedRelationContext.prototype.relation = function() {
    return this.getTypedRuleContext(RelationContext,0);
};

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

AliasedRelationContext.prototype.sample = function() {
    return this.getTypedRuleContext(SampleContext,0);
};
AliasedRelationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAliasedRelation(this);
	}
};

AliasedRelationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAliasedRelation(this);
	}
};

AliasedRelationContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAliasedRelation(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function AliasedQueryContext(parser, ctx) {
	RelationPrimaryContext.call(this, parser);
    RelationPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AliasedQueryContext.prototype = Object.create(RelationPrimaryContext.prototype);
AliasedQueryContext.prototype.constructor = AliasedQueryContext;

SparkSqlParser.AliasedQueryContext = AliasedQueryContext;

AliasedQueryContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

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

AliasedQueryContext.prototype.sample = function() {
    return this.getTypedRuleContext(SampleContext,0);
};
AliasedQueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAliasedQuery(this);
	}
};

AliasedQueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAliasedQuery(this);
	}
};

AliasedQueryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAliasedQuery(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function TableNameContext(parser, ctx) {
	RelationPrimaryContext.call(this, parser);
    RelationPrimaryContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TableNameContext.prototype = Object.create(RelationPrimaryContext.prototype);
TableNameContext.prototype.constructor = TableNameContext;

SparkSqlParser.TableNameContext = TableNameContext;

TableNameContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

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

TableNameContext.prototype.sample = function() {
    return this.getTypedRuleContext(SampleContext,0);
};
TableNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTableName(this);
	}
};

TableNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTableName(this);
	}
};

TableNameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTableName(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.RelationPrimaryContext = RelationPrimaryContext;

SparkSqlParser.prototype.relationPrimary = function() {

    var localctx = new RelationPrimaryContext(this, this._ctx, this.state);
    this.enterRule(localctx, 162, SparkSqlParser.RULE_relationPrimary);
    try {
        this.state = 2178;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,272,this._ctx);
        switch(la_) {
        case 1:
            localctx = new TableNameContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2154;
            this.multipartIdentifier();
            this.state = 2156;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,269,this._ctx);
            if(la_===1) {
                this.state = 2155;
                this.sample();

            }
            this.state = 2158;
            this.tableAlias();
            break;

        case 2:
            localctx = new AliasedQueryContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2160;
            this.match(SparkSqlParser.T__0);
            this.state = 2161;
            this.query();
            this.state = 2162;
            this.match(SparkSqlParser.T__1);
            this.state = 2164;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,270,this._ctx);
            if(la_===1) {
                this.state = 2163;
                this.sample();

            }
            this.state = 2166;
            this.tableAlias();
            break;

        case 3:
            localctx = new AliasedRelationContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2168;
            this.match(SparkSqlParser.T__0);
            this.state = 2169;
            this.relation();
            this.state = 2170;
            this.match(SparkSqlParser.T__1);
            this.state = 2172;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,271,this._ctx);
            if(la_===1) {
                this.state = 2171;
                this.sample();

            }
            this.state = 2174;
            this.tableAlias();
            break;

        case 4:
            localctx = new InlineTableDefault2Context(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2176;
            this.inlineTable();
            break;

        case 5:
            localctx = new TableValuedFunctionContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2177;
            this.functionTable();
            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 InlineTableContext(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 = SparkSqlParser.RULE_inlineTable;
    return this;
}

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

InlineTableContext.prototype.VALUES = function() {
    return this.getToken(SparkSqlParser.VALUES, 0);
};

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

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

InlineTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterInlineTable(this);
	}
};

InlineTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitInlineTable(this);
	}
};

InlineTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitInlineTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.InlineTableContext = InlineTableContext;

SparkSqlParser.prototype.inlineTable = function() {

    var localctx = new InlineTableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 164, SparkSqlParser.RULE_inlineTable);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2180;
        this.match(SparkSqlParser.VALUES);
        this.state = 2181;
        this.expression();
        this.state = 2186;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,273,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2182;
                this.match(SparkSqlParser.T__2);
                this.state = 2183;
                this.expression(); 
            }
            this.state = 2188;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,273,this._ctx);
        }

        this.state = 2189;
        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 FunctionTableContext(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 = SparkSqlParser.RULE_functionTable;
    this.funcName = null; // ErrorCapturingIdentifierContext
    return this;
}

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

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

FunctionTableContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};

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

FunctionTableContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFunctionTable(this);
	}
};

FunctionTableContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFunctionTable(this);
	}
};

FunctionTableContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitFunctionTable(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.FunctionTableContext = FunctionTableContext;

SparkSqlParser.prototype.functionTable = function() {

    var localctx = new FunctionTableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 166, SparkSqlParser.RULE_functionTable);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2191;
        localctx.funcName = this.errorCapturingIdentifier();
        this.state = 2192;
        this.match(SparkSqlParser.T__0);
        this.state = 2201;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,275,this._ctx);
        if(la_===1) {
            this.state = 2193;
            this.expression();
            this.state = 2198;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__2) {
                this.state = 2194;
                this.match(SparkSqlParser.T__2);
                this.state = 2195;
                this.expression();
                this.state = 2200;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }

        }
        this.state = 2203;
        this.match(SparkSqlParser.T__1);
        this.state = 2204;
        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 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 = SparkSqlParser.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(SparkSqlParser.AS, 0);
};

TableAliasContext.prototype.identifierList = function() {
    return this.getTypedRuleContext(IdentifierListContext,0);
};

TableAliasContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTableAlias(this);
	}
};

TableAliasContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTableAlias(this);
	}
};

TableAliasContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTableAlias(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.TableAliasContext = TableAliasContext;

SparkSqlParser.prototype.tableAlias = function() {

    var localctx = new TableAliasContext(this, this._ctx, this.state);
    this.enterRule(localctx, 168, SparkSqlParser.RULE_tableAlias);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2213;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,278,this._ctx);
        if(la_===1) {
            this.state = 2207;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,276,this._ctx);
            if(la_===1) {
                this.state = 2206;
                this.match(SparkSqlParser.AS);

            }
            this.state = 2209;
            this.strictIdentifier();
            this.state = 2211;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,277,this._ctx);
            if(la_===1) {
                this.state = 2210;
                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 RowFormatContext(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 = SparkSqlParser.RULE_rowFormat;
    return this;
}

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


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


function RowFormatSerdeContext(parser, ctx) {
	RowFormatContext.call(this, parser);
    this.name = null; // Token;
    this.props = null; // TablePropertyListContext;
    RowFormatContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RowFormatSerdeContext.prototype = Object.create(RowFormatContext.prototype);
RowFormatSerdeContext.prototype.constructor = RowFormatSerdeContext;

SparkSqlParser.RowFormatSerdeContext = RowFormatSerdeContext;

RowFormatSerdeContext.prototype.ROW = function() {
    return this.getToken(SparkSqlParser.ROW, 0);
};

RowFormatSerdeContext.prototype.FORMAT = function() {
    return this.getToken(SparkSqlParser.FORMAT, 0);
};

RowFormatSerdeContext.prototype.SERDE = function() {
    return this.getToken(SparkSqlParser.SERDE, 0);
};

RowFormatSerdeContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

RowFormatSerdeContext.prototype.WITH = function() {
    return this.getToken(SparkSqlParser.WITH, 0);
};

RowFormatSerdeContext.prototype.SERDEPROPERTIES = function() {
    return this.getToken(SparkSqlParser.SERDEPROPERTIES, 0);
};

RowFormatSerdeContext.prototype.tablePropertyList = function() {
    return this.getTypedRuleContext(TablePropertyListContext,0);
};
RowFormatSerdeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRowFormatSerde(this);
	}
};

RowFormatSerdeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRowFormatSerde(this);
	}
};

RowFormatSerdeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRowFormatSerde(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RowFormatDelimitedContext(parser, ctx) {
	RowFormatContext.call(this, parser);
    this.fieldsTerminatedBy = null; // Token;
    this.escapedBy = null; // Token;
    this.collectionItemsTerminatedBy = null; // Token;
    this.keysTerminatedBy = null; // Token;
    this.linesSeparatedBy = null; // Token;
    this.nullDefinedAs = null; // Token;
    RowFormatContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RowFormatDelimitedContext.prototype = Object.create(RowFormatContext.prototype);
RowFormatDelimitedContext.prototype.constructor = RowFormatDelimitedContext;

SparkSqlParser.RowFormatDelimitedContext = RowFormatDelimitedContext;

RowFormatDelimitedContext.prototype.ROW = function() {
    return this.getToken(SparkSqlParser.ROW, 0);
};

RowFormatDelimitedContext.prototype.FORMAT = function() {
    return this.getToken(SparkSqlParser.FORMAT, 0);
};

RowFormatDelimitedContext.prototype.DELIMITED = function() {
    return this.getToken(SparkSqlParser.DELIMITED, 0);
};

RowFormatDelimitedContext.prototype.FIELDS = function() {
    return this.getToken(SparkSqlParser.FIELDS, 0);
};

RowFormatDelimitedContext.prototype.TERMINATED = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.TERMINATED);
    } else {
        return this.getToken(SparkSqlParser.TERMINATED, i);
    }
};


RowFormatDelimitedContext.prototype.BY = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.BY);
    } else {
        return this.getToken(SparkSqlParser.BY, i);
    }
};


RowFormatDelimitedContext.prototype.COLLECTION = function() {
    return this.getToken(SparkSqlParser.COLLECTION, 0);
};

RowFormatDelimitedContext.prototype.ITEMS = function() {
    return this.getToken(SparkSqlParser.ITEMS, 0);
};

RowFormatDelimitedContext.prototype.MAP = function() {
    return this.getToken(SparkSqlParser.MAP, 0);
};

RowFormatDelimitedContext.prototype.KEYS = function() {
    return this.getToken(SparkSqlParser.KEYS, 0);
};

RowFormatDelimitedContext.prototype.LINES = function() {
    return this.getToken(SparkSqlParser.LINES, 0);
};

RowFormatDelimitedContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};

RowFormatDelimitedContext.prototype.DEFINED = function() {
    return this.getToken(SparkSqlParser.DEFINED, 0);
};

RowFormatDelimitedContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

RowFormatDelimitedContext.prototype.STRING = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.STRING);
    } else {
        return this.getToken(SparkSqlParser.STRING, i);
    }
};


RowFormatDelimitedContext.prototype.ESCAPED = function() {
    return this.getToken(SparkSqlParser.ESCAPED, 0);
};
RowFormatDelimitedContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRowFormatDelimited(this);
	}
};

RowFormatDelimitedContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRowFormatDelimited(this);
	}
};

RowFormatDelimitedContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRowFormatDelimited(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.RowFormatContext = RowFormatContext;

SparkSqlParser.prototype.rowFormat = function() {

    var localctx = new RowFormatContext(this, this._ctx, this.state);
    this.enterRule(localctx, 170, SparkSqlParser.RULE_rowFormat);
    try {
        this.state = 2264;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,286,this._ctx);
        switch(la_) {
        case 1:
            localctx = new RowFormatSerdeContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2215;
            this.match(SparkSqlParser.ROW);
            this.state = 2216;
            this.match(SparkSqlParser.FORMAT);
            this.state = 2217;
            this.match(SparkSqlParser.SERDE);
            this.state = 2218;
            localctx.name = this.match(SparkSqlParser.STRING);
            this.state = 2222;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,279,this._ctx);
            if(la_===1) {
                this.state = 2219;
                this.match(SparkSqlParser.WITH);
                this.state = 2220;
                this.match(SparkSqlParser.SERDEPROPERTIES);
                this.state = 2221;
                localctx.props = this.tablePropertyList();

            }
            break;

        case 2:
            localctx = new RowFormatDelimitedContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2224;
            this.match(SparkSqlParser.ROW);
            this.state = 2225;
            this.match(SparkSqlParser.FORMAT);
            this.state = 2226;
            this.match(SparkSqlParser.DELIMITED);
            this.state = 2236;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,281,this._ctx);
            if(la_===1) {
                this.state = 2227;
                this.match(SparkSqlParser.FIELDS);
                this.state = 2228;
                this.match(SparkSqlParser.TERMINATED);
                this.state = 2229;
                this.match(SparkSqlParser.BY);
                this.state = 2230;
                localctx.fieldsTerminatedBy = this.match(SparkSqlParser.STRING);
                this.state = 2234;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,280,this._ctx);
                if(la_===1) {
                    this.state = 2231;
                    this.match(SparkSqlParser.ESCAPED);
                    this.state = 2232;
                    this.match(SparkSqlParser.BY);
                    this.state = 2233;
                    localctx.escapedBy = this.match(SparkSqlParser.STRING);

                }

            }
            this.state = 2243;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,282,this._ctx);
            if(la_===1) {
                this.state = 2238;
                this.match(SparkSqlParser.COLLECTION);
                this.state = 2239;
                this.match(SparkSqlParser.ITEMS);
                this.state = 2240;
                this.match(SparkSqlParser.TERMINATED);
                this.state = 2241;
                this.match(SparkSqlParser.BY);
                this.state = 2242;
                localctx.collectionItemsTerminatedBy = this.match(SparkSqlParser.STRING);

            }
            this.state = 2250;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,283,this._ctx);
            if(la_===1) {
                this.state = 2245;
                this.match(SparkSqlParser.MAP);
                this.state = 2246;
                this.match(SparkSqlParser.KEYS);
                this.state = 2247;
                this.match(SparkSqlParser.TERMINATED);
                this.state = 2248;
                this.match(SparkSqlParser.BY);
                this.state = 2249;
                localctx.keysTerminatedBy = this.match(SparkSqlParser.STRING);

            }
            this.state = 2256;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,284,this._ctx);
            if(la_===1) {
                this.state = 2252;
                this.match(SparkSqlParser.LINES);
                this.state = 2253;
                this.match(SparkSqlParser.TERMINATED);
                this.state = 2254;
                this.match(SparkSqlParser.BY);
                this.state = 2255;
                localctx.linesSeparatedBy = this.match(SparkSqlParser.STRING);

            }
            this.state = 2262;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,285,this._ctx);
            if(la_===1) {
                this.state = 2258;
                this.match(SparkSqlParser.NULL);
                this.state = 2259;
                this.match(SparkSqlParser.DEFINED);
                this.state = 2260;
                this.match(SparkSqlParser.AS);
                this.state = 2261;
                localctx.nullDefinedAs = this.match(SparkSqlParser.STRING);

            }
            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 MultipartIdentifierListContext(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 = SparkSqlParser.RULE_multipartIdentifierList;
    return this;
}

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

MultipartIdentifierListContext.prototype.multipartIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(MultipartIdentifierContext);
    } else {
        return this.getTypedRuleContext(MultipartIdentifierContext,i);
    }
};

MultipartIdentifierListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterMultipartIdentifierList(this);
	}
};

MultipartIdentifierListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitMultipartIdentifierList(this);
	}
};

MultipartIdentifierListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitMultipartIdentifierList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.MultipartIdentifierListContext = MultipartIdentifierListContext;

SparkSqlParser.prototype.multipartIdentifierList = function() {

    var localctx = new MultipartIdentifierListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 172, SparkSqlParser.RULE_multipartIdentifierList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2266;
        this.multipartIdentifier();
        this.state = 2271;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 2267;
            this.match(SparkSqlParser.T__2);
            this.state = 2268;
            this.multipartIdentifier();
            this.state = 2273;
            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 MultipartIdentifierContext(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 = SparkSqlParser.RULE_multipartIdentifier;
    this._errorCapturingIdentifier = null; // ErrorCapturingIdentifierContext
    this.parts = []; // of ErrorCapturingIdentifierContexts
    return this;
}

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

MultipartIdentifierContext.prototype.errorCapturingIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ErrorCapturingIdentifierContext);
    } else {
        return this.getTypedRuleContext(ErrorCapturingIdentifierContext,i);
    }
};

MultipartIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterMultipartIdentifier(this);
	}
};

MultipartIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitMultipartIdentifier(this);
	}
};

MultipartIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitMultipartIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.MultipartIdentifierContext = MultipartIdentifierContext;

SparkSqlParser.prototype.multipartIdentifier = function() {

    var localctx = new MultipartIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 174, SparkSqlParser.RULE_multipartIdentifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2274;
        localctx._errorCapturingIdentifier = this.errorCapturingIdentifier();
        localctx.parts.push(localctx._errorCapturingIdentifier);
        this.state = 2279;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,288,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2275;
                this.match(SparkSqlParser.T__3);
                this.state = 2276;
                localctx._errorCapturingIdentifier = this.errorCapturingIdentifier();
                localctx.parts.push(localctx._errorCapturingIdentifier); 
            }
            this.state = 2281;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,288,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 TableIdentifierContext(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 = SparkSqlParser.RULE_tableIdentifier;
    this.db = null; // ErrorCapturingIdentifierContext
    this.table = null; // ErrorCapturingIdentifierContext
    return this;
}

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

TableIdentifierContext.prototype.errorCapturingIdentifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ErrorCapturingIdentifierContext);
    } else {
        return this.getTypedRuleContext(ErrorCapturingIdentifierContext,i);
    }
};

TableIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTableIdentifier(this);
	}
};

TableIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTableIdentifier(this);
	}
};

TableIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTableIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.TableIdentifierContext = TableIdentifierContext;

SparkSqlParser.prototype.tableIdentifier = function() {

    var localctx = new TableIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 176, SparkSqlParser.RULE_tableIdentifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2285;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,289,this._ctx);
        if(la_===1) {
            this.state = 2282;
            localctx.db = this.errorCapturingIdentifier();
            this.state = 2283;
            this.match(SparkSqlParser.T__3);

        }
        this.state = 2287;
        localctx.table = this.errorCapturingIdentifier();
    } 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 NamedExpressionContext(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 = SparkSqlParser.RULE_namedExpression;
    this.name = null; // ErrorCapturingIdentifierContext
    return this;
}

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

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

NamedExpressionContext.prototype.identifierList = function() {
    return this.getTypedRuleContext(IdentifierListContext,0);
};

NamedExpressionContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

NamedExpressionContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};

NamedExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNamedExpression(this);
	}
};

NamedExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNamedExpression(this);
	}
};

NamedExpressionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNamedExpression(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.NamedExpressionContext = NamedExpressionContext;

SparkSqlParser.prototype.namedExpression = function() {

    var localctx = new NamedExpressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 178, SparkSqlParser.RULE_namedExpression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2289;
        this.expression();
        this.state = 2297;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,292,this._ctx);
        if(la_===1) {
            this.state = 2291;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,290,this._ctx);
            if(la_===1) {
                this.state = 2290;
                this.match(SparkSqlParser.AS);

            }
            this.state = 2295;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,291,this._ctx);
            switch(la_) {
            case 1:
                this.state = 2293;
                localctx.name = this.errorCapturingIdentifier();
                break;

            case 2:
                this.state = 2294;
                this.identifierList();
                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 NamedExpressionSeqContext(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 = SparkSqlParser.RULE_namedExpressionSeq;
    return this;
}

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

NamedExpressionSeqContext.prototype.namedExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(NamedExpressionContext);
    } else {
        return this.getTypedRuleContext(NamedExpressionContext,i);
    }
};

NamedExpressionSeqContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNamedExpressionSeq(this);
	}
};

NamedExpressionSeqContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNamedExpressionSeq(this);
	}
};

NamedExpressionSeqContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNamedExpressionSeq(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.NamedExpressionSeqContext = NamedExpressionSeqContext;

SparkSqlParser.prototype.namedExpressionSeq = function() {

    var localctx = new NamedExpressionSeqContext(this, this._ctx, this.state);
    this.enterRule(localctx, 180, SparkSqlParser.RULE_namedExpressionSeq);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2299;
        this.namedExpression();
        this.state = 2304;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,293,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2300;
                this.match(SparkSqlParser.T__2);
                this.state = 2301;
                this.namedExpression(); 
            }
            this.state = 2306;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,293,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 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 = SparkSqlParser.RULE_transformList;
    this._transform = null; // TransformContext
    this.transforms = []; // of TransformContexts
    return this;
}

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

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.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTransformList(this);
	}
};

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

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




SparkSqlParser.TransformListContext = TransformListContext;

SparkSqlParser.prototype.transformList = function() {

    var localctx = new TransformListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 182, SparkSqlParser.RULE_transformList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2307;
        this.match(SparkSqlParser.T__0);
        this.state = 2308;
        localctx._transform = this.transform();
        localctx.transforms.push(localctx._transform);
        this.state = 2313;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 2309;
            this.match(SparkSqlParser.T__2);
            this.state = 2310;
            localctx._transform = this.transform();
            localctx.transforms.push(localctx._transform);
            this.state = 2315;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 2316;
        this.match(SparkSqlParser.T__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 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 = SparkSqlParser.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;

SparkSqlParser.IdentityTransformContext = IdentityTransformContext;

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

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

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


function ApplyTransformContext(parser, ctx) {
	TransformContext.call(this, parser);
    this.transformName = null; // IdentifierContext;
    this._transformArgument = null; // TransformArgumentContext;
    this.argument = []; // of TransformArgumentContexts;
    TransformContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

SparkSqlParser.ApplyTransformContext = ApplyTransformContext;

ApplyTransformContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,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.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterApplyTransform(this);
	}
};

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

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



SparkSqlParser.TransformContext = TransformContext;

SparkSqlParser.prototype.transform = function() {

    var localctx = new TransformContext(this, this._ctx, this.state);
    this.enterRule(localctx, 184, SparkSqlParser.RULE_transform);
    var _la = 0; // Token type
    try {
        this.state = 2331;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,296,this._ctx);
        switch(la_) {
        case 1:
            localctx = new IdentityTransformContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2318;
            this.qualifiedName();
            break;

        case 2:
            localctx = new ApplyTransformContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2319;
            localctx.transformName = this.identifier();
            this.state = 2320;
            this.match(SparkSqlParser.T__0);
            this.state = 2321;
            localctx._transformArgument = this.transformArgument();
            localctx.argument.push(localctx._transformArgument);
            this.state = 2326;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__2) {
                this.state = 2322;
                this.match(SparkSqlParser.T__2);
                this.state = 2323;
                localctx._transformArgument = this.transformArgument();
                localctx.argument.push(localctx._transformArgument);
                this.state = 2328;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 2329;
            this.match(SparkSqlParser.T__1);
            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 = SparkSqlParser.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 SparkSqlListener ) {
        listener.enterTransformArgument(this);
	}
};

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

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




SparkSqlParser.TransformArgumentContext = TransformArgumentContext;

SparkSqlParser.prototype.transformArgument = function() {

    var localctx = new TransformArgumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 186, SparkSqlParser.RULE_transformArgument);
    try {
        this.state = 2335;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,297,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2333;
            this.qualifiedName();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2334;
            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 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 = SparkSqlParser.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 SparkSqlListener ) {
        listener.enterExpression(this);
	}
};

ExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitExpression(this);
	}
};

ExpressionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitExpression(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ExpressionContext = ExpressionContext;

SparkSqlParser.prototype.expression = function() {

    var localctx = new ExpressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 188, SparkSqlParser.RULE_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2337;
        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 = SparkSqlParser.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;

SparkSqlParser.LogicalNotContext = LogicalNotContext;

LogicalNotContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

LogicalNotContext.prototype.booleanExpression = function() {
    return this.getTypedRuleContext(BooleanExpressionContext,0);
};
LogicalNotContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterLogicalNot(this);
	}
};

LogicalNotContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitLogicalNot(this);
	}
};

LogicalNotContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.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 SparkSqlListener ) {
        listener.enterPredicated(this);
	}
};

PredicatedContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPredicated(this);
	}
};

PredicatedContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.ExistsContext = ExistsContext;

ExistsContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

ExistsContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};
ExistsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterExists(this);
	}
};

ExistsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitExists(this);
	}
};

ExistsContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.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(SparkSqlParser.AND, 0);
};

LogicalBinaryContext.prototype.OR = function() {
    return this.getToken(SparkSqlParser.OR, 0);
};
LogicalBinaryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterLogicalBinary(this);
	}
};

LogicalBinaryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitLogicalBinary(this);
	}
};

LogicalBinaryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitLogicalBinary(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.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 = 190;
    this.enterRecursionRule(localctx, 190, SparkSqlParser.RULE_booleanExpression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2351;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,299,this._ctx);
        switch(la_) {
        case 1:
            localctx = new LogicalNotContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 2340;
            this.match(SparkSqlParser.NOT);
            this.state = 2341;
            this.booleanExpression(5);
            break;

        case 2:
            localctx = new ExistsContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2342;
            this.match(SparkSqlParser.EXISTS);
            this.state = 2343;
            this.match(SparkSqlParser.T__0);
            this.state = 2344;
            this.query();
            this.state = 2345;
            this.match(SparkSqlParser.T__1);
            break;

        case 3:
            localctx = new PredicatedContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2347;
            this.valueExpression(0);
            this.state = 2349;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,298,this._ctx);
            if(la_===1) {
                this.state = 2348;
                this.predicate();

            }
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2361;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,301,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 = 2359;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,300,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_booleanExpression);
                    this.state = 2353;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 2354;
                    localctx.operator = this.match(SparkSqlParser.AND);
                    this.state = 2355;
                    localctx.right = this.booleanExpression(3);
                    break;

                case 2:
                    localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_booleanExpression);
                    this.state = 2356;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 2357;
                    localctx.operator = this.match(SparkSqlParser.OR);
                    this.state = 2358;
                    localctx.right = this.booleanExpression(2);
                    break;

                } 
            }
            this.state = 2363;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,301,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 = SparkSqlParser.RULE_predicate;
    this.kind = null; // Token
    this.lower = null; // ValueExpressionContext
    this.upper = null; // ValueExpressionContext
    this.pattern = null; // ValueExpressionContext
    this.quantifier = null; // Token
    this.escapeChar = 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(SparkSqlParser.AND, 0);
};

PredicateContext.prototype.BETWEEN = function() {
    return this.getToken(SparkSqlParser.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(SparkSqlParser.NOT, 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.IN = function() {
    return this.getToken(SparkSqlParser.IN, 0);
};

PredicateContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};

PredicateContext.prototype.RLIKE = function() {
    return this.getToken(SparkSqlParser.RLIKE, 0);
};

PredicateContext.prototype.LIKE = function() {
    return this.getToken(SparkSqlParser.LIKE, 0);
};

PredicateContext.prototype.ANY = function() {
    return this.getToken(SparkSqlParser.ANY, 0);
};

PredicateContext.prototype.SOME = function() {
    return this.getToken(SparkSqlParser.SOME, 0);
};

PredicateContext.prototype.ALL = function() {
    return this.getToken(SparkSqlParser.ALL, 0);
};

PredicateContext.prototype.ESCAPE = function() {
    return this.getToken(SparkSqlParser.ESCAPE, 0);
};

PredicateContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

PredicateContext.prototype.IS = function() {
    return this.getToken(SparkSqlParser.IS, 0);
};

PredicateContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};

PredicateContext.prototype.TRUE = function() {
    return this.getToken(SparkSqlParser.TRUE, 0);
};

PredicateContext.prototype.FALSE = function() {
    return this.getToken(SparkSqlParser.FALSE, 0);
};

PredicateContext.prototype.UNKNOWN = function() {
    return this.getToken(SparkSqlParser.UNKNOWN, 0);
};

PredicateContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

PredicateContext.prototype.DISTINCT = function() {
    return this.getToken(SparkSqlParser.DISTINCT, 0);
};

PredicateContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterPredicate(this);
	}
};

PredicateContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPredicate(this);
	}
};

PredicateContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitPredicate(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.PredicateContext = PredicateContext;

SparkSqlParser.prototype.predicate = function() {

    var localctx = new PredicateContext(this, this._ctx, this.state);
    this.enterRule(localctx, 192, SparkSqlParser.RULE_predicate);
    var _la = 0; // Token type
    try {
        this.state = 2446;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,315,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2365;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.NOT) {
                this.state = 2364;
                this.match(SparkSqlParser.NOT);
            }

            this.state = 2367;
            localctx.kind = this.match(SparkSqlParser.BETWEEN);
            this.state = 2368;
            localctx.lower = this.valueExpression(0);
            this.state = 2369;
            this.match(SparkSqlParser.AND);
            this.state = 2370;
            localctx.upper = this.valueExpression(0);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2373;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.NOT) {
                this.state = 2372;
                this.match(SparkSqlParser.NOT);
            }

            this.state = 2375;
            localctx.kind = this.match(SparkSqlParser.IN);
            this.state = 2376;
            this.match(SparkSqlParser.T__0);
            this.state = 2377;
            this.expression();
            this.state = 2382;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SparkSqlParser.T__2) {
                this.state = 2378;
                this.match(SparkSqlParser.T__2);
                this.state = 2379;
                this.expression();
                this.state = 2384;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 2385;
            this.match(SparkSqlParser.T__1);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2388;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.NOT) {
                this.state = 2387;
                this.match(SparkSqlParser.NOT);
            }

            this.state = 2390;
            localctx.kind = this.match(SparkSqlParser.IN);
            this.state = 2391;
            this.match(SparkSqlParser.T__0);
            this.state = 2392;
            this.query();
            this.state = 2393;
            this.match(SparkSqlParser.T__1);
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2396;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.NOT) {
                this.state = 2395;
                this.match(SparkSqlParser.NOT);
            }

            this.state = 2398;
            localctx.kind = this.match(SparkSqlParser.RLIKE);
            this.state = 2399;
            localctx.pattern = this.valueExpression(0);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2401;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.NOT) {
                this.state = 2400;
                this.match(SparkSqlParser.NOT);
            }

            this.state = 2403;
            localctx.kind = this.match(SparkSqlParser.LIKE);
            this.state = 2404;
            localctx.quantifier = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.ALL || _la===SparkSqlParser.ANY || _la===SparkSqlParser.SOME)) {
                localctx.quantifier = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2418;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,309,this._ctx);
            switch(la_) {
            case 1:
                this.state = 2405;
                this.match(SparkSqlParser.T__0);
                this.state = 2406;
                this.match(SparkSqlParser.T__1);
                break;

            case 2:
                this.state = 2407;
                this.match(SparkSqlParser.T__0);
                this.state = 2408;
                this.expression();
                this.state = 2413;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===SparkSqlParser.T__2) {
                    this.state = 2409;
                    this.match(SparkSqlParser.T__2);
                    this.state = 2410;
                    this.expression();
                    this.state = 2415;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
                this.state = 2416;
                this.match(SparkSqlParser.T__1);
                break;

            }
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 2421;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.NOT) {
                this.state = 2420;
                this.match(SparkSqlParser.NOT);
            }

            this.state = 2423;
            localctx.kind = this.match(SparkSqlParser.LIKE);
            this.state = 2424;
            localctx.pattern = this.valueExpression(0);
            this.state = 2427;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,311,this._ctx);
            if(la_===1) {
                this.state = 2425;
                this.match(SparkSqlParser.ESCAPE);
                this.state = 2426;
                localctx.escapeChar = this.match(SparkSqlParser.STRING);

            }
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 2429;
            this.match(SparkSqlParser.IS);
            this.state = 2431;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.NOT) {
                this.state = 2430;
                this.match(SparkSqlParser.NOT);
            }

            this.state = 2433;
            localctx.kind = this.match(SparkSqlParser.NULL);
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 2434;
            this.match(SparkSqlParser.IS);
            this.state = 2436;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.NOT) {
                this.state = 2435;
                this.match(SparkSqlParser.NOT);
            }

            this.state = 2438;
            localctx.kind = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.FALSE || _la===SparkSqlParser.TRUE || _la===SparkSqlParser.UNKNOWN)) {
                localctx.kind = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 2439;
            this.match(SparkSqlParser.IS);
            this.state = 2441;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.NOT) {
                this.state = 2440;
                this.match(SparkSqlParser.NOT);
            }

            this.state = 2443;
            localctx.kind = this.match(SparkSqlParser.DISTINCT);
            this.state = 2444;
            this.match(SparkSqlParser.FROM);
            this.state = 2445;
            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 = SparkSqlParser.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;

SparkSqlParser.ValueExpressionDefaultContext = ValueExpressionDefaultContext;

ValueExpressionDefaultContext.prototype.primaryExpression = function() {
    return this.getTypedRuleContext(PrimaryExpressionContext,0);
};
ValueExpressionDefaultContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterValueExpressionDefault(this);
	}
};

ValueExpressionDefaultContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitValueExpressionDefault(this);
	}
};

ValueExpressionDefaultContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.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 SparkSqlListener ) {
        listener.enterComparison(this);
	}
};

ComparisonContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitComparison(this);
	}
};

ComparisonContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.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 = function() {
    return this.getToken(SparkSqlParser.ASTERISK, 0);
};

ArithmeticBinaryContext.prototype.SLASH = function() {
    return this.getToken(SparkSqlParser.SLASH, 0);
};

ArithmeticBinaryContext.prototype.PERCENT = function() {
    return this.getToken(SparkSqlParser.PERCENT, 0);
};

ArithmeticBinaryContext.prototype.DIV = function() {
    return this.getToken(SparkSqlParser.DIV, 0);
};

ArithmeticBinaryContext.prototype.PLUS = function() {
    return this.getToken(SparkSqlParser.PLUS, 0);
};

ArithmeticBinaryContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};

ArithmeticBinaryContext.prototype.CONCAT_PIPE = function() {
    return this.getToken(SparkSqlParser.CONCAT_PIPE, 0);
};

ArithmeticBinaryContext.prototype.AMPERSAND = function() {
    return this.getToken(SparkSqlParser.AMPERSAND, 0);
};

ArithmeticBinaryContext.prototype.HAT = function() {
    return this.getToken(SparkSqlParser.HAT, 0);
};

ArithmeticBinaryContext.prototype.PIPE = function() {
    return this.getToken(SparkSqlParser.PIPE, 0);
};
ArithmeticBinaryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterArithmeticBinary(this);
	}
};

ArithmeticBinaryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitArithmeticBinary(this);
	}
};

ArithmeticBinaryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.ArithmeticUnaryContext = ArithmeticUnaryContext;

ArithmeticUnaryContext.prototype.valueExpression = function() {
    return this.getTypedRuleContext(ValueExpressionContext,0);
};

ArithmeticUnaryContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};

ArithmeticUnaryContext.prototype.PLUS = function() {
    return this.getToken(SparkSqlParser.PLUS, 0);
};

ArithmeticUnaryContext.prototype.TILDE = function() {
    return this.getToken(SparkSqlParser.TILDE, 0);
};
ArithmeticUnaryContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterArithmeticUnary(this);
	}
};

ArithmeticUnaryContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitArithmeticUnary(this);
	}
};

ArithmeticUnaryContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitArithmeticUnary(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.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 = 194;
    this.enterRecursionRule(localctx, 194, SparkSqlParser.RULE_valueExpression, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2452;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,316,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ValueExpressionDefaultContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 2449;
            this.primaryExpression(0);
            break;

        case 2:
            localctx = new ArithmeticUnaryContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2450;
            localctx.operator = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(((((_la - 268)) & ~0x1f) == 0 && ((1 << (_la - 268)) & ((1 << (SparkSqlParser.PLUS - 268)) | (1 << (SparkSqlParser.MINUS - 268)) | (1 << (SparkSqlParser.TILDE - 268)))) !== 0))) {
                localctx.operator = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2451;
            this.valueExpression(7);
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2475;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,318,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 = 2473;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,317,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_valueExpression);
                    this.state = 2454;
                    if (!( this.precpred(this._ctx, 6))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
                    }
                    this.state = 2455;
                    localctx.operator = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(_la===SparkSqlParser.DIV || ((((_la - 270)) & ~0x1f) == 0 && ((1 << (_la - 270)) & ((1 << (SparkSqlParser.ASTERISK - 270)) | (1 << (SparkSqlParser.SLASH - 270)) | (1 << (SparkSqlParser.PERCENT - 270)))) !== 0))) {
                        localctx.operator = this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 2456;
                    localctx.right = this.valueExpression(7);
                    break;

                case 2:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_valueExpression);
                    this.state = 2457;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 2458;
                    localctx.operator = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(((((_la - 268)) & ~0x1f) == 0 && ((1 << (_la - 268)) & ((1 << (SparkSqlParser.PLUS - 268)) | (1 << (SparkSqlParser.MINUS - 268)) | (1 << (SparkSqlParser.CONCAT_PIPE - 268)))) !== 0))) {
                        localctx.operator = this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 2459;
                    localctx.right = this.valueExpression(6);
                    break;

                case 3:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_valueExpression);
                    this.state = 2460;
                    if (!( this.precpred(this._ctx, 4))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
                    }
                    this.state = 2461;
                    localctx.operator = this.match(SparkSqlParser.AMPERSAND);
                    this.state = 2462;
                    localctx.right = this.valueExpression(5);
                    break;

                case 4:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_valueExpression);
                    this.state = 2463;
                    if (!( this.precpred(this._ctx, 3))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                    }
                    this.state = 2464;
                    localctx.operator = this.match(SparkSqlParser.HAT);
                    this.state = 2465;
                    localctx.right = this.valueExpression(4);
                    break;

                case 5:
                    localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_valueExpression);
                    this.state = 2466;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 2467;
                    localctx.operator = this.match(SparkSqlParser.PIPE);
                    this.state = 2468;
                    localctx.right = this.valueExpression(3);
                    break;

                case 6:
                    localctx = new ComparisonContext(this, new ValueExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_valueExpression);
                    this.state = 2469;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 2470;
                    this.comparisonOperator();
                    this.state = 2471;
                    localctx.right = this.valueExpression(2);
                    break;

                } 
            }
            this.state = 2477;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,318,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 = SparkSqlParser.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 StructContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this._namedExpression = null; // NamedExpressionContext;
    this.argument = []; // of NamedExpressionContexts;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

StructContext.prototype = Object.create(PrimaryExpressionContext.prototype);
StructContext.prototype.constructor = StructContext;

SparkSqlParser.StructContext = StructContext;

StructContext.prototype.STRUCT = function() {
    return this.getToken(SparkSqlParser.STRUCT, 0);
};

StructContext.prototype.namedExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(NamedExpressionContext);
    } else {
        return this.getTypedRuleContext(NamedExpressionContext,i);
    }
};
StructContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterStruct(this);
	}
};

StructContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitStruct(this);
	}
};

StructContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitStruct(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function DereferenceContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.base = null; // PrimaryExpressionContext;
    this.fieldName = null; // IdentifierContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DereferenceContext.prototype = Object.create(PrimaryExpressionContext.prototype);
DereferenceContext.prototype.constructor = DereferenceContext;

SparkSqlParser.DereferenceContext = DereferenceContext;

DereferenceContext.prototype.primaryExpression = function() {
    return this.getTypedRuleContext(PrimaryExpressionContext,0);
};

DereferenceContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};
DereferenceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDereference(this);
	}
};

DereferenceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDereference(this);
	}
};

DereferenceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.SimpleCaseContext = SimpleCaseContext;

SimpleCaseContext.prototype.CASE = function() {
    return this.getToken(SparkSqlParser.CASE, 0);
};

SimpleCaseContext.prototype.END = function() {
    return this.getToken(SparkSqlParser.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(SparkSqlParser.ELSE, 0);
};
SimpleCaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSimpleCase(this);
	}
};

SimpleCaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSimpleCase(this);
	}
};

SimpleCaseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.ColumnReferenceContext = ColumnReferenceContext;

ColumnReferenceContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};
ColumnReferenceContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterColumnReference(this);
	}
};

ColumnReferenceContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitColumnReference(this);
	}
};

ColumnReferenceContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitColumnReference(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function RowConstructorContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RowConstructorContext.prototype = Object.create(PrimaryExpressionContext.prototype);
RowConstructorContext.prototype.constructor = RowConstructorContext;

SparkSqlParser.RowConstructorContext = RowConstructorContext;

RowConstructorContext.prototype.namedExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(NamedExpressionContext);
    } else {
        return this.getTypedRuleContext(NamedExpressionContext,i);
    }
};
RowConstructorContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRowConstructor(this);
	}
};

RowConstructorContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRowConstructor(this);
	}
};

RowConstructorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRowConstructor(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;

SparkSqlParser.LastContext = LastContext;

LastContext.prototype.LAST = function() {
    return this.getToken(SparkSqlParser.LAST, 0);
};

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

LastContext.prototype.IGNORE = function() {
    return this.getToken(SparkSqlParser.IGNORE, 0);
};

LastContext.prototype.NULLS = function() {
    return this.getToken(SparkSqlParser.NULLS, 0);
};
LastContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterLast(this);
	}
};

LastContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitLast(this);
	}
};

LastContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.StarContext = StarContext;

StarContext.prototype.ASTERISK = function() {
    return this.getToken(SparkSqlParser.ASTERISK, 0);
};

StarContext.prototype.qualifiedName = function() {
    return this.getTypedRuleContext(QualifiedNameContext,0);
};
StarContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterStar(this);
	}
};

StarContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitStar(this);
	}
};

StarContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitStar(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function OverlayContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.input = null; // ValueExpressionContext;
    this.replace = null; // ValueExpressionContext;
    this.position = null; // ValueExpressionContext;
    this.length = null; // ValueExpressionContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

OverlayContext.prototype = Object.create(PrimaryExpressionContext.prototype);
OverlayContext.prototype.constructor = OverlayContext;

SparkSqlParser.OverlayContext = OverlayContext;

OverlayContext.prototype.OVERLAY = function() {
    return this.getToken(SparkSqlParser.OVERLAY, 0);
};

OverlayContext.prototype.PLACING = function() {
    return this.getToken(SparkSqlParser.PLACING, 0);
};

OverlayContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

OverlayContext.prototype.valueExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ValueExpressionContext);
    } else {
        return this.getTypedRuleContext(ValueExpressionContext,i);
    }
};

OverlayContext.prototype.FOR = function() {
    return this.getToken(SparkSqlParser.FOR, 0);
};
OverlayContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterOverlay(this);
	}
};

OverlayContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitOverlay(this);
	}
};

OverlayContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitOverlay(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;

SparkSqlParser.SubscriptContext = SubscriptContext;

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 SparkSqlListener ) {
        listener.enterSubscript(this);
	}
};

SubscriptContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSubscript(this);
	}
};

SubscriptContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.SubqueryExpressionContext = SubqueryExpressionContext;

SubqueryExpressionContext.prototype.query = function() {
    return this.getTypedRuleContext(QueryContext,0);
};
SubqueryExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSubqueryExpression(this);
	}
};

SubqueryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSubqueryExpression(this);
	}
};

SubqueryExpressionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSubqueryExpression(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SubstringContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.str = null; // ValueExpressionContext;
    this.pos = null; // ValueExpressionContext;
    this.len = null; // ValueExpressionContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SubstringContext.prototype = Object.create(PrimaryExpressionContext.prototype);
SubstringContext.prototype.constructor = SubstringContext;

SparkSqlParser.SubstringContext = SubstringContext;

SubstringContext.prototype.SUBSTR = function() {
    return this.getToken(SparkSqlParser.SUBSTR, 0);
};

SubstringContext.prototype.SUBSTRING = function() {
    return this.getToken(SparkSqlParser.SUBSTRING, 0);
};

SubstringContext.prototype.valueExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ValueExpressionContext);
    } else {
        return this.getTypedRuleContext(ValueExpressionContext,i);
    }
};

SubstringContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

SubstringContext.prototype.FOR = function() {
    return this.getToken(SparkSqlParser.FOR, 0);
};
SubstringContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSubstring(this);
	}
};

SubstringContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSubstring(this);
	}
};

SubstringContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSubstring(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function CurrentDatetimeContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.name = null; // Token;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CurrentDatetimeContext.prototype = Object.create(PrimaryExpressionContext.prototype);
CurrentDatetimeContext.prototype.constructor = CurrentDatetimeContext;

SparkSqlParser.CurrentDatetimeContext = CurrentDatetimeContext;

CurrentDatetimeContext.prototype.CURRENT_DATE = function() {
    return this.getToken(SparkSqlParser.CURRENT_DATE, 0);
};

CurrentDatetimeContext.prototype.CURRENT_TIMESTAMP = function() {
    return this.getToken(SparkSqlParser.CURRENT_TIMESTAMP, 0);
};
CurrentDatetimeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCurrentDatetime(this);
	}
};

CurrentDatetimeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCurrentDatetime(this);
	}
};

CurrentDatetimeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitCurrentDatetime(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;

SparkSqlParser.CastContext = CastContext;

CastContext.prototype.CAST = function() {
    return this.getToken(SparkSqlParser.CAST, 0);
};

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

CastContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

CastContext.prototype.dataType = function() {
    return this.getTypedRuleContext(DataTypeContext,0);
};
CastContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterCast(this);
	}
};

CastContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitCast(this);
	}
};

CastContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.ConstantDefaultContext = ConstantDefaultContext;

ConstantDefaultContext.prototype.constant = function() {
    return this.getTypedRuleContext(ConstantContext,0);
};
ConstantDefaultContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterConstantDefault(this);
	}
};

ConstantDefaultContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitConstantDefault(this);
	}
};

ConstantDefaultContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitConstantDefault(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function LambdaContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LambdaContext.prototype = Object.create(PrimaryExpressionContext.prototype);
LambdaContext.prototype.constructor = LambdaContext;

SparkSqlParser.LambdaContext = LambdaContext;

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

LambdaContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
LambdaContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterLambda(this);
	}
};

LambdaContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitLambda(this);
	}
};

LambdaContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitLambda(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;

SparkSqlParser.ParenthesizedExpressionContext = ParenthesizedExpressionContext;

ParenthesizedExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
ParenthesizedExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterParenthesizedExpression(this);
	}
};

ParenthesizedExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitParenthesizedExpression(this);
	}
};

ParenthesizedExpressionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitParenthesizedExpression(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ExtractContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.field = null; // IdentifierContext;
    this.source = null; // ValueExpressionContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ExtractContext.prototype = Object.create(PrimaryExpressionContext.prototype);
ExtractContext.prototype.constructor = ExtractContext;

SparkSqlParser.ExtractContext = ExtractContext;

ExtractContext.prototype.EXTRACT = function() {
    return this.getToken(SparkSqlParser.EXTRACT, 0);
};

ExtractContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

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

ExtractContext.prototype.valueExpression = function() {
    return this.getTypedRuleContext(ValueExpressionContext,0);
};
ExtractContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterExtract(this);
	}
};

ExtractContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitExtract(this);
	}
};

ExtractContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitExtract(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function TrimContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this.trimOption = null; // Token;
    this.trimStr = null; // ValueExpressionContext;
    this.srcStr = null; // ValueExpressionContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TrimContext.prototype = Object.create(PrimaryExpressionContext.prototype);
TrimContext.prototype.constructor = TrimContext;

SparkSqlParser.TrimContext = TrimContext;

TrimContext.prototype.TRIM = function() {
    return this.getToken(SparkSqlParser.TRIM, 0);
};

TrimContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

TrimContext.prototype.valueExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ValueExpressionContext);
    } else {
        return this.getTypedRuleContext(ValueExpressionContext,i);
    }
};

TrimContext.prototype.BOTH = function() {
    return this.getToken(SparkSqlParser.BOTH, 0);
};

TrimContext.prototype.LEADING = function() {
    return this.getToken(SparkSqlParser.LEADING, 0);
};

TrimContext.prototype.TRAILING = function() {
    return this.getToken(SparkSqlParser.TRAILING, 0);
};
TrimContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTrim(this);
	}
};

TrimContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTrim(this);
	}
};

TrimContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTrim(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function FunctionCallContext(parser, ctx) {
	PrimaryExpressionContext.call(this, parser);
    this._expression = null; // ExpressionContext;
    this.argument = []; // of ExpressionContexts;
    this.where = null; // BooleanExpressionContext;
    PrimaryExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

FunctionCallContext.prototype = Object.create(PrimaryExpressionContext.prototype);
FunctionCallContext.prototype.constructor = FunctionCallContext;

SparkSqlParser.FunctionCallContext = FunctionCallContext;

FunctionCallContext.prototype.functionName = function() {
    return this.getTypedRuleContext(FunctionNameContext,0);
};

FunctionCallContext.prototype.FILTER = function() {
    return this.getToken(SparkSqlParser.FILTER, 0);
};

FunctionCallContext.prototype.WHERE = function() {
    return this.getToken(SparkSqlParser.WHERE, 0);
};

FunctionCallContext.prototype.OVER = function() {
    return this.getToken(SparkSqlParser.OVER, 0);
};

FunctionCallContext.prototype.windowSpec = function() {
    return this.getTypedRuleContext(WindowSpecContext,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.booleanExpression = function() {
    return this.getTypedRuleContext(BooleanExpressionContext,0);
};

FunctionCallContext.prototype.setQuantifier = function() {
    return this.getTypedRuleContext(SetQuantifierContext,0);
};
FunctionCallContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFunctionCall(this);
	}
};

FunctionCallContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFunctionCall(this);
	}
};

FunctionCallContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.SearchedCaseContext = SearchedCaseContext;

SearchedCaseContext.prototype.CASE = function() {
    return this.getToken(SparkSqlParser.CASE, 0);
};

SearchedCaseContext.prototype.END = function() {
    return this.getToken(SparkSqlParser.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(SparkSqlParser.ELSE, 0);
};

SearchedCaseContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
SearchedCaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSearchedCase(this);
	}
};

SearchedCaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSearchedCase(this);
	}
};

SearchedCaseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.PositionContext = PositionContext;

PositionContext.prototype.POSITION = function() {
    return this.getToken(SparkSqlParser.POSITION, 0);
};

PositionContext.prototype.IN = function() {
    return this.getToken(SparkSqlParser.IN, 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 SparkSqlListener ) {
        listener.enterPosition(this);
	}
};

PositionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPosition(this);
	}
};

PositionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.FirstContext = FirstContext;

FirstContext.prototype.FIRST = function() {
    return this.getToken(SparkSqlParser.FIRST, 0);
};

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

FirstContext.prototype.IGNORE = function() {
    return this.getToken(SparkSqlParser.IGNORE, 0);
};

FirstContext.prototype.NULLS = function() {
    return this.getToken(SparkSqlParser.NULLS, 0);
};
FirstContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFirst(this);
	}
};

FirstContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFirst(this);
	}
};

FirstContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitFirst(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.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 = 196;
    this.enterRecursionRule(localctx, 196, SparkSqlParser.RULE_primaryExpression, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2662;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,338,this._ctx);
        switch(la_) {
        case 1:
            localctx = new CurrentDatetimeContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 2479;
            localctx.name = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.CURRENT_DATE || _la===SparkSqlParser.CURRENT_TIMESTAMP)) {
                localctx.name = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 2:
            localctx = new SearchedCaseContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2480;
            this.match(SparkSqlParser.CASE);
            this.state = 2482; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 2481;
                this.whenClause();
                this.state = 2484; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===SparkSqlParser.WHEN);
            this.state = 2488;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.ELSE) {
                this.state = 2486;
                this.match(SparkSqlParser.ELSE);
                this.state = 2487;
                localctx.elseExpression = this.expression();
            }

            this.state = 2490;
            this.match(SparkSqlParser.END);
            break;

        case 3:
            localctx = new SimpleCaseContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2492;
            this.match(SparkSqlParser.CASE);
            this.state = 2493;
            localctx.value = this.expression();
            this.state = 2495; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 2494;
                this.whenClause();
                this.state = 2497; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===SparkSqlParser.WHEN);
            this.state = 2501;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.ELSE) {
                this.state = 2499;
                this.match(SparkSqlParser.ELSE);
                this.state = 2500;
                localctx.elseExpression = this.expression();
            }

            this.state = 2503;
            this.match(SparkSqlParser.END);
            break;

        case 4:
            localctx = new CastContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2505;
            this.match(SparkSqlParser.CAST);
            this.state = 2506;
            this.match(SparkSqlParser.T__0);
            this.state = 2507;
            this.expression();
            this.state = 2508;
            this.match(SparkSqlParser.AS);
            this.state = 2509;
            this.dataType();
            this.state = 2510;
            this.match(SparkSqlParser.T__1);
            break;

        case 5:
            localctx = new StructContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2512;
            this.match(SparkSqlParser.STRUCT);
            this.state = 2513;
            this.match(SparkSqlParser.T__0);
            this.state = 2522;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,324,this._ctx);
            if(la_===1) {
                this.state = 2514;
                localctx._namedExpression = this.namedExpression();
                localctx.argument.push(localctx._namedExpression);
                this.state = 2519;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===SparkSqlParser.T__2) {
                    this.state = 2515;
                    this.match(SparkSqlParser.T__2);
                    this.state = 2516;
                    localctx._namedExpression = this.namedExpression();
                    localctx.argument.push(localctx._namedExpression);
                    this.state = 2521;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }

            }
            this.state = 2524;
            this.match(SparkSqlParser.T__1);
            break;

        case 6:
            localctx = new FirstContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2525;
            this.match(SparkSqlParser.FIRST);
            this.state = 2526;
            this.match(SparkSqlParser.T__0);
            this.state = 2527;
            this.expression();
            this.state = 2530;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.IGNORE) {
                this.state = 2528;
                this.match(SparkSqlParser.IGNORE);
                this.state = 2529;
                this.match(SparkSqlParser.NULLS);
            }

            this.state = 2532;
            this.match(SparkSqlParser.T__1);
            break;

        case 7:
            localctx = new LastContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2534;
            this.match(SparkSqlParser.LAST);
            this.state = 2535;
            this.match(SparkSqlParser.T__0);
            this.state = 2536;
            this.expression();
            this.state = 2539;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.IGNORE) {
                this.state = 2537;
                this.match(SparkSqlParser.IGNORE);
                this.state = 2538;
                this.match(SparkSqlParser.NULLS);
            }

            this.state = 2541;
            this.match(SparkSqlParser.T__1);
            break;

        case 8:
            localctx = new PositionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2543;
            this.match(SparkSqlParser.POSITION);
            this.state = 2544;
            this.match(SparkSqlParser.T__0);
            this.state = 2545;
            localctx.substr = this.valueExpression(0);
            this.state = 2546;
            this.match(SparkSqlParser.IN);
            this.state = 2547;
            localctx.str = this.valueExpression(0);
            this.state = 2548;
            this.match(SparkSqlParser.T__1);
            break;

        case 9:
            localctx = new ConstantDefaultContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2550;
            this.constant();
            break;

        case 10:
            localctx = new StarContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2551;
            this.match(SparkSqlParser.ASTERISK);
            break;

        case 11:
            localctx = new StarContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2552;
            this.qualifiedName();
            this.state = 2553;
            this.match(SparkSqlParser.T__3);
            this.state = 2554;
            this.match(SparkSqlParser.ASTERISK);
            break;

        case 12:
            localctx = new RowConstructorContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2556;
            this.match(SparkSqlParser.T__0);
            this.state = 2557;
            this.namedExpression();
            this.state = 2560; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 2558;
                this.match(SparkSqlParser.T__2);
                this.state = 2559;
                this.namedExpression();
                this.state = 2562; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===SparkSqlParser.T__2);
            this.state = 2564;
            this.match(SparkSqlParser.T__1);
            break;

        case 13:
            localctx = new SubqueryExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2566;
            this.match(SparkSqlParser.T__0);
            this.state = 2567;
            this.query();
            this.state = 2568;
            this.match(SparkSqlParser.T__1);
            break;

        case 14:
            localctx = new FunctionCallContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2570;
            this.functionName();
            this.state = 2571;
            this.match(SparkSqlParser.T__0);
            this.state = 2583;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,330,this._ctx);
            if(la_===1) {
                this.state = 2573;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,328,this._ctx);
                if(la_===1) {
                    this.state = 2572;
                    this.setQuantifier();

                }
                this.state = 2575;
                localctx._expression = this.expression();
                localctx.argument.push(localctx._expression);
                this.state = 2580;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===SparkSqlParser.T__2) {
                    this.state = 2576;
                    this.match(SparkSqlParser.T__2);
                    this.state = 2577;
                    localctx._expression = this.expression();
                    localctx.argument.push(localctx._expression);
                    this.state = 2582;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }

            }
            this.state = 2585;
            this.match(SparkSqlParser.T__1);
            this.state = 2592;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,331,this._ctx);
            if(la_===1) {
                this.state = 2586;
                this.match(SparkSqlParser.FILTER);
                this.state = 2587;
                this.match(SparkSqlParser.T__0);
                this.state = 2588;
                this.match(SparkSqlParser.WHERE);
                this.state = 2589;
                localctx.where = this.booleanExpression(0);
                this.state = 2590;
                this.match(SparkSqlParser.T__1);

            }
            this.state = 2596;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,332,this._ctx);
            if(la_===1) {
                this.state = 2594;
                this.match(SparkSqlParser.OVER);
                this.state = 2595;
                this.windowSpec();

            }
            break;

        case 15:
            localctx = new LambdaContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2598;
            this.identifier();
            this.state = 2599;
            this.match(SparkSqlParser.T__6);
            this.state = 2600;
            this.expression();
            break;

        case 16:
            localctx = new LambdaContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2602;
            this.match(SparkSqlParser.T__0);
            this.state = 2603;
            this.identifier();
            this.state = 2606; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 2604;
                this.match(SparkSqlParser.T__2);
                this.state = 2605;
                this.identifier();
                this.state = 2608; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===SparkSqlParser.T__2);
            this.state = 2610;
            this.match(SparkSqlParser.T__1);
            this.state = 2611;
            this.match(SparkSqlParser.T__6);
            this.state = 2612;
            this.expression();
            break;

        case 17:
            localctx = new ColumnReferenceContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2614;
            this.identifier();
            break;

        case 18:
            localctx = new ParenthesizedExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2615;
            this.match(SparkSqlParser.T__0);
            this.state = 2616;
            this.expression();
            this.state = 2617;
            this.match(SparkSqlParser.T__1);
            break;

        case 19:
            localctx = new ExtractContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2619;
            this.match(SparkSqlParser.EXTRACT);
            this.state = 2620;
            this.match(SparkSqlParser.T__0);
            this.state = 2621;
            localctx.field = this.identifier();
            this.state = 2622;
            this.match(SparkSqlParser.FROM);
            this.state = 2623;
            localctx.source = this.valueExpression(0);
            this.state = 2624;
            this.match(SparkSqlParser.T__1);
            break;

        case 20:
            localctx = new SubstringContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2626;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.SUBSTR || _la===SparkSqlParser.SUBSTRING)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2627;
            this.match(SparkSqlParser.T__0);
            this.state = 2628;
            localctx.str = this.valueExpression(0);
            this.state = 2629;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.T__2 || _la===SparkSqlParser.FROM)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2630;
            localctx.pos = this.valueExpression(0);
            this.state = 2633;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.T__2 || _la===SparkSqlParser.FOR) {
                this.state = 2631;
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.T__2 || _la===SparkSqlParser.FOR)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2632;
                localctx.len = this.valueExpression(0);
            }

            this.state = 2635;
            this.match(SparkSqlParser.T__1);
            break;

        case 21:
            localctx = new TrimContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2637;
            this.match(SparkSqlParser.TRIM);
            this.state = 2638;
            this.match(SparkSqlParser.T__0);
            this.state = 2640;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,335,this._ctx);
            if(la_===1) {
                this.state = 2639;
                localctx.trimOption = this._input.LT(1);
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.BOTH || _la===SparkSqlParser.LEADING || _la===SparkSqlParser.TRAILING)) {
                    localctx.trimOption = this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }

            }
            this.state = 2643;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,336,this._ctx);
            if(la_===1) {
                this.state = 2642;
                localctx.trimStr = this.valueExpression(0);

            }
            this.state = 2645;
            this.match(SparkSqlParser.FROM);
            this.state = 2646;
            localctx.srcStr = this.valueExpression(0);
            this.state = 2647;
            this.match(SparkSqlParser.T__1);
            break;

        case 22:
            localctx = new OverlayContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2649;
            this.match(SparkSqlParser.OVERLAY);
            this.state = 2650;
            this.match(SparkSqlParser.T__0);
            this.state = 2651;
            localctx.input = this.valueExpression(0);
            this.state = 2652;
            this.match(SparkSqlParser.PLACING);
            this.state = 2653;
            localctx.replace = this.valueExpression(0);
            this.state = 2654;
            this.match(SparkSqlParser.FROM);
            this.state = 2655;
            localctx.position = this.valueExpression(0);
            this.state = 2658;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.FOR) {
                this.state = 2656;
                this.match(SparkSqlParser.FOR);
                this.state = 2657;
                localctx.length = this.valueExpression(0);
            }

            this.state = 2660;
            this.match(SparkSqlParser.T__1);
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2674;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,340,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 = 2672;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,339,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new SubscriptContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState));
                    localctx.value = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_primaryExpression);
                    this.state = 2664;
                    if (!( this.precpred(this._ctx, 8))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 8)");
                    }
                    this.state = 2665;
                    this.match(SparkSqlParser.T__7);
                    this.state = 2666;
                    localctx.index = this.valueExpression(0);
                    this.state = 2667;
                    this.match(SparkSqlParser.T__8);
                    break;

                case 2:
                    localctx = new DereferenceContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState));
                    localctx.base = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, SparkSqlParser.RULE_primaryExpression);
                    this.state = 2669;
                    if (!( this.precpred(this._ctx, 6))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
                    }
                    this.state = 2670;
                    this.match(SparkSqlParser.T__3);
                    this.state = 2671;
                    localctx.fieldName = this.identifier();
                    break;

                } 
            }
            this.state = 2676;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,340,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 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 = SparkSqlParser.RULE_constant;
    return this;
}

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


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


function NullLiteralContext(parser, ctx) {
	ConstantContext.call(this, parser);
    ConstantContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NullLiteralContext.prototype = Object.create(ConstantContext.prototype);
NullLiteralContext.prototype.constructor = NullLiteralContext;

SparkSqlParser.NullLiteralContext = NullLiteralContext;

NullLiteralContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};
NullLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNullLiteral(this);
	}
};

NullLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNullLiteral(this);
	}
};

NullLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNullLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function StringLiteralContext(parser, ctx) {
	ConstantContext.call(this, parser);
    ConstantContext.prototype.copyFrom.call(this, ctx);
    return this;
}

StringLiteralContext.prototype = Object.create(ConstantContext.prototype);
StringLiteralContext.prototype.constructor = StringLiteralContext;

SparkSqlParser.StringLiteralContext = StringLiteralContext;

StringLiteralContext.prototype.STRING = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.STRING);
    } else {
        return this.getToken(SparkSqlParser.STRING, i);
    }
};

StringLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterStringLiteral(this);
	}
};

StringLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitStringLiteral(this);
	}
};

StringLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitStringLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function TypeConstructorContext(parser, ctx) {
	ConstantContext.call(this, parser);
    ConstantContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TypeConstructorContext.prototype = Object.create(ConstantContext.prototype);
TypeConstructorContext.prototype.constructor = TypeConstructorContext;

SparkSqlParser.TypeConstructorContext = TypeConstructorContext;

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

TypeConstructorContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};
TypeConstructorContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTypeConstructor(this);
	}
};

TypeConstructorContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTypeConstructor(this);
	}
};

TypeConstructorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTypeConstructor(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function IntervalLiteralContext(parser, ctx) {
	ConstantContext.call(this, parser);
    ConstantContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IntervalLiteralContext.prototype = Object.create(ConstantContext.prototype);
IntervalLiteralContext.prototype.constructor = IntervalLiteralContext;

SparkSqlParser.IntervalLiteralContext = IntervalLiteralContext;

IntervalLiteralContext.prototype.interval = function() {
    return this.getTypedRuleContext(IntervalContext,0);
};
IntervalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterIntervalLiteral(this);
	}
};

IntervalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitIntervalLiteral(this);
	}
};

IntervalLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitIntervalLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function NumericLiteralContext(parser, ctx) {
	ConstantContext.call(this, parser);
    ConstantContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NumericLiteralContext.prototype = Object.create(ConstantContext.prototype);
NumericLiteralContext.prototype.constructor = NumericLiteralContext;

SparkSqlParser.NumericLiteralContext = NumericLiteralContext;

NumericLiteralContext.prototype.number = function() {
    return this.getTypedRuleContext(NumberContext,0);
};
NumericLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNumericLiteral(this);
	}
};

NumericLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNumericLiteral(this);
	}
};

NumericLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNumericLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function BooleanLiteralContext(parser, ctx) {
	ConstantContext.call(this, parser);
    ConstantContext.prototype.copyFrom.call(this, ctx);
    return this;
}

BooleanLiteralContext.prototype = Object.create(ConstantContext.prototype);
BooleanLiteralContext.prototype.constructor = BooleanLiteralContext;

SparkSqlParser.BooleanLiteralContext = BooleanLiteralContext;

BooleanLiteralContext.prototype.booleanValue = function() {
    return this.getTypedRuleContext(BooleanValueContext,0);
};
BooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterBooleanLiteral(this);
	}
};

BooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitBooleanLiteral(this);
	}
};

BooleanLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitBooleanLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.ConstantContext = ConstantContext;

SparkSqlParser.prototype.constant = function() {

    var localctx = new ConstantContext(this, this._ctx, this.state);
    this.enterRule(localctx, 198, SparkSqlParser.RULE_constant);
    try {
        this.state = 2689;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,342,this._ctx);
        switch(la_) {
        case 1:
            localctx = new NullLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2677;
            this.match(SparkSqlParser.NULL);
            break;

        case 2:
            localctx = new IntervalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2678;
            this.interval();
            break;

        case 3:
            localctx = new TypeConstructorContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2679;
            this.identifier();
            this.state = 2680;
            this.match(SparkSqlParser.STRING);
            break;

        case 4:
            localctx = new NumericLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2682;
            this.number();
            break;

        case 5:
            localctx = new BooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2683;
            this.booleanValue();
            break;

        case 6:
            localctx = new StringLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 2685; 
            this._errHandler.sync(this);
            var _alt = 1;
            do {
            	switch (_alt) {
            	case 1:
            		this.state = 2684;
            		this.match(SparkSqlParser.STRING);
            		break;
            	default:
            		throw new antlr4.error.NoViableAltException(this);
            	}
            	this.state = 2687; 
            	this._errHandler.sync(this);
            	_alt = this._interp.adaptivePredict(this._input,341, this._ctx);
            } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
            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 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 = SparkSqlParser.RULE_comparisonOperator;
    return this;
}

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

ComparisonOperatorContext.prototype.EQ = function() {
    return this.getToken(SparkSqlParser.EQ, 0);
};

ComparisonOperatorContext.prototype.NEQ = function() {
    return this.getToken(SparkSqlParser.NEQ, 0);
};

ComparisonOperatorContext.prototype.NEQJ = function() {
    return this.getToken(SparkSqlParser.NEQJ, 0);
};

ComparisonOperatorContext.prototype.LT = function() {
    return this.getToken(SparkSqlParser.LT, 0);
};

ComparisonOperatorContext.prototype.LTE = function() {
    return this.getToken(SparkSqlParser.LTE, 0);
};

ComparisonOperatorContext.prototype.GT = function() {
    return this.getToken(SparkSqlParser.GT, 0);
};

ComparisonOperatorContext.prototype.GTE = function() {
    return this.getToken(SparkSqlParser.GTE, 0);
};

ComparisonOperatorContext.prototype.NSEQ = function() {
    return this.getToken(SparkSqlParser.NSEQ, 0);
};

ComparisonOperatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterComparisonOperator(this);
	}
};

ComparisonOperatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitComparisonOperator(this);
	}
};

ComparisonOperatorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitComparisonOperator(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ComparisonOperatorContext = ComparisonOperatorContext;

SparkSqlParser.prototype.comparisonOperator = function() {

    var localctx = new ComparisonOperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 200, SparkSqlParser.RULE_comparisonOperator);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2691;
        _la = this._input.LA(1);
        if(!(((((_la - 260)) & ~0x1f) == 0 && ((1 << (_la - 260)) & ((1 << (SparkSqlParser.EQ - 260)) | (1 << (SparkSqlParser.NSEQ - 260)) | (1 << (SparkSqlParser.NEQ - 260)) | (1 << (SparkSqlParser.NEQJ - 260)) | (1 << (SparkSqlParser.LT - 260)) | (1 << (SparkSqlParser.LTE - 260)) | (1 << (SparkSqlParser.GT - 260)) | (1 << (SparkSqlParser.GTE - 260)))) !== 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 ArithmeticOperatorContext(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 = SparkSqlParser.RULE_arithmeticOperator;
    return this;
}

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

ArithmeticOperatorContext.prototype.PLUS = function() {
    return this.getToken(SparkSqlParser.PLUS, 0);
};

ArithmeticOperatorContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};

ArithmeticOperatorContext.prototype.ASTERISK = function() {
    return this.getToken(SparkSqlParser.ASTERISK, 0);
};

ArithmeticOperatorContext.prototype.SLASH = function() {
    return this.getToken(SparkSqlParser.SLASH, 0);
};

ArithmeticOperatorContext.prototype.PERCENT = function() {
    return this.getToken(SparkSqlParser.PERCENT, 0);
};

ArithmeticOperatorContext.prototype.DIV = function() {
    return this.getToken(SparkSqlParser.DIV, 0);
};

ArithmeticOperatorContext.prototype.TILDE = function() {
    return this.getToken(SparkSqlParser.TILDE, 0);
};

ArithmeticOperatorContext.prototype.AMPERSAND = function() {
    return this.getToken(SparkSqlParser.AMPERSAND, 0);
};

ArithmeticOperatorContext.prototype.PIPE = function() {
    return this.getToken(SparkSqlParser.PIPE, 0);
};

ArithmeticOperatorContext.prototype.CONCAT_PIPE = function() {
    return this.getToken(SparkSqlParser.CONCAT_PIPE, 0);
};

ArithmeticOperatorContext.prototype.HAT = function() {
    return this.getToken(SparkSqlParser.HAT, 0);
};

ArithmeticOperatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterArithmeticOperator(this);
	}
};

ArithmeticOperatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitArithmeticOperator(this);
	}
};

ArithmeticOperatorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitArithmeticOperator(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ArithmeticOperatorContext = ArithmeticOperatorContext;

SparkSqlParser.prototype.arithmeticOperator = function() {

    var localctx = new ArithmeticOperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 202, SparkSqlParser.RULE_arithmeticOperator);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2693;
        _la = this._input.LA(1);
        if(!(_la===SparkSqlParser.DIV || ((((_la - 268)) & ~0x1f) == 0 && ((1 << (_la - 268)) & ((1 << (SparkSqlParser.PLUS - 268)) | (1 << (SparkSqlParser.MINUS - 268)) | (1 << (SparkSqlParser.ASTERISK - 268)) | (1 << (SparkSqlParser.SLASH - 268)) | (1 << (SparkSqlParser.PERCENT - 268)) | (1 << (SparkSqlParser.TILDE - 268)) | (1 << (SparkSqlParser.AMPERSAND - 268)) | (1 << (SparkSqlParser.PIPE - 268)) | (1 << (SparkSqlParser.CONCAT_PIPE - 268)) | (1 << (SparkSqlParser.HAT - 268)))) !== 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 PredicateOperatorContext(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 = SparkSqlParser.RULE_predicateOperator;
    return this;
}

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

PredicateOperatorContext.prototype.OR = function() {
    return this.getToken(SparkSqlParser.OR, 0);
};

PredicateOperatorContext.prototype.AND = function() {
    return this.getToken(SparkSqlParser.AND, 0);
};

PredicateOperatorContext.prototype.IN = function() {
    return this.getToken(SparkSqlParser.IN, 0);
};

PredicateOperatorContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

PredicateOperatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterPredicateOperator(this);
	}
};

PredicateOperatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPredicateOperator(this);
	}
};

PredicateOperatorContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitPredicateOperator(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.PredicateOperatorContext = PredicateOperatorContext;

SparkSqlParser.prototype.predicateOperator = function() {

    var localctx = new PredicateOperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 204, SparkSqlParser.RULE_predicateOperator);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2695;
        _la = this._input.LA(1);
        if(!(_la===SparkSqlParser.AND || _la===SparkSqlParser.IN || _la===SparkSqlParser.NOT || _la===SparkSqlParser.OR)) {
        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 BooleanValueContext(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 = SparkSqlParser.RULE_booleanValue;
    return this;
}

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

BooleanValueContext.prototype.TRUE = function() {
    return this.getToken(SparkSqlParser.TRUE, 0);
};

BooleanValueContext.prototype.FALSE = function() {
    return this.getToken(SparkSqlParser.FALSE, 0);
};

BooleanValueContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterBooleanValue(this);
	}
};

BooleanValueContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitBooleanValue(this);
	}
};

BooleanValueContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitBooleanValue(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.BooleanValueContext = BooleanValueContext;

SparkSqlParser.prototype.booleanValue = function() {

    var localctx = new BooleanValueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 206, SparkSqlParser.RULE_booleanValue);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2697;
        _la = this._input.LA(1);
        if(!(_la===SparkSqlParser.FALSE || _la===SparkSqlParser.TRUE)) {
        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 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 = SparkSqlParser.RULE_interval;
    return this;
}

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

IntervalContext.prototype.INTERVAL = function() {
    return this.getToken(SparkSqlParser.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 SparkSqlListener ) {
        listener.enterInterval(this);
	}
};

IntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitInterval(this);
	}
};

IntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.IntervalContext = IntervalContext;

SparkSqlParser.prototype.interval = function() {

    var localctx = new IntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 208, SparkSqlParser.RULE_interval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2699;
        this.match(SparkSqlParser.INTERVAL);
        this.state = 2702;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,343,this._ctx);
        if(la_===1) {
            this.state = 2700;
            this.errorCapturingMultiUnitsInterval();

        } else if(la_===2) {
            this.state = 2701;
            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 = SparkSqlParser.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 SparkSqlListener ) {
        listener.enterErrorCapturingMultiUnitsInterval(this);
	}
};

ErrorCapturingMultiUnitsIntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitErrorCapturingMultiUnitsInterval(this);
	}
};

ErrorCapturingMultiUnitsIntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitErrorCapturingMultiUnitsInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ErrorCapturingMultiUnitsIntervalContext = ErrorCapturingMultiUnitsIntervalContext;

SparkSqlParser.prototype.errorCapturingMultiUnitsInterval = function() {

    var localctx = new ErrorCapturingMultiUnitsIntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 210, SparkSqlParser.RULE_errorCapturingMultiUnitsInterval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2704;
        this.multiUnitsInterval();
        this.state = 2706;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,344,this._ctx);
        if(la_===1) {
            this.state = 2705;
            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 = SparkSqlParser.RULE_multiUnitsInterval;
    this._identifier = null; // IdentifierContext
    this.unit = []; // of IdentifierContexts
    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 SparkSqlListener ) {
        listener.enterMultiUnitsInterval(this);
	}
};

MultiUnitsIntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitMultiUnitsInterval(this);
	}
};

MultiUnitsIntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitMultiUnitsInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.MultiUnitsIntervalContext = MultiUnitsIntervalContext;

SparkSqlParser.prototype.multiUnitsInterval = function() {

    var localctx = new MultiUnitsIntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 212, SparkSqlParser.RULE_multiUnitsInterval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2711; 
        this._errHandler.sync(this);
        var _alt = 1;
        do {
        	switch (_alt) {
        	case 1:
        		this.state = 2708;
        		this.intervalValue();
        		this.state = 2709;
        		localctx._identifier = this.identifier();
        		localctx.unit.push(localctx._identifier);
        		break;
        	default:
        		throw new antlr4.error.NoViableAltException(this);
        	}
        	this.state = 2713; 
        	this._errHandler.sync(this);
        	_alt = this._interp.adaptivePredict(this._input,345, 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 = SparkSqlParser.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 SparkSqlListener ) {
        listener.enterErrorCapturingUnitToUnitInterval(this);
	}
};

ErrorCapturingUnitToUnitIntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitErrorCapturingUnitToUnitInterval(this);
	}
};

ErrorCapturingUnitToUnitIntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitErrorCapturingUnitToUnitInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ErrorCapturingUnitToUnitIntervalContext = ErrorCapturingUnitToUnitIntervalContext;

SparkSqlParser.prototype.errorCapturingUnitToUnitInterval = function() {

    var localctx = new ErrorCapturingUnitToUnitIntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 214, SparkSqlParser.RULE_errorCapturingUnitToUnitInterval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2715;
        localctx.body = this.unitToUnitInterval();
        this.state = 2718;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,346,this._ctx);
        if(la_===1) {
            this.state = 2716;
            localctx.error1 = this.multiUnitsInterval();

        } else if(la_===2) {
            this.state = 2717;
            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 = SparkSqlParser.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(SparkSqlParser.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 SparkSqlListener ) {
        listener.enterUnitToUnitInterval(this);
	}
};

UnitToUnitIntervalContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitUnitToUnitInterval(this);
	}
};

UnitToUnitIntervalContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitUnitToUnitInterval(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.UnitToUnitIntervalContext = UnitToUnitIntervalContext;

SparkSqlParser.prototype.unitToUnitInterval = function() {

    var localctx = new UnitToUnitIntervalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 216, SparkSqlParser.RULE_unitToUnitInterval);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2720;
        localctx.value = this.intervalValue();
        this.state = 2721;
        localctx.from = this.identifier();
        this.state = 2722;
        this.match(SparkSqlParser.TO);
        this.state = 2723;
        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 = SparkSqlParser.RULE_intervalValue;
    return this;
}

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

IntervalValueContext.prototype.INTEGER_VALUE = function() {
    return this.getToken(SparkSqlParser.INTEGER_VALUE, 0);
};

IntervalValueContext.prototype.DECIMAL_VALUE = function() {
    return this.getToken(SparkSqlParser.DECIMAL_VALUE, 0);
};

IntervalValueContext.prototype.PLUS = function() {
    return this.getToken(SparkSqlParser.PLUS, 0);
};

IntervalValueContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};

IntervalValueContext.prototype.STRING = function() {
    return this.getToken(SparkSqlParser.STRING, 0);
};

IntervalValueContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterIntervalValue(this);
	}
};

IntervalValueContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitIntervalValue(this);
	}
};

IntervalValueContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitIntervalValue(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.IntervalValueContext = IntervalValueContext;

SparkSqlParser.prototype.intervalValue = function() {

    var localctx = new IntervalValueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 218, SparkSqlParser.RULE_intervalValue);
    var _la = 0; // Token type
    try {
        this.state = 2730;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SparkSqlParser.PLUS:
        case SparkSqlParser.MINUS:
        case SparkSqlParser.INTEGER_VALUE:
        case SparkSqlParser.DECIMAL_VALUE:
            this.enterOuterAlt(localctx, 1);
            this.state = 2726;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.PLUS || _la===SparkSqlParser.MINUS) {
                this.state = 2725;
                _la = this._input.LA(1);
                if(!(_la===SparkSqlParser.PLUS || _la===SparkSqlParser.MINUS)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
            }

            this.state = 2728;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.INTEGER_VALUE || _la===SparkSqlParser.DECIMAL_VALUE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case SparkSqlParser.STRING:
            this.enterOuterAlt(localctx, 2);
            this.state = 2729;
            this.match(SparkSqlParser.STRING);
            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 ColPositionContext(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 = SparkSqlParser.RULE_colPosition;
    this.position = null; // Token
    this.afterCol = null; // ErrorCapturingIdentifierContext
    return this;
}

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

ColPositionContext.prototype.FIRST = function() {
    return this.getToken(SparkSqlParser.FIRST, 0);
};

ColPositionContext.prototype.AFTER = function() {
    return this.getToken(SparkSqlParser.AFTER, 0);
};

ColPositionContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};

ColPositionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterColPosition(this);
	}
};

ColPositionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitColPosition(this);
	}
};

ColPositionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitColPosition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ColPositionContext = ColPositionContext;

SparkSqlParser.prototype.colPosition = function() {

    var localctx = new ColPositionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 220, SparkSqlParser.RULE_colPosition);
    try {
        this.state = 2735;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SparkSqlParser.FIRST:
            this.enterOuterAlt(localctx, 1);
            this.state = 2732;
            localctx.position = this.match(SparkSqlParser.FIRST);
            break;
        case SparkSqlParser.AFTER:
            this.enterOuterAlt(localctx, 2);
            this.state = 2733;
            localctx.position = this.match(SparkSqlParser.AFTER);
            this.state = 2734;
            localctx.afterCol = this.errorCapturingIdentifier();
            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 DataTypeContext(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 = SparkSqlParser.RULE_dataType;
    return this;
}

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


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


function ComplexDataTypeContext(parser, ctx) {
	DataTypeContext.call(this, parser);
    this.complex = null; // Token;
    DataTypeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ComplexDataTypeContext.prototype = Object.create(DataTypeContext.prototype);
ComplexDataTypeContext.prototype.constructor = ComplexDataTypeContext;

SparkSqlParser.ComplexDataTypeContext = ComplexDataTypeContext;

ComplexDataTypeContext.prototype.LT = function() {
    return this.getToken(SparkSqlParser.LT, 0);
};

ComplexDataTypeContext.prototype.dataType = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(DataTypeContext);
    } else {
        return this.getTypedRuleContext(DataTypeContext,i);
    }
};

ComplexDataTypeContext.prototype.GT = function() {
    return this.getToken(SparkSqlParser.GT, 0);
};

ComplexDataTypeContext.prototype.ARRAY = function() {
    return this.getToken(SparkSqlParser.ARRAY, 0);
};

ComplexDataTypeContext.prototype.MAP = function() {
    return this.getToken(SparkSqlParser.MAP, 0);
};

ComplexDataTypeContext.prototype.STRUCT = function() {
    return this.getToken(SparkSqlParser.STRUCT, 0);
};

ComplexDataTypeContext.prototype.NEQ = function() {
    return this.getToken(SparkSqlParser.NEQ, 0);
};

ComplexDataTypeContext.prototype.complexColTypeList = function() {
    return this.getTypedRuleContext(ComplexColTypeListContext,0);
};
ComplexDataTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterComplexDataType(this);
	}
};

ComplexDataTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitComplexDataType(this);
	}
};

ComplexDataTypeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitComplexDataType(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function PrimitiveDataTypeContext(parser, ctx) {
	DataTypeContext.call(this, parser);
    DataTypeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PrimitiveDataTypeContext.prototype = Object.create(DataTypeContext.prototype);
PrimitiveDataTypeContext.prototype.constructor = PrimitiveDataTypeContext;

SparkSqlParser.PrimitiveDataTypeContext = PrimitiveDataTypeContext;

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

PrimitiveDataTypeContext.prototype.INTEGER_VALUE = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.INTEGER_VALUE);
    } else {
        return this.getToken(SparkSqlParser.INTEGER_VALUE, i);
    }
};

PrimitiveDataTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterPrimitiveDataType(this);
	}
};

PrimitiveDataTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitPrimitiveDataType(this);
	}
};

PrimitiveDataTypeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitPrimitiveDataType(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.DataTypeContext = DataTypeContext;

SparkSqlParser.prototype.dataType = function() {

    var localctx = new DataTypeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 222, SparkSqlParser.RULE_dataType);
    var _la = 0; // Token type
    try {
        this.state = 2771;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,354,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ComplexDataTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2737;
            localctx.complex = this.match(SparkSqlParser.ARRAY);
            this.state = 2738;
            this.match(SparkSqlParser.LT);
            this.state = 2739;
            this.dataType();
            this.state = 2740;
            this.match(SparkSqlParser.GT);
            break;

        case 2:
            localctx = new ComplexDataTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2742;
            localctx.complex = this.match(SparkSqlParser.MAP);
            this.state = 2743;
            this.match(SparkSqlParser.LT);
            this.state = 2744;
            this.dataType();
            this.state = 2745;
            this.match(SparkSqlParser.T__2);
            this.state = 2746;
            this.dataType();
            this.state = 2747;
            this.match(SparkSqlParser.GT);
            break;

        case 3:
            localctx = new ComplexDataTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2749;
            localctx.complex = this.match(SparkSqlParser.STRUCT);
            this.state = 2756;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case SparkSqlParser.LT:
                this.state = 2750;
                this.match(SparkSqlParser.LT);
                this.state = 2752;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,350,this._ctx);
                if(la_===1) {
                    this.state = 2751;
                    this.complexColTypeList();

                }
                this.state = 2754;
                this.match(SparkSqlParser.GT);
                break;
            case SparkSqlParser.NEQ:
                this.state = 2755;
                this.match(SparkSqlParser.NEQ);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;

        case 4:
            localctx = new PrimitiveDataTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2758;
            this.identifier();
            this.state = 2769;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,353,this._ctx);
            if(la_===1) {
                this.state = 2759;
                this.match(SparkSqlParser.T__0);
                this.state = 2760;
                this.match(SparkSqlParser.INTEGER_VALUE);
                this.state = 2765;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===SparkSqlParser.T__2) {
                    this.state = 2761;
                    this.match(SparkSqlParser.T__2);
                    this.state = 2762;
                    this.match(SparkSqlParser.INTEGER_VALUE);
                    this.state = 2767;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
                this.state = 2768;
                this.match(SparkSqlParser.T__1);

            }
            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 QualifiedColTypeWithPositionListContext(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 = SparkSqlParser.RULE_qualifiedColTypeWithPositionList;
    return this;
}

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

QualifiedColTypeWithPositionListContext.prototype.qualifiedColTypeWithPosition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(QualifiedColTypeWithPositionContext);
    } else {
        return this.getTypedRuleContext(QualifiedColTypeWithPositionContext,i);
    }
};

QualifiedColTypeWithPositionListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQualifiedColTypeWithPositionList(this);
	}
};

QualifiedColTypeWithPositionListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQualifiedColTypeWithPositionList(this);
	}
};

QualifiedColTypeWithPositionListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQualifiedColTypeWithPositionList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.QualifiedColTypeWithPositionListContext = QualifiedColTypeWithPositionListContext;

SparkSqlParser.prototype.qualifiedColTypeWithPositionList = function() {

    var localctx = new QualifiedColTypeWithPositionListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 224, SparkSqlParser.RULE_qualifiedColTypeWithPositionList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2773;
        this.qualifiedColTypeWithPosition();
        this.state = 2778;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 2774;
            this.match(SparkSqlParser.T__2);
            this.state = 2775;
            this.qualifiedColTypeWithPosition();
            this.state = 2780;
            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 QualifiedColTypeWithPositionContext(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 = SparkSqlParser.RULE_qualifiedColTypeWithPosition;
    this.name = null; // MultipartIdentifierContext
    return this;
}

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

QualifiedColTypeWithPositionContext.prototype.dataType = function() {
    return this.getTypedRuleContext(DataTypeContext,0);
};

QualifiedColTypeWithPositionContext.prototype.multipartIdentifier = function() {
    return this.getTypedRuleContext(MultipartIdentifierContext,0);
};

QualifiedColTypeWithPositionContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

QualifiedColTypeWithPositionContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};

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

QualifiedColTypeWithPositionContext.prototype.colPosition = function() {
    return this.getTypedRuleContext(ColPositionContext,0);
};

QualifiedColTypeWithPositionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQualifiedColTypeWithPosition(this);
	}
};

QualifiedColTypeWithPositionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQualifiedColTypeWithPosition(this);
	}
};

QualifiedColTypeWithPositionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQualifiedColTypeWithPosition(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.QualifiedColTypeWithPositionContext = QualifiedColTypeWithPositionContext;

SparkSqlParser.prototype.qualifiedColTypeWithPosition = function() {

    var localctx = new QualifiedColTypeWithPositionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 226, SparkSqlParser.RULE_qualifiedColTypeWithPosition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2781;
        localctx.name = this.multipartIdentifier();
        this.state = 2782;
        this.dataType();
        this.state = 2785;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.NOT) {
            this.state = 2783;
            this.match(SparkSqlParser.NOT);
            this.state = 2784;
            this.match(SparkSqlParser.NULL);
        }

        this.state = 2788;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,357,this._ctx);
        if(la_===1) {
            this.state = 2787;
            this.commentSpec();

        }
        this.state = 2791;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.AFTER || _la===SparkSqlParser.FIRST) {
            this.state = 2790;
            this.colPosition();
        }

    } 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 ColTypeListContext(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 = SparkSqlParser.RULE_colTypeList;
    return this;
}

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

ColTypeListContext.prototype.colType = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ColTypeContext);
    } else {
        return this.getTypedRuleContext(ColTypeContext,i);
    }
};

ColTypeListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterColTypeList(this);
	}
};

ColTypeListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitColTypeList(this);
	}
};

ColTypeListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitColTypeList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ColTypeListContext = ColTypeListContext;

SparkSqlParser.prototype.colTypeList = function() {

    var localctx = new ColTypeListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 228, SparkSqlParser.RULE_colTypeList);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2793;
        this.colType();
        this.state = 2798;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,359,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2794;
                this.match(SparkSqlParser.T__2);
                this.state = 2795;
                this.colType(); 
            }
            this.state = 2800;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,359,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 ColTypeContext(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 = SparkSqlParser.RULE_colType;
    this.colName = null; // ErrorCapturingIdentifierContext
    return this;
}

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

ColTypeContext.prototype.dataType = function() {
    return this.getTypedRuleContext(DataTypeContext,0);
};

ColTypeContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};

ColTypeContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

ColTypeContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};

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

ColTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterColType(this);
	}
};

ColTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitColType(this);
	}
};

ColTypeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitColType(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ColTypeContext = ColTypeContext;

SparkSqlParser.prototype.colType = function() {

    var localctx = new ColTypeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 230, SparkSqlParser.RULE_colType);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2801;
        localctx.colName = this.errorCapturingIdentifier();
        this.state = 2802;
        this.dataType();
        this.state = 2805;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,360,this._ctx);
        if(la_===1) {
            this.state = 2803;
            this.match(SparkSqlParser.NOT);
            this.state = 2804;
            this.match(SparkSqlParser.NULL);

        }
        this.state = 2808;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,361,this._ctx);
        if(la_===1) {
            this.state = 2807;
            this.commentSpec();

        }
    } 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 ComplexColTypeListContext(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 = SparkSqlParser.RULE_complexColTypeList;
    return this;
}

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

ComplexColTypeListContext.prototype.complexColType = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ComplexColTypeContext);
    } else {
        return this.getTypedRuleContext(ComplexColTypeContext,i);
    }
};

ComplexColTypeListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterComplexColTypeList(this);
	}
};

ComplexColTypeListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitComplexColTypeList(this);
	}
};

ComplexColTypeListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitComplexColTypeList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ComplexColTypeListContext = ComplexColTypeListContext;

SparkSqlParser.prototype.complexColTypeList = function() {

    var localctx = new ComplexColTypeListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 232, SparkSqlParser.RULE_complexColTypeList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2810;
        this.complexColType();
        this.state = 2815;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 2811;
            this.match(SparkSqlParser.T__2);
            this.state = 2812;
            this.complexColType();
            this.state = 2817;
            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 ComplexColTypeContext(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 = SparkSqlParser.RULE_complexColType;
    return this;
}

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

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

ComplexColTypeContext.prototype.dataType = function() {
    return this.getTypedRuleContext(DataTypeContext,0);
};

ComplexColTypeContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

ComplexColTypeContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};

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

ComplexColTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterComplexColType(this);
	}
};

ComplexColTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitComplexColType(this);
	}
};

ComplexColTypeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitComplexColType(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ComplexColTypeContext = ComplexColTypeContext;

SparkSqlParser.prototype.complexColType = function() {

    var localctx = new ComplexColTypeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 234, SparkSqlParser.RULE_complexColType);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2818;
        this.identifier();
        this.state = 2819;
        this.match(SparkSqlParser.T__9);
        this.state = 2820;
        this.dataType();
        this.state = 2823;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.NOT) {
            this.state = 2821;
            this.match(SparkSqlParser.NOT);
            this.state = 2822;
            this.match(SparkSqlParser.NULL);
        }

        this.state = 2826;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SparkSqlParser.COMMENT) {
            this.state = 2825;
            this.commentSpec();
        }

    } 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 = SparkSqlParser.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(SparkSqlParser.WHEN, 0);
};

WhenClauseContext.prototype.THEN = function() {
    return this.getToken(SparkSqlParser.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 SparkSqlListener ) {
        listener.enterWhenClause(this);
	}
};

WhenClauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitWhenClause(this);
	}
};

WhenClauseContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitWhenClause(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.WhenClauseContext = WhenClauseContext;

SparkSqlParser.prototype.whenClause = function() {

    var localctx = new WhenClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 236, SparkSqlParser.RULE_whenClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2828;
        this.match(SparkSqlParser.WHEN);
        this.state = 2829;
        localctx.condition = this.expression();
        this.state = 2830;
        this.match(SparkSqlParser.THEN);
        this.state = 2831;
        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 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 = SparkSqlParser.RULE_windowClause;
    return this;
}

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

WindowClauseContext.prototype.WINDOW = function() {
    return this.getToken(SparkSqlParser.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.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterWindowClause(this);
	}
};

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

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




SparkSqlParser.WindowClauseContext = WindowClauseContext;

SparkSqlParser.prototype.windowClause = function() {

    var localctx = new WindowClauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 238, SparkSqlParser.RULE_windowClause);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2833;
        this.match(SparkSqlParser.WINDOW);
        this.state = 2834;
        this.namedWindow();
        this.state = 2839;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,365,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2835;
                this.match(SparkSqlParser.T__2);
                this.state = 2836;
                this.namedWindow(); 
            }
            this.state = 2841;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,365,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 = SparkSqlParser.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(SparkSqlParser.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 SparkSqlListener ) {
        listener.enterNamedWindow(this);
	}
};

NamedWindowContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNamedWindow(this);
	}
};

NamedWindowContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNamedWindow(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.NamedWindowContext = NamedWindowContext;

SparkSqlParser.prototype.namedWindow = function() {

    var localctx = new NamedWindowContext(this, this._ctx, this.state);
    this.enterRule(localctx, 240, SparkSqlParser.RULE_namedWindow);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2842;
        localctx.name = this.errorCapturingIdentifier();
        this.state = 2843;
        this.match(SparkSqlParser.AS);
        this.state = 2844;
        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 = SparkSqlParser.RULE_windowSpec;
    return this;
}

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


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


function WindowRefContext(parser, ctx) {
	WindowSpecContext.call(this, parser);
    this.name = null; // ErrorCapturingIdentifierContext;
    WindowSpecContext.prototype.copyFrom.call(this, ctx);
    return this;
}

WindowRefContext.prototype = Object.create(WindowSpecContext.prototype);
WindowRefContext.prototype.constructor = WindowRefContext;

SparkSqlParser.WindowRefContext = WindowRefContext;

WindowRefContext.prototype.errorCapturingIdentifier = function() {
    return this.getTypedRuleContext(ErrorCapturingIdentifierContext,0);
};
WindowRefContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterWindowRef(this);
	}
};

WindowRefContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitWindowRef(this);
	}
};

WindowRefContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitWindowRef(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function WindowDefContext(parser, ctx) {
	WindowSpecContext.call(this, parser);
    this._expression = null; // ExpressionContext;
    this.partition = []; // of ExpressionContexts;
    WindowSpecContext.prototype.copyFrom.call(this, ctx);
    return this;
}

WindowDefContext.prototype = Object.create(WindowSpecContext.prototype);
WindowDefContext.prototype.constructor = WindowDefContext;

SparkSqlParser.WindowDefContext = WindowDefContext;

WindowDefContext.prototype.CLUSTER = function() {
    return this.getToken(SparkSqlParser.CLUSTER, 0);
};

WindowDefContext.prototype.BY = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.BY);
    } else {
        return this.getToken(SparkSqlParser.BY, i);
    }
};


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

WindowDefContext.prototype.windowFrame = function() {
    return this.getTypedRuleContext(WindowFrameContext,0);
};

WindowDefContext.prototype.sortItem = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(SortItemContext);
    } else {
        return this.getTypedRuleContext(SortItemContext,i);
    }
};

WindowDefContext.prototype.PARTITION = function() {
    return this.getToken(SparkSqlParser.PARTITION, 0);
};

WindowDefContext.prototype.DISTRIBUTE = function() {
    return this.getToken(SparkSqlParser.DISTRIBUTE, 0);
};

WindowDefContext.prototype.ORDER = function() {
    return this.getToken(SparkSqlParser.ORDER, 0);
};

WindowDefContext.prototype.SORT = function() {
    return this.getToken(SparkSqlParser.SORT, 0);
};
WindowDefContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterWindowDef(this);
	}
};

WindowDefContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitWindowDef(this);
	}
};

WindowDefContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitWindowDef(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.WindowSpecContext = WindowSpecContext;

SparkSqlParser.prototype.windowSpec = function() {

    var localctx = new WindowSpecContext(this, this._ctx, this.state);
    this.enterRule(localctx, 242, SparkSqlParser.RULE_windowSpec);
    var _la = 0; // Token type
    try {
        this.state = 2892;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,373,this._ctx);
        switch(la_) {
        case 1:
            localctx = new WindowRefContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2846;
            localctx.name = this.errorCapturingIdentifier();
            break;

        case 2:
            localctx = new WindowRefContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2847;
            this.match(SparkSqlParser.T__0);
            this.state = 2848;
            localctx.name = this.errorCapturingIdentifier();
            this.state = 2849;
            this.match(SparkSqlParser.T__1);
            break;

        case 3:
            localctx = new WindowDefContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2851;
            this.match(SparkSqlParser.T__0);
            this.state = 2886;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case SparkSqlParser.CLUSTER:
                this.state = 2852;
                this.match(SparkSqlParser.CLUSTER);
                this.state = 2853;
                this.match(SparkSqlParser.BY);
                this.state = 2854;
                localctx._expression = this.expression();
                localctx.partition.push(localctx._expression);
                this.state = 2859;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===SparkSqlParser.T__2) {
                    this.state = 2855;
                    this.match(SparkSqlParser.T__2);
                    this.state = 2856;
                    localctx._expression = this.expression();
                    localctx.partition.push(localctx._expression);
                    this.state = 2861;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
                break;
            case SparkSqlParser.T__1:
            case SparkSqlParser.DISTRIBUTE:
            case SparkSqlParser.ORDER:
            case SparkSqlParser.PARTITION:
            case SparkSqlParser.RANGE:
            case SparkSqlParser.ROWS:
            case SparkSqlParser.SORT:
                this.state = 2872;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.DISTRIBUTE || _la===SparkSqlParser.PARTITION) {
                    this.state = 2862;
                    _la = this._input.LA(1);
                    if(!(_la===SparkSqlParser.DISTRIBUTE || _la===SparkSqlParser.PARTITION)) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 2863;
                    this.match(SparkSqlParser.BY);
                    this.state = 2864;
                    localctx._expression = this.expression();
                    localctx.partition.push(localctx._expression);
                    this.state = 2869;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                    while(_la===SparkSqlParser.T__2) {
                        this.state = 2865;
                        this.match(SparkSqlParser.T__2);
                        this.state = 2866;
                        localctx._expression = this.expression();
                        localctx.partition.push(localctx._expression);
                        this.state = 2871;
                        this._errHandler.sync(this);
                        _la = this._input.LA(1);
                    }
                }

                this.state = 2884;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SparkSqlParser.ORDER || _la===SparkSqlParser.SORT) {
                    this.state = 2874;
                    _la = this._input.LA(1);
                    if(!(_la===SparkSqlParser.ORDER || _la===SparkSqlParser.SORT)) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 2875;
                    this.match(SparkSqlParser.BY);
                    this.state = 2876;
                    this.sortItem();
                    this.state = 2881;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                    while(_la===SparkSqlParser.T__2) {
                        this.state = 2877;
                        this.match(SparkSqlParser.T__2);
                        this.state = 2878;
                        this.sortItem();
                        this.state = 2883;
                        this._errHandler.sync(this);
                        _la = this._input.LA(1);
                    }
                }

                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 2889;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.RANGE || _la===SparkSqlParser.ROWS) {
                this.state = 2888;
                this.windowFrame();
            }

            this.state = 2891;
            this.match(SparkSqlParser.T__1);
            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 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 = SparkSqlParser.RULE_windowFrame;
    this.frameType = null; // Token
    this.start = null; // FrameBoundContext
    this.end = null; // FrameBoundContext
    return this;
}

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

WindowFrameContext.prototype.RANGE = function() {
    return this.getToken(SparkSqlParser.RANGE, 0);
};

WindowFrameContext.prototype.frameBound = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(FrameBoundContext);
    } else {
        return this.getTypedRuleContext(FrameBoundContext,i);
    }
};

WindowFrameContext.prototype.ROWS = function() {
    return this.getToken(SparkSqlParser.ROWS, 0);
};

WindowFrameContext.prototype.BETWEEN = function() {
    return this.getToken(SparkSqlParser.BETWEEN, 0);
};

WindowFrameContext.prototype.AND = function() {
    return this.getToken(SparkSqlParser.AND, 0);
};

WindowFrameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterWindowFrame(this);
	}
};

WindowFrameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitWindowFrame(this);
	}
};

WindowFrameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitWindowFrame(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.WindowFrameContext = WindowFrameContext;

SparkSqlParser.prototype.windowFrame = function() {

    var localctx = new WindowFrameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 244, SparkSqlParser.RULE_windowFrame);
    try {
        this.state = 2910;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,374,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2894;
            localctx.frameType = this.match(SparkSqlParser.RANGE);
            this.state = 2895;
            localctx.start = this.frameBound();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2896;
            localctx.frameType = this.match(SparkSqlParser.ROWS);
            this.state = 2897;
            localctx.start = this.frameBound();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2898;
            localctx.frameType = this.match(SparkSqlParser.RANGE);
            this.state = 2899;
            this.match(SparkSqlParser.BETWEEN);
            this.state = 2900;
            localctx.start = this.frameBound();
            this.state = 2901;
            this.match(SparkSqlParser.AND);
            this.state = 2902;
            localctx.end = this.frameBound();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2904;
            localctx.frameType = this.match(SparkSqlParser.ROWS);
            this.state = 2905;
            this.match(SparkSqlParser.BETWEEN);
            this.state = 2906;
            localctx.start = this.frameBound();
            this.state = 2907;
            this.match(SparkSqlParser.AND);
            this.state = 2908;
            localctx.end = this.frameBound();
            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 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 = SparkSqlParser.RULE_frameBound;
    this.boundType = null; // Token
    return this;
}

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

FrameBoundContext.prototype.UNBOUNDED = function() {
    return this.getToken(SparkSqlParser.UNBOUNDED, 0);
};

FrameBoundContext.prototype.PRECEDING = function() {
    return this.getToken(SparkSqlParser.PRECEDING, 0);
};

FrameBoundContext.prototype.FOLLOWING = function() {
    return this.getToken(SparkSqlParser.FOLLOWING, 0);
};

FrameBoundContext.prototype.ROW = function() {
    return this.getToken(SparkSqlParser.ROW, 0);
};

FrameBoundContext.prototype.CURRENT = function() {
    return this.getToken(SparkSqlParser.CURRENT, 0);
};

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

FrameBoundContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFrameBound(this);
	}
};

FrameBoundContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFrameBound(this);
	}
};

FrameBoundContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitFrameBound(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.FrameBoundContext = FrameBoundContext;

SparkSqlParser.prototype.frameBound = function() {

    var localctx = new FrameBoundContext(this, this._ctx, this.state);
    this.enterRule(localctx, 246, SparkSqlParser.RULE_frameBound);
    var _la = 0; // Token type
    try {
        this.state = 2919;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,375,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2912;
            this.match(SparkSqlParser.UNBOUNDED);
            this.state = 2913;
            localctx.boundType = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.FOLLOWING || _la===SparkSqlParser.PRECEDING)) {
                localctx.boundType = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2914;
            localctx.boundType = this.match(SparkSqlParser.CURRENT);
            this.state = 2915;
            this.match(SparkSqlParser.ROW);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2916;
            this.expression();
            this.state = 2917;
            localctx.boundType = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.FOLLOWING || _la===SparkSqlParser.PRECEDING)) {
                localctx.boundType = 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 QualifiedNameListContext(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 = SparkSqlParser.RULE_qualifiedNameList;
    return this;
}

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

QualifiedNameListContext.prototype.qualifiedName = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(QualifiedNameContext);
    } else {
        return this.getTypedRuleContext(QualifiedNameContext,i);
    }
};

QualifiedNameListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQualifiedNameList(this);
	}
};

QualifiedNameListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQualifiedNameList(this);
	}
};

QualifiedNameListContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQualifiedNameList(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.QualifiedNameListContext = QualifiedNameListContext;

SparkSqlParser.prototype.qualifiedNameList = function() {

    var localctx = new QualifiedNameListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 248, SparkSqlParser.RULE_qualifiedNameList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2921;
        this.qualifiedName();
        this.state = 2926;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SparkSqlParser.T__2) {
            this.state = 2922;
            this.match(SparkSqlParser.T__2);
            this.state = 2923;
            this.qualifiedName();
            this.state = 2928;
            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 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 = SparkSqlParser.RULE_functionName;
    return this;
}

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

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

FunctionNameContext.prototype.FILTER = function() {
    return this.getToken(SparkSqlParser.FILTER, 0);
};

FunctionNameContext.prototype.LEFT = function() {
    return this.getToken(SparkSqlParser.LEFT, 0);
};

FunctionNameContext.prototype.RIGHT = function() {
    return this.getToken(SparkSqlParser.RIGHT, 0);
};

FunctionNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFunctionName(this);
	}
};

FunctionNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFunctionName(this);
	}
};

FunctionNameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitFunctionName(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.FunctionNameContext = FunctionNameContext;

SparkSqlParser.prototype.functionName = function() {

    var localctx = new FunctionNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 250, SparkSqlParser.RULE_functionName);
    try {
        this.state = 2933;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,377,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2929;
            this.qualifiedName();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2930;
            this.match(SparkSqlParser.FILTER);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2931;
            this.match(SparkSqlParser.LEFT);
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2932;
            this.match(SparkSqlParser.RIGHT);
            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 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 = SparkSqlParser.RULE_qualifiedName;
    return this;
}

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

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

QualifiedNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQualifiedName(this);
	}
};

QualifiedNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQualifiedName(this);
	}
};

QualifiedNameContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQualifiedName(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.QualifiedNameContext = QualifiedNameContext;

SparkSqlParser.prototype.qualifiedName = function() {

    var localctx = new QualifiedNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 252, SparkSqlParser.RULE_qualifiedName);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2935;
        this.identifier();
        this.state = 2940;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,378,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2936;
                this.match(SparkSqlParser.T__3);
                this.state = 2937;
                this.identifier(); 
            }
            this.state = 2942;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,378,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 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 = SparkSqlParser.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 SparkSqlListener ) {
        listener.enterErrorCapturingIdentifier(this);
	}
};

ErrorCapturingIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitErrorCapturingIdentifier(this);
	}
};

ErrorCapturingIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitErrorCapturingIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.ErrorCapturingIdentifierContext = ErrorCapturingIdentifierContext;

SparkSqlParser.prototype.errorCapturingIdentifier = function() {

    var localctx = new ErrorCapturingIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 254, SparkSqlParser.RULE_errorCapturingIdentifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2943;
        this.identifier();
        this.state = 2944;
        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 = SparkSqlParser.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;

SparkSqlParser.ErrorIdentContext = ErrorIdentContext;

ErrorIdentContext.prototype.MINUS = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SparkSqlParser.MINUS);
    } else {
        return this.getToken(SparkSqlParser.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 SparkSqlListener ) {
        listener.enterErrorIdent(this);
	}
};

ErrorIdentContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitErrorIdent(this);
	}
};

ErrorIdentContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        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;

SparkSqlParser.RealIdentContext = RealIdentContext;

RealIdentContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterRealIdent(this);
	}
};

RealIdentContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitRealIdent(this);
	}
};

RealIdentContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitRealIdent(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.ErrorCapturingIdentifierExtraContext = ErrorCapturingIdentifierExtraContext;

SparkSqlParser.prototype.errorCapturingIdentifierExtra = function() {

    var localctx = new ErrorCapturingIdentifierExtraContext(this, this._ctx, this.state);
    this.enterRule(localctx, 256, SparkSqlParser.RULE_errorCapturingIdentifierExtra);
    try {
        this.state = 2953;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,380,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ErrorIdentContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2948; 
            this._errHandler.sync(this);
            var _alt = 1;
            do {
            	switch (_alt) {
            	case 1:
            		this.state = 2946;
            		this.match(SparkSqlParser.MINUS);
            		this.state = 2947;
            		this.identifier();
            		break;
            	default:
            		throw new antlr4.error.NoViableAltException(this);
            	}
            	this.state = 2950; 
            	this._errHandler.sync(this);
            	_alt = this._interp.adaptivePredict(this._input,379, this._ctx);
            } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
            break;

        case 2:
            localctx = new RealIdentContext(this, localctx);
            this.enterOuterAlt(localctx, 2);

            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 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 = SparkSqlParser.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 SparkSqlListener ) {
        listener.enterIdentifier(this);
	}
};

IdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitIdentifier(this);
	}
};

IdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.IdentifierContext = IdentifierContext;

SparkSqlParser.prototype.identifier = function() {

    var localctx = new IdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 258, SparkSqlParser.RULE_identifier);
    try {
        this.state = 2958;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,381,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2955;
            this.strictIdentifier();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2956;
            if (!( !SQL_standard_keyword_behavior)) {
                throw new antlr4.error.FailedPredicateException(this, "!SQL_standard_keyword_behavior");
            }
            this.state = 2957;
            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 = SparkSqlParser.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;

SparkSqlParser.QuotedIdentifierAlternativeContext = QuotedIdentifierAlternativeContext;

QuotedIdentifierAlternativeContext.prototype.quotedIdentifier = function() {
    return this.getTypedRuleContext(QuotedIdentifierContext,0);
};
QuotedIdentifierAlternativeContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQuotedIdentifierAlternative(this);
	}
};

QuotedIdentifierAlternativeContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQuotedIdentifierAlternative(this);
	}
};

QuotedIdentifierAlternativeContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQuotedIdentifierAlternative(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function UnquotedIdentifierContext(parser, ctx) {
	StrictIdentifierContext.call(this, parser);
    StrictIdentifierContext.prototype.copyFrom.call(this, ctx);
    return this;
}

UnquotedIdentifierContext.prototype = Object.create(StrictIdentifierContext.prototype);
UnquotedIdentifierContext.prototype.constructor = UnquotedIdentifierContext;

SparkSqlParser.UnquotedIdentifierContext = UnquotedIdentifierContext;

UnquotedIdentifierContext.prototype.IDENTIFIER = function() {
    return this.getToken(SparkSqlParser.IDENTIFIER, 0);
};

UnquotedIdentifierContext.prototype.ansiNonReserved = function() {
    return this.getTypedRuleContext(AnsiNonReservedContext,0);
};

UnquotedIdentifierContext.prototype.nonReserved = function() {
    return this.getTypedRuleContext(NonReservedContext,0);
};
UnquotedIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterUnquotedIdentifier(this);
	}
};

UnquotedIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitUnquotedIdentifier(this);
	}
};

UnquotedIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitUnquotedIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.StrictIdentifierContext = StrictIdentifierContext;

SparkSqlParser.prototype.strictIdentifier = function() {

    var localctx = new StrictIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 260, SparkSqlParser.RULE_strictIdentifier);
    try {
        this.state = 2966;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,382,this._ctx);
        switch(la_) {
        case 1:
            localctx = new UnquotedIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2960;
            this.match(SparkSqlParser.IDENTIFIER);
            break;

        case 2:
            localctx = new QuotedIdentifierAlternativeContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2961;
            this.quotedIdentifier();
            break;

        case 3:
            localctx = new UnquotedIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2962;
            if (!( SQL_standard_keyword_behavior)) {
                throw new antlr4.error.FailedPredicateException(this, "SQL_standard_keyword_behavior");
            }
            this.state = 2963;
            this.ansiNonReserved();
            break;

        case 4:
            localctx = new UnquotedIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2964;
            if (!( !SQL_standard_keyword_behavior)) {
                throw new antlr4.error.FailedPredicateException(this, "!SQL_standard_keyword_behavior");
            }
            this.state = 2965;
            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 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 = SparkSqlParser.RULE_quotedIdentifier;
    return this;
}

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

QuotedIdentifierContext.prototype.BACKQUOTED_IDENTIFIER = function() {
    return this.getToken(SparkSqlParser.BACKQUOTED_IDENTIFIER, 0);
};

QuotedIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterQuotedIdentifier(this);
	}
};

QuotedIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitQuotedIdentifier(this);
	}
};

QuotedIdentifierContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitQuotedIdentifier(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.QuotedIdentifierContext = QuotedIdentifierContext;

SparkSqlParser.prototype.quotedIdentifier = function() {

    var localctx = new QuotedIdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 262, SparkSqlParser.RULE_quotedIdentifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2968;
        this.match(SparkSqlParser.BACKQUOTED_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 NumberContext(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 = SparkSqlParser.RULE_number;
    return this;
}

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


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


function DecimalLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DecimalLiteralContext.prototype = Object.create(NumberContext.prototype);
DecimalLiteralContext.prototype.constructor = DecimalLiteralContext;

SparkSqlParser.DecimalLiteralContext = DecimalLiteralContext;

DecimalLiteralContext.prototype.DECIMAL_VALUE = function() {
    return this.getToken(SparkSqlParser.DECIMAL_VALUE, 0);
};

DecimalLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
DecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDecimalLiteral(this);
	}
};

DecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDecimalLiteral(this);
	}
};

DecimalLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDecimalLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function BigIntLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

BigIntLiteralContext.prototype = Object.create(NumberContext.prototype);
BigIntLiteralContext.prototype.constructor = BigIntLiteralContext;

SparkSqlParser.BigIntLiteralContext = BigIntLiteralContext;

BigIntLiteralContext.prototype.BIGINT_LITERAL = function() {
    return this.getToken(SparkSqlParser.BIGINT_LITERAL, 0);
};

BigIntLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
BigIntLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterBigIntLiteral(this);
	}
};

BigIntLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitBigIntLiteral(this);
	}
};

BigIntLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitBigIntLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function TinyIntLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TinyIntLiteralContext.prototype = Object.create(NumberContext.prototype);
TinyIntLiteralContext.prototype.constructor = TinyIntLiteralContext;

SparkSqlParser.TinyIntLiteralContext = TinyIntLiteralContext;

TinyIntLiteralContext.prototype.TINYINT_LITERAL = function() {
    return this.getToken(SparkSqlParser.TINYINT_LITERAL, 0);
};

TinyIntLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
TinyIntLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterTinyIntLiteral(this);
	}
};

TinyIntLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitTinyIntLiteral(this);
	}
};

TinyIntLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitTinyIntLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function LegacyDecimalLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LegacyDecimalLiteralContext.prototype = Object.create(NumberContext.prototype);
LegacyDecimalLiteralContext.prototype.constructor = LegacyDecimalLiteralContext;

SparkSqlParser.LegacyDecimalLiteralContext = LegacyDecimalLiteralContext;

LegacyDecimalLiteralContext.prototype.EXPONENT_VALUE = function() {
    return this.getToken(SparkSqlParser.EXPONENT_VALUE, 0);
};

LegacyDecimalLiteralContext.prototype.DECIMAL_VALUE = function() {
    return this.getToken(SparkSqlParser.DECIMAL_VALUE, 0);
};

LegacyDecimalLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
LegacyDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterLegacyDecimalLiteral(this);
	}
};

LegacyDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitLegacyDecimalLiteral(this);
	}
};

LegacyDecimalLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitLegacyDecimalLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function BigDecimalLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

BigDecimalLiteralContext.prototype = Object.create(NumberContext.prototype);
BigDecimalLiteralContext.prototype.constructor = BigDecimalLiteralContext;

SparkSqlParser.BigDecimalLiteralContext = BigDecimalLiteralContext;

BigDecimalLiteralContext.prototype.BIGDECIMAL_LITERAL = function() {
    return this.getToken(SparkSqlParser.BIGDECIMAL_LITERAL, 0);
};

BigDecimalLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
BigDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterBigDecimalLiteral(this);
	}
};

BigDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitBigDecimalLiteral(this);
	}
};

BigDecimalLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitBigDecimalLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function ExponentLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ExponentLiteralContext.prototype = Object.create(NumberContext.prototype);
ExponentLiteralContext.prototype.constructor = ExponentLiteralContext;

SparkSqlParser.ExponentLiteralContext = ExponentLiteralContext;

ExponentLiteralContext.prototype.EXPONENT_VALUE = function() {
    return this.getToken(SparkSqlParser.EXPONENT_VALUE, 0);
};

ExponentLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
ExponentLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterExponentLiteral(this);
	}
};

ExponentLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitExponentLiteral(this);
	}
};

ExponentLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitExponentLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function DoubleLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DoubleLiteralContext.prototype = Object.create(NumberContext.prototype);
DoubleLiteralContext.prototype.constructor = DoubleLiteralContext;

SparkSqlParser.DoubleLiteralContext = DoubleLiteralContext;

DoubleLiteralContext.prototype.DOUBLE_LITERAL = function() {
    return this.getToken(SparkSqlParser.DOUBLE_LITERAL, 0);
};

DoubleLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
DoubleLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterDoubleLiteral(this);
	}
};

DoubleLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitDoubleLiteral(this);
	}
};

DoubleLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitDoubleLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function IntegerLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IntegerLiteralContext.prototype = Object.create(NumberContext.prototype);
IntegerLiteralContext.prototype.constructor = IntegerLiteralContext;

SparkSqlParser.IntegerLiteralContext = IntegerLiteralContext;

IntegerLiteralContext.prototype.INTEGER_VALUE = function() {
    return this.getToken(SparkSqlParser.INTEGER_VALUE, 0);
};

IntegerLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
IntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterIntegerLiteral(this);
	}
};

IntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitIntegerLiteral(this);
	}
};

IntegerLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitIntegerLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function FloatLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

FloatLiteralContext.prototype = Object.create(NumberContext.prototype);
FloatLiteralContext.prototype.constructor = FloatLiteralContext;

SparkSqlParser.FloatLiteralContext = FloatLiteralContext;

FloatLiteralContext.prototype.FLOAT_LITERAL = function() {
    return this.getToken(SparkSqlParser.FLOAT_LITERAL, 0);
};

FloatLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
FloatLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterFloatLiteral(this);
	}
};

FloatLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitFloatLiteral(this);
	}
};

FloatLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitFloatLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};


function SmallIntLiteralContext(parser, ctx) {
	NumberContext.call(this, parser);
    NumberContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SmallIntLiteralContext.prototype = Object.create(NumberContext.prototype);
SmallIntLiteralContext.prototype.constructor = SmallIntLiteralContext;

SparkSqlParser.SmallIntLiteralContext = SmallIntLiteralContext;

SmallIntLiteralContext.prototype.SMALLINT_LITERAL = function() {
    return this.getToken(SparkSqlParser.SMALLINT_LITERAL, 0);
};

SmallIntLiteralContext.prototype.MINUS = function() {
    return this.getToken(SparkSqlParser.MINUS, 0);
};
SmallIntLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterSmallIntLiteral(this);
	}
};

SmallIntLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitSmallIntLiteral(this);
	}
};

SmallIntLiteralContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitSmallIntLiteral(this);
    } else {
        return visitor.visitChildren(this);
    }
};



SparkSqlParser.NumberContext = NumberContext;

SparkSqlParser.prototype.number = function() {

    var localctx = new NumberContext(this, this._ctx, this.state);
    this.enterRule(localctx, 264, SparkSqlParser.RULE_number);
    var _la = 0; // Token type
    try {
        this.state = 3013;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,393,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ExponentLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2970;
            if (!( !legacy_exponent_literal_as_decimal_enabled)) {
                throw new antlr4.error.FailedPredicateException(this, "!legacy_exponent_literal_as_decimal_enabled");
            }
            this.state = 2972;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 2971;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 2974;
            this.match(SparkSqlParser.EXPONENT_VALUE);
            break;

        case 2:
            localctx = new DecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2975;
            if (!( !legacy_exponent_literal_as_decimal_enabled)) {
                throw new antlr4.error.FailedPredicateException(this, "!legacy_exponent_literal_as_decimal_enabled");
            }
            this.state = 2977;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 2976;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 2979;
            this.match(SparkSqlParser.DECIMAL_VALUE);
            break;

        case 3:
            localctx = new LegacyDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2980;
            if (!( legacy_exponent_literal_as_decimal_enabled)) {
                throw new antlr4.error.FailedPredicateException(this, "legacy_exponent_literal_as_decimal_enabled");
            }
            this.state = 2982;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 2981;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 2984;
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.EXPONENT_VALUE || _la===SparkSqlParser.DECIMAL_VALUE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 4:
            localctx = new IntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2986;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 2985;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 2988;
            this.match(SparkSqlParser.INTEGER_VALUE);
            break;

        case 5:
            localctx = new BigIntLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2990;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 2989;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 2992;
            this.match(SparkSqlParser.BIGINT_LITERAL);
            break;

        case 6:
            localctx = new SmallIntLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 2994;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 2993;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 2996;
            this.match(SparkSqlParser.SMALLINT_LITERAL);
            break;

        case 7:
            localctx = new TinyIntLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 2998;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 2997;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 3000;
            this.match(SparkSqlParser.TINYINT_LITERAL);
            break;

        case 8:
            localctx = new DoubleLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 3002;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 3001;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 3004;
            this.match(SparkSqlParser.DOUBLE_LITERAL);
            break;

        case 9:
            localctx = new FloatLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 3006;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 3005;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 3008;
            this.match(SparkSqlParser.FLOAT_LITERAL);
            break;

        case 10:
            localctx = new BigDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 3010;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SparkSqlParser.MINUS) {
                this.state = 3009;
                this.match(SparkSqlParser.MINUS);
            }

            this.state = 3012;
            this.match(SparkSqlParser.BIGDECIMAL_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 AlterColumnActionContext(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 = SparkSqlParser.RULE_alterColumnAction;
    this.setOrDrop = null; // Token
    return this;
}

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

AlterColumnActionContext.prototype.TYPE = function() {
    return this.getToken(SparkSqlParser.TYPE, 0);
};

AlterColumnActionContext.prototype.dataType = function() {
    return this.getTypedRuleContext(DataTypeContext,0);
};

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

AlterColumnActionContext.prototype.colPosition = function() {
    return this.getTypedRuleContext(ColPositionContext,0);
};

AlterColumnActionContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

AlterColumnActionContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};

AlterColumnActionContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

AlterColumnActionContext.prototype.DROP = function() {
    return this.getToken(SparkSqlParser.DROP, 0);
};

AlterColumnActionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAlterColumnAction(this);
	}
};

AlterColumnActionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAlterColumnAction(this);
	}
};

AlterColumnActionContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAlterColumnAction(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.AlterColumnActionContext = AlterColumnActionContext;

SparkSqlParser.prototype.alterColumnAction = function() {

    var localctx = new AlterColumnActionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 266, SparkSqlParser.RULE_alterColumnAction);
    var _la = 0; // Token type
    try {
        this.state = 3022;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SparkSqlParser.TYPE:
            this.enterOuterAlt(localctx, 1);
            this.state = 3015;
            this.match(SparkSqlParser.TYPE);
            this.state = 3016;
            this.dataType();
            break;
        case SparkSqlParser.COMMENT:
            this.enterOuterAlt(localctx, 2);
            this.state = 3017;
            this.commentSpec();
            break;
        case SparkSqlParser.AFTER:
        case SparkSqlParser.FIRST:
            this.enterOuterAlt(localctx, 3);
            this.state = 3018;
            this.colPosition();
            break;
        case SparkSqlParser.DROP:
        case SparkSqlParser.SET:
            this.enterOuterAlt(localctx, 4);
            this.state = 3019;
            localctx.setOrDrop = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===SparkSqlParser.DROP || _la===SparkSqlParser.SET)) {
                localctx.setOrDrop = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 3020;
            this.match(SparkSqlParser.NOT);
            this.state = 3021;
            this.match(SparkSqlParser.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 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 = SparkSqlParser.RULE_ansiNonReserved;
    return this;
}

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

AnsiNonReservedContext.prototype.ADD = function() {
    return this.getToken(SparkSqlParser.ADD, 0);
};

AnsiNonReservedContext.prototype.AFTER = function() {
    return this.getToken(SparkSqlParser.AFTER, 0);
};

AnsiNonReservedContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

AnsiNonReservedContext.prototype.ANALYZE = function() {
    return this.getToken(SparkSqlParser.ANALYZE, 0);
};

AnsiNonReservedContext.prototype.ANTI = function() {
    return this.getToken(SparkSqlParser.ANTI, 0);
};

AnsiNonReservedContext.prototype.ARCHIVE = function() {
    return this.getToken(SparkSqlParser.ARCHIVE, 0);
};

AnsiNonReservedContext.prototype.ARRAY = function() {
    return this.getToken(SparkSqlParser.ARRAY, 0);
};

AnsiNonReservedContext.prototype.ASC = function() {
    return this.getToken(SparkSqlParser.ASC, 0);
};

AnsiNonReservedContext.prototype.AT = function() {
    return this.getToken(SparkSqlParser.AT, 0);
};

AnsiNonReservedContext.prototype.BETWEEN = function() {
    return this.getToken(SparkSqlParser.BETWEEN, 0);
};

AnsiNonReservedContext.prototype.BUCKET = function() {
    return this.getToken(SparkSqlParser.BUCKET, 0);
};

AnsiNonReservedContext.prototype.BUCKETS = function() {
    return this.getToken(SparkSqlParser.BUCKETS, 0);
};

AnsiNonReservedContext.prototype.BY = function() {
    return this.getToken(SparkSqlParser.BY, 0);
};

AnsiNonReservedContext.prototype.CACHE = function() {
    return this.getToken(SparkSqlParser.CACHE, 0);
};

AnsiNonReservedContext.prototype.CASCADE = function() {
    return this.getToken(SparkSqlParser.CASCADE, 0);
};

AnsiNonReservedContext.prototype.CHANGE = function() {
    return this.getToken(SparkSqlParser.CHANGE, 0);
};

AnsiNonReservedContext.prototype.CLEAR = function() {
    return this.getToken(SparkSqlParser.CLEAR, 0);
};

AnsiNonReservedContext.prototype.CLUSTER = function() {
    return this.getToken(SparkSqlParser.CLUSTER, 0);
};

AnsiNonReservedContext.prototype.CLUSTERED = function() {
    return this.getToken(SparkSqlParser.CLUSTERED, 0);
};

AnsiNonReservedContext.prototype.CODEGEN = function() {
    return this.getToken(SparkSqlParser.CODEGEN, 0);
};

AnsiNonReservedContext.prototype.COLLECTION = function() {
    return this.getToken(SparkSqlParser.COLLECTION, 0);
};

AnsiNonReservedContext.prototype.COLUMNS = function() {
    return this.getToken(SparkSqlParser.COLUMNS, 0);
};

AnsiNonReservedContext.prototype.COMMENT = function() {
    return this.getToken(SparkSqlParser.COMMENT, 0);
};

AnsiNonReservedContext.prototype.COMMIT = function() {
    return this.getToken(SparkSqlParser.COMMIT, 0);
};

AnsiNonReservedContext.prototype.COMPACT = function() {
    return this.getToken(SparkSqlParser.COMPACT, 0);
};

AnsiNonReservedContext.prototype.COMPACTIONS = function() {
    return this.getToken(SparkSqlParser.COMPACTIONS, 0);
};

AnsiNonReservedContext.prototype.COMPUTE = function() {
    return this.getToken(SparkSqlParser.COMPUTE, 0);
};

AnsiNonReservedContext.prototype.CONCATENATE = function() {
    return this.getToken(SparkSqlParser.CONCATENATE, 0);
};

AnsiNonReservedContext.prototype.COST = function() {
    return this.getToken(SparkSqlParser.COST, 0);
};

AnsiNonReservedContext.prototype.CUBE = function() {
    return this.getToken(SparkSqlParser.CUBE, 0);
};

AnsiNonReservedContext.prototype.CURRENT = function() {
    return this.getToken(SparkSqlParser.CURRENT, 0);
};

AnsiNonReservedContext.prototype.DATA = function() {
    return this.getToken(SparkSqlParser.DATA, 0);
};

AnsiNonReservedContext.prototype.DATABASE = function() {
    return this.getToken(SparkSqlParser.DATABASE, 0);
};

AnsiNonReservedContext.prototype.DATABASES = function() {
    return this.getToken(SparkSqlParser.DATABASES, 0);
};

AnsiNonReservedContext.prototype.DBPROPERTIES = function() {
    return this.getToken(SparkSqlParser.DBPROPERTIES, 0);
};

AnsiNonReservedContext.prototype.DEFINED = function() {
    return this.getToken(SparkSqlParser.DEFINED, 0);
};

AnsiNonReservedContext.prototype.DELETE = function() {
    return this.getToken(SparkSqlParser.DELETE, 0);
};

AnsiNonReservedContext.prototype.DELIMITED = function() {
    return this.getToken(SparkSqlParser.DELIMITED, 0);
};

AnsiNonReservedContext.prototype.DESC = function() {
    return this.getToken(SparkSqlParser.DESC, 0);
};

AnsiNonReservedContext.prototype.DESCRIBE = function() {
    return this.getToken(SparkSqlParser.DESCRIBE, 0);
};

AnsiNonReservedContext.prototype.DFS = function() {
    return this.getToken(SparkSqlParser.DFS, 0);
};

AnsiNonReservedContext.prototype.DIRECTORIES = function() {
    return this.getToken(SparkSqlParser.DIRECTORIES, 0);
};

AnsiNonReservedContext.prototype.DIRECTORY = function() {
    return this.getToken(SparkSqlParser.DIRECTORY, 0);
};

AnsiNonReservedContext.prototype.DISTRIBUTE = function() {
    return this.getToken(SparkSqlParser.DISTRIBUTE, 0);
};

AnsiNonReservedContext.prototype.DIV = function() {
    return this.getToken(SparkSqlParser.DIV, 0);
};

AnsiNonReservedContext.prototype.DROP = function() {
    return this.getToken(SparkSqlParser.DROP, 0);
};

AnsiNonReservedContext.prototype.ESCAPED = function() {
    return this.getToken(SparkSqlParser.ESCAPED, 0);
};

AnsiNonReservedContext.prototype.EXCHANGE = function() {
    return this.getToken(SparkSqlParser.EXCHANGE, 0);
};

AnsiNonReservedContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

AnsiNonReservedContext.prototype.EXPLAIN = function() {
    return this.getToken(SparkSqlParser.EXPLAIN, 0);
};

AnsiNonReservedContext.prototype.EXPORT = function() {
    return this.getToken(SparkSqlParser.EXPORT, 0);
};

AnsiNonReservedContext.prototype.EXTENDED = function() {
    return this.getToken(SparkSqlParser.EXTENDED, 0);
};

AnsiNonReservedContext.prototype.EXTERNAL = function() {
    return this.getToken(SparkSqlParser.EXTERNAL, 0);
};

AnsiNonReservedContext.prototype.EXTRACT = function() {
    return this.getToken(SparkSqlParser.EXTRACT, 0);
};

AnsiNonReservedContext.prototype.FIELDS = function() {
    return this.getToken(SparkSqlParser.FIELDS, 0);
};

AnsiNonReservedContext.prototype.FILEFORMAT = function() {
    return this.getToken(SparkSqlParser.FILEFORMAT, 0);
};

AnsiNonReservedContext.prototype.FIRST = function() {
    return this.getToken(SparkSqlParser.FIRST, 0);
};

AnsiNonReservedContext.prototype.FOLLOWING = function() {
    return this.getToken(SparkSqlParser.FOLLOWING, 0);
};

AnsiNonReservedContext.prototype.FORMAT = function() {
    return this.getToken(SparkSqlParser.FORMAT, 0);
};

AnsiNonReservedContext.prototype.FORMATTED = function() {
    return this.getToken(SparkSqlParser.FORMATTED, 0);
};

AnsiNonReservedContext.prototype.FUNCTION = function() {
    return this.getToken(SparkSqlParser.FUNCTION, 0);
};

AnsiNonReservedContext.prototype.FUNCTIONS = function() {
    return this.getToken(SparkSqlParser.FUNCTIONS, 0);
};

AnsiNonReservedContext.prototype.GLOBAL = function() {
    return this.getToken(SparkSqlParser.GLOBAL, 0);
};

AnsiNonReservedContext.prototype.GROUPING = function() {
    return this.getToken(SparkSqlParser.GROUPING, 0);
};

AnsiNonReservedContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

AnsiNonReservedContext.prototype.IGNORE = function() {
    return this.getToken(SparkSqlParser.IGNORE, 0);
};

AnsiNonReservedContext.prototype.IMPORT = function() {
    return this.getToken(SparkSqlParser.IMPORT, 0);
};

AnsiNonReservedContext.prototype.INDEX = function() {
    return this.getToken(SparkSqlParser.INDEX, 0);
};

AnsiNonReservedContext.prototype.INDEXES = function() {
    return this.getToken(SparkSqlParser.INDEXES, 0);
};

AnsiNonReservedContext.prototype.INPATH = function() {
    return this.getToken(SparkSqlParser.INPATH, 0);
};

AnsiNonReservedContext.prototype.INPUTFORMAT = function() {
    return this.getToken(SparkSqlParser.INPUTFORMAT, 0);
};

AnsiNonReservedContext.prototype.INSERT = function() {
    return this.getToken(SparkSqlParser.INSERT, 0);
};

AnsiNonReservedContext.prototype.INTERVAL = function() {
    return this.getToken(SparkSqlParser.INTERVAL, 0);
};

AnsiNonReservedContext.prototype.ITEMS = function() {
    return this.getToken(SparkSqlParser.ITEMS, 0);
};

AnsiNonReservedContext.prototype.KEYS = function() {
    return this.getToken(SparkSqlParser.KEYS, 0);
};

AnsiNonReservedContext.prototype.LAST = function() {
    return this.getToken(SparkSqlParser.LAST, 0);
};

AnsiNonReservedContext.prototype.LATERAL = function() {
    return this.getToken(SparkSqlParser.LATERAL, 0);
};

AnsiNonReservedContext.prototype.LAZY = function() {
    return this.getToken(SparkSqlParser.LAZY, 0);
};

AnsiNonReservedContext.prototype.LIKE = function() {
    return this.getToken(SparkSqlParser.LIKE, 0);
};

AnsiNonReservedContext.prototype.LIMIT = function() {
    return this.getToken(SparkSqlParser.LIMIT, 0);
};

AnsiNonReservedContext.prototype.LINES = function() {
    return this.getToken(SparkSqlParser.LINES, 0);
};

AnsiNonReservedContext.prototype.LIST = function() {
    return this.getToken(SparkSqlParser.LIST, 0);
};

AnsiNonReservedContext.prototype.LOAD = function() {
    return this.getToken(SparkSqlParser.LOAD, 0);
};

AnsiNonReservedContext.prototype.LOCAL = function() {
    return this.getToken(SparkSqlParser.LOCAL, 0);
};

AnsiNonReservedContext.prototype.LOCATION = function() {
    return this.getToken(SparkSqlParser.LOCATION, 0);
};

AnsiNonReservedContext.prototype.LOCK = function() {
    return this.getToken(SparkSqlParser.LOCK, 0);
};

AnsiNonReservedContext.prototype.LOCKS = function() {
    return this.getToken(SparkSqlParser.LOCKS, 0);
};

AnsiNonReservedContext.prototype.LOGICAL = function() {
    return this.getToken(SparkSqlParser.LOGICAL, 0);
};

AnsiNonReservedContext.prototype.MACRO = function() {
    return this.getToken(SparkSqlParser.MACRO, 0);
};

AnsiNonReservedContext.prototype.MAP = function() {
    return this.getToken(SparkSqlParser.MAP, 0);
};

AnsiNonReservedContext.prototype.MATCHED = function() {
    return this.getToken(SparkSqlParser.MATCHED, 0);
};

AnsiNonReservedContext.prototype.MERGE = function() {
    return this.getToken(SparkSqlParser.MERGE, 0);
};

AnsiNonReservedContext.prototype.MSCK = function() {
    return this.getToken(SparkSqlParser.MSCK, 0);
};

AnsiNonReservedContext.prototype.NAMESPACE = function() {
    return this.getToken(SparkSqlParser.NAMESPACE, 0);
};

AnsiNonReservedContext.prototype.NAMESPACES = function() {
    return this.getToken(SparkSqlParser.NAMESPACES, 0);
};

AnsiNonReservedContext.prototype.NO = function() {
    return this.getToken(SparkSqlParser.NO, 0);
};

AnsiNonReservedContext.prototype.NULLS = function() {
    return this.getToken(SparkSqlParser.NULLS, 0);
};

AnsiNonReservedContext.prototype.OF = function() {
    return this.getToken(SparkSqlParser.OF, 0);
};

AnsiNonReservedContext.prototype.OPTION = function() {
    return this.getToken(SparkSqlParser.OPTION, 0);
};

AnsiNonReservedContext.prototype.OPTIONS = function() {
    return this.getToken(SparkSqlParser.OPTIONS, 0);
};

AnsiNonReservedContext.prototype.OUT = function() {
    return this.getToken(SparkSqlParser.OUT, 0);
};

AnsiNonReservedContext.prototype.OUTPUTFORMAT = function() {
    return this.getToken(SparkSqlParser.OUTPUTFORMAT, 0);
};

AnsiNonReservedContext.prototype.OVER = function() {
    return this.getToken(SparkSqlParser.OVER, 0);
};

AnsiNonReservedContext.prototype.OVERLAY = function() {
    return this.getToken(SparkSqlParser.OVERLAY, 0);
};

AnsiNonReservedContext.prototype.OVERWRITE = function() {
    return this.getToken(SparkSqlParser.OVERWRITE, 0);
};

AnsiNonReservedContext.prototype.PARTITION = function() {
    return this.getToken(SparkSqlParser.PARTITION, 0);
};

AnsiNonReservedContext.prototype.PARTITIONED = function() {
    return this.getToken(SparkSqlParser.PARTITIONED, 0);
};

AnsiNonReservedContext.prototype.PARTITIONS = function() {
    return this.getToken(SparkSqlParser.PARTITIONS, 0);
};

AnsiNonReservedContext.prototype.PERCENTLIT = function() {
    return this.getToken(SparkSqlParser.PERCENTLIT, 0);
};

AnsiNonReservedContext.prototype.PIVOT = function() {
    return this.getToken(SparkSqlParser.PIVOT, 0);
};

AnsiNonReservedContext.prototype.PLACING = function() {
    return this.getToken(SparkSqlParser.PLACING, 0);
};

AnsiNonReservedContext.prototype.POSITION = function() {
    return this.getToken(SparkSqlParser.POSITION, 0);
};

AnsiNonReservedContext.prototype.PRECEDING = function() {
    return this.getToken(SparkSqlParser.PRECEDING, 0);
};

AnsiNonReservedContext.prototype.PRINCIPALS = function() {
    return this.getToken(SparkSqlParser.PRINCIPALS, 0);
};

AnsiNonReservedContext.prototype.PROPERTIES = function() {
    return this.getToken(SparkSqlParser.PROPERTIES, 0);
};

AnsiNonReservedContext.prototype.PURGE = function() {
    return this.getToken(SparkSqlParser.PURGE, 0);
};

AnsiNonReservedContext.prototype.QUERY = function() {
    return this.getToken(SparkSqlParser.QUERY, 0);
};

AnsiNonReservedContext.prototype.RANGE = function() {
    return this.getToken(SparkSqlParser.RANGE, 0);
};

AnsiNonReservedContext.prototype.RECORDREADER = function() {
    return this.getToken(SparkSqlParser.RECORDREADER, 0);
};

AnsiNonReservedContext.prototype.RECORDWRITER = function() {
    return this.getToken(SparkSqlParser.RECORDWRITER, 0);
};

AnsiNonReservedContext.prototype.RECOVER = function() {
    return this.getToken(SparkSqlParser.RECOVER, 0);
};

AnsiNonReservedContext.prototype.REDUCE = function() {
    return this.getToken(SparkSqlParser.REDUCE, 0);
};

AnsiNonReservedContext.prototype.REFRESH = function() {
    return this.getToken(SparkSqlParser.REFRESH, 0);
};

AnsiNonReservedContext.prototype.RENAME = function() {
    return this.getToken(SparkSqlParser.RENAME, 0);
};

AnsiNonReservedContext.prototype.REPAIR = function() {
    return this.getToken(SparkSqlParser.REPAIR, 0);
};

AnsiNonReservedContext.prototype.REPLACE = function() {
    return this.getToken(SparkSqlParser.REPLACE, 0);
};

AnsiNonReservedContext.prototype.RESET = function() {
    return this.getToken(SparkSqlParser.RESET, 0);
};

AnsiNonReservedContext.prototype.RESTRICT = function() {
    return this.getToken(SparkSqlParser.RESTRICT, 0);
};

AnsiNonReservedContext.prototype.REVOKE = function() {
    return this.getToken(SparkSqlParser.REVOKE, 0);
};

AnsiNonReservedContext.prototype.RLIKE = function() {
    return this.getToken(SparkSqlParser.RLIKE, 0);
};

AnsiNonReservedContext.prototype.ROLE = function() {
    return this.getToken(SparkSqlParser.ROLE, 0);
};

AnsiNonReservedContext.prototype.ROLES = function() {
    return this.getToken(SparkSqlParser.ROLES, 0);
};

AnsiNonReservedContext.prototype.ROLLBACK = function() {
    return this.getToken(SparkSqlParser.ROLLBACK, 0);
};

AnsiNonReservedContext.prototype.ROLLUP = function() {
    return this.getToken(SparkSqlParser.ROLLUP, 0);
};

AnsiNonReservedContext.prototype.ROW = function() {
    return this.getToken(SparkSqlParser.ROW, 0);
};

AnsiNonReservedContext.prototype.ROWS = function() {
    return this.getToken(SparkSqlParser.ROWS, 0);
};

AnsiNonReservedContext.prototype.SCHEMA = function() {
    return this.getToken(SparkSqlParser.SCHEMA, 0);
};

AnsiNonReservedContext.prototype.SEMI = function() {
    return this.getToken(SparkSqlParser.SEMI, 0);
};

AnsiNonReservedContext.prototype.SEPARATED = function() {
    return this.getToken(SparkSqlParser.SEPARATED, 0);
};

AnsiNonReservedContext.prototype.SERDE = function() {
    return this.getToken(SparkSqlParser.SERDE, 0);
};

AnsiNonReservedContext.prototype.SERDEPROPERTIES = function() {
    return this.getToken(SparkSqlParser.SERDEPROPERTIES, 0);
};

AnsiNonReservedContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

AnsiNonReservedContext.prototype.SETMINUS = function() {
    return this.getToken(SparkSqlParser.SETMINUS, 0);
};

AnsiNonReservedContext.prototype.SETS = function() {
    return this.getToken(SparkSqlParser.SETS, 0);
};

AnsiNonReservedContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

AnsiNonReservedContext.prototype.SKEWED = function() {
    return this.getToken(SparkSqlParser.SKEWED, 0);
};

AnsiNonReservedContext.prototype.SORT = function() {
    return this.getToken(SparkSqlParser.SORT, 0);
};

AnsiNonReservedContext.prototype.SORTED = function() {
    return this.getToken(SparkSqlParser.SORTED, 0);
};

AnsiNonReservedContext.prototype.START = function() {
    return this.getToken(SparkSqlParser.START, 0);
};

AnsiNonReservedContext.prototype.STATISTICS = function() {
    return this.getToken(SparkSqlParser.STATISTICS, 0);
};

AnsiNonReservedContext.prototype.STORED = function() {
    return this.getToken(SparkSqlParser.STORED, 0);
};

AnsiNonReservedContext.prototype.STRATIFY = function() {
    return this.getToken(SparkSqlParser.STRATIFY, 0);
};

AnsiNonReservedContext.prototype.STRUCT = function() {
    return this.getToken(SparkSqlParser.STRUCT, 0);
};

AnsiNonReservedContext.prototype.SUBSTR = function() {
    return this.getToken(SparkSqlParser.SUBSTR, 0);
};

AnsiNonReservedContext.prototype.SUBSTRING = function() {
    return this.getToken(SparkSqlParser.SUBSTRING, 0);
};

AnsiNonReservedContext.prototype.TABLES = function() {
    return this.getToken(SparkSqlParser.TABLES, 0);
};

AnsiNonReservedContext.prototype.TABLESAMPLE = function() {
    return this.getToken(SparkSqlParser.TABLESAMPLE, 0);
};

AnsiNonReservedContext.prototype.TBLPROPERTIES = function() {
    return this.getToken(SparkSqlParser.TBLPROPERTIES, 0);
};

AnsiNonReservedContext.prototype.TEMPORARY = function() {
    return this.getToken(SparkSqlParser.TEMPORARY, 0);
};

AnsiNonReservedContext.prototype.TERMINATED = function() {
    return this.getToken(SparkSqlParser.TERMINATED, 0);
};

AnsiNonReservedContext.prototype.TOUCH = function() {
    return this.getToken(SparkSqlParser.TOUCH, 0);
};

AnsiNonReservedContext.prototype.TRANSACTION = function() {
    return this.getToken(SparkSqlParser.TRANSACTION, 0);
};

AnsiNonReservedContext.prototype.TRANSACTIONS = function() {
    return this.getToken(SparkSqlParser.TRANSACTIONS, 0);
};

AnsiNonReservedContext.prototype.TRANSFORM = function() {
    return this.getToken(SparkSqlParser.TRANSFORM, 0);
};

AnsiNonReservedContext.prototype.TRIM = function() {
    return this.getToken(SparkSqlParser.TRIM, 0);
};

AnsiNonReservedContext.prototype.TRUE = function() {
    return this.getToken(SparkSqlParser.TRUE, 0);
};

AnsiNonReservedContext.prototype.TRUNCATE = function() {
    return this.getToken(SparkSqlParser.TRUNCATE, 0);
};

AnsiNonReservedContext.prototype.TYPE = function() {
    return this.getToken(SparkSqlParser.TYPE, 0);
};

AnsiNonReservedContext.prototype.UNARCHIVE = function() {
    return this.getToken(SparkSqlParser.UNARCHIVE, 0);
};

AnsiNonReservedContext.prototype.UNBOUNDED = function() {
    return this.getToken(SparkSqlParser.UNBOUNDED, 0);
};

AnsiNonReservedContext.prototype.UNCACHE = function() {
    return this.getToken(SparkSqlParser.UNCACHE, 0);
};

AnsiNonReservedContext.prototype.UNLOCK = function() {
    return this.getToken(SparkSqlParser.UNLOCK, 0);
};

AnsiNonReservedContext.prototype.UNSET = function() {
    return this.getToken(SparkSqlParser.UNSET, 0);
};

AnsiNonReservedContext.prototype.UPDATE = function() {
    return this.getToken(SparkSqlParser.UPDATE, 0);
};

AnsiNonReservedContext.prototype.USE = function() {
    return this.getToken(SparkSqlParser.USE, 0);
};

AnsiNonReservedContext.prototype.VALUES = function() {
    return this.getToken(SparkSqlParser.VALUES, 0);
};

AnsiNonReservedContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};

AnsiNonReservedContext.prototype.VIEWS = function() {
    return this.getToken(SparkSqlParser.VIEWS, 0);
};

AnsiNonReservedContext.prototype.WINDOW = function() {
    return this.getToken(SparkSqlParser.WINDOW, 0);
};

AnsiNonReservedContext.prototype.ZONE = function() {
    return this.getToken(SparkSqlParser.ZONE, 0);
};

AnsiNonReservedContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterAnsiNonReserved(this);
	}
};

AnsiNonReservedContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitAnsiNonReserved(this);
	}
};

AnsiNonReservedContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitAnsiNonReserved(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.AnsiNonReservedContext = AnsiNonReservedContext;

SparkSqlParser.prototype.ansiNonReserved = function() {

    var localctx = new AnsiNonReservedContext(this, this._ctx, this.state);
    this.enterRule(localctx, 268, SparkSqlParser.RULE_ansiNonReserved);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3024;
        _la = this._input.LA(1);
        if(!(((((_la - 11)) & ~0x1f) == 0 && ((1 << (_la - 11)) & ((1 << (SparkSqlParser.ADD - 11)) | (1 << (SparkSqlParser.AFTER - 11)) | (1 << (SparkSqlParser.ALTER - 11)) | (1 << (SparkSqlParser.ANALYZE - 11)) | (1 << (SparkSqlParser.ANTI - 11)) | (1 << (SparkSqlParser.ARCHIVE - 11)) | (1 << (SparkSqlParser.ARRAY - 11)) | (1 << (SparkSqlParser.ASC - 11)) | (1 << (SparkSqlParser.AT - 11)) | (1 << (SparkSqlParser.BETWEEN - 11)) | (1 << (SparkSqlParser.BUCKET - 11)) | (1 << (SparkSqlParser.BUCKETS - 11)) | (1 << (SparkSqlParser.BY - 11)) | (1 << (SparkSqlParser.CACHE - 11)) | (1 << (SparkSqlParser.CASCADE - 11)) | (1 << (SparkSqlParser.CHANGE - 11)) | (1 << (SparkSqlParser.CLEAR - 11)) | (1 << (SparkSqlParser.CLUSTER - 11)) | (1 << (SparkSqlParser.CLUSTERED - 11)) | (1 << (SparkSqlParser.CODEGEN - 11)) | (1 << (SparkSqlParser.COLLECTION - 11)))) !== 0) || ((((_la - 43)) & ~0x1f) == 0 && ((1 << (_la - 43)) & ((1 << (SparkSqlParser.COLUMNS - 43)) | (1 << (SparkSqlParser.COMMENT - 43)) | (1 << (SparkSqlParser.COMMIT - 43)) | (1 << (SparkSqlParser.COMPACT - 43)) | (1 << (SparkSqlParser.COMPACTIONS - 43)) | (1 << (SparkSqlParser.COMPUTE - 43)) | (1 << (SparkSqlParser.CONCATENATE - 43)) | (1 << (SparkSqlParser.COST - 43)) | (1 << (SparkSqlParser.CUBE - 43)) | (1 << (SparkSqlParser.CURRENT - 43)) | (1 << (SparkSqlParser.DATA - 43)) | (1 << (SparkSqlParser.DATABASE - 43)) | (1 << (SparkSqlParser.DATABASES - 43)) | (1 << (SparkSqlParser.DBPROPERTIES - 43)) | (1 << (SparkSqlParser.DEFINED - 43)) | (1 << (SparkSqlParser.DELETE - 43)) | (1 << (SparkSqlParser.DELIMITED - 43)) | (1 << (SparkSqlParser.DESC - 43)) | (1 << (SparkSqlParser.DESCRIBE - 43)) | (1 << (SparkSqlParser.DFS - 43)) | (1 << (SparkSqlParser.DIRECTORIES - 43)) | (1 << (SparkSqlParser.DIRECTORY - 43)) | (1 << (SparkSqlParser.DISTRIBUTE - 43)) | (1 << (SparkSqlParser.DIV - 43)))) !== 0) || ((((_la - 75)) & ~0x1f) == 0 && ((1 << (_la - 75)) & ((1 << (SparkSqlParser.DROP - 75)) | (1 << (SparkSqlParser.ESCAPED - 75)) | (1 << (SparkSqlParser.EXCHANGE - 75)) | (1 << (SparkSqlParser.EXISTS - 75)) | (1 << (SparkSqlParser.EXPLAIN - 75)) | (1 << (SparkSqlParser.EXPORT - 75)) | (1 << (SparkSqlParser.EXTENDED - 75)) | (1 << (SparkSqlParser.EXTERNAL - 75)) | (1 << (SparkSqlParser.EXTRACT - 75)) | (1 << (SparkSqlParser.FIELDS - 75)) | (1 << (SparkSqlParser.FILEFORMAT - 75)) | (1 << (SparkSqlParser.FIRST - 75)) | (1 << (SparkSqlParser.FOLLOWING - 75)) | (1 << (SparkSqlParser.FORMAT - 75)) | (1 << (SparkSqlParser.FORMATTED - 75)) | (1 << (SparkSqlParser.FUNCTION - 75)) | (1 << (SparkSqlParser.FUNCTIONS - 75)) | (1 << (SparkSqlParser.GLOBAL - 75)) | (1 << (SparkSqlParser.GROUPING - 75)))) !== 0) || ((((_la - 108)) & ~0x1f) == 0 && ((1 << (_la - 108)) & ((1 << (SparkSqlParser.IF - 108)) | (1 << (SparkSqlParser.IGNORE - 108)) | (1 << (SparkSqlParser.IMPORT - 108)) | (1 << (SparkSqlParser.INDEX - 108)) | (1 << (SparkSqlParser.INDEXES - 108)) | (1 << (SparkSqlParser.INPATH - 108)) | (1 << (SparkSqlParser.INPUTFORMAT - 108)) | (1 << (SparkSqlParser.INSERT - 108)) | (1 << (SparkSqlParser.INTERVAL - 108)) | (1 << (SparkSqlParser.ITEMS - 108)) | (1 << (SparkSqlParser.KEYS - 108)) | (1 << (SparkSqlParser.LAST - 108)) | (1 << (SparkSqlParser.LATERAL - 108)) | (1 << (SparkSqlParser.LAZY - 108)) | (1 << (SparkSqlParser.LIKE - 108)) | (1 << (SparkSqlParser.LIMIT - 108)) | (1 << (SparkSqlParser.LINES - 108)) | (1 << (SparkSqlParser.LIST - 108)) | (1 << (SparkSqlParser.LOAD - 108)) | (1 << (SparkSqlParser.LOCAL - 108)) | (1 << (SparkSqlParser.LOCATION - 108)) | (1 << (SparkSqlParser.LOCK - 108)) | (1 << (SparkSqlParser.LOCKS - 108)) | (1 << (SparkSqlParser.LOGICAL - 108)))) !== 0) || ((((_la - 140)) & ~0x1f) == 0 && ((1 << (_la - 140)) & ((1 << (SparkSqlParser.MACRO - 140)) | (1 << (SparkSqlParser.MAP - 140)) | (1 << (SparkSqlParser.MATCHED - 140)) | (1 << (SparkSqlParser.MERGE - 140)) | (1 << (SparkSqlParser.MSCK - 140)) | (1 << (SparkSqlParser.NAMESPACE - 140)) | (1 << (SparkSqlParser.NAMESPACES - 140)) | (1 << (SparkSqlParser.NO - 140)) | (1 << (SparkSqlParser.NULLS - 140)) | (1 << (SparkSqlParser.OF - 140)) | (1 << (SparkSqlParser.OPTION - 140)) | (1 << (SparkSqlParser.OPTIONS - 140)) | (1 << (SparkSqlParser.OUT - 140)) | (1 << (SparkSqlParser.OUTPUTFORMAT - 140)) | (1 << (SparkSqlParser.OVER - 140)) | (1 << (SparkSqlParser.OVERLAY - 140)) | (1 << (SparkSqlParser.OVERWRITE - 140)) | (1 << (SparkSqlParser.PARTITION - 140)) | (1 << (SparkSqlParser.PARTITIONED - 140)) | (1 << (SparkSqlParser.PARTITIONS - 140)) | (1 << (SparkSqlParser.PERCENTLIT - 140)) | (1 << (SparkSqlParser.PIVOT - 140)) | (1 << (SparkSqlParser.PLACING - 140)))) !== 0) || ((((_la - 172)) & ~0x1f) == 0 && ((1 << (_la - 172)) & ((1 << (SparkSqlParser.POSITION - 172)) | (1 << (SparkSqlParser.PRECEDING - 172)) | (1 << (SparkSqlParser.PRINCIPALS - 172)) | (1 << (SparkSqlParser.PROPERTIES - 172)) | (1 << (SparkSqlParser.PURGE - 172)) | (1 << (SparkSqlParser.QUERY - 172)) | (1 << (SparkSqlParser.RANGE - 172)) | (1 << (SparkSqlParser.RECORDREADER - 172)) | (1 << (SparkSqlParser.RECORDWRITER - 172)) | (1 << (SparkSqlParser.RECOVER - 172)) | (1 << (SparkSqlParser.REDUCE - 172)) | (1 << (SparkSqlParser.REFRESH - 172)) | (1 << (SparkSqlParser.RENAME - 172)) | (1 << (SparkSqlParser.REPAIR - 172)) | (1 << (SparkSqlParser.REPLACE - 172)) | (1 << (SparkSqlParser.RESET - 172)) | (1 << (SparkSqlParser.RESTRICT - 172)) | (1 << (SparkSqlParser.REVOKE - 172)) | (1 << (SparkSqlParser.RLIKE - 172)) | (1 << (SparkSqlParser.ROLE - 172)) | (1 << (SparkSqlParser.ROLES - 172)) | (1 << (SparkSqlParser.ROLLBACK - 172)) | (1 << (SparkSqlParser.ROLLUP - 172)) | (1 << (SparkSqlParser.ROW - 172)) | (1 << (SparkSqlParser.ROWS - 172)) | (1 << (SparkSqlParser.SCHEMA - 172)) | (1 << (SparkSqlParser.SEMI - 172)) | (1 << (SparkSqlParser.SEPARATED - 172)))) !== 0) || ((((_la - 204)) & ~0x1f) == 0 && ((1 << (_la - 204)) & ((1 << (SparkSqlParser.SERDE - 204)) | (1 << (SparkSqlParser.SERDEPROPERTIES - 204)) | (1 << (SparkSqlParser.SET - 204)) | (1 << (SparkSqlParser.SETMINUS - 204)) | (1 << (SparkSqlParser.SETS - 204)) | (1 << (SparkSqlParser.SHOW - 204)) | (1 << (SparkSqlParser.SKEWED - 204)) | (1 << (SparkSqlParser.SORT - 204)) | (1 << (SparkSqlParser.SORTED - 204)) | (1 << (SparkSqlParser.START - 204)) | (1 << (SparkSqlParser.STATISTICS - 204)) | (1 << (SparkSqlParser.STORED - 204)) | (1 << (SparkSqlParser.STRATIFY - 204)) | (1 << (SparkSqlParser.STRUCT - 204)) | (1 << (SparkSqlParser.SUBSTR - 204)) | (1 << (SparkSqlParser.SUBSTRING - 204)) | (1 << (SparkSqlParser.TABLES - 204)) | (1 << (SparkSqlParser.TABLESAMPLE - 204)) | (1 << (SparkSqlParser.TBLPROPERTIES - 204)) | (1 << (SparkSqlParser.TEMPORARY - 204)) | (1 << (SparkSqlParser.TERMINATED - 204)) | (1 << (SparkSqlParser.TOUCH - 204)) | (1 << (SparkSqlParser.TRANSACTION - 204)) | (1 << (SparkSqlParser.TRANSACTIONS - 204)) | (1 << (SparkSqlParser.TRANSFORM - 204)))) !== 0) || ((((_la - 236)) & ~0x1f) == 0 && ((1 << (_la - 236)) & ((1 << (SparkSqlParser.TRIM - 236)) | (1 << (SparkSqlParser.TRUE - 236)) | (1 << (SparkSqlParser.TRUNCATE - 236)) | (1 << (SparkSqlParser.TYPE - 236)) | (1 << (SparkSqlParser.UNARCHIVE - 236)) | (1 << (SparkSqlParser.UNBOUNDED - 236)) | (1 << (SparkSqlParser.UNCACHE - 236)) | (1 << (SparkSqlParser.UNLOCK - 236)) | (1 << (SparkSqlParser.UNSET - 236)) | (1 << (SparkSqlParser.UPDATE - 236)) | (1 << (SparkSqlParser.USE - 236)) | (1 << (SparkSqlParser.VALUES - 236)) | (1 << (SparkSqlParser.VIEW - 236)) | (1 << (SparkSqlParser.VIEWS - 236)) | (1 << (SparkSqlParser.WINDOW - 236)) | (1 << (SparkSqlParser.ZONE - 236)))) !== 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 = SparkSqlParser.RULE_strictNonReserved;
    return this;
}

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

StrictNonReservedContext.prototype.ANTI = function() {
    return this.getToken(SparkSqlParser.ANTI, 0);
};

StrictNonReservedContext.prototype.CROSS = function() {
    return this.getToken(SparkSqlParser.CROSS, 0);
};

StrictNonReservedContext.prototype.EXCEPT = function() {
    return this.getToken(SparkSqlParser.EXCEPT, 0);
};

StrictNonReservedContext.prototype.FULL = function() {
    return this.getToken(SparkSqlParser.FULL, 0);
};

StrictNonReservedContext.prototype.INNER = function() {
    return this.getToken(SparkSqlParser.INNER, 0);
};

StrictNonReservedContext.prototype.INTERSECT = function() {
    return this.getToken(SparkSqlParser.INTERSECT, 0);
};

StrictNonReservedContext.prototype.JOIN = function() {
    return this.getToken(SparkSqlParser.JOIN, 0);
};

StrictNonReservedContext.prototype.LEFT = function() {
    return this.getToken(SparkSqlParser.LEFT, 0);
};

StrictNonReservedContext.prototype.NATURAL = function() {
    return this.getToken(SparkSqlParser.NATURAL, 0);
};

StrictNonReservedContext.prototype.ON = function() {
    return this.getToken(SparkSqlParser.ON, 0);
};

StrictNonReservedContext.prototype.RIGHT = function() {
    return this.getToken(SparkSqlParser.RIGHT, 0);
};

StrictNonReservedContext.prototype.SEMI = function() {
    return this.getToken(SparkSqlParser.SEMI, 0);
};

StrictNonReservedContext.prototype.SETMINUS = function() {
    return this.getToken(SparkSqlParser.SETMINUS, 0);
};

StrictNonReservedContext.prototype.UNION = function() {
    return this.getToken(SparkSqlParser.UNION, 0);
};

StrictNonReservedContext.prototype.USING = function() {
    return this.getToken(SparkSqlParser.USING, 0);
};

StrictNonReservedContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterStrictNonReserved(this);
	}
};

StrictNonReservedContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitStrictNonReserved(this);
	}
};

StrictNonReservedContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitStrictNonReserved(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.StrictNonReservedContext = StrictNonReservedContext;

SparkSqlParser.prototype.strictNonReserved = function() {

    var localctx = new StrictNonReservedContext(this, this._ctx, this.state);
    this.enterRule(localctx, 270, SparkSqlParser.RULE_strictNonReserved);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3026;
        _la = this._input.LA(1);
        if(!(_la===SparkSqlParser.ANTI || _la===SparkSqlParser.CROSS || _la===SparkSqlParser.EXCEPT || ((((_la - 100)) & ~0x1f) == 0 && ((1 << (_la - 100)) & ((1 << (SparkSqlParser.FULL - 100)) | (1 << (SparkSqlParser.INNER - 100)) | (1 << (SparkSqlParser.INTERSECT - 100)) | (1 << (SparkSqlParser.JOIN - 100)) | (1 << (SparkSqlParser.LEFT - 100)))) !== 0) || _la===SparkSqlParser.NATURAL || _la===SparkSqlParser.ON || ((((_la - 192)) & ~0x1f) == 0 && ((1 << (_la - 192)) & ((1 << (SparkSqlParser.RIGHT - 192)) | (1 << (SparkSqlParser.SEMI - 192)) | (1 << (SparkSqlParser.SETMINUS - 192)))) !== 0) || _la===SparkSqlParser.UNION || _la===SparkSqlParser.USING)) {
        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 = SparkSqlParser.RULE_nonReserved;
    return this;
}

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

NonReservedContext.prototype.ADD = function() {
    return this.getToken(SparkSqlParser.ADD, 0);
};

NonReservedContext.prototype.AFTER = function() {
    return this.getToken(SparkSqlParser.AFTER, 0);
};

NonReservedContext.prototype.ALL = function() {
    return this.getToken(SparkSqlParser.ALL, 0);
};

NonReservedContext.prototype.ALTER = function() {
    return this.getToken(SparkSqlParser.ALTER, 0);
};

NonReservedContext.prototype.ANALYZE = function() {
    return this.getToken(SparkSqlParser.ANALYZE, 0);
};

NonReservedContext.prototype.AND = function() {
    return this.getToken(SparkSqlParser.AND, 0);
};

NonReservedContext.prototype.ANY = function() {
    return this.getToken(SparkSqlParser.ANY, 0);
};

NonReservedContext.prototype.ARCHIVE = function() {
    return this.getToken(SparkSqlParser.ARCHIVE, 0);
};

NonReservedContext.prototype.ARRAY = function() {
    return this.getToken(SparkSqlParser.ARRAY, 0);
};

NonReservedContext.prototype.AS = function() {
    return this.getToken(SparkSqlParser.AS, 0);
};

NonReservedContext.prototype.ASC = function() {
    return this.getToken(SparkSqlParser.ASC, 0);
};

NonReservedContext.prototype.AT = function() {
    return this.getToken(SparkSqlParser.AT, 0);
};

NonReservedContext.prototype.AUTHORIZATION = function() {
    return this.getToken(SparkSqlParser.AUTHORIZATION, 0);
};

NonReservedContext.prototype.BETWEEN = function() {
    return this.getToken(SparkSqlParser.BETWEEN, 0);
};

NonReservedContext.prototype.BOTH = function() {
    return this.getToken(SparkSqlParser.BOTH, 0);
};

NonReservedContext.prototype.BUCKET = function() {
    return this.getToken(SparkSqlParser.BUCKET, 0);
};

NonReservedContext.prototype.BUCKETS = function() {
    return this.getToken(SparkSqlParser.BUCKETS, 0);
};

NonReservedContext.prototype.BY = function() {
    return this.getToken(SparkSqlParser.BY, 0);
};

NonReservedContext.prototype.CACHE = function() {
    return this.getToken(SparkSqlParser.CACHE, 0);
};

NonReservedContext.prototype.CASCADE = function() {
    return this.getToken(SparkSqlParser.CASCADE, 0);
};

NonReservedContext.prototype.CASE = function() {
    return this.getToken(SparkSqlParser.CASE, 0);
};

NonReservedContext.prototype.CAST = function() {
    return this.getToken(SparkSqlParser.CAST, 0);
};

NonReservedContext.prototype.CHANGE = function() {
    return this.getToken(SparkSqlParser.CHANGE, 0);
};

NonReservedContext.prototype.CHECK = function() {
    return this.getToken(SparkSqlParser.CHECK, 0);
};

NonReservedContext.prototype.CLEAR = function() {
    return this.getToken(SparkSqlParser.CLEAR, 0);
};

NonReservedContext.prototype.CLUSTER = function() {
    return this.getToken(SparkSqlParser.CLUSTER, 0);
};

NonReservedContext.prototype.CLUSTERED = function() {
    return this.getToken(SparkSqlParser.CLUSTERED, 0);
};

NonReservedContext.prototype.CODEGEN = function() {
    return this.getToken(SparkSqlParser.CODEGEN, 0);
};

NonReservedContext.prototype.COLLATE = function() {
    return this.getToken(SparkSqlParser.COLLATE, 0);
};

NonReservedContext.prototype.COLLECTION = function() {
    return this.getToken(SparkSqlParser.COLLECTION, 0);
};

NonReservedContext.prototype.COLUMN = function() {
    return this.getToken(SparkSqlParser.COLUMN, 0);
};

NonReservedContext.prototype.COLUMNS = function() {
    return this.getToken(SparkSqlParser.COLUMNS, 0);
};

NonReservedContext.prototype.COMMENT = function() {
    return this.getToken(SparkSqlParser.COMMENT, 0);
};

NonReservedContext.prototype.COMMIT = function() {
    return this.getToken(SparkSqlParser.COMMIT, 0);
};

NonReservedContext.prototype.COMPACT = function() {
    return this.getToken(SparkSqlParser.COMPACT, 0);
};

NonReservedContext.prototype.COMPACTIONS = function() {
    return this.getToken(SparkSqlParser.COMPACTIONS, 0);
};

NonReservedContext.prototype.COMPUTE = function() {
    return this.getToken(SparkSqlParser.COMPUTE, 0);
};

NonReservedContext.prototype.CONCATENATE = function() {
    return this.getToken(SparkSqlParser.CONCATENATE, 0);
};

NonReservedContext.prototype.CONSTRAINT = function() {
    return this.getToken(SparkSqlParser.CONSTRAINT, 0);
};

NonReservedContext.prototype.COST = function() {
    return this.getToken(SparkSqlParser.COST, 0);
};

NonReservedContext.prototype.CREATE = function() {
    return this.getToken(SparkSqlParser.CREATE, 0);
};

NonReservedContext.prototype.CUBE = function() {
    return this.getToken(SparkSqlParser.CUBE, 0);
};

NonReservedContext.prototype.CURRENT = function() {
    return this.getToken(SparkSqlParser.CURRENT, 0);
};

NonReservedContext.prototype.CURRENT_DATE = function() {
    return this.getToken(SparkSqlParser.CURRENT_DATE, 0);
};

NonReservedContext.prototype.CURRENT_TIME = function() {
    return this.getToken(SparkSqlParser.CURRENT_TIME, 0);
};

NonReservedContext.prototype.CURRENT_TIMESTAMP = function() {
    return this.getToken(SparkSqlParser.CURRENT_TIMESTAMP, 0);
};

NonReservedContext.prototype.CURRENT_USER = function() {
    return this.getToken(SparkSqlParser.CURRENT_USER, 0);
};

NonReservedContext.prototype.DATA = function() {
    return this.getToken(SparkSqlParser.DATA, 0);
};

NonReservedContext.prototype.DATABASE = function() {
    return this.getToken(SparkSqlParser.DATABASE, 0);
};

NonReservedContext.prototype.DATABASES = function() {
    return this.getToken(SparkSqlParser.DATABASES, 0);
};

NonReservedContext.prototype.DBPROPERTIES = function() {
    return this.getToken(SparkSqlParser.DBPROPERTIES, 0);
};

NonReservedContext.prototype.DEFINED = function() {
    return this.getToken(SparkSqlParser.DEFINED, 0);
};

NonReservedContext.prototype.DELETE = function() {
    return this.getToken(SparkSqlParser.DELETE, 0);
};

NonReservedContext.prototype.DELIMITED = function() {
    return this.getToken(SparkSqlParser.DELIMITED, 0);
};

NonReservedContext.prototype.DESC = function() {
    return this.getToken(SparkSqlParser.DESC, 0);
};

NonReservedContext.prototype.DESCRIBE = function() {
    return this.getToken(SparkSqlParser.DESCRIBE, 0);
};

NonReservedContext.prototype.DFS = function() {
    return this.getToken(SparkSqlParser.DFS, 0);
};

NonReservedContext.prototype.DIRECTORIES = function() {
    return this.getToken(SparkSqlParser.DIRECTORIES, 0);
};

NonReservedContext.prototype.DIRECTORY = function() {
    return this.getToken(SparkSqlParser.DIRECTORY, 0);
};

NonReservedContext.prototype.DISTINCT = function() {
    return this.getToken(SparkSqlParser.DISTINCT, 0);
};

NonReservedContext.prototype.DISTRIBUTE = function() {
    return this.getToken(SparkSqlParser.DISTRIBUTE, 0);
};

NonReservedContext.prototype.DIV = function() {
    return this.getToken(SparkSqlParser.DIV, 0);
};

NonReservedContext.prototype.DROP = function() {
    return this.getToken(SparkSqlParser.DROP, 0);
};

NonReservedContext.prototype.ELSE = function() {
    return this.getToken(SparkSqlParser.ELSE, 0);
};

NonReservedContext.prototype.END = function() {
    return this.getToken(SparkSqlParser.END, 0);
};

NonReservedContext.prototype.ESCAPE = function() {
    return this.getToken(SparkSqlParser.ESCAPE, 0);
};

NonReservedContext.prototype.ESCAPED = function() {
    return this.getToken(SparkSqlParser.ESCAPED, 0);
};

NonReservedContext.prototype.EXCHANGE = function() {
    return this.getToken(SparkSqlParser.EXCHANGE, 0);
};

NonReservedContext.prototype.EXISTS = function() {
    return this.getToken(SparkSqlParser.EXISTS, 0);
};

NonReservedContext.prototype.EXPLAIN = function() {
    return this.getToken(SparkSqlParser.EXPLAIN, 0);
};

NonReservedContext.prototype.EXPORT = function() {
    return this.getToken(SparkSqlParser.EXPORT, 0);
};

NonReservedContext.prototype.EXTENDED = function() {
    return this.getToken(SparkSqlParser.EXTENDED, 0);
};

NonReservedContext.prototype.EXTERNAL = function() {
    return this.getToken(SparkSqlParser.EXTERNAL, 0);
};

NonReservedContext.prototype.EXTRACT = function() {
    return this.getToken(SparkSqlParser.EXTRACT, 0);
};

NonReservedContext.prototype.FALSE = function() {
    return this.getToken(SparkSqlParser.FALSE, 0);
};

NonReservedContext.prototype.FETCH = function() {
    return this.getToken(SparkSqlParser.FETCH, 0);
};

NonReservedContext.prototype.FILTER = function() {
    return this.getToken(SparkSqlParser.FILTER, 0);
};

NonReservedContext.prototype.FIELDS = function() {
    return this.getToken(SparkSqlParser.FIELDS, 0);
};

NonReservedContext.prototype.FILEFORMAT = function() {
    return this.getToken(SparkSqlParser.FILEFORMAT, 0);
};

NonReservedContext.prototype.FIRST = function() {
    return this.getToken(SparkSqlParser.FIRST, 0);
};

NonReservedContext.prototype.FOLLOWING = function() {
    return this.getToken(SparkSqlParser.FOLLOWING, 0);
};

NonReservedContext.prototype.FOR = function() {
    return this.getToken(SparkSqlParser.FOR, 0);
};

NonReservedContext.prototype.FOREIGN = function() {
    return this.getToken(SparkSqlParser.FOREIGN, 0);
};

NonReservedContext.prototype.FORMAT = function() {
    return this.getToken(SparkSqlParser.FORMAT, 0);
};

NonReservedContext.prototype.FORMATTED = function() {
    return this.getToken(SparkSqlParser.FORMATTED, 0);
};

NonReservedContext.prototype.FROM = function() {
    return this.getToken(SparkSqlParser.FROM, 0);
};

NonReservedContext.prototype.FUNCTION = function() {
    return this.getToken(SparkSqlParser.FUNCTION, 0);
};

NonReservedContext.prototype.FUNCTIONS = function() {
    return this.getToken(SparkSqlParser.FUNCTIONS, 0);
};

NonReservedContext.prototype.GLOBAL = function() {
    return this.getToken(SparkSqlParser.GLOBAL, 0);
};

NonReservedContext.prototype.GRANT = function() {
    return this.getToken(SparkSqlParser.GRANT, 0);
};

NonReservedContext.prototype.GROUP = function() {
    return this.getToken(SparkSqlParser.GROUP, 0);
};

NonReservedContext.prototype.GROUPING = function() {
    return this.getToken(SparkSqlParser.GROUPING, 0);
};

NonReservedContext.prototype.HAVING = function() {
    return this.getToken(SparkSqlParser.HAVING, 0);
};

NonReservedContext.prototype.IF = function() {
    return this.getToken(SparkSqlParser.IF, 0);
};

NonReservedContext.prototype.IGNORE = function() {
    return this.getToken(SparkSqlParser.IGNORE, 0);
};

NonReservedContext.prototype.IMPORT = function() {
    return this.getToken(SparkSqlParser.IMPORT, 0);
};

NonReservedContext.prototype.IN = function() {
    return this.getToken(SparkSqlParser.IN, 0);
};

NonReservedContext.prototype.INDEX = function() {
    return this.getToken(SparkSqlParser.INDEX, 0);
};

NonReservedContext.prototype.INDEXES = function() {
    return this.getToken(SparkSqlParser.INDEXES, 0);
};

NonReservedContext.prototype.INPATH = function() {
    return this.getToken(SparkSqlParser.INPATH, 0);
};

NonReservedContext.prototype.INPUTFORMAT = function() {
    return this.getToken(SparkSqlParser.INPUTFORMAT, 0);
};

NonReservedContext.prototype.INSERT = function() {
    return this.getToken(SparkSqlParser.INSERT, 0);
};

NonReservedContext.prototype.INTERVAL = function() {
    return this.getToken(SparkSqlParser.INTERVAL, 0);
};

NonReservedContext.prototype.INTO = function() {
    return this.getToken(SparkSqlParser.INTO, 0);
};

NonReservedContext.prototype.IS = function() {
    return this.getToken(SparkSqlParser.IS, 0);
};

NonReservedContext.prototype.ITEMS = function() {
    return this.getToken(SparkSqlParser.ITEMS, 0);
};

NonReservedContext.prototype.KEYS = function() {
    return this.getToken(SparkSqlParser.KEYS, 0);
};

NonReservedContext.prototype.LAST = function() {
    return this.getToken(SparkSqlParser.LAST, 0);
};

NonReservedContext.prototype.LATERAL = function() {
    return this.getToken(SparkSqlParser.LATERAL, 0);
};

NonReservedContext.prototype.LAZY = function() {
    return this.getToken(SparkSqlParser.LAZY, 0);
};

NonReservedContext.prototype.LEADING = function() {
    return this.getToken(SparkSqlParser.LEADING, 0);
};

NonReservedContext.prototype.LIKE = function() {
    return this.getToken(SparkSqlParser.LIKE, 0);
};

NonReservedContext.prototype.LIMIT = function() {
    return this.getToken(SparkSqlParser.LIMIT, 0);
};

NonReservedContext.prototype.LINES = function() {
    return this.getToken(SparkSqlParser.LINES, 0);
};

NonReservedContext.prototype.LIST = function() {
    return this.getToken(SparkSqlParser.LIST, 0);
};

NonReservedContext.prototype.LOAD = function() {
    return this.getToken(SparkSqlParser.LOAD, 0);
};

NonReservedContext.prototype.LOCAL = function() {
    return this.getToken(SparkSqlParser.LOCAL, 0);
};

NonReservedContext.prototype.LOCATION = function() {
    return this.getToken(SparkSqlParser.LOCATION, 0);
};

NonReservedContext.prototype.LOCK = function() {
    return this.getToken(SparkSqlParser.LOCK, 0);
};

NonReservedContext.prototype.LOCKS = function() {
    return this.getToken(SparkSqlParser.LOCKS, 0);
};

NonReservedContext.prototype.LOGICAL = function() {
    return this.getToken(SparkSqlParser.LOGICAL, 0);
};

NonReservedContext.prototype.MACRO = function() {
    return this.getToken(SparkSqlParser.MACRO, 0);
};

NonReservedContext.prototype.MAP = function() {
    return this.getToken(SparkSqlParser.MAP, 0);
};

NonReservedContext.prototype.MATCHED = function() {
    return this.getToken(SparkSqlParser.MATCHED, 0);
};

NonReservedContext.prototype.MERGE = function() {
    return this.getToken(SparkSqlParser.MERGE, 0);
};

NonReservedContext.prototype.MSCK = function() {
    return this.getToken(SparkSqlParser.MSCK, 0);
};

NonReservedContext.prototype.NAMESPACE = function() {
    return this.getToken(SparkSqlParser.NAMESPACE, 0);
};

NonReservedContext.prototype.NAMESPACES = function() {
    return this.getToken(SparkSqlParser.NAMESPACES, 0);
};

NonReservedContext.prototype.NO = function() {
    return this.getToken(SparkSqlParser.NO, 0);
};

NonReservedContext.prototype.NOT = function() {
    return this.getToken(SparkSqlParser.NOT, 0);
};

NonReservedContext.prototype.NULL = function() {
    return this.getToken(SparkSqlParser.NULL, 0);
};

NonReservedContext.prototype.NULLS = function() {
    return this.getToken(SparkSqlParser.NULLS, 0);
};

NonReservedContext.prototype.OF = function() {
    return this.getToken(SparkSqlParser.OF, 0);
};

NonReservedContext.prototype.ONLY = function() {
    return this.getToken(SparkSqlParser.ONLY, 0);
};

NonReservedContext.prototype.OPTION = function() {
    return this.getToken(SparkSqlParser.OPTION, 0);
};

NonReservedContext.prototype.OPTIONS = function() {
    return this.getToken(SparkSqlParser.OPTIONS, 0);
};

NonReservedContext.prototype.OR = function() {
    return this.getToken(SparkSqlParser.OR, 0);
};

NonReservedContext.prototype.ORDER = function() {
    return this.getToken(SparkSqlParser.ORDER, 0);
};

NonReservedContext.prototype.OUT = function() {
    return this.getToken(SparkSqlParser.OUT, 0);
};

NonReservedContext.prototype.OUTER = function() {
    return this.getToken(SparkSqlParser.OUTER, 0);
};

NonReservedContext.prototype.OUTPUTFORMAT = function() {
    return this.getToken(SparkSqlParser.OUTPUTFORMAT, 0);
};

NonReservedContext.prototype.OVER = function() {
    return this.getToken(SparkSqlParser.OVER, 0);
};

NonReservedContext.prototype.OVERLAPS = function() {
    return this.getToken(SparkSqlParser.OVERLAPS, 0);
};

NonReservedContext.prototype.OVERLAY = function() {
    return this.getToken(SparkSqlParser.OVERLAY, 0);
};

NonReservedContext.prototype.OVERWRITE = function() {
    return this.getToken(SparkSqlParser.OVERWRITE, 0);
};

NonReservedContext.prototype.PARTITION = function() {
    return this.getToken(SparkSqlParser.PARTITION, 0);
};

NonReservedContext.prototype.PARTITIONED = function() {
    return this.getToken(SparkSqlParser.PARTITIONED, 0);
};

NonReservedContext.prototype.PARTITIONS = function() {
    return this.getToken(SparkSqlParser.PARTITIONS, 0);
};

NonReservedContext.prototype.PERCENTLIT = function() {
    return this.getToken(SparkSqlParser.PERCENTLIT, 0);
};

NonReservedContext.prototype.PIVOT = function() {
    return this.getToken(SparkSqlParser.PIVOT, 0);
};

NonReservedContext.prototype.PLACING = function() {
    return this.getToken(SparkSqlParser.PLACING, 0);
};

NonReservedContext.prototype.POSITION = function() {
    return this.getToken(SparkSqlParser.POSITION, 0);
};

NonReservedContext.prototype.PRECEDING = function() {
    return this.getToken(SparkSqlParser.PRECEDING, 0);
};

NonReservedContext.prototype.PRIMARY = function() {
    return this.getToken(SparkSqlParser.PRIMARY, 0);
};

NonReservedContext.prototype.PRINCIPALS = function() {
    return this.getToken(SparkSqlParser.PRINCIPALS, 0);
};

NonReservedContext.prototype.PROPERTIES = function() {
    return this.getToken(SparkSqlParser.PROPERTIES, 0);
};

NonReservedContext.prototype.PURGE = function() {
    return this.getToken(SparkSqlParser.PURGE, 0);
};

NonReservedContext.prototype.QUERY = function() {
    return this.getToken(SparkSqlParser.QUERY, 0);
};

NonReservedContext.prototype.RANGE = function() {
    return this.getToken(SparkSqlParser.RANGE, 0);
};

NonReservedContext.prototype.RECORDREADER = function() {
    return this.getToken(SparkSqlParser.RECORDREADER, 0);
};

NonReservedContext.prototype.RECORDWRITER = function() {
    return this.getToken(SparkSqlParser.RECORDWRITER, 0);
};

NonReservedContext.prototype.RECOVER = function() {
    return this.getToken(SparkSqlParser.RECOVER, 0);
};

NonReservedContext.prototype.REDUCE = function() {
    return this.getToken(SparkSqlParser.REDUCE, 0);
};

NonReservedContext.prototype.REFERENCES = function() {
    return this.getToken(SparkSqlParser.REFERENCES, 0);
};

NonReservedContext.prototype.REFRESH = function() {
    return this.getToken(SparkSqlParser.REFRESH, 0);
};

NonReservedContext.prototype.RENAME = function() {
    return this.getToken(SparkSqlParser.RENAME, 0);
};

NonReservedContext.prototype.REPAIR = function() {
    return this.getToken(SparkSqlParser.REPAIR, 0);
};

NonReservedContext.prototype.REPLACE = function() {
    return this.getToken(SparkSqlParser.REPLACE, 0);
};

NonReservedContext.prototype.RESET = function() {
    return this.getToken(SparkSqlParser.RESET, 0);
};

NonReservedContext.prototype.RESTRICT = function() {
    return this.getToken(SparkSqlParser.RESTRICT, 0);
};

NonReservedContext.prototype.REVOKE = function() {
    return this.getToken(SparkSqlParser.REVOKE, 0);
};

NonReservedContext.prototype.RLIKE = function() {
    return this.getToken(SparkSqlParser.RLIKE, 0);
};

NonReservedContext.prototype.ROLE = function() {
    return this.getToken(SparkSqlParser.ROLE, 0);
};

NonReservedContext.prototype.ROLES = function() {
    return this.getToken(SparkSqlParser.ROLES, 0);
};

NonReservedContext.prototype.ROLLBACK = function() {
    return this.getToken(SparkSqlParser.ROLLBACK, 0);
};

NonReservedContext.prototype.ROLLUP = function() {
    return this.getToken(SparkSqlParser.ROLLUP, 0);
};

NonReservedContext.prototype.ROW = function() {
    return this.getToken(SparkSqlParser.ROW, 0);
};

NonReservedContext.prototype.ROWS = function() {
    return this.getToken(SparkSqlParser.ROWS, 0);
};

NonReservedContext.prototype.SCHEMA = function() {
    return this.getToken(SparkSqlParser.SCHEMA, 0);
};

NonReservedContext.prototype.SELECT = function() {
    return this.getToken(SparkSqlParser.SELECT, 0);
};

NonReservedContext.prototype.SEPARATED = function() {
    return this.getToken(SparkSqlParser.SEPARATED, 0);
};

NonReservedContext.prototype.SERDE = function() {
    return this.getToken(SparkSqlParser.SERDE, 0);
};

NonReservedContext.prototype.SERDEPROPERTIES = function() {
    return this.getToken(SparkSqlParser.SERDEPROPERTIES, 0);
};

NonReservedContext.prototype.SESSION_USER = function() {
    return this.getToken(SparkSqlParser.SESSION_USER, 0);
};

NonReservedContext.prototype.SET = function() {
    return this.getToken(SparkSqlParser.SET, 0);
};

NonReservedContext.prototype.SETS = function() {
    return this.getToken(SparkSqlParser.SETS, 0);
};

NonReservedContext.prototype.SHOW = function() {
    return this.getToken(SparkSqlParser.SHOW, 0);
};

NonReservedContext.prototype.SKEWED = function() {
    return this.getToken(SparkSqlParser.SKEWED, 0);
};

NonReservedContext.prototype.SOME = function() {
    return this.getToken(SparkSqlParser.SOME, 0);
};

NonReservedContext.prototype.SORT = function() {
    return this.getToken(SparkSqlParser.SORT, 0);
};

NonReservedContext.prototype.SORTED = function() {
    return this.getToken(SparkSqlParser.SORTED, 0);
};

NonReservedContext.prototype.START = function() {
    return this.getToken(SparkSqlParser.START, 0);
};

NonReservedContext.prototype.STATISTICS = function() {
    return this.getToken(SparkSqlParser.STATISTICS, 0);
};

NonReservedContext.prototype.STORED = function() {
    return this.getToken(SparkSqlParser.STORED, 0);
};

NonReservedContext.prototype.STRATIFY = function() {
    return this.getToken(SparkSqlParser.STRATIFY, 0);
};

NonReservedContext.prototype.STRUCT = function() {
    return this.getToken(SparkSqlParser.STRUCT, 0);
};

NonReservedContext.prototype.SUBSTR = function() {
    return this.getToken(SparkSqlParser.SUBSTR, 0);
};

NonReservedContext.prototype.SUBSTRING = function() {
    return this.getToken(SparkSqlParser.SUBSTRING, 0);
};

NonReservedContext.prototype.TABLE = function() {
    return this.getToken(SparkSqlParser.TABLE, 0);
};

NonReservedContext.prototype.TABLES = function() {
    return this.getToken(SparkSqlParser.TABLES, 0);
};

NonReservedContext.prototype.TABLESAMPLE = function() {
    return this.getToken(SparkSqlParser.TABLESAMPLE, 0);
};

NonReservedContext.prototype.TBLPROPERTIES = function() {
    return this.getToken(SparkSqlParser.TBLPROPERTIES, 0);
};

NonReservedContext.prototype.TEMPORARY = function() {
    return this.getToken(SparkSqlParser.TEMPORARY, 0);
};

NonReservedContext.prototype.TERMINATED = function() {
    return this.getToken(SparkSqlParser.TERMINATED, 0);
};

NonReservedContext.prototype.THEN = function() {
    return this.getToken(SparkSqlParser.THEN, 0);
};

NonReservedContext.prototype.TIME = function() {
    return this.getToken(SparkSqlParser.TIME, 0);
};

NonReservedContext.prototype.TO = function() {
    return this.getToken(SparkSqlParser.TO, 0);
};

NonReservedContext.prototype.TOUCH = function() {
    return this.getToken(SparkSqlParser.TOUCH, 0);
};

NonReservedContext.prototype.TRAILING = function() {
    return this.getToken(SparkSqlParser.TRAILING, 0);
};

NonReservedContext.prototype.TRANSACTION = function() {
    return this.getToken(SparkSqlParser.TRANSACTION, 0);
};

NonReservedContext.prototype.TRANSACTIONS = function() {
    return this.getToken(SparkSqlParser.TRANSACTIONS, 0);
};

NonReservedContext.prototype.TRANSFORM = function() {
    return this.getToken(SparkSqlParser.TRANSFORM, 0);
};

NonReservedContext.prototype.TRIM = function() {
    return this.getToken(SparkSqlParser.TRIM, 0);
};

NonReservedContext.prototype.TRUE = function() {
    return this.getToken(SparkSqlParser.TRUE, 0);
};

NonReservedContext.prototype.TRUNCATE = function() {
    return this.getToken(SparkSqlParser.TRUNCATE, 0);
};

NonReservedContext.prototype.TYPE = function() {
    return this.getToken(SparkSqlParser.TYPE, 0);
};

NonReservedContext.prototype.UNARCHIVE = function() {
    return this.getToken(SparkSqlParser.UNARCHIVE, 0);
};

NonReservedContext.prototype.UNBOUNDED = function() {
    return this.getToken(SparkSqlParser.UNBOUNDED, 0);
};

NonReservedContext.prototype.UNCACHE = function() {
    return this.getToken(SparkSqlParser.UNCACHE, 0);
};

NonReservedContext.prototype.UNIQUE = function() {
    return this.getToken(SparkSqlParser.UNIQUE, 0);
};

NonReservedContext.prototype.UNKNOWN = function() {
    return this.getToken(SparkSqlParser.UNKNOWN, 0);
};

NonReservedContext.prototype.UNLOCK = function() {
    return this.getToken(SparkSqlParser.UNLOCK, 0);
};

NonReservedContext.prototype.UNSET = function() {
    return this.getToken(SparkSqlParser.UNSET, 0);
};

NonReservedContext.prototype.UPDATE = function() {
    return this.getToken(SparkSqlParser.UPDATE, 0);
};

NonReservedContext.prototype.USE = function() {
    return this.getToken(SparkSqlParser.USE, 0);
};

NonReservedContext.prototype.USER = function() {
    return this.getToken(SparkSqlParser.USER, 0);
};

NonReservedContext.prototype.VALUES = function() {
    return this.getToken(SparkSqlParser.VALUES, 0);
};

NonReservedContext.prototype.VIEW = function() {
    return this.getToken(SparkSqlParser.VIEW, 0);
};

NonReservedContext.prototype.VIEWS = function() {
    return this.getToken(SparkSqlParser.VIEWS, 0);
};

NonReservedContext.prototype.WHEN = function() {
    return this.getToken(SparkSqlParser.WHEN, 0);
};

NonReservedContext.prototype.WHERE = function() {
    return this.getToken(SparkSqlParser.WHERE, 0);
};

NonReservedContext.prototype.WINDOW = function() {
    return this.getToken(SparkSqlParser.WINDOW, 0);
};

NonReservedContext.prototype.WITH = function() {
    return this.getToken(SparkSqlParser.WITH, 0);
};

NonReservedContext.prototype.ZONE = function() {
    return this.getToken(SparkSqlParser.ZONE, 0);
};

NonReservedContext.prototype.enterRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.enterNonReserved(this);
	}
};

NonReservedContext.prototype.exitRule = function(listener) {
    if(listener instanceof SparkSqlListener ) {
        listener.exitNonReserved(this);
	}
};

NonReservedContext.prototype.accept = function(visitor) {
    if ( visitor instanceof SparkSqlVisitor ) {
        return visitor.visitNonReserved(this);
    } else {
        return visitor.visitChildren(this);
    }
};




SparkSqlParser.NonReservedContext = NonReservedContext;

SparkSqlParser.prototype.nonReserved = function() {

    var localctx = new NonReservedContext(this, this._ctx, this.state);
    this.enterRule(localctx, 272, SparkSqlParser.RULE_nonReserved);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3028;
        _la = this._input.LA(1);
        if(!(((((_la - 11)) & ~0x1f) == 0 && ((1 << (_la - 11)) & ((1 << (SparkSqlParser.ADD - 11)) | (1 << (SparkSqlParser.AFTER - 11)) | (1 << (SparkSqlParser.ALL - 11)) | (1 << (SparkSqlParser.ALTER - 11)) | (1 << (SparkSqlParser.ANALYZE - 11)) | (1 << (SparkSqlParser.AND - 11)) | (1 << (SparkSqlParser.ANY - 11)) | (1 << (SparkSqlParser.ARCHIVE - 11)) | (1 << (SparkSqlParser.ARRAY - 11)) | (1 << (SparkSqlParser.AS - 11)) | (1 << (SparkSqlParser.ASC - 11)) | (1 << (SparkSqlParser.AT - 11)) | (1 << (SparkSqlParser.AUTHORIZATION - 11)) | (1 << (SparkSqlParser.BETWEEN - 11)) | (1 << (SparkSqlParser.BOTH - 11)) | (1 << (SparkSqlParser.BUCKET - 11)) | (1 << (SparkSqlParser.BUCKETS - 11)) | (1 << (SparkSqlParser.BY - 11)) | (1 << (SparkSqlParser.CACHE - 11)) | (1 << (SparkSqlParser.CASCADE - 11)) | (1 << (SparkSqlParser.CASE - 11)) | (1 << (SparkSqlParser.CAST - 11)) | (1 << (SparkSqlParser.CHANGE - 11)) | (1 << (SparkSqlParser.CHECK - 11)) | (1 << (SparkSqlParser.CLEAR - 11)) | (1 << (SparkSqlParser.CLUSTER - 11)) | (1 << (SparkSqlParser.CLUSTERED - 11)) | (1 << (SparkSqlParser.CODEGEN - 11)) | (1 << (SparkSqlParser.COLLATE - 11)) | (1 << (SparkSqlParser.COLLECTION - 11)) | (1 << (SparkSqlParser.COLUMN - 11)))) !== 0) || ((((_la - 43)) & ~0x1f) == 0 && ((1 << (_la - 43)) & ((1 << (SparkSqlParser.COLUMNS - 43)) | (1 << (SparkSqlParser.COMMENT - 43)) | (1 << (SparkSqlParser.COMMIT - 43)) | (1 << (SparkSqlParser.COMPACT - 43)) | (1 << (SparkSqlParser.COMPACTIONS - 43)) | (1 << (SparkSqlParser.COMPUTE - 43)) | (1 << (SparkSqlParser.CONCATENATE - 43)) | (1 << (SparkSqlParser.CONSTRAINT - 43)) | (1 << (SparkSqlParser.COST - 43)) | (1 << (SparkSqlParser.CREATE - 43)) | (1 << (SparkSqlParser.CUBE - 43)) | (1 << (SparkSqlParser.CURRENT - 43)) | (1 << (SparkSqlParser.CURRENT_DATE - 43)) | (1 << (SparkSqlParser.CURRENT_TIME - 43)) | (1 << (SparkSqlParser.CURRENT_TIMESTAMP - 43)) | (1 << (SparkSqlParser.CURRENT_USER - 43)) | (1 << (SparkSqlParser.DATA - 43)) | (1 << (SparkSqlParser.DATABASE - 43)) | (1 << (SparkSqlParser.DATABASES - 43)) | (1 << (SparkSqlParser.DBPROPERTIES - 43)) | (1 << (SparkSqlParser.DEFINED - 43)) | (1 << (SparkSqlParser.DELETE - 43)) | (1 << (SparkSqlParser.DELIMITED - 43)) | (1 << (SparkSqlParser.DESC - 43)) | (1 << (SparkSqlParser.DESCRIBE - 43)) | (1 << (SparkSqlParser.DFS - 43)) | (1 << (SparkSqlParser.DIRECTORIES - 43)) | (1 << (SparkSqlParser.DIRECTORY - 43)) | (1 << (SparkSqlParser.DISTINCT - 43)) | (1 << (SparkSqlParser.DISTRIBUTE - 43)) | (1 << (SparkSqlParser.DIV - 43)))) !== 0) || ((((_la - 75)) & ~0x1f) == 0 && ((1 << (_la - 75)) & ((1 << (SparkSqlParser.DROP - 75)) | (1 << (SparkSqlParser.ELSE - 75)) | (1 << (SparkSqlParser.END - 75)) | (1 << (SparkSqlParser.ESCAPE - 75)) | (1 << (SparkSqlParser.ESCAPED - 75)) | (1 << (SparkSqlParser.EXCHANGE - 75)) | (1 << (SparkSqlParser.EXISTS - 75)) | (1 << (SparkSqlParser.EXPLAIN - 75)) | (1 << (SparkSqlParser.EXPORT - 75)) | (1 << (SparkSqlParser.EXTENDED - 75)) | (1 << (SparkSqlParser.EXTERNAL - 75)) | (1 << (SparkSqlParser.EXTRACT - 75)) | (1 << (SparkSqlParser.FALSE - 75)) | (1 << (SparkSqlParser.FETCH - 75)) | (1 << (SparkSqlParser.FIELDS - 75)) | (1 << (SparkSqlParser.FILTER - 75)) | (1 << (SparkSqlParser.FILEFORMAT - 75)) | (1 << (SparkSqlParser.FIRST - 75)) | (1 << (SparkSqlParser.FOLLOWING - 75)) | (1 << (SparkSqlParser.FOR - 75)) | (1 << (SparkSqlParser.FOREIGN - 75)) | (1 << (SparkSqlParser.FORMAT - 75)) | (1 << (SparkSqlParser.FORMATTED - 75)) | (1 << (SparkSqlParser.FROM - 75)) | (1 << (SparkSqlParser.FUNCTION - 75)) | (1 << (SparkSqlParser.FUNCTIONS - 75)) | (1 << (SparkSqlParser.GLOBAL - 75)) | (1 << (SparkSqlParser.GRANT - 75)) | (1 << (SparkSqlParser.GROUP - 75)) | (1 << (SparkSqlParser.GROUPING - 75)))) !== 0) || ((((_la - 107)) & ~0x1f) == 0 && ((1 << (_la - 107)) & ((1 << (SparkSqlParser.HAVING - 107)) | (1 << (SparkSqlParser.IF - 107)) | (1 << (SparkSqlParser.IGNORE - 107)) | (1 << (SparkSqlParser.IMPORT - 107)) | (1 << (SparkSqlParser.IN - 107)) | (1 << (SparkSqlParser.INDEX - 107)) | (1 << (SparkSqlParser.INDEXES - 107)) | (1 << (SparkSqlParser.INPATH - 107)) | (1 << (SparkSqlParser.INPUTFORMAT - 107)) | (1 << (SparkSqlParser.INSERT - 107)) | (1 << (SparkSqlParser.INTERVAL - 107)) | (1 << (SparkSqlParser.INTO - 107)) | (1 << (SparkSqlParser.IS - 107)) | (1 << (SparkSqlParser.ITEMS - 107)) | (1 << (SparkSqlParser.KEYS - 107)) | (1 << (SparkSqlParser.LAST - 107)) | (1 << (SparkSqlParser.LATERAL - 107)) | (1 << (SparkSqlParser.LAZY - 107)) | (1 << (SparkSqlParser.LEADING - 107)) | (1 << (SparkSqlParser.LIKE - 107)) | (1 << (SparkSqlParser.LIMIT - 107)) | (1 << (SparkSqlParser.LINES - 107)) | (1 << (SparkSqlParser.LIST - 107)) | (1 << (SparkSqlParser.LOAD - 107)) | (1 << (SparkSqlParser.LOCAL - 107)) | (1 << (SparkSqlParser.LOCATION - 107)) | (1 << (SparkSqlParser.LOCK - 107)) | (1 << (SparkSqlParser.LOCKS - 107)))) !== 0) || ((((_la - 139)) & ~0x1f) == 0 && ((1 << (_la - 139)) & ((1 << (SparkSqlParser.LOGICAL - 139)) | (1 << (SparkSqlParser.MACRO - 139)) | (1 << (SparkSqlParser.MAP - 139)) | (1 << (SparkSqlParser.MATCHED - 139)) | (1 << (SparkSqlParser.MERGE - 139)) | (1 << (SparkSqlParser.MSCK - 139)) | (1 << (SparkSqlParser.NAMESPACE - 139)) | (1 << (SparkSqlParser.NAMESPACES - 139)) | (1 << (SparkSqlParser.NO - 139)) | (1 << (SparkSqlParser.NOT - 139)) | (1 << (SparkSqlParser.NULL - 139)) | (1 << (SparkSqlParser.NULLS - 139)) | (1 << (SparkSqlParser.OF - 139)) | (1 << (SparkSqlParser.ONLY - 139)) | (1 << (SparkSqlParser.OPTION - 139)) | (1 << (SparkSqlParser.OPTIONS - 139)) | (1 << (SparkSqlParser.OR - 139)) | (1 << (SparkSqlParser.ORDER - 139)) | (1 << (SparkSqlParser.OUT - 139)) | (1 << (SparkSqlParser.OUTER - 139)) | (1 << (SparkSqlParser.OUTPUTFORMAT - 139)) | (1 << (SparkSqlParser.OVER - 139)) | (1 << (SparkSqlParser.OVERLAPS - 139)) | (1 << (SparkSqlParser.OVERLAY - 139)) | (1 << (SparkSqlParser.OVERWRITE - 139)) | (1 << (SparkSqlParser.PARTITION - 139)) | (1 << (SparkSqlParser.PARTITIONED - 139)) | (1 << (SparkSqlParser.PARTITIONS - 139)) | (1 << (SparkSqlParser.PERCENTLIT - 139)) | (1 << (SparkSqlParser.PIVOT - 139)))) !== 0) || ((((_la - 171)) & ~0x1f) == 0 && ((1 << (_la - 171)) & ((1 << (SparkSqlParser.PLACING - 171)) | (1 << (SparkSqlParser.POSITION - 171)) | (1 << (SparkSqlParser.PRECEDING - 171)) | (1 << (SparkSqlParser.PRIMARY - 171)) | (1 << (SparkSqlParser.PRINCIPALS - 171)) | (1 << (SparkSqlParser.PROPERTIES - 171)) | (1 << (SparkSqlParser.PURGE - 171)) | (1 << (SparkSqlParser.QUERY - 171)) | (1 << (SparkSqlParser.RANGE - 171)) | (1 << (SparkSqlParser.RECORDREADER - 171)) | (1 << (SparkSqlParser.RECORDWRITER - 171)) | (1 << (SparkSqlParser.RECOVER - 171)) | (1 << (SparkSqlParser.REDUCE - 171)) | (1 << (SparkSqlParser.REFERENCES - 171)) | (1 << (SparkSqlParser.REFRESH - 171)) | (1 << (SparkSqlParser.RENAME - 171)) | (1 << (SparkSqlParser.REPAIR - 171)) | (1 << (SparkSqlParser.REPLACE - 171)) | (1 << (SparkSqlParser.RESET - 171)) | (1 << (SparkSqlParser.RESTRICT - 171)) | (1 << (SparkSqlParser.REVOKE - 171)) | (1 << (SparkSqlParser.RLIKE - 171)) | (1 << (SparkSqlParser.ROLE - 171)) | (1 << (SparkSqlParser.ROLES - 171)) | (1 << (SparkSqlParser.ROLLBACK - 171)) | (1 << (SparkSqlParser.ROLLUP - 171)) | (1 << (SparkSqlParser.ROW - 171)) | (1 << (SparkSqlParser.ROWS - 171)) | (1 << (SparkSqlParser.SCHEMA - 171)) | (1 << (SparkSqlParser.SELECT - 171)))) !== 0) || ((((_la - 203)) & ~0x1f) == 0 && ((1 << (_la - 203)) & ((1 << (SparkSqlParser.SEPARATED - 203)) | (1 << (SparkSqlParser.SERDE - 203)) | (1 << (SparkSqlParser.SERDEPROPERTIES - 203)) | (1 << (SparkSqlParser.SESSION_USER - 203)) | (1 << (SparkSqlParser.SET - 203)) | (1 << (SparkSqlParser.SETS - 203)) | (1 << (SparkSqlParser.SHOW - 203)) | (1 << (SparkSqlParser.SKEWED - 203)) | (1 << (SparkSqlParser.SOME - 203)) | (1 << (SparkSqlParser.SORT - 203)) | (1 << (SparkSqlParser.SORTED - 203)) | (1 << (SparkSqlParser.START - 203)) | (1 << (SparkSqlParser.STATISTICS - 203)) | (1 << (SparkSqlParser.STORED - 203)) | (1 << (SparkSqlParser.STRATIFY - 203)) | (1 << (SparkSqlParser.STRUCT - 203)) | (1 << (SparkSqlParser.SUBSTR - 203)) | (1 << (SparkSqlParser.SUBSTRING - 203)) | (1 << (SparkSqlParser.TABLE - 203)) | (1 << (SparkSqlParser.TABLES - 203)) | (1 << (SparkSqlParser.TABLESAMPLE - 203)) | (1 << (SparkSqlParser.TBLPROPERTIES - 203)) | (1 << (SparkSqlParser.TEMPORARY - 203)) | (1 << (SparkSqlParser.TERMINATED - 203)) | (1 << (SparkSqlParser.THEN - 203)) | (1 << (SparkSqlParser.TIME - 203)) | (1 << (SparkSqlParser.TO - 203)) | (1 << (SparkSqlParser.TOUCH - 203)) | (1 << (SparkSqlParser.TRAILING - 203)) | (1 << (SparkSqlParser.TRANSACTION - 203)) | (1 << (SparkSqlParser.TRANSACTIONS - 203)))) !== 0) || ((((_la - 235)) & ~0x1f) == 0 && ((1 << (_la - 235)) & ((1 << (SparkSqlParser.TRANSFORM - 235)) | (1 << (SparkSqlParser.TRIM - 235)) | (1 << (SparkSqlParser.TRUE - 235)) | (1 << (SparkSqlParser.TRUNCATE - 235)) | (1 << (SparkSqlParser.TYPE - 235)) | (1 << (SparkSqlParser.UNARCHIVE - 235)) | (1 << (SparkSqlParser.UNBOUNDED - 235)) | (1 << (SparkSqlParser.UNCACHE - 235)) | (1 << (SparkSqlParser.UNIQUE - 235)) | (1 << (SparkSqlParser.UNKNOWN - 235)) | (1 << (SparkSqlParser.UNLOCK - 235)) | (1 << (SparkSqlParser.UNSET - 235)) | (1 << (SparkSqlParser.UPDATE - 235)) | (1 << (SparkSqlParser.USE - 235)) | (1 << (SparkSqlParser.USER - 235)) | (1 << (SparkSqlParser.VALUES - 235)) | (1 << (SparkSqlParser.VIEW - 235)) | (1 << (SparkSqlParser.VIEWS - 235)) | (1 << (SparkSqlParser.WHEN - 235)) | (1 << (SparkSqlParser.WHERE - 235)) | (1 << (SparkSqlParser.WINDOW - 235)) | (1 << (SparkSqlParser.WITH - 235)) | (1 << (SparkSqlParser.ZONE - 235)))) !== 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;
};


SparkSqlParser.prototype.sempred = function(localctx, ruleIndex, predIndex) {
	switch(ruleIndex) {
	case 42:
			return this.queryTerm_sempred(localctx, predIndex);
	case 95:
			return this.booleanExpression_sempred(localctx, predIndex);
	case 97:
			return this.valueExpression_sempred(localctx, predIndex);
	case 98:
			return this.primaryExpression_sempred(localctx, predIndex);
	case 129:
			return this.identifier_sempred(localctx, predIndex);
	case 130:
			return this.strictIdentifier_sempred(localctx, predIndex);
	case 132:
			return this.number_sempred(localctx, predIndex);
    default:
        throw "No predicate with index:" + ruleIndex;
   }
};

SparkSqlParser.prototype.queryTerm_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 0:
			return this.precpred(this._ctx, 3);
		case 1:
			return legacy_setops_precedence_enbled;
		case 2:
			return this.precpred(this._ctx, 2);
		case 3:
			return !legacy_setops_precedence_enbled;
		case 4:
			return this.precpred(this._ctx, 1);
		case 5:
			return !legacy_setops_precedence_enbled;
		default:
			throw "No predicate with index:" + predIndex;
	}
};

SparkSqlParser.prototype.booleanExpression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 6:
			return this.precpred(this._ctx, 2);
		case 7:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

SparkSqlParser.prototype.valueExpression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 8:
			return this.precpred(this._ctx, 6);
		case 9:
			return this.precpred(this._ctx, 5);
		case 10:
			return this.precpred(this._ctx, 4);
		case 11:
			return this.precpred(this._ctx, 3);
		case 12:
			return this.precpred(this._ctx, 2);
		case 13:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

SparkSqlParser.prototype.primaryExpression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 14:
			return this.precpred(this._ctx, 8);
		case 15:
			return this.precpred(this._ctx, 6);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

SparkSqlParser.prototype.identifier_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 16:
			return !SQL_standard_keyword_behavior;
		default:
			throw "No predicate with index:" + predIndex;
	}
};

SparkSqlParser.prototype.strictIdentifier_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 17:
			return SQL_standard_keyword_behavior;
		case 18:
			return !SQL_standard_keyword_behavior;
		default:
			throw "No predicate with index:" + predIndex;
	}
};

SparkSqlParser.prototype.number_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 19:
			return !legacy_exponent_literal_as_decimal_enabled;
		case 20:
			return !legacy_exponent_literal_as_decimal_enabled;
		case 21:
			return legacy_exponent_literal_as_decimal_enabled;
		default:
			throw "No predicate with index:" + predIndex;
	}
};


exports.SparkSqlParser = SparkSqlParser;
