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

js.prompto.parser.OParser.js Maven / Gradle / Ivy

// Generated from OParser.g4 by ANTLR 4.5
// jshint ignore: start
var antlr4 = require('antlr4/index');
var OParserListener = require('./OParserListener').OParserListener;
var AbstractParser = require('./AbstractParser').AbstractParser;

var grammarFileName = "OParser.g4";

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

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

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

var sharedContextCache = new antlr4.PredictionContextCache();

var literalNames = [ 'null', "' '", 'null', 'null', 'null', "'Java:'", "'C#:'", 
                     "'Python2:'", "'Python3:'", "'JavaScript:'", "'Swift:'", 
                     "':'", "';'", 'null', "'..'", 'null', 'null', 'null', 
                     'null', 'null', 'null', 'null', 'null', "'!'", "'&'", 
                     "'&&'", "'|'", "'||'", 'null', "'-'", "'*'", "'/'", 
                     "'\\'", "'%'", "'>'", "'>='", "'<'", "'<='", "'<>'", 
                     "'='", "'!='", "'=='", "'~='", "'~'", "'<-'", "'->'", 
                     "'Boolean'", "'Character'", "'Text'", "'Integer'", 
                     "'Decimal'", "'Date'", "'Time'", "'DateTime'", "'Period'", 
                     "'Method'", "'Code'", "'Document'", "'Blob'", "'Image'", 
                     "'UUID'", "'Iterator'", "'Cursor'", "'abstract'", "'all'", 
                     "'always'", "'and'", "'any'", "'as'", 'null', "'attr'", 
                     "'attribute'", "'attributes'", "'bindings'", "'break'", 
                     "'by'", "'case'", "'catch'", "'category'", "'class'", 
                     "'close'", "'contains'", "'def'", "'default'", "'define'", 
                     "'delete'", 'null', "'do'", "'doing'", "'each'", "'else'", 
                     "'enum'", "'enumerated'", "'except'", "'execute'", 
                     "'expecting'", "'extends'", "'fetch'", "'filtered'", 
                     "'finally'", "'flush'", "'for'", "'from'", "'getter'", 
                     "'if'", "'in'", "'index'", "'invoke'", "'is'", "'matching'", 
                     "'method'", "'methods'", "'modulo'", "'mutable'", "'native'", 
                     "'None'", "'not'", 'null', "'null'", "'on'", "'one'", 
                     "'open'", "'operator'", "'or'", "'order'", "'otherwise'", 
                     "'pass'", "'raise'", "'read'", "'receiving'", "'resource'", 
                     "'return'", "'returning'", "'rows'", "'self'", "'setter'", 
                     "'singleton'", "'sorted'", "'storable'", "'store'", 
                     "'switch'", "'test'", "'this'", "'throw'", "'to'", 
                     "'try'", "'verifying'", "'with'", "'when'", "'where'", 
                     "'while'", "'write'", 'null', 'null', "'MIN_INTEGER'", 
                     "'MAX_INTEGER'" ];

var symbolicNames = [ 'null', "SPACE", "WS", "LF", "COMMENT", "JAVA", "CSHARP", 
                      "PYTHON2", "PYTHON3", "JAVASCRIPT", "SWIFT", "COLON", 
                      "SEMI", "COMMA", "RANGE", "DOT", "LPAR", "RPAR", "LBRAK", 
                      "RBRAK", "LCURL", "RCURL", "QMARK", "XMARK", "AMP", 
                      "AMP2", "PIPE", "PIPE2", "PLUS", "MINUS", "STAR", 
                      "SLASH", "BSLASH", "PERCENT", "GT", "GTE", "LT", "LTE", 
                      "LTGT", "EQ", "XEQ", "EQ2", "TEQ", "TILDE", "LARROW", 
                      "RARROW", "BOOLEAN", "CHARACTER", "TEXT", "INTEGER", 
                      "DECIMAL", "DATE", "TIME", "DATETIME", "PERIOD", "METHOD_T", 
                      "CODE", "DOCUMENT", "BLOB", "IMAGE", "UUID", "ITERATOR", 
                      "CURSOR", "ABSTRACT", "ALL", "ALWAYS", "AND", "ANY", 
                      "AS", "ASC", "ATTR", "ATTRIBUTE", "ATTRIBUTES", "BINDINGS", 
                      "BREAK", "BY", "CASE", "CATCH", "CATEGORY", "CLASS", 
                      "CLOSE", "CONTAINS", "DEF", "DEFAULT", "DEFINE", "DELETE", 
                      "DESC", "DO", "DOING", "EACH", "ELSE", "ENUM", "ENUMERATED", 
                      "EXCEPT", "EXECUTE", "EXPECTING", "EXTENDS", "FETCH", 
                      "FILTERED", "FINALLY", "FLUSH", "FOR", "FROM", "GETTER", 
                      "IF", "IN", "INDEX", "INVOKE", "IS", "MATCHING", "METHOD", 
                      "METHODS", "MODULO", "MUTABLE", "NATIVE", "NONE", 
                      "NOT", "NOTHING", "NULL", "ON", "ONE", "OPEN", "OPERATOR", 
                      "OR", "ORDER", "OTHERWISE", "PASS", "RAISE", "READ", 
                      "RECEIVING", "RESOURCE", "RETURN", "RETURNING", "ROWS", 
                      "SELF", "SETTER", "SINGLETON", "SORTED", "STORABLE", 
                      "STORE", "SWITCH", "TEST", "THIS", "THROW", "TO", 
                      "TRY", "VERIFYING", "WITH", "WHEN", "WHERE", "WHILE", 
                      "WRITE", "BOOLEAN_LITERAL", "CHAR_LITERAL", "MIN_INTEGER", 
                      "MAX_INTEGER", "SYMBOL_IDENTIFIER", "TYPE_IDENTIFIER", 
                      "VARIABLE_IDENTIFIER", "NATIVE_IDENTIFIER", "DOLLAR_IDENTIFIER", 
                      "TEXT_LITERAL", "UUID_LITERAL", "INTEGER_LITERAL", 
                      "HEXA_LITERAL", "DECIMAL_LITERAL", "DATETIME_LITERAL", 
                      "TIME_LITERAL", "DATE_LITERAL", "PERIOD_LITERAL" ];

var ruleNames =  [ "enum_category_declaration", "enum_native_declaration", 
                   "category_symbol", "native_symbol", "attribute_declaration", 
                   "concrete_category_declaration", "singleton_category_declaration", 
                   "derived_list", "category_method_list", "operator_method_declaration", 
                   "setter_method_declaration", "native_setter_declaration", 
                   "getter_method_declaration", "native_getter_declaration", 
                   "native_resource_declaration", "native_category_declaration", 
                   "native_category_bindings", "native_category_binding_list", 
                   "abstract_method_declaration", "concrete_method_declaration", 
                   "native_method_declaration", "test_method_declaration", 
                   "assertion", "typed_argument", "statement_or_list", "statement", 
                   "flush_statement", "store_statement", "with_resource_statement", 
                   "with_singleton_statement", "switch_statement", "switch_case_statement", 
                   "for_each_statement", "do_while_statement", "while_statement", 
                   "if_statement", "else_if_statement_list", "raise_statement", 
                   "try_statement", "catch_statement", "break_statement", 
                   "return_statement", "method_call", "method_selector", 
                   "callable_parent", "callable_selector", "expression", 
                   "an_expression", "closure_expression", "instance_expression", 
                   "method_expression", "blob_expression", "document_expression", 
                   "write_statement", "filtered_list_expression", "fetch_store_expression", 
                   "sorted_expression", "selector_expression", "constructor_expression", 
                   "argument_assignment_list", "argument_assignment", "assign_instance_statement", 
                   "child_instance", "assign_tuple_statement", "null_literal", 
                   "declaration_list", "declarations", "declaration", "resource_declaration", 
                   "enum_declaration", "native_symbol_list", "category_symbol_list", 
                   "symbol_list", "attribute_constraint", "list_literal", 
                   "set_literal", "expression_list", "range_literal", "typedef", 
                   "primary_type", "native_type", "category_type", "mutable_category_type", 
                   "code_type", "category_declaration", "type_identifier_list", 
                   "method_identifier", "identifier", "variable_identifier", 
                   "attribute_identifier", "type_identifier", "symbol_identifier", 
                   "argument_list", "argument", "operator_argument", "named_argument", 
                   "code_argument", "category_or_any_type", "any_type", 
                   "member_method_declaration_list", "member_method_declaration", 
                   "native_member_method_declaration_list", "native_member_method_declaration", 
                   "native_category_binding", "python_category_binding", 
                   "python_module", "javascript_category_binding", "javascript_module", 
                   "variable_identifier_list", "attribute_identifier_list", 
                   "method_declaration", "comment_statement", "native_statement_list", 
                   "native_statement", "python_native_statement", "javascript_native_statement", 
                   "statement_list", "assertion_list", "switch_case_statement_list", 
                   "catch_statement_list", "literal_collection", "atomic_literal", 
                   "literal_list_literal", "selectable_expression", "this_expression", 
                   "parenthesis_expression", "literal_expression", "collection_literal", 
                   "tuple_literal", "dict_literal", "expression_tuple", 
                   "dict_entry_list", "dict_entry", "slice_arguments", "assign_variable_statement", 
                   "assignable_instance", "is_expression", "read_all_expression", 
                   "read_one_expression", "order_by_list", "order_by", "operator", 
                   "new_token", "key_token", "module_token", "value_token", 
                   "symbols_token", "assign", "multiply", "divide", "idivide", 
                   "modulo", "lfs", "lfp", "javascript_statement", "javascript_expression", 
                   "javascript_primary_expression", "javascript_this_expression", 
                   "javascript_new_expression", "javascript_selector_expression", 
                   "javascript_method_expression", "javascript_arguments", 
                   "javascript_item_expression", "javascript_parenthesis_expression", 
                   "javascript_identifier_expression", "javascript_literal_expression", 
                   "javascript_identifier", "python_statement", "python_expression", 
                   "python_primary_expression", "python_self_expression", 
                   "python_selector_expression", "python_method_expression", 
                   "python_argument_list", "python_ordinal_argument_list", 
                   "python_named_argument_list", "python_parenthesis_expression", 
                   "python_identifier_expression", "python_literal_expression", 
                   "python_identifier", "java_statement", "java_expression", 
                   "java_primary_expression", "java_this_expression", "java_new_expression", 
                   "java_selector_expression", "java_method_expression", 
                   "java_arguments", "java_item_expression", "java_parenthesis_expression", 
                   "java_identifier_expression", "java_class_identifier_expression", 
                   "java_literal_expression", "java_identifier", "csharp_statement", 
                   "csharp_expression", "csharp_primary_expression", "csharp_this_expression", 
                   "csharp_new_expression", "csharp_selector_expression", 
                   "csharp_method_expression", "csharp_arguments", "csharp_item_expression", 
                   "csharp_parenthesis_expression", "csharp_identifier_expression", 
                   "csharp_literal_expression", "csharp_identifier" ];

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

OParser.prototype = Object.create(AbstractParser.prototype);
OParser.prototype.constructor = OParser;

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

OParser.EOF = antlr4.Token.EOF;
OParser.SPACE = 1;
OParser.WS = 2;
OParser.LF = 3;
OParser.COMMENT = 4;
OParser.JAVA = 5;
OParser.CSHARP = 6;
OParser.PYTHON2 = 7;
OParser.PYTHON3 = 8;
OParser.JAVASCRIPT = 9;
OParser.SWIFT = 10;
OParser.COLON = 11;
OParser.SEMI = 12;
OParser.COMMA = 13;
OParser.RANGE = 14;
OParser.DOT = 15;
OParser.LPAR = 16;
OParser.RPAR = 17;
OParser.LBRAK = 18;
OParser.RBRAK = 19;
OParser.LCURL = 20;
OParser.RCURL = 21;
OParser.QMARK = 22;
OParser.XMARK = 23;
OParser.AMP = 24;
OParser.AMP2 = 25;
OParser.PIPE = 26;
OParser.PIPE2 = 27;
OParser.PLUS = 28;
OParser.MINUS = 29;
OParser.STAR = 30;
OParser.SLASH = 31;
OParser.BSLASH = 32;
OParser.PERCENT = 33;
OParser.GT = 34;
OParser.GTE = 35;
OParser.LT = 36;
OParser.LTE = 37;
OParser.LTGT = 38;
OParser.EQ = 39;
OParser.XEQ = 40;
OParser.EQ2 = 41;
OParser.TEQ = 42;
OParser.TILDE = 43;
OParser.LARROW = 44;
OParser.RARROW = 45;
OParser.BOOLEAN = 46;
OParser.CHARACTER = 47;
OParser.TEXT = 48;
OParser.INTEGER = 49;
OParser.DECIMAL = 50;
OParser.DATE = 51;
OParser.TIME = 52;
OParser.DATETIME = 53;
OParser.PERIOD = 54;
OParser.METHOD_T = 55;
OParser.CODE = 56;
OParser.DOCUMENT = 57;
OParser.BLOB = 58;
OParser.IMAGE = 59;
OParser.UUID = 60;
OParser.ITERATOR = 61;
OParser.CURSOR = 62;
OParser.ABSTRACT = 63;
OParser.ALL = 64;
OParser.ALWAYS = 65;
OParser.AND = 66;
OParser.ANY = 67;
OParser.AS = 68;
OParser.ASC = 69;
OParser.ATTR = 70;
OParser.ATTRIBUTE = 71;
OParser.ATTRIBUTES = 72;
OParser.BINDINGS = 73;
OParser.BREAK = 74;
OParser.BY = 75;
OParser.CASE = 76;
OParser.CATCH = 77;
OParser.CATEGORY = 78;
OParser.CLASS = 79;
OParser.CLOSE = 80;
OParser.CONTAINS = 81;
OParser.DEF = 82;
OParser.DEFAULT = 83;
OParser.DEFINE = 84;
OParser.DELETE = 85;
OParser.DESC = 86;
OParser.DO = 87;
OParser.DOING = 88;
OParser.EACH = 89;
OParser.ELSE = 90;
OParser.ENUM = 91;
OParser.ENUMERATED = 92;
OParser.EXCEPT = 93;
OParser.EXECUTE = 94;
OParser.EXPECTING = 95;
OParser.EXTENDS = 96;
OParser.FETCH = 97;
OParser.FILTERED = 98;
OParser.FINALLY = 99;
OParser.FLUSH = 100;
OParser.FOR = 101;
OParser.FROM = 102;
OParser.GETTER = 103;
OParser.IF = 104;
OParser.IN = 105;
OParser.INDEX = 106;
OParser.INVOKE = 107;
OParser.IS = 108;
OParser.MATCHING = 109;
OParser.METHOD = 110;
OParser.METHODS = 111;
OParser.MODULO = 112;
OParser.MUTABLE = 113;
OParser.NATIVE = 114;
OParser.NONE = 115;
OParser.NOT = 116;
OParser.NOTHING = 117;
OParser.NULL = 118;
OParser.ON = 119;
OParser.ONE = 120;
OParser.OPEN = 121;
OParser.OPERATOR = 122;
OParser.OR = 123;
OParser.ORDER = 124;
OParser.OTHERWISE = 125;
OParser.PASS = 126;
OParser.RAISE = 127;
OParser.READ = 128;
OParser.RECEIVING = 129;
OParser.RESOURCE = 130;
OParser.RETURN = 131;
OParser.RETURNING = 132;
OParser.ROWS = 133;
OParser.SELF = 134;
OParser.SETTER = 135;
OParser.SINGLETON = 136;
OParser.SORTED = 137;
OParser.STORABLE = 138;
OParser.STORE = 139;
OParser.SWITCH = 140;
OParser.TEST = 141;
OParser.THIS = 142;
OParser.THROW = 143;
OParser.TO = 144;
OParser.TRY = 145;
OParser.VERIFYING = 146;
OParser.WITH = 147;
OParser.WHEN = 148;
OParser.WHERE = 149;
OParser.WHILE = 150;
OParser.WRITE = 151;
OParser.BOOLEAN_LITERAL = 152;
OParser.CHAR_LITERAL = 153;
OParser.MIN_INTEGER = 154;
OParser.MAX_INTEGER = 155;
OParser.SYMBOL_IDENTIFIER = 156;
OParser.TYPE_IDENTIFIER = 157;
OParser.VARIABLE_IDENTIFIER = 158;
OParser.NATIVE_IDENTIFIER = 159;
OParser.DOLLAR_IDENTIFIER = 160;
OParser.TEXT_LITERAL = 161;
OParser.UUID_LITERAL = 162;
OParser.INTEGER_LITERAL = 163;
OParser.HEXA_LITERAL = 164;
OParser.DECIMAL_LITERAL = 165;
OParser.DATETIME_LITERAL = 166;
OParser.TIME_LITERAL = 167;
OParser.DATE_LITERAL = 168;
OParser.PERIOD_LITERAL = 169;

OParser.RULE_enum_category_declaration = 0;
OParser.RULE_enum_native_declaration = 1;
OParser.RULE_category_symbol = 2;
OParser.RULE_native_symbol = 3;
OParser.RULE_attribute_declaration = 4;
OParser.RULE_concrete_category_declaration = 5;
OParser.RULE_singleton_category_declaration = 6;
OParser.RULE_derived_list = 7;
OParser.RULE_category_method_list = 8;
OParser.RULE_operator_method_declaration = 9;
OParser.RULE_setter_method_declaration = 10;
OParser.RULE_native_setter_declaration = 11;
OParser.RULE_getter_method_declaration = 12;
OParser.RULE_native_getter_declaration = 13;
OParser.RULE_native_resource_declaration = 14;
OParser.RULE_native_category_declaration = 15;
OParser.RULE_native_category_bindings = 16;
OParser.RULE_native_category_binding_list = 17;
OParser.RULE_abstract_method_declaration = 18;
OParser.RULE_concrete_method_declaration = 19;
OParser.RULE_native_method_declaration = 20;
OParser.RULE_test_method_declaration = 21;
OParser.RULE_assertion = 22;
OParser.RULE_typed_argument = 23;
OParser.RULE_statement_or_list = 24;
OParser.RULE_statement = 25;
OParser.RULE_flush_statement = 26;
OParser.RULE_store_statement = 27;
OParser.RULE_with_resource_statement = 28;
OParser.RULE_with_singleton_statement = 29;
OParser.RULE_switch_statement = 30;
OParser.RULE_switch_case_statement = 31;
OParser.RULE_for_each_statement = 32;
OParser.RULE_do_while_statement = 33;
OParser.RULE_while_statement = 34;
OParser.RULE_if_statement = 35;
OParser.RULE_else_if_statement_list = 36;
OParser.RULE_raise_statement = 37;
OParser.RULE_try_statement = 38;
OParser.RULE_catch_statement = 39;
OParser.RULE_break_statement = 40;
OParser.RULE_return_statement = 41;
OParser.RULE_method_call = 42;
OParser.RULE_method_selector = 43;
OParser.RULE_callable_parent = 44;
OParser.RULE_callable_selector = 45;
OParser.RULE_expression = 46;
OParser.RULE_an_expression = 47;
OParser.RULE_closure_expression = 48;
OParser.RULE_instance_expression = 49;
OParser.RULE_method_expression = 50;
OParser.RULE_blob_expression = 51;
OParser.RULE_document_expression = 52;
OParser.RULE_write_statement = 53;
OParser.RULE_filtered_list_expression = 54;
OParser.RULE_fetch_store_expression = 55;
OParser.RULE_sorted_expression = 56;
OParser.RULE_selector_expression = 57;
OParser.RULE_constructor_expression = 58;
OParser.RULE_argument_assignment_list = 59;
OParser.RULE_argument_assignment = 60;
OParser.RULE_assign_instance_statement = 61;
OParser.RULE_child_instance = 62;
OParser.RULE_assign_tuple_statement = 63;
OParser.RULE_null_literal = 64;
OParser.RULE_declaration_list = 65;
OParser.RULE_declarations = 66;
OParser.RULE_declaration = 67;
OParser.RULE_resource_declaration = 68;
OParser.RULE_enum_declaration = 69;
OParser.RULE_native_symbol_list = 70;
OParser.RULE_category_symbol_list = 71;
OParser.RULE_symbol_list = 72;
OParser.RULE_attribute_constraint = 73;
OParser.RULE_list_literal = 74;
OParser.RULE_set_literal = 75;
OParser.RULE_expression_list = 76;
OParser.RULE_range_literal = 77;
OParser.RULE_typedef = 78;
OParser.RULE_primary_type = 79;
OParser.RULE_native_type = 80;
OParser.RULE_category_type = 81;
OParser.RULE_mutable_category_type = 82;
OParser.RULE_code_type = 83;
OParser.RULE_category_declaration = 84;
OParser.RULE_type_identifier_list = 85;
OParser.RULE_method_identifier = 86;
OParser.RULE_identifier = 87;
OParser.RULE_variable_identifier = 88;
OParser.RULE_attribute_identifier = 89;
OParser.RULE_type_identifier = 90;
OParser.RULE_symbol_identifier = 91;
OParser.RULE_argument_list = 92;
OParser.RULE_argument = 93;
OParser.RULE_operator_argument = 94;
OParser.RULE_named_argument = 95;
OParser.RULE_code_argument = 96;
OParser.RULE_category_or_any_type = 97;
OParser.RULE_any_type = 98;
OParser.RULE_member_method_declaration_list = 99;
OParser.RULE_member_method_declaration = 100;
OParser.RULE_native_member_method_declaration_list = 101;
OParser.RULE_native_member_method_declaration = 102;
OParser.RULE_native_category_binding = 103;
OParser.RULE_python_category_binding = 104;
OParser.RULE_python_module = 105;
OParser.RULE_javascript_category_binding = 106;
OParser.RULE_javascript_module = 107;
OParser.RULE_variable_identifier_list = 108;
OParser.RULE_attribute_identifier_list = 109;
OParser.RULE_method_declaration = 110;
OParser.RULE_comment_statement = 111;
OParser.RULE_native_statement_list = 112;
OParser.RULE_native_statement = 113;
OParser.RULE_python_native_statement = 114;
OParser.RULE_javascript_native_statement = 115;
OParser.RULE_statement_list = 116;
OParser.RULE_assertion_list = 117;
OParser.RULE_switch_case_statement_list = 118;
OParser.RULE_catch_statement_list = 119;
OParser.RULE_literal_collection = 120;
OParser.RULE_atomic_literal = 121;
OParser.RULE_literal_list_literal = 122;
OParser.RULE_selectable_expression = 123;
OParser.RULE_this_expression = 124;
OParser.RULE_parenthesis_expression = 125;
OParser.RULE_literal_expression = 126;
OParser.RULE_collection_literal = 127;
OParser.RULE_tuple_literal = 128;
OParser.RULE_dict_literal = 129;
OParser.RULE_expression_tuple = 130;
OParser.RULE_dict_entry_list = 131;
OParser.RULE_dict_entry = 132;
OParser.RULE_slice_arguments = 133;
OParser.RULE_assign_variable_statement = 134;
OParser.RULE_assignable_instance = 135;
OParser.RULE_is_expression = 136;
OParser.RULE_read_all_expression = 137;
OParser.RULE_read_one_expression = 138;
OParser.RULE_order_by_list = 139;
OParser.RULE_order_by = 140;
OParser.RULE_operator = 141;
OParser.RULE_new_token = 142;
OParser.RULE_key_token = 143;
OParser.RULE_module_token = 144;
OParser.RULE_value_token = 145;
OParser.RULE_symbols_token = 146;
OParser.RULE_assign = 147;
OParser.RULE_multiply = 148;
OParser.RULE_divide = 149;
OParser.RULE_idivide = 150;
OParser.RULE_modulo = 151;
OParser.RULE_lfs = 152;
OParser.RULE_lfp = 153;
OParser.RULE_javascript_statement = 154;
OParser.RULE_javascript_expression = 155;
OParser.RULE_javascript_primary_expression = 156;
OParser.RULE_javascript_this_expression = 157;
OParser.RULE_javascript_new_expression = 158;
OParser.RULE_javascript_selector_expression = 159;
OParser.RULE_javascript_method_expression = 160;
OParser.RULE_javascript_arguments = 161;
OParser.RULE_javascript_item_expression = 162;
OParser.RULE_javascript_parenthesis_expression = 163;
OParser.RULE_javascript_identifier_expression = 164;
OParser.RULE_javascript_literal_expression = 165;
OParser.RULE_javascript_identifier = 166;
OParser.RULE_python_statement = 167;
OParser.RULE_python_expression = 168;
OParser.RULE_python_primary_expression = 169;
OParser.RULE_python_self_expression = 170;
OParser.RULE_python_selector_expression = 171;
OParser.RULE_python_method_expression = 172;
OParser.RULE_python_argument_list = 173;
OParser.RULE_python_ordinal_argument_list = 174;
OParser.RULE_python_named_argument_list = 175;
OParser.RULE_python_parenthesis_expression = 176;
OParser.RULE_python_identifier_expression = 177;
OParser.RULE_python_literal_expression = 178;
OParser.RULE_python_identifier = 179;
OParser.RULE_java_statement = 180;
OParser.RULE_java_expression = 181;
OParser.RULE_java_primary_expression = 182;
OParser.RULE_java_this_expression = 183;
OParser.RULE_java_new_expression = 184;
OParser.RULE_java_selector_expression = 185;
OParser.RULE_java_method_expression = 186;
OParser.RULE_java_arguments = 187;
OParser.RULE_java_item_expression = 188;
OParser.RULE_java_parenthesis_expression = 189;
OParser.RULE_java_identifier_expression = 190;
OParser.RULE_java_class_identifier_expression = 191;
OParser.RULE_java_literal_expression = 192;
OParser.RULE_java_identifier = 193;
OParser.RULE_csharp_statement = 194;
OParser.RULE_csharp_expression = 195;
OParser.RULE_csharp_primary_expression = 196;
OParser.RULE_csharp_this_expression = 197;
OParser.RULE_csharp_new_expression = 198;
OParser.RULE_csharp_selector_expression = 199;
OParser.RULE_csharp_method_expression = 200;
OParser.RULE_csharp_arguments = 201;
OParser.RULE_csharp_item_expression = 202;
OParser.RULE_csharp_parenthesis_expression = 203;
OParser.RULE_csharp_identifier_expression = 204;
OParser.RULE_csharp_literal_expression = 205;
OParser.RULE_csharp_identifier = 206;

function Enum_category_declarationContext(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 = OParser.RULE_enum_category_declaration;
    this.name = null; // Type_identifierContext
    this.attrs = null; // Attribute_identifier_listContext
    this.derived = null; // Type_identifierContext
    this.symbols = null; // Category_symbol_listContext
    return this;
}

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

Enum_category_declarationContext.prototype.ENUMERATED = function() {
    return this.getToken(OParser.ENUMERATED, 0);
};

Enum_category_declarationContext.prototype.CATEGORY = function() {
    return this.getToken(OParser.CATEGORY, 0);
};

Enum_category_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Enum_category_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Enum_category_declarationContext.prototype.type_identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Type_identifierContext);
    } else {
        return this.getTypedRuleContext(Type_identifierContext,i);
    }
};

Enum_category_declarationContext.prototype.category_symbol_list = function() {
    return this.getTypedRuleContext(Category_symbol_listContext,0);
};

Enum_category_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Enum_category_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Enum_category_declarationContext.prototype.EXTENDS = function() {
    return this.getToken(OParser.EXTENDS, 0);
};

Enum_category_declarationContext.prototype.attribute_identifier_list = function() {
    return this.getTypedRuleContext(Attribute_identifier_listContext,0);
};

Enum_category_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterEnum_category_declaration(this);
	}
};

Enum_category_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitEnum_category_declaration(this);
	}
};




OParser.prototype.enum_category_declaration = function() {

    var localctx = new Enum_category_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 0, OParser.RULE_enum_category_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 414;
        this.match(OParser.ENUMERATED);
        this.state = 415;
        this.match(OParser.CATEGORY);
        this.state = 416; 
        localctx.name = this.type_identifier();
        this.state = 421;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR) {
            this.state = 417;
            this.match(OParser.LPAR);
            this.state = 418; 
            localctx.attrs = this.attribute_identifier_list();
            this.state = 419;
            this.match(OParser.RPAR);
        }

        this.state = 425;
        _la = this._input.LA(1);
        if(_la===OParser.EXTENDS) {
            this.state = 423;
            this.match(OParser.EXTENDS);
            this.state = 424; 
            localctx.derived = this.type_identifier();
        }

        this.state = 427;
        this.match(OParser.LCURL);
        this.state = 428; 
        localctx.symbols = this.category_symbol_list();
        this.state = 429;
        this.match(OParser.RCURL);
    } 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 Enum_native_declarationContext(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 = OParser.RULE_enum_native_declaration;
    this.name = null; // Type_identifierContext
    this.typ = null; // Native_typeContext
    this.symbols = null; // Native_symbol_listContext
    return this;
}

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

Enum_native_declarationContext.prototype.ENUMERATED = function() {
    return this.getToken(OParser.ENUMERATED, 0);
};

Enum_native_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Enum_native_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Enum_native_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Enum_native_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Enum_native_declarationContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};

Enum_native_declarationContext.prototype.native_type = function() {
    return this.getTypedRuleContext(Native_typeContext,0);
};

Enum_native_declarationContext.prototype.native_symbol_list = function() {
    return this.getTypedRuleContext(Native_symbol_listContext,0);
};

Enum_native_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterEnum_native_declaration(this);
	}
};

Enum_native_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitEnum_native_declaration(this);
	}
};




OParser.prototype.enum_native_declaration = function() {

    var localctx = new Enum_native_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 2, OParser.RULE_enum_native_declaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 431;
        this.match(OParser.ENUMERATED);
        this.state = 432; 
        localctx.name = this.type_identifier();
        this.state = 433;
        this.match(OParser.LPAR);
        this.state = 434; 
        localctx.typ = this.native_type();
        this.state = 435;
        this.match(OParser.RPAR);
        this.state = 436;
        this.match(OParser.LCURL);
        this.state = 437; 
        localctx.symbols = this.native_symbol_list();
        this.state = 438;
        this.match(OParser.RCURL);
    } 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 Category_symbolContext(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 = OParser.RULE_category_symbol;
    this.name = null; // Symbol_identifierContext
    this.args = null; // Argument_assignment_listContext
    return this;
}

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

Category_symbolContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Category_symbolContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Category_symbolContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Category_symbolContext.prototype.symbol_identifier = function() {
    return this.getTypedRuleContext(Symbol_identifierContext,0);
};

Category_symbolContext.prototype.argument_assignment_list = function() {
    return this.getTypedRuleContext(Argument_assignment_listContext,0);
};

Category_symbolContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCategory_symbol(this);
	}
};

Category_symbolContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCategory_symbol(this);
	}
};




OParser.prototype.category_symbol = function() {

    var localctx = new Category_symbolContext(this, this._ctx, this.state);
    this.enterRule(localctx, 4, OParser.RULE_category_symbol);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 440; 
        localctx.name = this.symbol_identifier();
        this.state = 441;
        this.match(OParser.LPAR);
        this.state = 442; 
        localctx.args = this.argument_assignment_list(0);
        this.state = 443;
        this.match(OParser.RPAR);
        this.state = 444;
        this.match(OParser.SEMI);
    } 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 Native_symbolContext(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 = OParser.RULE_native_symbol;
    this.name = null; // Symbol_identifierContext
    this.exp = null; // ExpressionContext
    return this;
}

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

Native_symbolContext.prototype.EQ = function() {
    return this.getToken(OParser.EQ, 0);
};

Native_symbolContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Native_symbolContext.prototype.symbol_identifier = function() {
    return this.getTypedRuleContext(Symbol_identifierContext,0);
};

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

Native_symbolContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_symbol(this);
	}
};

Native_symbolContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_symbol(this);
	}
};




OParser.prototype.native_symbol = function() {

    var localctx = new Native_symbolContext(this, this._ctx, this.state);
    this.enterRule(localctx, 6, OParser.RULE_native_symbol);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 446; 
        localctx.name = this.symbol_identifier();
        this.state = 447;
        this.match(OParser.EQ);
        this.state = 448; 
        localctx.exp = this.expression(0);
        this.state = 449;
        this.match(OParser.SEMI);
    } 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 Attribute_declarationContext(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 = OParser.RULE_attribute_declaration;
    this.name = null; // Attribute_identifierContext
    this.typ = null; // TypedefContext
    this.match = null; // Attribute_constraintContext
    this.indices = null; // Variable_identifier_listContext
    return this;
}

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

Attribute_declarationContext.prototype.ATTRIBUTE = function() {
    return this.getToken(OParser.ATTRIBUTE, 0);
};

Attribute_declarationContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

Attribute_declarationContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Attribute_declarationContext.prototype.attribute_identifier = function() {
    return this.getTypedRuleContext(Attribute_identifierContext,0);
};

Attribute_declarationContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};

Attribute_declarationContext.prototype.STORABLE = function() {
    return this.getToken(OParser.STORABLE, 0);
};

Attribute_declarationContext.prototype.WITH = function() {
    return this.getToken(OParser.WITH, 0);
};

Attribute_declarationContext.prototype.INDEX = function() {
    return this.getToken(OParser.INDEX, 0);
};

Attribute_declarationContext.prototype.attribute_constraint = function() {
    return this.getTypedRuleContext(Attribute_constraintContext,0);
};

Attribute_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Attribute_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Attribute_declarationContext.prototype.variable_identifier_list = function() {
    return this.getTypedRuleContext(Variable_identifier_listContext,0);
};

Attribute_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAttribute_declaration(this);
	}
};

Attribute_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAttribute_declaration(this);
	}
};




OParser.prototype.attribute_declaration = function() {

    var localctx = new Attribute_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 8, OParser.RULE_attribute_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 452;
        _la = this._input.LA(1);
        if(_la===OParser.STORABLE) {
            this.state = 451;
            this.match(OParser.STORABLE);
        }

        this.state = 454;
        this.match(OParser.ATTRIBUTE);
        this.state = 455; 
        localctx.name = this.attribute_identifier();
        this.state = 456;
        this.match(OParser.COLON);
        this.state = 457; 
        localctx.typ = this.typedef(0);
        this.state = 459;
        _la = this._input.LA(1);
        if(_la===OParser.IN || _la===OParser.MATCHING) {
            this.state = 458; 
            localctx.match = this.attribute_constraint();
        }

        this.state = 469;
        _la = this._input.LA(1);
        if(_la===OParser.WITH) {
            this.state = 461;
            this.match(OParser.WITH);
            this.state = 462;
            this.match(OParser.INDEX);
            this.state = 467;
            _la = this._input.LA(1);
            if(_la===OParser.LPAR) {
                this.state = 463;
                this.match(OParser.LPAR);
                this.state = 464; 
                localctx.indices = this.variable_identifier_list();
                this.state = 465;
                this.match(OParser.RPAR);
            }

        }

        this.state = 471;
        this.match(OParser.SEMI);
    } 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 Concrete_category_declarationContext(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 = OParser.RULE_concrete_category_declaration;
    this.name = null; // Type_identifierContext
    this.attrs = null; // Attribute_identifier_listContext
    this.derived = null; // Derived_listContext
    this.methods = null; // Category_method_listContext
    return this;
}

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

Concrete_category_declarationContext.prototype.CATEGORY = function() {
    return this.getToken(OParser.CATEGORY, 0);
};

Concrete_category_declarationContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};

Concrete_category_declarationContext.prototype.category_method_list = function() {
    return this.getTypedRuleContext(Category_method_listContext,0);
};

Concrete_category_declarationContext.prototype.STORABLE = function() {
    return this.getToken(OParser.STORABLE, 0);
};

Concrete_category_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Concrete_category_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Concrete_category_declarationContext.prototype.EXTENDS = function() {
    return this.getToken(OParser.EXTENDS, 0);
};

Concrete_category_declarationContext.prototype.attribute_identifier_list = function() {
    return this.getTypedRuleContext(Attribute_identifier_listContext,0);
};

Concrete_category_declarationContext.prototype.derived_list = function() {
    return this.getTypedRuleContext(Derived_listContext,0);
};

Concrete_category_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterConcrete_category_declaration(this);
	}
};

Concrete_category_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitConcrete_category_declaration(this);
	}
};




OParser.prototype.concrete_category_declaration = function() {

    var localctx = new Concrete_category_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 10, OParser.RULE_concrete_category_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 474;
        _la = this._input.LA(1);
        if(_la===OParser.STORABLE) {
            this.state = 473;
            this.match(OParser.STORABLE);
        }

        this.state = 476;
        this.match(OParser.CATEGORY);
        this.state = 477; 
        localctx.name = this.type_identifier();
        this.state = 482;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR) {
            this.state = 478;
            this.match(OParser.LPAR);
            this.state = 479; 
            localctx.attrs = this.attribute_identifier_list();
            this.state = 480;
            this.match(OParser.RPAR);
        }

        this.state = 486;
        _la = this._input.LA(1);
        if(_la===OParser.EXTENDS) {
            this.state = 484;
            this.match(OParser.EXTENDS);
            this.state = 485; 
            localctx.derived = this.derived_list(0);
        }

        this.state = 488; 
        localctx.methods = this.category_method_list();
    } 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 Singleton_category_declarationContext(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 = OParser.RULE_singleton_category_declaration;
    this.name = null; // Type_identifierContext
    this.attrs = null; // Attribute_identifier_listContext
    this.methods = null; // Category_method_listContext
    return this;
}

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

Singleton_category_declarationContext.prototype.SINGLETON = function() {
    return this.getToken(OParser.SINGLETON, 0);
};

Singleton_category_declarationContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};

Singleton_category_declarationContext.prototype.category_method_list = function() {
    return this.getTypedRuleContext(Category_method_listContext,0);
};

Singleton_category_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Singleton_category_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Singleton_category_declarationContext.prototype.attribute_identifier_list = function() {
    return this.getTypedRuleContext(Attribute_identifier_listContext,0);
};

Singleton_category_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSingleton_category_declaration(this);
	}
};

Singleton_category_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSingleton_category_declaration(this);
	}
};




OParser.prototype.singleton_category_declaration = function() {

    var localctx = new Singleton_category_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 12, OParser.RULE_singleton_category_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 490;
        this.match(OParser.SINGLETON);
        this.state = 491; 
        localctx.name = this.type_identifier();
        this.state = 496;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR) {
            this.state = 492;
            this.match(OParser.LPAR);
            this.state = 493; 
            localctx.attrs = this.attribute_identifier_list();
            this.state = 494;
            this.match(OParser.RPAR);
        }

        this.state = 498; 
        localctx.methods = this.category_method_list();
    } 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 Derived_listContext(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 = OParser.RULE_derived_list;
    return this;
}

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


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

function DerivedListItemContext(parser, ctx) {
	Derived_listContext.call(this, parser);
    this.items = null; // Derived_listContext;
    this.item = null; // Type_identifierContext;
    Derived_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DerivedListItemContext.prototype = Object.create(Derived_listContext.prototype);
DerivedListItemContext.prototype.constructor = DerivedListItemContext;

DerivedListItemContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

DerivedListItemContext.prototype.derived_list = function() {
    return this.getTypedRuleContext(Derived_listContext,0);
};

DerivedListItemContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};
DerivedListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDerivedListItem(this);
	}
};

DerivedListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDerivedListItem(this);
	}
};


function DerivedListContext(parser, ctx) {
	Derived_listContext.call(this, parser);
    this.item = null; // Type_identifierContext;
    Derived_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DerivedListContext.prototype = Object.create(Derived_listContext.prototype);
DerivedListContext.prototype.constructor = DerivedListContext;

DerivedListContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};
DerivedListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDerivedList(this);
	}
};

DerivedListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDerivedList(this);
	}
};



OParser.prototype.derived_list = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Derived_listContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 14;
    this.enterRecursionRule(localctx, 14, OParser.RULE_derived_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new DerivedListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 501; 
        localctx.item = this.type_identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 508;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,10,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new DerivedListItemContext(this, new Derived_listContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_derived_list);
                this.state = 503;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 504;
                this.match(OParser.COMMA);
                this.state = 505; 
                localctx.item = this.type_identifier(); 
            }
            this.state = 510;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,10,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 Category_method_listContext(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 = OParser.RULE_category_method_list;
    return this;
}

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


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


function EmptyCategoryMethodListContext(parser, ctx) {
	Category_method_listContext.call(this, parser);
    Category_method_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

EmptyCategoryMethodListContext.prototype = Object.create(Category_method_listContext.prototype);
EmptyCategoryMethodListContext.prototype.constructor = EmptyCategoryMethodListContext;

EmptyCategoryMethodListContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};
EmptyCategoryMethodListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterEmptyCategoryMethodList(this);
	}
};

EmptyCategoryMethodListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitEmptyCategoryMethodList(this);
	}
};


function CurlyCategoryMethodListContext(parser, ctx) {
	Category_method_listContext.call(this, parser);
    this.items = null; // Member_method_declaration_listContext;
    Category_method_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CurlyCategoryMethodListContext.prototype = Object.create(Category_method_listContext.prototype);
CurlyCategoryMethodListContext.prototype.constructor = CurlyCategoryMethodListContext;

CurlyCategoryMethodListContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

CurlyCategoryMethodListContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

CurlyCategoryMethodListContext.prototype.member_method_declaration_list = function() {
    return this.getTypedRuleContext(Member_method_declaration_listContext,0);
};
CurlyCategoryMethodListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCurlyCategoryMethodList(this);
	}
};

CurlyCategoryMethodListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCurlyCategoryMethodList(this);
	}
};



OParser.prototype.category_method_list = function() {

    var localctx = new Category_method_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 16, OParser.RULE_category_method_list);
    var _la = 0; // Token type
    try {
        this.state = 517;
        switch(this._input.LA(1)) {
        case OParser.SEMI:
            localctx = new EmptyCategoryMethodListContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 511;
            this.match(OParser.SEMI);
            break;
        case OParser.LCURL:
            localctx = new CurlyCategoryMethodListContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 512;
            this.match(OParser.LCURL);
            this.state = 514;
            _la = this._input.LA(1);
            if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ABSTRACT - 46)))) !== 0) || ((((_la - 103)) & ~0x1f) == 0 && ((1 << (_la - 103)) & ((1 << (OParser.GETTER - 103)) | (1 << (OParser.METHOD - 103)) | (1 << (OParser.OPERATOR - 103)))) !== 0) || _la===OParser.SETTER || _la===OParser.TYPE_IDENTIFIER) {
                this.state = 513; 
                localctx.items = this.member_method_declaration_list();
            }

            this.state = 516;
            this.match(OParser.RCURL);
            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 Operator_method_declarationContext(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 = OParser.RULE_operator_method_declaration;
    this.typ = null; // TypedefContext
    this.op = null; // OperatorContext
    this.arg = null; // Operator_argumentContext
    this.stmts = null; // Statement_listContext
    return this;
}

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

Operator_method_declarationContext.prototype.OPERATOR = function() {
    return this.getToken(OParser.OPERATOR, 0);
};

Operator_method_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Operator_method_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Operator_method_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Operator_method_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Operator_method_declarationContext.prototype.operator = function() {
    return this.getTypedRuleContext(OperatorContext,0);
};

Operator_method_declarationContext.prototype.operator_argument = function() {
    return this.getTypedRuleContext(Operator_argumentContext,0);
};

Operator_method_declarationContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};

Operator_method_declarationContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};

Operator_method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOperator_method_declaration(this);
	}
};

Operator_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOperator_method_declaration(this);
	}
};




OParser.prototype.operator_method_declaration = function() {

    var localctx = new Operator_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 18, OParser.RULE_operator_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 520;
        _la = this._input.LA(1);
        if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)))) !== 0) || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 519; 
            localctx.typ = this.typedef(0);
        }

        this.state = 522;
        this.match(OParser.OPERATOR);
        this.state = 523; 
        localctx.op = this.operator();
        this.state = 524;
        this.match(OParser.LPAR);
        this.state = 525; 
        localctx.arg = this.operator_argument();
        this.state = 526;
        this.match(OParser.RPAR);
        this.state = 527;
        this.match(OParser.LCURL);
        this.state = 529;
        _la = this._input.LA(1);
        if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
            this.state = 528; 
            localctx.stmts = this.statement_list();
        }

        this.state = 531;
        this.match(OParser.RCURL);
    } 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 Setter_method_declarationContext(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 = OParser.RULE_setter_method_declaration;
    this.name = null; // Variable_identifierContext
    this.stmts = null; // Statement_listContext
    return this;
}

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

Setter_method_declarationContext.prototype.SETTER = function() {
    return this.getToken(OParser.SETTER, 0);
};

Setter_method_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Setter_method_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Setter_method_declarationContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Setter_method_declarationContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};

Setter_method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSetter_method_declaration(this);
	}
};

Setter_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSetter_method_declaration(this);
	}
};




OParser.prototype.setter_method_declaration = function() {

    var localctx = new Setter_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 20, OParser.RULE_setter_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 533;
        this.match(OParser.SETTER);
        this.state = 534; 
        localctx.name = this.variable_identifier();
        this.state = 535;
        this.match(OParser.LCURL);
        this.state = 537;
        _la = this._input.LA(1);
        if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
            this.state = 536; 
            localctx.stmts = this.statement_list();
        }

        this.state = 539;
        this.match(OParser.RCURL);
    } 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 Native_setter_declarationContext(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 = OParser.RULE_native_setter_declaration;
    this.name = null; // Variable_identifierContext
    this.stmts = null; // Native_statement_listContext
    return this;
}

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

Native_setter_declarationContext.prototype.SETTER = function() {
    return this.getToken(OParser.SETTER, 0);
};

Native_setter_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Native_setter_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Native_setter_declarationContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Native_setter_declarationContext.prototype.NATIVE = function() {
    return this.getToken(OParser.NATIVE, 0);
};

Native_setter_declarationContext.prototype.native_statement_list = function() {
    return this.getTypedRuleContext(Native_statement_listContext,0);
};

Native_setter_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_setter_declaration(this);
	}
};

Native_setter_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_setter_declaration(this);
	}
};




OParser.prototype.native_setter_declaration = function() {

    var localctx = new Native_setter_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 22, OParser.RULE_native_setter_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 542;
        _la = this._input.LA(1);
        if(_la===OParser.NATIVE) {
            this.state = 541;
            this.match(OParser.NATIVE);
        }

        this.state = 544;
        this.match(OParser.SETTER);
        this.state = 545; 
        localctx.name = this.variable_identifier();
        this.state = 546;
        this.match(OParser.LCURL);
        this.state = 548;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.JAVA) | (1 << OParser.CSHARP) | (1 << OParser.PYTHON2) | (1 << OParser.PYTHON3) | (1 << OParser.JAVASCRIPT))) !== 0)) {
            this.state = 547; 
            localctx.stmts = this.native_statement_list();
        }

        this.state = 550;
        this.match(OParser.RCURL);
    } 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 Getter_method_declarationContext(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 = OParser.RULE_getter_method_declaration;
    this.name = null; // Variable_identifierContext
    this.stmts = null; // Statement_listContext
    return this;
}

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

Getter_method_declarationContext.prototype.GETTER = function() {
    return this.getToken(OParser.GETTER, 0);
};

Getter_method_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Getter_method_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Getter_method_declarationContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Getter_method_declarationContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};

Getter_method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterGetter_method_declaration(this);
	}
};

Getter_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitGetter_method_declaration(this);
	}
};




OParser.prototype.getter_method_declaration = function() {

    var localctx = new Getter_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 24, OParser.RULE_getter_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 552;
        this.match(OParser.GETTER);
        this.state = 553; 
        localctx.name = this.variable_identifier();
        this.state = 554;
        this.match(OParser.LCURL);
        this.state = 556;
        _la = this._input.LA(1);
        if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
            this.state = 555; 
            localctx.stmts = this.statement_list();
        }

        this.state = 558;
        this.match(OParser.RCURL);
    } 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 Native_getter_declarationContext(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 = OParser.RULE_native_getter_declaration;
    this.name = null; // Variable_identifierContext
    this.stmts = null; // Native_statement_listContext
    return this;
}

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

Native_getter_declarationContext.prototype.GETTER = function() {
    return this.getToken(OParser.GETTER, 0);
};

Native_getter_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Native_getter_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Native_getter_declarationContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Native_getter_declarationContext.prototype.NATIVE = function() {
    return this.getToken(OParser.NATIVE, 0);
};

Native_getter_declarationContext.prototype.native_statement_list = function() {
    return this.getTypedRuleContext(Native_statement_listContext,0);
};

Native_getter_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_getter_declaration(this);
	}
};

Native_getter_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_getter_declaration(this);
	}
};




OParser.prototype.native_getter_declaration = function() {

    var localctx = new Native_getter_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 26, OParser.RULE_native_getter_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 561;
        _la = this._input.LA(1);
        if(_la===OParser.NATIVE) {
            this.state = 560;
            this.match(OParser.NATIVE);
        }

        this.state = 563;
        this.match(OParser.GETTER);
        this.state = 564; 
        localctx.name = this.variable_identifier();
        this.state = 565;
        this.match(OParser.LCURL);
        this.state = 567;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.JAVA) | (1 << OParser.CSHARP) | (1 << OParser.PYTHON2) | (1 << OParser.PYTHON3) | (1 << OParser.JAVASCRIPT))) !== 0)) {
            this.state = 566; 
            localctx.stmts = this.native_statement_list();
        }

        this.state = 569;
        this.match(OParser.RCURL);
    } 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 Native_resource_declarationContext(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 = OParser.RULE_native_resource_declaration;
    this.name = null; // Type_identifierContext
    this.attrs = null; // Attribute_identifier_listContext
    this.bindings = null; // Native_category_bindingsContext
    this.methods = null; // Native_member_method_declaration_listContext
    return this;
}

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

Native_resource_declarationContext.prototype.NATIVE = function() {
    return this.getToken(OParser.NATIVE, 0);
};

Native_resource_declarationContext.prototype.RESOURCE = function() {
    return this.getToken(OParser.RESOURCE, 0);
};

Native_resource_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Native_resource_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Native_resource_declarationContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};

Native_resource_declarationContext.prototype.native_category_bindings = function() {
    return this.getTypedRuleContext(Native_category_bindingsContext,0);
};

Native_resource_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Native_resource_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Native_resource_declarationContext.prototype.attribute_identifier_list = function() {
    return this.getTypedRuleContext(Attribute_identifier_listContext,0);
};

Native_resource_declarationContext.prototype.native_member_method_declaration_list = function() {
    return this.getTypedRuleContext(Native_member_method_declaration_listContext,0);
};

Native_resource_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_resource_declaration(this);
	}
};

Native_resource_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_resource_declaration(this);
	}
};




OParser.prototype.native_resource_declaration = function() {

    var localctx = new Native_resource_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 28, OParser.RULE_native_resource_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 571;
        this.match(OParser.NATIVE);
        this.state = 572;
        this.match(OParser.RESOURCE);
        this.state = 573; 
        localctx.name = this.type_identifier();
        this.state = 578;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR) {
            this.state = 574;
            this.match(OParser.LPAR);
            this.state = 575; 
            localctx.attrs = this.attribute_identifier_list();
            this.state = 576;
            this.match(OParser.RPAR);
        }

        this.state = 580;
        this.match(OParser.LCURL);
        this.state = 581; 
        localctx.bindings = this.native_category_bindings();
        this.state = 583;
        _la = this._input.LA(1);
        if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ANY - 46)))) !== 0) || ((((_la - 103)) & ~0x1f) == 0 && ((1 << (_la - 103)) & ((1 << (OParser.GETTER - 103)) | (1 << (OParser.METHOD - 103)) | (1 << (OParser.NATIVE - 103)))) !== 0) || _la===OParser.SETTER || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 582; 
            localctx.methods = this.native_member_method_declaration_list();
        }

        this.state = 585;
        this.match(OParser.RCURL);
    } 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 Native_category_declarationContext(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 = OParser.RULE_native_category_declaration;
    this.name = null; // Type_identifierContext
    this.attrs = null; // Attribute_identifier_listContext
    this.bindings = null; // Native_category_bindingsContext
    this.methods = null; // Native_member_method_declaration_listContext
    return this;
}

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

Native_category_declarationContext.prototype.NATIVE = function() {
    return this.getToken(OParser.NATIVE, 0);
};

Native_category_declarationContext.prototype.CATEGORY = function() {
    return this.getToken(OParser.CATEGORY, 0);
};

Native_category_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Native_category_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Native_category_declarationContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};

Native_category_declarationContext.prototype.native_category_bindings = function() {
    return this.getTypedRuleContext(Native_category_bindingsContext,0);
};

Native_category_declarationContext.prototype.STORABLE = function() {
    return this.getToken(OParser.STORABLE, 0);
};

Native_category_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Native_category_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Native_category_declarationContext.prototype.attribute_identifier_list = function() {
    return this.getTypedRuleContext(Attribute_identifier_listContext,0);
};

Native_category_declarationContext.prototype.native_member_method_declaration_list = function() {
    return this.getTypedRuleContext(Native_member_method_declaration_listContext,0);
};

Native_category_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_category_declaration(this);
	}
};

Native_category_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_category_declaration(this);
	}
};




OParser.prototype.native_category_declaration = function() {

    var localctx = new Native_category_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 30, OParser.RULE_native_category_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 588;
        _la = this._input.LA(1);
        if(_la===OParser.STORABLE) {
            this.state = 587;
            this.match(OParser.STORABLE);
        }

        this.state = 590;
        this.match(OParser.NATIVE);
        this.state = 591;
        this.match(OParser.CATEGORY);
        this.state = 592; 
        localctx.name = this.type_identifier();
        this.state = 597;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR) {
            this.state = 593;
            this.match(OParser.LPAR);
            this.state = 594; 
            localctx.attrs = this.attribute_identifier_list();
            this.state = 595;
            this.match(OParser.RPAR);
        }

        this.state = 599;
        this.match(OParser.LCURL);
        this.state = 600; 
        localctx.bindings = this.native_category_bindings();
        this.state = 602;
        _la = this._input.LA(1);
        if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ANY - 46)))) !== 0) || ((((_la - 103)) & ~0x1f) == 0 && ((1 << (_la - 103)) & ((1 << (OParser.GETTER - 103)) | (1 << (OParser.METHOD - 103)) | (1 << (OParser.NATIVE - 103)))) !== 0) || _la===OParser.SETTER || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 601; 
            localctx.methods = this.native_member_method_declaration_list();
        }

        this.state = 604;
        this.match(OParser.RCURL);
    } 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 Native_category_bindingsContext(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 = OParser.RULE_native_category_bindings;
    this.items = null; // Native_category_binding_listContext
    return this;
}

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

Native_category_bindingsContext.prototype.CATEGORY = function() {
    return this.getToken(OParser.CATEGORY, 0);
};

Native_category_bindingsContext.prototype.BINDINGS = function() {
    return this.getToken(OParser.BINDINGS, 0);
};

Native_category_bindingsContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Native_category_bindingsContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Native_category_bindingsContext.prototype.native_category_binding_list = function() {
    return this.getTypedRuleContext(Native_category_binding_listContext,0);
};

Native_category_bindingsContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_category_bindings(this);
	}
};

Native_category_bindingsContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_category_bindings(this);
	}
};




OParser.prototype.native_category_bindings = function() {

    var localctx = new Native_category_bindingsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 32, OParser.RULE_native_category_bindings);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 606;
        this.match(OParser.CATEGORY);
        this.state = 607;
        this.match(OParser.BINDINGS);
        this.state = 608;
        this.match(OParser.LCURL);
        this.state = 609; 
        localctx.items = this.native_category_binding_list(0);
        this.state = 610;
        this.match(OParser.RCURL);
    } 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 Native_category_binding_listContext(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 = OParser.RULE_native_category_binding_list;
    return this;
}

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


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

function NativeCategoryBindingListItemContext(parser, ctx) {
	Native_category_binding_listContext.call(this, parser);
    this.items = null; // Native_category_binding_listContext;
    this.item = null; // Native_category_bindingContext;
    Native_category_binding_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NativeCategoryBindingListItemContext.prototype = Object.create(Native_category_binding_listContext.prototype);
NativeCategoryBindingListItemContext.prototype.constructor = NativeCategoryBindingListItemContext;

NativeCategoryBindingListItemContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

NativeCategoryBindingListItemContext.prototype.native_category_binding_list = function() {
    return this.getTypedRuleContext(Native_category_binding_listContext,0);
};

NativeCategoryBindingListItemContext.prototype.native_category_binding = function() {
    return this.getTypedRuleContext(Native_category_bindingContext,0);
};
NativeCategoryBindingListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNativeCategoryBindingListItem(this);
	}
};

NativeCategoryBindingListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNativeCategoryBindingListItem(this);
	}
};


function NativeCategoryBindingListContext(parser, ctx) {
	Native_category_binding_listContext.call(this, parser);
    this.item = null; // Native_category_bindingContext;
    Native_category_binding_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NativeCategoryBindingListContext.prototype = Object.create(Native_category_binding_listContext.prototype);
NativeCategoryBindingListContext.prototype.constructor = NativeCategoryBindingListContext;

NativeCategoryBindingListContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

NativeCategoryBindingListContext.prototype.native_category_binding = function() {
    return this.getTypedRuleContext(Native_category_bindingContext,0);
};
NativeCategoryBindingListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNativeCategoryBindingList(this);
	}
};

NativeCategoryBindingListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNativeCategoryBindingList(this);
	}
};



OParser.prototype.native_category_binding_list = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Native_category_binding_listContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 34;
    this.enterRecursionRule(localctx, 34, OParser.RULE_native_category_binding_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new NativeCategoryBindingListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 613; 
        localctx.item = this.native_category_binding();
        this.state = 614;
        this.match(OParser.SEMI);
        this._ctx.stop = this._input.LT(-1);
        this.state = 622;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,26,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new NativeCategoryBindingListItemContext(this, new Native_category_binding_listContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_native_category_binding_list);
                this.state = 616;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 617; 
                localctx.item = this.native_category_binding();
                this.state = 618;
                this.match(OParser.SEMI); 
            }
            this.state = 624;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,26,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 Abstract_method_declarationContext(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 = OParser.RULE_abstract_method_declaration;
    this.typ = null; // TypedefContext
    this.name = null; // Method_identifierContext
    this.args = null; // Argument_listContext
    return this;
}

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

Abstract_method_declarationContext.prototype.ABSTRACT = function() {
    return this.getToken(OParser.ABSTRACT, 0);
};

Abstract_method_declarationContext.prototype.METHOD = function() {
    return this.getToken(OParser.METHOD, 0);
};

Abstract_method_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Abstract_method_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Abstract_method_declarationContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Abstract_method_declarationContext.prototype.method_identifier = function() {
    return this.getTypedRuleContext(Method_identifierContext,0);
};

Abstract_method_declarationContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};

Abstract_method_declarationContext.prototype.argument_list = function() {
    return this.getTypedRuleContext(Argument_listContext,0);
};

Abstract_method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAbstract_method_declaration(this);
	}
};

Abstract_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAbstract_method_declaration(this);
	}
};




OParser.prototype.abstract_method_declaration = function() {

    var localctx = new Abstract_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 36, OParser.RULE_abstract_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 625;
        this.match(OParser.ABSTRACT);
        this.state = 627;
        _la = this._input.LA(1);
        if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)))) !== 0) || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 626; 
            localctx.typ = this.typedef(0);
        }

        this.state = 629;
        this.match(OParser.METHOD);
        this.state = 630; 
        localctx.name = this.method_identifier();
        this.state = 631;
        this.match(OParser.LPAR);
        this.state = 633;
        _la = this._input.LA(1);
        if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ANY - 46)))) !== 0) || _la===OParser.MUTABLE || _la===OParser.TYPE_IDENTIFIER || _la===OParser.VARIABLE_IDENTIFIER) {
            this.state = 632; 
            localctx.args = this.argument_list();
        }

        this.state = 635;
        this.match(OParser.RPAR);
        this.state = 636;
        this.match(OParser.SEMI);
    } 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 Concrete_method_declarationContext(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 = OParser.RULE_concrete_method_declaration;
    this.typ = null; // TypedefContext
    this.name = null; // Method_identifierContext
    this.args = null; // Argument_listContext
    this.stmts = null; // Statement_listContext
    return this;
}

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

Concrete_method_declarationContext.prototype.METHOD = function() {
    return this.getToken(OParser.METHOD, 0);
};

Concrete_method_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Concrete_method_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Concrete_method_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Concrete_method_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Concrete_method_declarationContext.prototype.method_identifier = function() {
    return this.getTypedRuleContext(Method_identifierContext,0);
};

Concrete_method_declarationContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};

Concrete_method_declarationContext.prototype.argument_list = function() {
    return this.getTypedRuleContext(Argument_listContext,0);
};

Concrete_method_declarationContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};

Concrete_method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterConcrete_method_declaration(this);
	}
};

Concrete_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitConcrete_method_declaration(this);
	}
};




OParser.prototype.concrete_method_declaration = function() {

    var localctx = new Concrete_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 38, OParser.RULE_concrete_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 639;
        _la = this._input.LA(1);
        if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)))) !== 0) || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 638; 
            localctx.typ = this.typedef(0);
        }

        this.state = 641;
        this.match(OParser.METHOD);
        this.state = 642; 
        localctx.name = this.method_identifier();
        this.state = 643;
        this.match(OParser.LPAR);
        this.state = 645;
        _la = this._input.LA(1);
        if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ANY - 46)))) !== 0) || _la===OParser.MUTABLE || _la===OParser.TYPE_IDENTIFIER || _la===OParser.VARIABLE_IDENTIFIER) {
            this.state = 644; 
            localctx.args = this.argument_list();
        }

        this.state = 647;
        this.match(OParser.RPAR);
        this.state = 648;
        this.match(OParser.LCURL);
        this.state = 650;
        _la = this._input.LA(1);
        if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
            this.state = 649; 
            localctx.stmts = this.statement_list();
        }

        this.state = 652;
        this.match(OParser.RCURL);
    } 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 Native_method_declarationContext(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 = OParser.RULE_native_method_declaration;
    this.typ = null; // Category_or_any_typeContext
    this.name = null; // Method_identifierContext
    this.args = null; // Argument_listContext
    this.stmts = null; // Native_statement_listContext
    return this;
}

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

Native_method_declarationContext.prototype.METHOD = function() {
    return this.getToken(OParser.METHOD, 0);
};

Native_method_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Native_method_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Native_method_declarationContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Native_method_declarationContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Native_method_declarationContext.prototype.method_identifier = function() {
    return this.getTypedRuleContext(Method_identifierContext,0);
};

Native_method_declarationContext.prototype.native_statement_list = function() {
    return this.getTypedRuleContext(Native_statement_listContext,0);
};

Native_method_declarationContext.prototype.NATIVE = function() {
    return this.getToken(OParser.NATIVE, 0);
};

Native_method_declarationContext.prototype.category_or_any_type = function() {
    return this.getTypedRuleContext(Category_or_any_typeContext,0);
};

Native_method_declarationContext.prototype.argument_list = function() {
    return this.getTypedRuleContext(Argument_listContext,0);
};

Native_method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_method_declaration(this);
	}
};

Native_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_method_declaration(this);
	}
};




OParser.prototype.native_method_declaration = function() {

    var localctx = new Native_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 40, OParser.RULE_native_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 655;
        _la = this._input.LA(1);
        if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ANY - 46)))) !== 0) || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 654; 
            localctx.typ = this.category_or_any_type();
        }

        this.state = 658;
        _la = this._input.LA(1);
        if(_la===OParser.NATIVE) {
            this.state = 657;
            this.match(OParser.NATIVE);
        }

        this.state = 660;
        this.match(OParser.METHOD);
        this.state = 661; 
        localctx.name = this.method_identifier();
        this.state = 662;
        this.match(OParser.LPAR);
        this.state = 664;
        _la = this._input.LA(1);
        if(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ANY - 46)))) !== 0) || _la===OParser.MUTABLE || _la===OParser.TYPE_IDENTIFIER || _la===OParser.VARIABLE_IDENTIFIER) {
            this.state = 663; 
            localctx.args = this.argument_list();
        }

        this.state = 666;
        this.match(OParser.RPAR);
        this.state = 667;
        this.match(OParser.LCURL);
        this.state = 668; 
        localctx.stmts = this.native_statement_list();
        this.state = 669;
        this.match(OParser.RCURL);
    } 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 Test_method_declarationContext(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 = OParser.RULE_test_method_declaration;
    this.name = null; // Token
    this.stmts = null; // Statement_listContext
    this.exps = null; // Assertion_listContext
    this.error = null; // Symbol_identifierContext
    return this;
}

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

Test_method_declarationContext.prototype.TEST = function() {
    return this.getToken(OParser.TEST, 0);
};

Test_method_declarationContext.prototype.METHOD = function() {
    return this.getToken(OParser.METHOD, 0);
};

Test_method_declarationContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Test_method_declarationContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Test_method_declarationContext.prototype.LCURL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.LCURL);
    } else {
        return this.getToken(OParser.LCURL, i);
    }
};


Test_method_declarationContext.prototype.RCURL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.RCURL);
    } else {
        return this.getToken(OParser.RCURL, i);
    }
};


Test_method_declarationContext.prototype.VERIFYING = function() {
    return this.getToken(OParser.VERIFYING, 0);
};

Test_method_declarationContext.prototype.TEXT_LITERAL = function() {
    return this.getToken(OParser.TEXT_LITERAL, 0);
};

Test_method_declarationContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};

Test_method_declarationContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Test_method_declarationContext.prototype.assertion_list = function() {
    return this.getTypedRuleContext(Assertion_listContext,0);
};

Test_method_declarationContext.prototype.symbol_identifier = function() {
    return this.getTypedRuleContext(Symbol_identifierContext,0);
};

Test_method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTest_method_declaration(this);
	}
};

Test_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTest_method_declaration(this);
	}
};




OParser.prototype.test_method_declaration = function() {

    var localctx = new Test_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 42, OParser.RULE_test_method_declaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 671;
        this.match(OParser.TEST);
        this.state = 672;
        this.match(OParser.METHOD);
        this.state = 673;
        localctx.name = this.match(OParser.TEXT_LITERAL);
        this.state = 674;
        this.match(OParser.LPAR);
        this.state = 675;
        this.match(OParser.RPAR);
        this.state = 676;
        this.match(OParser.LCURL);
        this.state = 677; 
        localctx.stmts = this.statement_list();
        this.state = 678;
        this.match(OParser.RCURL);
        this.state = 679;
        this.match(OParser.VERIFYING);
        this.state = 687;
        switch(this._input.LA(1)) {
        case OParser.LCURL:
            this.state = 680;
            this.match(OParser.LCURL);
            this.state = 681; 
            localctx.exps = this.assertion_list();
            this.state = 682;
            this.match(OParser.RCURL);
            break;
        case OParser.SYMBOL_IDENTIFIER:
            this.state = 684; 
            localctx.error = this.symbol_identifier();
            this.state = 685;
            this.match(OParser.SEMI);
            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 AssertionContext(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 = OParser.RULE_assertion;
    this.exp = null; // ExpressionContext
    return this;
}

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

AssertionContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

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

AssertionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAssertion(this);
	}
};

AssertionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAssertion(this);
	}
};




OParser.prototype.assertion = function() {

    var localctx = new AssertionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 44, OParser.RULE_assertion);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 689; 
        localctx.exp = this.expression(0);
        this.state = 690;
        this.match(OParser.SEMI);
    } 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 Typed_argumentContext(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 = OParser.RULE_typed_argument;
    this.typ = null; // Category_or_any_typeContext
    this.attrs = null; // Attribute_identifier_listContext
    this.name = null; // Variable_identifierContext
    this.value = null; // Literal_expressionContext
    return this;
}

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

Typed_argumentContext.prototype.category_or_any_type = function() {
    return this.getTypedRuleContext(Category_or_any_typeContext,0);
};

Typed_argumentContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Typed_argumentContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Typed_argumentContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Typed_argumentContext.prototype.EQ = function() {
    return this.getToken(OParser.EQ, 0);
};

Typed_argumentContext.prototype.attribute_identifier_list = function() {
    return this.getTypedRuleContext(Attribute_identifier_listContext,0);
};

Typed_argumentContext.prototype.literal_expression = function() {
    return this.getTypedRuleContext(Literal_expressionContext,0);
};

Typed_argumentContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTyped_argument(this);
	}
};

Typed_argumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTyped_argument(this);
	}
};




OParser.prototype.typed_argument = function() {

    var localctx = new Typed_argumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 46, OParser.RULE_typed_argument);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 692; 
        localctx.typ = this.category_or_any_type();
        this.state = 697;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR) {
            this.state = 693;
            this.match(OParser.LPAR);
            this.state = 694; 
            localctx.attrs = this.attribute_identifier_list();
            this.state = 695;
            this.match(OParser.RPAR);
        }

        this.state = 699; 
        localctx.name = this.variable_identifier();
        this.state = 702;
        _la = this._input.LA(1);
        if(_la===OParser.EQ) {
            this.state = 700;
            this.match(OParser.EQ);
            this.state = 701; 
            localctx.value = this.literal_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 Statement_or_listContext(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 = OParser.RULE_statement_or_list;
    return this;
}

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


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


function CurlyStatementListContext(parser, ctx) {
	Statement_or_listContext.call(this, parser);
    this.items = null; // Statement_listContext;
    Statement_or_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CurlyStatementListContext.prototype = Object.create(Statement_or_listContext.prototype);
CurlyStatementListContext.prototype.constructor = CurlyStatementListContext;

CurlyStatementListContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

CurlyStatementListContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

CurlyStatementListContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};
CurlyStatementListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCurlyStatementList(this);
	}
};

CurlyStatementListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCurlyStatementList(this);
	}
};


function SingleStatementContext(parser, ctx) {
	Statement_or_listContext.call(this, parser);
    this.stmt = null; // StatementContext;
    Statement_or_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SingleStatementContext.prototype = Object.create(Statement_or_listContext.prototype);
SingleStatementContext.prototype.constructor = SingleStatementContext;

SingleStatementContext.prototype.statement = function() {
    return this.getTypedRuleContext(StatementContext,0);
};
SingleStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSingleStatement(this);
	}
};

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



OParser.prototype.statement_or_list = function() {

    var localctx = new Statement_or_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 48, OParser.RULE_statement_or_list);
    try {
        this.state = 711;
        switch(this._input.LA(1)) {
        case OParser.COMMENT:
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.CODE:
        case OParser.DOCUMENT:
        case OParser.BLOB:
        case OParser.IMAGE:
        case OParser.UUID:
        case OParser.ITERATOR:
        case OParser.CURSOR:
        case OParser.BREAK:
        case OParser.DELETE:
        case OParser.DO:
        case OParser.FLUSH:
        case OParser.FOR:
        case OParser.IF:
        case OParser.METHOD:
        case OParser.RETURN:
        case OParser.STORE:
        case OParser.SWITCH:
        case OParser.THROW:
        case OParser.TRY:
        case OParser.WITH:
        case OParser.WHILE:
        case OParser.WRITE:
        case OParser.SYMBOL_IDENTIFIER:
        case OParser.TYPE_IDENTIFIER:
        case OParser.VARIABLE_IDENTIFIER:
            localctx = new SingleStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 704; 
            localctx.stmt = this.statement();
            break;
        case OParser.LCURL:
            localctx = new CurlyStatementListContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 705;
            this.match(OParser.LCURL);
            this.state = 709;
            var la_ = this._interp.adaptivePredict(this._input,38,this._ctx);
            if(la_===1) {
                this.state = 706; 
                localctx.items = this.statement_list();
                this.state = 707;
                this.match(OParser.RCURL);

            }
            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 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 = OParser.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 CommentStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.decl = null; // Comment_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

CommentStatementContext.prototype.comment_statement = function() {
    return this.getTypedRuleContext(Comment_statementContext,0);
};
CommentStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCommentStatement(this);
	}
};

CommentStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCommentStatement(this);
	}
};


function StoreStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Store_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

StoreStatementContext.prototype.store_statement = function() {
    return this.getTypedRuleContext(Store_statementContext,0);
};
StoreStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterStoreStatement(this);
	}
};

StoreStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitStoreStatement(this);
	}
};


function WithSingletonStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // With_singleton_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

WithSingletonStatementContext.prototype.with_singleton_statement = function() {
    return this.getTypedRuleContext(With_singleton_statementContext,0);
};
WithSingletonStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterWithSingletonStatement(this);
	}
};

WithSingletonStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitWithSingletonStatement(this);
	}
};


function WriteStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Write_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

WriteStatementContext.prototype.write_statement = function() {
    return this.getTypedRuleContext(Write_statementContext,0);
};
WriteStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterWriteStatement(this);
	}
};

WriteStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitWriteStatement(this);
	}
};


function WhileStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // While_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

WhileStatementContext.prototype.while_statement = function() {
    return this.getTypedRuleContext(While_statementContext,0);
};
WhileStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterWhileStatement(this);
	}
};

WhileStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitWhileStatement(this);
	}
};


function WithResourceStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // With_resource_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

WithResourceStatementContext.prototype.with_resource_statement = function() {
    return this.getTypedRuleContext(With_resource_statementContext,0);
};
WithResourceStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterWithResourceStatement(this);
	}
};

WithResourceStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitWithResourceStatement(this);
	}
};


function RaiseStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Raise_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

RaiseStatementContext.prototype.raise_statement = function() {
    return this.getTypedRuleContext(Raise_statementContext,0);
};
RaiseStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterRaiseStatement(this);
	}
};

RaiseStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitRaiseStatement(this);
	}
};


function BreakStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Break_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

BreakStatementContext.prototype.break_statement = function() {
    return this.getTypedRuleContext(Break_statementContext,0);
};
BreakStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterBreakStatement(this);
	}
};

BreakStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitBreakStatement(this);
	}
};


function AssignInstanceStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Assign_instance_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

AssignInstanceStatementContext.prototype.assign_instance_statement = function() {
    return this.getTypedRuleContext(Assign_instance_statementContext,0);
};
AssignInstanceStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAssignInstanceStatement(this);
	}
};

AssignInstanceStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAssignInstanceStatement(this);
	}
};


function IfStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // If_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

IfStatementContext.prototype.if_statement = function() {
    return this.getTypedRuleContext(If_statementContext,0);
};
IfStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIfStatement(this);
	}
};

IfStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIfStatement(this);
	}
};


function SwitchStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Switch_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

SwitchStatementContext.prototype.switch_statement = function() {
    return this.getTypedRuleContext(Switch_statementContext,0);
};
SwitchStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSwitchStatement(this);
	}
};

SwitchStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSwitchStatement(this);
	}
};


function TryStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Try_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

TryStatementContext.prototype.try_statement = function() {
    return this.getTypedRuleContext(Try_statementContext,0);
};
TryStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTryStatement(this);
	}
};

TryStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTryStatement(this);
	}
};


function MethodCallStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Method_callContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

MethodCallStatementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

MethodCallStatementContext.prototype.method_call = function() {
    return this.getTypedRuleContext(Method_callContext,0);
};
MethodCallStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMethodCallStatement(this);
	}
};

MethodCallStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMethodCallStatement(this);
	}
};


function ReturnStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Return_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

ReturnStatementContext.prototype.return_statement = function() {
    return this.getTypedRuleContext(Return_statementContext,0);
};
ReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterReturnStatement(this);
	}
};

ReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitReturnStatement(this);
	}
};


function AssignTupleStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Assign_tuple_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

AssignTupleStatementContext.prototype.assign_tuple_statement = function() {
    return this.getTypedRuleContext(Assign_tuple_statementContext,0);
};
AssignTupleStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAssignTupleStatement(this);
	}
};

AssignTupleStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAssignTupleStatement(this);
	}
};


function ClosureStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.decl = null; // Concrete_method_declarationContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

ClosureStatementContext.prototype.concrete_method_declaration = function() {
    return this.getTypedRuleContext(Concrete_method_declarationContext,0);
};
ClosureStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterClosureStatement(this);
	}
};

ClosureStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitClosureStatement(this);
	}
};


function FlushStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Flush_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

FlushStatementContext.prototype.flush_statement = function() {
    return this.getTypedRuleContext(Flush_statementContext,0);
};
FlushStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterFlushStatement(this);
	}
};

FlushStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitFlushStatement(this);
	}
};


function DoWhileStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // Do_while_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

DoWhileStatementContext.prototype.do_while_statement = function() {
    return this.getTypedRuleContext(Do_while_statementContext,0);
};
DoWhileStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDoWhileStatement(this);
	}
};

DoWhileStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDoWhileStatement(this);
	}
};


function ForEachStatementContext(parser, ctx) {
	StatementContext.call(this, parser);
    this.stmt = null; // For_each_statementContext;
    StatementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

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

ForEachStatementContext.prototype.for_each_statement = function() {
    return this.getTypedRuleContext(For_each_statementContext,0);
};
ForEachStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterForEachStatement(this);
	}
};

ForEachStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitForEachStatement(this);
	}
};



OParser.prototype.statement = function() {

    var localctx = new StatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 50, OParser.RULE_statement);
    try {
        this.state = 734;
        var la_ = this._interp.adaptivePredict(this._input,40,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MethodCallStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 713; 
            localctx.stmt = this.method_call();
            this.state = 714;
            this.match(OParser.SEMI);
            break;

        case 2:
            localctx = new AssignInstanceStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 716; 
            localctx.stmt = this.assign_instance_statement();
            break;

        case 3:
            localctx = new AssignTupleStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 717; 
            localctx.stmt = this.assign_tuple_statement();
            break;

        case 4:
            localctx = new StoreStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 718; 
            localctx.stmt = this.store_statement();
            break;

        case 5:
            localctx = new FlushStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 719; 
            localctx.stmt = this.flush_statement();
            break;

        case 6:
            localctx = new BreakStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 720; 
            localctx.stmt = this.break_statement();
            break;

        case 7:
            localctx = new ReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 721; 
            localctx.stmt = this.return_statement();
            break;

        case 8:
            localctx = new IfStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 722; 
            localctx.stmt = this.if_statement();
            break;

        case 9:
            localctx = new SwitchStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 723; 
            localctx.stmt = this.switch_statement();
            break;

        case 10:
            localctx = new ForEachStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 724; 
            localctx.stmt = this.for_each_statement();
            break;

        case 11:
            localctx = new WhileStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 725; 
            localctx.stmt = this.while_statement();
            break;

        case 12:
            localctx = new DoWhileStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 726; 
            localctx.stmt = this.do_while_statement();
            break;

        case 13:
            localctx = new TryStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 727; 
            localctx.stmt = this.try_statement();
            break;

        case 14:
            localctx = new RaiseStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 14);
            this.state = 728; 
            localctx.stmt = this.raise_statement();
            break;

        case 15:
            localctx = new WriteStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 15);
            this.state = 729; 
            localctx.stmt = this.write_statement();
            break;

        case 16:
            localctx = new WithResourceStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 16);
            this.state = 730; 
            localctx.stmt = this.with_resource_statement();
            break;

        case 17:
            localctx = new WithSingletonStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 17);
            this.state = 731; 
            localctx.stmt = this.with_singleton_statement();
            break;

        case 18:
            localctx = new ClosureStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 18);
            this.state = 732; 
            localctx.decl = this.concrete_method_declaration();
            break;

        case 19:
            localctx = new CommentStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 19);
            this.state = 733; 
            localctx.decl = this.comment_statement();
            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 Flush_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 = OParser.RULE_flush_statement;
    return this;
}

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

Flush_statementContext.prototype.FLUSH = function() {
    return this.getToken(OParser.FLUSH, 0);
};

Flush_statementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Flush_statementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Flush_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Flush_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterFlush_statement(this);
	}
};

Flush_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitFlush_statement(this);
	}
};




OParser.prototype.flush_statement = function() {

    var localctx = new Flush_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 52, OParser.RULE_flush_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 736;
        this.match(OParser.FLUSH);
        this.state = 737;
        this.match(OParser.LPAR);
        this.state = 738;
        this.match(OParser.RPAR);
        this.state = 739;
        this.match(OParser.SEMI);
    } 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 Store_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 = OParser.RULE_store_statement;
    this.to_del = null; // Expression_listContext
    this.to_add = null; // Expression_listContext
    return this;
}

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

Store_statementContext.prototype.DELETE = function() {
    return this.getToken(OParser.DELETE, 0);
};

Store_statementContext.prototype.LPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.LPAR);
    } else {
        return this.getToken(OParser.LPAR, i);
    }
};


Store_statementContext.prototype.RPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.RPAR);
    } else {
        return this.getToken(OParser.RPAR, i);
    }
};


Store_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Store_statementContext.prototype.expression_list = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Expression_listContext);
    } else {
        return this.getTypedRuleContext(Expression_listContext,i);
    }
};

Store_statementContext.prototype.STORE = function() {
    return this.getToken(OParser.STORE, 0);
};

Store_statementContext.prototype.AND = function() {
    return this.getToken(OParser.AND, 0);
};

Store_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterStore_statement(this);
	}
};

Store_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitStore_statement(this);
	}
};




OParser.prototype.store_statement = function() {

    var localctx = new Store_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 54, OParser.RULE_store_statement);
    try {
        this.state = 764;
        var la_ = this._interp.adaptivePredict(this._input,41,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 741;
            this.match(OParser.DELETE);
            this.state = 742;
            this.match(OParser.LPAR);
            this.state = 743; 
            localctx.to_del = this.expression_list();
            this.state = 744;
            this.match(OParser.RPAR);
            this.state = 745;
            this.match(OParser.SEMI);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 747;
            this.match(OParser.STORE);
            this.state = 748;
            this.match(OParser.LPAR);
            this.state = 749; 
            localctx.to_add = this.expression_list();
            this.state = 750;
            this.match(OParser.RPAR);
            this.state = 751;
            this.match(OParser.SEMI);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 753;
            this.match(OParser.DELETE);
            this.state = 754;
            this.match(OParser.LPAR);
            this.state = 755; 
            localctx.to_del = this.expression_list();
            this.state = 756;
            this.match(OParser.RPAR);
            this.state = 757;
            this.match(OParser.AND);
            this.state = 758;
            this.match(OParser.STORE);
            this.state = 759;
            this.match(OParser.LPAR);
            this.state = 760; 
            localctx.to_add = this.expression_list();
            this.state = 761;
            this.match(OParser.RPAR);
            this.state = 762;
            this.match(OParser.SEMI);
            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 With_resource_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 = OParser.RULE_with_resource_statement;
    this.stmt = null; // Assign_variable_statementContext
    this.stmts = null; // Statement_or_listContext
    return this;
}

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

With_resource_statementContext.prototype.WITH = function() {
    return this.getToken(OParser.WITH, 0);
};

With_resource_statementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

With_resource_statementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

With_resource_statementContext.prototype.assign_variable_statement = function() {
    return this.getTypedRuleContext(Assign_variable_statementContext,0);
};

With_resource_statementContext.prototype.statement_or_list = function() {
    return this.getTypedRuleContext(Statement_or_listContext,0);
};

With_resource_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterWith_resource_statement(this);
	}
};

With_resource_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitWith_resource_statement(this);
	}
};




OParser.prototype.with_resource_statement = function() {

    var localctx = new With_resource_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 56, OParser.RULE_with_resource_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 766;
        this.match(OParser.WITH);
        this.state = 767;
        this.match(OParser.LPAR);
        this.state = 768; 
        localctx.stmt = this.assign_variable_statement();
        this.state = 769;
        this.match(OParser.RPAR);
        this.state = 770; 
        localctx.stmts = this.statement_or_list();
    } 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 With_singleton_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 = OParser.RULE_with_singleton_statement;
    this.typ = null; // Type_identifierContext
    this.stmts = null; // Statement_or_listContext
    return this;
}

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

With_singleton_statementContext.prototype.WITH = function() {
    return this.getToken(OParser.WITH, 0);
};

With_singleton_statementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

With_singleton_statementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

With_singleton_statementContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};

With_singleton_statementContext.prototype.statement_or_list = function() {
    return this.getTypedRuleContext(Statement_or_listContext,0);
};

With_singleton_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterWith_singleton_statement(this);
	}
};

With_singleton_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitWith_singleton_statement(this);
	}
};




OParser.prototype.with_singleton_statement = function() {

    var localctx = new With_singleton_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 58, OParser.RULE_with_singleton_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 772;
        this.match(OParser.WITH);
        this.state = 773;
        this.match(OParser.LPAR);
        this.state = 774; 
        localctx.typ = this.type_identifier();
        this.state = 775;
        this.match(OParser.RPAR);
        this.state = 776; 
        localctx.stmts = this.statement_or_list();
    } 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 Switch_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 = OParser.RULE_switch_statement;
    this.exp = null; // ExpressionContext
    this.cases = null; // Switch_case_statement_listContext
    this.stmts = null; // Statement_listContext
    return this;
}

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

Switch_statementContext.prototype.SWITCH = function() {
    return this.getToken(OParser.SWITCH, 0);
};

Switch_statementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Switch_statementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Switch_statementContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Switch_statementContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

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

Switch_statementContext.prototype.switch_case_statement_list = function() {
    return this.getTypedRuleContext(Switch_case_statement_listContext,0);
};

Switch_statementContext.prototype.DEFAULT = function() {
    return this.getToken(OParser.DEFAULT, 0);
};

Switch_statementContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

Switch_statementContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};

Switch_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSwitch_statement(this);
	}
};

Switch_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSwitch_statement(this);
	}
};




OParser.prototype.switch_statement = function() {

    var localctx = new Switch_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 60, OParser.RULE_switch_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 778;
        this.match(OParser.SWITCH);
        this.state = 779;
        this.match(OParser.LPAR);
        this.state = 780; 
        localctx.exp = this.expression(0);
        this.state = 781;
        this.match(OParser.RPAR);
        this.state = 782;
        this.match(OParser.LCURL);
        this.state = 783; 
        localctx.cases = this.switch_case_statement_list();
        this.state = 789;
        _la = this._input.LA(1);
        if(_la===OParser.DEFAULT) {
            this.state = 784;
            this.match(OParser.DEFAULT);
            this.state = 785;
            this.match(OParser.COLON);
            this.state = 787;
            _la = this._input.LA(1);
            if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
                this.state = 786; 
                localctx.stmts = this.statement_list();
            }

        }

        this.state = 791;
        this.match(OParser.RCURL);
    } 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 Switch_case_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 = OParser.RULE_switch_case_statement;
    return this;
}

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


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


function AtomicSwitchCaseContext(parser, ctx) {
	Switch_case_statementContext.call(this, parser);
    this.exp = null; // Atomic_literalContext;
    this.stmts = null; // Statement_listContext;
    Switch_case_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AtomicSwitchCaseContext.prototype = Object.create(Switch_case_statementContext.prototype);
AtomicSwitchCaseContext.prototype.constructor = AtomicSwitchCaseContext;

AtomicSwitchCaseContext.prototype.CASE = function() {
    return this.getToken(OParser.CASE, 0);
};

AtomicSwitchCaseContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

AtomicSwitchCaseContext.prototype.atomic_literal = function() {
    return this.getTypedRuleContext(Atomic_literalContext,0);
};

AtomicSwitchCaseContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};
AtomicSwitchCaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAtomicSwitchCase(this);
	}
};

AtomicSwitchCaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAtomicSwitchCase(this);
	}
};


function CollectionSwitchCaseContext(parser, ctx) {
	Switch_case_statementContext.call(this, parser);
    this.exp = null; // Literal_collectionContext;
    this.stmts = null; // Statement_listContext;
    Switch_case_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CollectionSwitchCaseContext.prototype = Object.create(Switch_case_statementContext.prototype);
CollectionSwitchCaseContext.prototype.constructor = CollectionSwitchCaseContext;

CollectionSwitchCaseContext.prototype.CASE = function() {
    return this.getToken(OParser.CASE, 0);
};

CollectionSwitchCaseContext.prototype.IN = function() {
    return this.getToken(OParser.IN, 0);
};

CollectionSwitchCaseContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

CollectionSwitchCaseContext.prototype.literal_collection = function() {
    return this.getTypedRuleContext(Literal_collectionContext,0);
};

CollectionSwitchCaseContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};
CollectionSwitchCaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCollectionSwitchCase(this);
	}
};

CollectionSwitchCaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCollectionSwitchCase(this);
	}
};



OParser.prototype.switch_case_statement = function() {

    var localctx = new Switch_case_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 62, OParser.RULE_switch_case_statement);
    var _la = 0; // Token type
    try {
        this.state = 806;
        var la_ = this._interp.adaptivePredict(this._input,46,this._ctx);
        switch(la_) {
        case 1:
            localctx = new AtomicSwitchCaseContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 793;
            this.match(OParser.CASE);
            this.state = 794; 
            localctx.exp = this.atomic_literal();
            this.state = 795;
            this.match(OParser.COLON);
            this.state = 797;
            _la = this._input.LA(1);
            if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
                this.state = 796; 
                localctx.stmts = this.statement_list();
            }

            break;

        case 2:
            localctx = new CollectionSwitchCaseContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 799;
            this.match(OParser.CASE);
            this.state = 800;
            this.match(OParser.IN);
            this.state = 801; 
            localctx.exp = this.literal_collection();
            this.state = 802;
            this.match(OParser.COLON);
            this.state = 804;
            _la = this._input.LA(1);
            if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
                this.state = 803; 
                localctx.stmts = this.statement_list();
            }

            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 For_each_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 = OParser.RULE_for_each_statement;
    this.name1 = null; // Variable_identifierContext
    this.name2 = null; // Variable_identifierContext
    this.source = null; // ExpressionContext
    this.stmts = null; // Statement_or_listContext
    return this;
}

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

For_each_statementContext.prototype.FOR = function() {
    return this.getToken(OParser.FOR, 0);
};

For_each_statementContext.prototype.EACH = function() {
    return this.getToken(OParser.EACH, 0);
};

For_each_statementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

For_each_statementContext.prototype.IN = function() {
    return this.getToken(OParser.IN, 0);
};

For_each_statementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

For_each_statementContext.prototype.variable_identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Variable_identifierContext);
    } else {
        return this.getTypedRuleContext(Variable_identifierContext,i);
    }
};

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

For_each_statementContext.prototype.statement_or_list = function() {
    return this.getTypedRuleContext(Statement_or_listContext,0);
};

For_each_statementContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

For_each_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterFor_each_statement(this);
	}
};

For_each_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitFor_each_statement(this);
	}
};




OParser.prototype.for_each_statement = function() {

    var localctx = new For_each_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 64, OParser.RULE_for_each_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 808;
        this.match(OParser.FOR);
        this.state = 809;
        this.match(OParser.EACH);
        this.state = 810;
        this.match(OParser.LPAR);
        this.state = 811; 
        localctx.name1 = this.variable_identifier();
        this.state = 814;
        _la = this._input.LA(1);
        if(_la===OParser.COMMA) {
            this.state = 812;
            this.match(OParser.COMMA);
            this.state = 813; 
            localctx.name2 = this.variable_identifier();
        }

        this.state = 816;
        this.match(OParser.IN);
        this.state = 817; 
        localctx.source = this.expression(0);
        this.state = 818;
        this.match(OParser.RPAR);
        this.state = 819; 
        localctx.stmts = this.statement_or_list();
    } 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 Do_while_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 = OParser.RULE_do_while_statement;
    this.stmts = null; // Statement_listContext
    this.exp = null; // ExpressionContext
    return this;
}

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

Do_while_statementContext.prototype.DO = function() {
    return this.getToken(OParser.DO, 0);
};

Do_while_statementContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Do_while_statementContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Do_while_statementContext.prototype.WHILE = function() {
    return this.getToken(OParser.WHILE, 0);
};

Do_while_statementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Do_while_statementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Do_while_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

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

Do_while_statementContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};

Do_while_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDo_while_statement(this);
	}
};

Do_while_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDo_while_statement(this);
	}
};




OParser.prototype.do_while_statement = function() {

    var localctx = new Do_while_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 66, OParser.RULE_do_while_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 821;
        this.match(OParser.DO);
        this.state = 822;
        this.match(OParser.LCURL);
        this.state = 824;
        _la = this._input.LA(1);
        if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
            this.state = 823; 
            localctx.stmts = this.statement_list();
        }

        this.state = 826;
        this.match(OParser.RCURL);
        this.state = 827;
        this.match(OParser.WHILE);
        this.state = 828;
        this.match(OParser.LPAR);
        this.state = 829; 
        localctx.exp = this.expression(0);
        this.state = 830;
        this.match(OParser.RPAR);
        this.state = 831;
        this.match(OParser.SEMI);
    } 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 While_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 = OParser.RULE_while_statement;
    this.exp = null; // ExpressionContext
    this.stmts = null; // Statement_or_listContext
    return this;
}

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

While_statementContext.prototype.WHILE = function() {
    return this.getToken(OParser.WHILE, 0);
};

While_statementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

While_statementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

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

While_statementContext.prototype.statement_or_list = function() {
    return this.getTypedRuleContext(Statement_or_listContext,0);
};

While_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterWhile_statement(this);
	}
};

While_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitWhile_statement(this);
	}
};




OParser.prototype.while_statement = function() {

    var localctx = new While_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 68, OParser.RULE_while_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 833;
        this.match(OParser.WHILE);
        this.state = 834;
        this.match(OParser.LPAR);
        this.state = 835; 
        localctx.exp = this.expression(0);
        this.state = 836;
        this.match(OParser.RPAR);
        this.state = 837; 
        localctx.stmts = this.statement_or_list();
    } 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 If_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 = OParser.RULE_if_statement;
    this.exp = null; // ExpressionContext
    this.stmts = null; // Statement_or_listContext
    this.elseIfs = null; // Else_if_statement_listContext
    this.elseStmts = null; // Statement_or_listContext
    return this;
}

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

If_statementContext.prototype.IF = function() {
    return this.getToken(OParser.IF, 0);
};

If_statementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

If_statementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

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

If_statementContext.prototype.statement_or_list = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Statement_or_listContext);
    } else {
        return this.getTypedRuleContext(Statement_or_listContext,i);
    }
};

If_statementContext.prototype.ELSE = function() {
    return this.getToken(OParser.ELSE, 0);
};

If_statementContext.prototype.else_if_statement_list = function() {
    return this.getTypedRuleContext(Else_if_statement_listContext,0);
};

If_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIf_statement(this);
	}
};

If_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIf_statement(this);
	}
};




OParser.prototype.if_statement = function() {

    var localctx = new If_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 70, OParser.RULE_if_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 839;
        this.match(OParser.IF);
        this.state = 840;
        this.match(OParser.LPAR);
        this.state = 841; 
        localctx.exp = this.expression(0);
        this.state = 842;
        this.match(OParser.RPAR);
        this.state = 843; 
        localctx.stmts = this.statement_or_list();
        this.state = 845;
        var la_ = this._interp.adaptivePredict(this._input,49,this._ctx);
        if(la_===1) {
            this.state = 844; 
            localctx.elseIfs = this.else_if_statement_list(0);

        }
        this.state = 849;
        var la_ = this._interp.adaptivePredict(this._input,50,this._ctx);
        if(la_===1) {
            this.state = 847;
            this.match(OParser.ELSE);
            this.state = 848; 
            localctx.elseStmts = this.statement_or_list();

        }
    } 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 Else_if_statement_listContext(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 = OParser.RULE_else_if_statement_list;
    return this;
}

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


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

function ElseIfStatementListContext(parser, ctx) {
	Else_if_statement_listContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    this.stmts = null; // Statement_or_listContext;
    Else_if_statement_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ElseIfStatementListContext.prototype = Object.create(Else_if_statement_listContext.prototype);
ElseIfStatementListContext.prototype.constructor = ElseIfStatementListContext;

ElseIfStatementListContext.prototype.ELSE = function() {
    return this.getToken(OParser.ELSE, 0);
};

ElseIfStatementListContext.prototype.IF = function() {
    return this.getToken(OParser.IF, 0);
};

ElseIfStatementListContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

ElseIfStatementListContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

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

ElseIfStatementListContext.prototype.statement_or_list = function() {
    return this.getTypedRuleContext(Statement_or_listContext,0);
};
ElseIfStatementListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterElseIfStatementList(this);
	}
};

ElseIfStatementListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitElseIfStatementList(this);
	}
};


function ElseIfStatementListItemContext(parser, ctx) {
	Else_if_statement_listContext.call(this, parser);
    this.items = null; // Else_if_statement_listContext;
    this.exp = null; // ExpressionContext;
    this.stmts = null; // Statement_or_listContext;
    Else_if_statement_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ElseIfStatementListItemContext.prototype = Object.create(Else_if_statement_listContext.prototype);
ElseIfStatementListItemContext.prototype.constructor = ElseIfStatementListItemContext;

ElseIfStatementListItemContext.prototype.ELSE = function() {
    return this.getToken(OParser.ELSE, 0);
};

ElseIfStatementListItemContext.prototype.IF = function() {
    return this.getToken(OParser.IF, 0);
};

ElseIfStatementListItemContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

ElseIfStatementListItemContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

ElseIfStatementListItemContext.prototype.else_if_statement_list = function() {
    return this.getTypedRuleContext(Else_if_statement_listContext,0);
};

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

ElseIfStatementListItemContext.prototype.statement_or_list = function() {
    return this.getTypedRuleContext(Statement_or_listContext,0);
};
ElseIfStatementListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterElseIfStatementListItem(this);
	}
};

ElseIfStatementListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitElseIfStatementListItem(this);
	}
};



OParser.prototype.else_if_statement_list = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Else_if_statement_listContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 72;
    this.enterRecursionRule(localctx, 72, OParser.RULE_else_if_statement_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new ElseIfStatementListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 852;
        this.match(OParser.ELSE);
        this.state = 853;
        this.match(OParser.IF);
        this.state = 854;
        this.match(OParser.LPAR);
        this.state = 855; 
        localctx.exp = this.expression(0);
        this.state = 856;
        this.match(OParser.RPAR);
        this.state = 857; 
        localctx.stmts = this.statement_or_list();
        this._ctx.stop = this._input.LT(-1);
        this.state = 869;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,51,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new ElseIfStatementListItemContext(this, new Else_if_statement_listContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_else_if_statement_list);
                this.state = 859;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 860;
                this.match(OParser.ELSE);
                this.state = 861;
                this.match(OParser.IF);
                this.state = 862;
                this.match(OParser.LPAR);
                this.state = 863; 
                localctx.exp = this.expression(0);
                this.state = 864;
                this.match(OParser.RPAR);
                this.state = 865; 
                localctx.stmts = this.statement_or_list(); 
            }
            this.state = 871;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,51,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 Raise_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 = OParser.RULE_raise_statement;
    this.exp = null; // ExpressionContext
    return this;
}

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

Raise_statementContext.prototype.THROW = function() {
    return this.getToken(OParser.THROW, 0);
};

Raise_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

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

Raise_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterRaise_statement(this);
	}
};

Raise_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitRaise_statement(this);
	}
};




OParser.prototype.raise_statement = function() {

    var localctx = new Raise_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 74, OParser.RULE_raise_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 872;
        this.match(OParser.THROW);
        this.state = 873; 
        localctx.exp = this.expression(0);
        this.state = 874;
        this.match(OParser.SEMI);
    } 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 Try_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 = OParser.RULE_try_statement;
    this.name = null; // Variable_identifierContext
    this.stmts = null; // Statement_listContext
    this.handlers = null; // Catch_statement_listContext
    this.anyStmts = null; // Statement_listContext
    this.finalStmts = null; // Statement_listContext
    return this;
}

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

Try_statementContext.prototype.TRY = function() {
    return this.getToken(OParser.TRY, 0);
};

Try_statementContext.prototype.LPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.LPAR);
    } else {
        return this.getToken(OParser.LPAR, i);
    }
};


Try_statementContext.prototype.RPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.RPAR);
    } else {
        return this.getToken(OParser.RPAR, i);
    }
};


Try_statementContext.prototype.LCURL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.LCURL);
    } else {
        return this.getToken(OParser.LCURL, i);
    }
};


Try_statementContext.prototype.RCURL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.RCURL);
    } else {
        return this.getToken(OParser.RCURL, i);
    }
};


Try_statementContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Try_statementContext.prototype.CATCH = function() {
    return this.getToken(OParser.CATCH, 0);
};

Try_statementContext.prototype.ANY = function() {
    return this.getToken(OParser.ANY, 0);
};

Try_statementContext.prototype.FINALLY = function() {
    return this.getToken(OParser.FINALLY, 0);
};

Try_statementContext.prototype.statement_list = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Statement_listContext);
    } else {
        return this.getTypedRuleContext(Statement_listContext,i);
    }
};

Try_statementContext.prototype.catch_statement_list = function() {
    return this.getTypedRuleContext(Catch_statement_listContext,0);
};

Try_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTry_statement(this);
	}
};

Try_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTry_statement(this);
	}
};




OParser.prototype.try_statement = function() {

    var localctx = new Try_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 76, OParser.RULE_try_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 876;
        this.match(OParser.TRY);
        this.state = 877;
        this.match(OParser.LPAR);
        this.state = 878; 
        localctx.name = this.variable_identifier();
        this.state = 879;
        this.match(OParser.RPAR);
        this.state = 880;
        this.match(OParser.LCURL);
        this.state = 882;
        _la = this._input.LA(1);
        if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
            this.state = 881; 
            localctx.stmts = this.statement_list();
        }

        this.state = 884;
        this.match(OParser.RCURL);
        this.state = 886;
        var la_ = this._interp.adaptivePredict(this._input,53,this._ctx);
        if(la_===1) {
            this.state = 885; 
            localctx.handlers = this.catch_statement_list();

        }
        this.state = 897;
        var la_ = this._interp.adaptivePredict(this._input,55,this._ctx);
        if(la_===1) {
            this.state = 888;
            this.match(OParser.CATCH);
            this.state = 889;
            this.match(OParser.LPAR);
            this.state = 890;
            this.match(OParser.ANY);
            this.state = 891;
            this.match(OParser.RPAR);
            this.state = 892;
            this.match(OParser.LCURL);
            this.state = 894;
            _la = this._input.LA(1);
            if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
                this.state = 893; 
                localctx.anyStmts = this.statement_list();
            }

            this.state = 896;
            this.match(OParser.RCURL);

        }
        this.state = 905;
        var la_ = this._interp.adaptivePredict(this._input,57,this._ctx);
        if(la_===1) {
            this.state = 899;
            this.match(OParser.FINALLY);
            this.state = 900;
            this.match(OParser.LCURL);
            this.state = 902;
            _la = this._input.LA(1);
            if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
                this.state = 901; 
                localctx.finalStmts = this.statement_list();
            }

            this.state = 904;
            this.match(OParser.RCURL);

        }
    } 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 Catch_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 = OParser.RULE_catch_statement;
    return this;
}

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


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


function CatchAtomicStatementContext(parser, ctx) {
	Catch_statementContext.call(this, parser);
    this.name = null; // Symbol_identifierContext;
    this.stmts = null; // Statement_listContext;
    Catch_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CatchAtomicStatementContext.prototype = Object.create(Catch_statementContext.prototype);
CatchAtomicStatementContext.prototype.constructor = CatchAtomicStatementContext;

CatchAtomicStatementContext.prototype.CATCH = function() {
    return this.getToken(OParser.CATCH, 0);
};

CatchAtomicStatementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

CatchAtomicStatementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

CatchAtomicStatementContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

CatchAtomicStatementContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

CatchAtomicStatementContext.prototype.symbol_identifier = function() {
    return this.getTypedRuleContext(Symbol_identifierContext,0);
};

CatchAtomicStatementContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};
CatchAtomicStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCatchAtomicStatement(this);
	}
};

CatchAtomicStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCatchAtomicStatement(this);
	}
};


function CatchCollectionStatementContext(parser, ctx) {
	Catch_statementContext.call(this, parser);
    this.exp = null; // Symbol_listContext;
    this.stmts = null; // Statement_listContext;
    Catch_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CatchCollectionStatementContext.prototype = Object.create(Catch_statementContext.prototype);
CatchCollectionStatementContext.prototype.constructor = CatchCollectionStatementContext;

CatchCollectionStatementContext.prototype.CATCH = function() {
    return this.getToken(OParser.CATCH, 0);
};

CatchCollectionStatementContext.prototype.IN = function() {
    return this.getToken(OParser.IN, 0);
};

CatchCollectionStatementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

CatchCollectionStatementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

CatchCollectionStatementContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

CatchCollectionStatementContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

CatchCollectionStatementContext.prototype.symbol_list = function() {
    return this.getTypedRuleContext(Symbol_listContext,0);
};

CatchCollectionStatementContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};
CatchCollectionStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCatchCollectionStatement(this);
	}
};

CatchCollectionStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCatchCollectionStatement(this);
	}
};



OParser.prototype.catch_statement = function() {

    var localctx = new Catch_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 78, OParser.RULE_catch_statement);
    var _la = 0; // Token type
    try {
        this.state = 928;
        var la_ = this._interp.adaptivePredict(this._input,60,this._ctx);
        switch(la_) {
        case 1:
            localctx = new CatchAtomicStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 907;
            this.match(OParser.CATCH);
            this.state = 908;
            this.match(OParser.LPAR);
            this.state = 909; 
            localctx.name = this.symbol_identifier();
            this.state = 910;
            this.match(OParser.RPAR);
            this.state = 911;
            this.match(OParser.LCURL);
            this.state = 913;
            _la = this._input.LA(1);
            if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
                this.state = 912; 
                localctx.stmts = this.statement_list();
            }

            this.state = 915;
            this.match(OParser.RCURL);
            break;

        case 2:
            localctx = new CatchCollectionStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 917;
            this.match(OParser.CATCH);
            this.state = 918;
            this.match(OParser.IN);
            this.state = 919;
            this.match(OParser.LPAR);
            this.state = 920; 
            localctx.exp = this.symbol_list();
            this.state = 921;
            this.match(OParser.RPAR);
            this.state = 922;
            this.match(OParser.LCURL);
            this.state = 924;
            _la = this._input.LA(1);
            if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
                this.state = 923; 
                localctx.stmts = this.statement_list();
            }

            this.state = 926;
            this.match(OParser.RCURL);
            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 Break_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 = OParser.RULE_break_statement;
    return this;
}

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

Break_statementContext.prototype.BREAK = function() {
    return this.getToken(OParser.BREAK, 0);
};

Break_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Break_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterBreak_statement(this);
	}
};

Break_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitBreak_statement(this);
	}
};




OParser.prototype.break_statement = function() {

    var localctx = new Break_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 80, OParser.RULE_break_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 930;
        this.match(OParser.BREAK);
        this.state = 931;
        this.match(OParser.SEMI);
    } 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 Return_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 = OParser.RULE_return_statement;
    this.exp = null; // ExpressionContext
    return this;
}

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

Return_statementContext.prototype.RETURN = function() {
    return this.getToken(OParser.RETURN, 0);
};

Return_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

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

Return_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterReturn_statement(this);
	}
};

Return_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitReturn_statement(this);
	}
};




OParser.prototype.return_statement = function() {

    var localctx = new Return_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 82, OParser.RULE_return_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 933;
        this.match(OParser.RETURN);
        this.state = 935;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 934; 
            localctx.exp = this.expression(0);
        }

        this.state = 937;
        this.match(OParser.SEMI);
    } 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 Method_callContext(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 = OParser.RULE_method_call;
    this.method = null; // Method_selectorContext
    this.args = null; // Argument_assignment_listContext
    return this;
}

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

Method_callContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Method_callContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Method_callContext.prototype.method_selector = function() {
    return this.getTypedRuleContext(Method_selectorContext,0);
};

Method_callContext.prototype.argument_assignment_list = function() {
    return this.getTypedRuleContext(Argument_assignment_listContext,0);
};

Method_callContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMethod_call(this);
	}
};

Method_callContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMethod_call(this);
	}
};




OParser.prototype.method_call = function() {

    var localctx = new Method_callContext(this, this._ctx, this.state);
    this.enterRule(localctx, 84, OParser.RULE_method_call);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 939; 
        localctx.method = this.method_selector();
        this.state = 940;
        this.match(OParser.LPAR);
        this.state = 942;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 941; 
            localctx.args = this.argument_assignment_list(0);
        }

        this.state = 944;
        this.match(OParser.RPAR);
    } 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 Method_selectorContext(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 = OParser.RULE_method_selector;
    return this;
}

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


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


function MethodParentContext(parser, ctx) {
	Method_selectorContext.call(this, parser);
    this.parent = null; // Callable_parentContext;
    this.name = null; // Method_identifierContext;
    Method_selectorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MethodParentContext.prototype = Object.create(Method_selectorContext.prototype);
MethodParentContext.prototype.constructor = MethodParentContext;

MethodParentContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

MethodParentContext.prototype.callable_parent = function() {
    return this.getTypedRuleContext(Callable_parentContext,0);
};

MethodParentContext.prototype.method_identifier = function() {
    return this.getTypedRuleContext(Method_identifierContext,0);
};
MethodParentContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMethodParent(this);
	}
};

MethodParentContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMethodParent(this);
	}
};


function MethodNameContext(parser, ctx) {
	Method_selectorContext.call(this, parser);
    this.name = null; // Method_identifierContext;
    Method_selectorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MethodNameContext.prototype = Object.create(Method_selectorContext.prototype);
MethodNameContext.prototype.constructor = MethodNameContext;

MethodNameContext.prototype.method_identifier = function() {
    return this.getTypedRuleContext(Method_identifierContext,0);
};
MethodNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMethodName(this);
	}
};

MethodNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMethodName(this);
	}
};



OParser.prototype.method_selector = function() {

    var localctx = new Method_selectorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 86, OParser.RULE_method_selector);
    try {
        this.state = 951;
        var la_ = this._interp.adaptivePredict(this._input,63,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MethodNameContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 946; 
            localctx.name = this.method_identifier();
            break;

        case 2:
            localctx = new MethodParentContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 947; 
            localctx.parent = this.callable_parent(0);
            this.state = 948;
            this.match(OParser.DOT);
            this.state = 949; 
            localctx.name = this.method_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 Callable_parentContext(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 = OParser.RULE_callable_parent;
    return this;
}

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


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

function CallableSelectorContext(parser, ctx) {
	Callable_parentContext.call(this, parser);
    this.parent = null; // Callable_parentContext;
    this.select = null; // Callable_selectorContext;
    Callable_parentContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CallableSelectorContext.prototype = Object.create(Callable_parentContext.prototype);
CallableSelectorContext.prototype.constructor = CallableSelectorContext;

CallableSelectorContext.prototype.callable_parent = function() {
    return this.getTypedRuleContext(Callable_parentContext,0);
};

CallableSelectorContext.prototype.callable_selector = function() {
    return this.getTypedRuleContext(Callable_selectorContext,0);
};
CallableSelectorContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCallableSelector(this);
	}
};

CallableSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCallableSelector(this);
	}
};


function CallableRootContext(parser, ctx) {
	Callable_parentContext.call(this, parser);
    this.name = null; // IdentifierContext;
    Callable_parentContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CallableRootContext.prototype = Object.create(Callable_parentContext.prototype);
CallableRootContext.prototype.constructor = CallableRootContext;

CallableRootContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};
CallableRootContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCallableRoot(this);
	}
};

CallableRootContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCallableRoot(this);
	}
};



OParser.prototype.callable_parent = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Callable_parentContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 88;
    this.enterRecursionRule(localctx, 88, OParser.RULE_callable_parent, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new CallableRootContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 954; 
        localctx.name = this.identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 960;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,64,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new CallableSelectorContext(this, new Callable_parentContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_callable_parent);
                this.state = 956;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 957; 
                localctx.select = this.callable_selector(); 
            }
            this.state = 962;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,64,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 Callable_selectorContext(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 = OParser.RULE_callable_selector;
    return this;
}

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


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


function CallableItemSelectorContext(parser, ctx) {
	Callable_selectorContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    Callable_selectorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CallableItemSelectorContext.prototype = Object.create(Callable_selectorContext.prototype);
CallableItemSelectorContext.prototype.constructor = CallableItemSelectorContext;

CallableItemSelectorContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

CallableItemSelectorContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

CallableItemSelectorContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
CallableItemSelectorContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCallableItemSelector(this);
	}
};

CallableItemSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCallableItemSelector(this);
	}
};


function CallableMemberSelectorContext(parser, ctx) {
	Callable_selectorContext.call(this, parser);
    this.name = null; // Variable_identifierContext;
    Callable_selectorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CallableMemberSelectorContext.prototype = Object.create(Callable_selectorContext.prototype);
CallableMemberSelectorContext.prototype.constructor = CallableMemberSelectorContext;

CallableMemberSelectorContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

CallableMemberSelectorContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
CallableMemberSelectorContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCallableMemberSelector(this);
	}
};

CallableMemberSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCallableMemberSelector(this);
	}
};



OParser.prototype.callable_selector = function() {

    var localctx = new Callable_selectorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 90, OParser.RULE_callable_selector);
    try {
        this.state = 969;
        switch(this._input.LA(1)) {
        case OParser.DOT:
            localctx = new CallableMemberSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 963;
            this.match(OParser.DOT);
            this.state = 964; 
            localctx.name = this.variable_identifier();
            break;
        case OParser.LBRAK:
            localctx = new CallableItemSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 965;
            this.match(OParser.LBRAK);
            this.state = 966; 
            localctx.exp = this.expression(0);
            this.state = 967;
            this.match(OParser.RBRAK);
            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 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 = OParser.RULE_expression;
    return this;
}

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


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

function IntDivideExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IntDivideExpressionContext.prototype = Object.create(ExpressionContext.prototype);
IntDivideExpressionContext.prototype.constructor = IntDivideExpressionContext;

IntDivideExpressionContext.prototype.idivide = function() {
    return this.getTypedRuleContext(IdivideContext,0);
};

IntDivideExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
IntDivideExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIntDivideExpression(this);
	}
};

IntDivideExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIntDivideExpression(this);
	}
};


function TernaryExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.test = null; // ExpressionContext;
    this.ifTrue = null; // ExpressionContext;
    this.ifFalse = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TernaryExpressionContext.prototype = Object.create(ExpressionContext.prototype);
TernaryExpressionContext.prototype.constructor = TernaryExpressionContext;

TernaryExpressionContext.prototype.QMARK = function() {
    return this.getToken(OParser.QMARK, 0);
};

TernaryExpressionContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

TernaryExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
TernaryExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTernaryExpression(this);
	}
};

TernaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTernaryExpression(this);
	}
};


function ContainsAllExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ContainsAllExpressionContext.prototype = Object.create(ExpressionContext.prototype);
ContainsAllExpressionContext.prototype.constructor = ContainsAllExpressionContext;

ContainsAllExpressionContext.prototype.CONTAINS = function() {
    return this.getToken(OParser.CONTAINS, 0);
};

ContainsAllExpressionContext.prototype.ALL = function() {
    return this.getToken(OParser.ALL, 0);
};

ContainsAllExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
ContainsAllExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterContainsAllExpression(this);
	}
};

ContainsAllExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitContainsAllExpression(this);
	}
};


function NotEqualsExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NotEqualsExpressionContext.prototype = Object.create(ExpressionContext.prototype);
NotEqualsExpressionContext.prototype.constructor = NotEqualsExpressionContext;

NotEqualsExpressionContext.prototype.XEQ = function() {
    return this.getToken(OParser.XEQ, 0);
};

NotEqualsExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
NotEqualsExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNotEqualsExpression(this);
	}
};

NotEqualsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNotEqualsExpression(this);
	}
};


function InExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

InExpressionContext.prototype = Object.create(ExpressionContext.prototype);
InExpressionContext.prototype.constructor = InExpressionContext;

InExpressionContext.prototype.IN = function() {
    return this.getToken(OParser.IN, 0);
};

InExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
InExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterInExpression(this);
	}
};

InExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitInExpression(this);
	}
};


function IsAnExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // An_expressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IsAnExpressionContext.prototype = Object.create(ExpressionContext.prototype);
IsAnExpressionContext.prototype.constructor = IsAnExpressionContext;

IsAnExpressionContext.prototype.IS = function() {
    return this.getToken(OParser.IS, 0);
};

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

IsAnExpressionContext.prototype.an_expression = function() {
    return this.getTypedRuleContext(An_expressionContext,0);
};
IsAnExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIsAnExpression(this);
	}
};

IsAnExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIsAnExpression(this);
	}
};


function NotExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NotExpressionContext.prototype = Object.create(ExpressionContext.prototype);
NotExpressionContext.prototype.constructor = NotExpressionContext;

NotExpressionContext.prototype.XMARK = function() {
    return this.getToken(OParser.XMARK, 0);
};

NotExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
NotExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNotExpression(this);
	}
};

NotExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNotExpression(this);
	}
};


function GreaterThanExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

GreaterThanExpressionContext.prototype = Object.create(ExpressionContext.prototype);
GreaterThanExpressionContext.prototype.constructor = GreaterThanExpressionContext;

GreaterThanExpressionContext.prototype.GT = function() {
    return this.getToken(OParser.GT, 0);
};

GreaterThanExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
GreaterThanExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterGreaterThanExpression(this);
	}
};

GreaterThanExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitGreaterThanExpression(this);
	}
};


function OrExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

OrExpressionContext.prototype = Object.create(ExpressionContext.prototype);
OrExpressionContext.prototype.constructor = OrExpressionContext;

OrExpressionContext.prototype.PIPE2 = function() {
    return this.getToken(OParser.PIPE2, 0);
};

OrExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
OrExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOrExpression(this);
	}
};

OrExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOrExpression(this);
	}
};


function CodeExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CodeExpressionContext.prototype = Object.create(ExpressionContext.prototype);
CodeExpressionContext.prototype.constructor = CodeExpressionContext;

CodeExpressionContext.prototype.CODE = function() {
    return this.getToken(OParser.CODE, 0);
};

CodeExpressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

CodeExpressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

CodeExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
CodeExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCodeExpression(this);
	}
};

CodeExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCodeExpression(this);
	}
};


function LessThanOrEqualExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LessThanOrEqualExpressionContext.prototype = Object.create(ExpressionContext.prototype);
LessThanOrEqualExpressionContext.prototype.constructor = LessThanOrEqualExpressionContext;

LessThanOrEqualExpressionContext.prototype.LTE = function() {
    return this.getToken(OParser.LTE, 0);
};

LessThanOrEqualExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
LessThanOrEqualExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLessThanOrEqualExpression(this);
	}
};

LessThanOrEqualExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLessThanOrEqualExpression(this);
	}
};


function AndExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AndExpressionContext.prototype = Object.create(ExpressionContext.prototype);
AndExpressionContext.prototype.constructor = AndExpressionContext;

AndExpressionContext.prototype.AMP2 = function() {
    return this.getToken(OParser.AMP2, 0);
};

AndExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
AndExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAndExpression(this);
	}
};

AndExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAndExpression(this);
	}
};


function ClosureExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.exp = null; // Closure_expressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ClosureExpressionContext.prototype = Object.create(ExpressionContext.prototype);
ClosureExpressionContext.prototype.constructor = ClosureExpressionContext;

ClosureExpressionContext.prototype.closure_expression = function() {
    return this.getTypedRuleContext(Closure_expressionContext,0);
};
ClosureExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterClosureExpression(this);
	}
};

ClosureExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitClosureExpression(this);
	}
};


function NotContainsAnyExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NotContainsAnyExpressionContext.prototype = Object.create(ExpressionContext.prototype);
NotContainsAnyExpressionContext.prototype.constructor = NotContainsAnyExpressionContext;

NotContainsAnyExpressionContext.prototype.NOT = function() {
    return this.getToken(OParser.NOT, 0);
};

NotContainsAnyExpressionContext.prototype.CONTAINS = function() {
    return this.getToken(OParser.CONTAINS, 0);
};

NotContainsAnyExpressionContext.prototype.ANY = function() {
    return this.getToken(OParser.ANY, 0);
};

NotContainsAnyExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
NotContainsAnyExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNotContainsAnyExpression(this);
	}
};

NotContainsAnyExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNotContainsAnyExpression(this);
	}
};


function ContainsExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ContainsExpressionContext.prototype = Object.create(ExpressionContext.prototype);
ContainsExpressionContext.prototype.constructor = ContainsExpressionContext;

ContainsExpressionContext.prototype.CONTAINS = function() {
    return this.getToken(OParser.CONTAINS, 0);
};

ContainsExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
ContainsExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterContainsExpression(this);
	}
};

ContainsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitContainsExpression(this);
	}
};


function NotContainsExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NotContainsExpressionContext.prototype = Object.create(ExpressionContext.prototype);
NotContainsExpressionContext.prototype.constructor = NotContainsExpressionContext;

NotContainsExpressionContext.prototype.NOT = function() {
    return this.getToken(OParser.NOT, 0);
};

NotContainsExpressionContext.prototype.CONTAINS = function() {
    return this.getToken(OParser.CONTAINS, 0);
};

NotContainsExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
NotContainsExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNotContainsExpression(this);
	}
};

NotContainsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNotContainsExpression(this);
	}
};


function MultiplyExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MultiplyExpressionContext.prototype = Object.create(ExpressionContext.prototype);
MultiplyExpressionContext.prototype.constructor = MultiplyExpressionContext;

MultiplyExpressionContext.prototype.multiply = function() {
    return this.getTypedRuleContext(MultiplyContext,0);
};

MultiplyExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
MultiplyExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMultiplyExpression(this);
	}
};

MultiplyExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMultiplyExpression(this);
	}
};


function RoughlyEqualsExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RoughlyEqualsExpressionContext.prototype = Object.create(ExpressionContext.prototype);
RoughlyEqualsExpressionContext.prototype.constructor = RoughlyEqualsExpressionContext;

RoughlyEqualsExpressionContext.prototype.TEQ = function() {
    return this.getToken(OParser.TEQ, 0);
};

RoughlyEqualsExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
RoughlyEqualsExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterRoughlyEqualsExpression(this);
	}
};

RoughlyEqualsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitRoughlyEqualsExpression(this);
	}
};


function IsNotAnExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // An_expressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IsNotAnExpressionContext.prototype = Object.create(ExpressionContext.prototype);
IsNotAnExpressionContext.prototype.constructor = IsNotAnExpressionContext;

IsNotAnExpressionContext.prototype.IS = function() {
    return this.getToken(OParser.IS, 0);
};

IsNotAnExpressionContext.prototype.NOT = function() {
    return this.getToken(OParser.NOT, 0);
};

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

IsNotAnExpressionContext.prototype.an_expression = function() {
    return this.getTypedRuleContext(An_expressionContext,0);
};
IsNotAnExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIsNotAnExpression(this);
	}
};

IsNotAnExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIsNotAnExpression(this);
	}
};


function ExecuteExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.name = null; // Variable_identifierContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ExecuteExpressionContext.prototype = Object.create(ExpressionContext.prototype);
ExecuteExpressionContext.prototype.constructor = ExecuteExpressionContext;

ExecuteExpressionContext.prototype.EXECUTE = function() {
    return this.getToken(OParser.EXECUTE, 0);
};

ExecuteExpressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

ExecuteExpressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

ExecuteExpressionContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
ExecuteExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterExecuteExpression(this);
	}
};

ExecuteExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitExecuteExpression(this);
	}
};


function MethodExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.exp = null; // Method_expressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MethodExpressionContext.prototype = Object.create(ExpressionContext.prototype);
MethodExpressionContext.prototype.constructor = MethodExpressionContext;

MethodExpressionContext.prototype.method_expression = function() {
    return this.getTypedRuleContext(Method_expressionContext,0);
};
MethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMethodExpression(this);
	}
};

MethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMethodExpression(this);
	}
};


function GreaterThanOrEqualExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

GreaterThanOrEqualExpressionContext.prototype = Object.create(ExpressionContext.prototype);
GreaterThanOrEqualExpressionContext.prototype.constructor = GreaterThanOrEqualExpressionContext;

GreaterThanOrEqualExpressionContext.prototype.GTE = function() {
    return this.getToken(OParser.GTE, 0);
};

GreaterThanOrEqualExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
GreaterThanOrEqualExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterGreaterThanOrEqualExpression(this);
	}
};

GreaterThanOrEqualExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitGreaterThanOrEqualExpression(this);
	}
};


function NotInExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NotInExpressionContext.prototype = Object.create(ExpressionContext.prototype);
NotInExpressionContext.prototype.constructor = NotInExpressionContext;

NotInExpressionContext.prototype.NOT = function() {
    return this.getToken(OParser.NOT, 0);
};

NotInExpressionContext.prototype.IN = function() {
    return this.getToken(OParser.IN, 0);
};

NotInExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
NotInExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNotInExpression(this);
	}
};

NotInExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNotInExpression(this);
	}
};


function IteratorExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    this.name = null; // Variable_identifierContext;
    this.source = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IteratorExpressionContext.prototype = Object.create(ExpressionContext.prototype);
IteratorExpressionContext.prototype.constructor = IteratorExpressionContext;

IteratorExpressionContext.prototype.FOR = function() {
    return this.getToken(OParser.FOR, 0);
};

IteratorExpressionContext.prototype.EACH = function() {
    return this.getToken(OParser.EACH, 0);
};

IteratorExpressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

IteratorExpressionContext.prototype.IN = function() {
    return this.getToken(OParser.IN, 0);
};

IteratorExpressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

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

IteratorExpressionContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
IteratorExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIteratorExpression(this);
	}
};

IteratorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIteratorExpression(this);
	}
};


function IsNotExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IsNotExpressionContext.prototype = Object.create(ExpressionContext.prototype);
IsNotExpressionContext.prototype.constructor = IsNotExpressionContext;

IsNotExpressionContext.prototype.IS = function() {
    return this.getToken(OParser.IS, 0);
};

IsNotExpressionContext.prototype.NOT = function() {
    return this.getToken(OParser.NOT, 0);
};

IsNotExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
IsNotExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIsNotExpression(this);
	}
};

IsNotExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIsNotExpression(this);
	}
};


function DivideExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DivideExpressionContext.prototype = Object.create(ExpressionContext.prototype);
DivideExpressionContext.prototype.constructor = DivideExpressionContext;

DivideExpressionContext.prototype.divide = function() {
    return this.getTypedRuleContext(DivideContext,0);
};

DivideExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
DivideExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDivideExpression(this);
	}
};

DivideExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDivideExpression(this);
	}
};


function IsExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IsExpressionContext.prototype = Object.create(ExpressionContext.prototype);
IsExpressionContext.prototype.constructor = IsExpressionContext;

IsExpressionContext.prototype.IS = function() {
    return this.getToken(OParser.IS, 0);
};

IsExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
IsExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIsExpression(this);
	}
};

IsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIsExpression(this);
	}
};


function MinusExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MinusExpressionContext.prototype = Object.create(ExpressionContext.prototype);
MinusExpressionContext.prototype.constructor = MinusExpressionContext;

MinusExpressionContext.prototype.MINUS = function() {
    return this.getToken(OParser.MINUS, 0);
};

MinusExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
MinusExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMinusExpression(this);
	}
};

MinusExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMinusExpression(this);
	}
};


function AddExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.op = null; // Token;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AddExpressionContext.prototype = Object.create(ExpressionContext.prototype);
AddExpressionContext.prototype.constructor = AddExpressionContext;

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

AddExpressionContext.prototype.PLUS = function() {
    return this.getToken(OParser.PLUS, 0);
};

AddExpressionContext.prototype.MINUS = function() {
    return this.getToken(OParser.MINUS, 0);
};
AddExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAddExpression(this);
	}
};

AddExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAddExpression(this);
	}
};


function NotContainsAllExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NotContainsAllExpressionContext.prototype = Object.create(ExpressionContext.prototype);
NotContainsAllExpressionContext.prototype.constructor = NotContainsAllExpressionContext;

NotContainsAllExpressionContext.prototype.NOT = function() {
    return this.getToken(OParser.NOT, 0);
};

NotContainsAllExpressionContext.prototype.CONTAINS = function() {
    return this.getToken(OParser.CONTAINS, 0);
};

NotContainsAllExpressionContext.prototype.ALL = function() {
    return this.getToken(OParser.ALL, 0);
};

NotContainsAllExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
NotContainsAllExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNotContainsAllExpression(this);
	}
};

NotContainsAllExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNotContainsAllExpression(this);
	}
};


function InstanceExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.exp = null; // Instance_expressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

InstanceExpressionContext.prototype = Object.create(ExpressionContext.prototype);
InstanceExpressionContext.prototype.constructor = InstanceExpressionContext;

InstanceExpressionContext.prototype.instance_expression = function() {
    return this.getTypedRuleContext(Instance_expressionContext,0);
};
InstanceExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterInstanceExpression(this);
	}
};

InstanceExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitInstanceExpression(this);
	}
};


function CastExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.right = null; // Category_or_any_typeContext;
    this.left = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CastExpressionContext.prototype = Object.create(ExpressionContext.prototype);
CastExpressionContext.prototype.constructor = CastExpressionContext;

CastExpressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

CastExpressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

CastExpressionContext.prototype.category_or_any_type = function() {
    return this.getTypedRuleContext(Category_or_any_typeContext,0);
};

CastExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
CastExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCastExpression(this);
	}
};

CastExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCastExpression(this);
	}
};


function ContainsAnyExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ContainsAnyExpressionContext.prototype = Object.create(ExpressionContext.prototype);
ContainsAnyExpressionContext.prototype.constructor = ContainsAnyExpressionContext;

ContainsAnyExpressionContext.prototype.CONTAINS = function() {
    return this.getToken(OParser.CONTAINS, 0);
};

ContainsAnyExpressionContext.prototype.ANY = function() {
    return this.getToken(OParser.ANY, 0);
};

ContainsAnyExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
ContainsAnyExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterContainsAnyExpression(this);
	}
};

ContainsAnyExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitContainsAnyExpression(this);
	}
};


function ModuloExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ModuloExpressionContext.prototype = Object.create(ExpressionContext.prototype);
ModuloExpressionContext.prototype.constructor = ModuloExpressionContext;

ModuloExpressionContext.prototype.modulo = function() {
    return this.getTypedRuleContext(ModuloContext,0);
};

ModuloExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
ModuloExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterModuloExpression(this);
	}
};

ModuloExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitModuloExpression(this);
	}
};


function LessThanExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LessThanExpressionContext.prototype = Object.create(ExpressionContext.prototype);
LessThanExpressionContext.prototype.constructor = LessThanExpressionContext;

LessThanExpressionContext.prototype.LT = function() {
    return this.getToken(OParser.LT, 0);
};

LessThanExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
LessThanExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLessThanExpression(this);
	}
};

LessThanExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLessThanExpression(this);
	}
};


function EqualsExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

EqualsExpressionContext.prototype = Object.create(ExpressionContext.prototype);
EqualsExpressionContext.prototype.constructor = EqualsExpressionContext;

EqualsExpressionContext.prototype.EQ2 = function() {
    return this.getToken(OParser.EQ2, 0);
};

EqualsExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
EqualsExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterEqualsExpression(this);
	}
};

EqualsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitEqualsExpression(this);
	}
};



OParser.prototype.expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new ExpressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 92;
    this.enterRecursionRule(localctx, 92, OParser.RULE_expression, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 994;
        var la_ = this._interp.adaptivePredict(this._input,66,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MinusExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 972;
            this.match(OParser.MINUS);
            this.state = 973; 
            localctx.exp = this.expression(34);
            break;

        case 2:
            localctx = new NotExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 974;
            this.match(OParser.XMARK);
            this.state = 975; 
            localctx.exp = this.expression(33);
            break;

        case 3:
            localctx = new CastExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 976;
            this.match(OParser.LPAR);
            this.state = 977; 
            localctx.right = this.category_or_any_type();
            this.state = 978;
            this.match(OParser.RPAR);
            this.state = 979; 
            localctx.left = this.expression(13);
            break;

        case 4:
            localctx = new InstanceExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 981; 
            localctx.exp = this.instance_expression(0);
            break;

        case 5:
            localctx = new MethodExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 982; 
            localctx.exp = this.method_expression();
            break;

        case 6:
            localctx = new CodeExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 983;
            this.match(OParser.CODE);
            this.state = 984;
            this.match(OParser.LPAR);
            this.state = 985; 
            localctx.exp = this.expression(0);
            this.state = 986;
            this.match(OParser.RPAR);
            break;

        case 7:
            localctx = new ExecuteExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 988;
            this.match(OParser.EXECUTE);
            this.state = 989;
            this.match(OParser.LPAR);
            this.state = 990; 
            localctx.name = this.variable_identifier();
            this.state = 991;
            this.match(OParser.RPAR);
            break;

        case 8:
            localctx = new ClosureExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 993; 
            localctx.exp = this.closure_expression();
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1105;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,68,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 = 1103;
                var la_ = this._interp.adaptivePredict(this._input,67,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new MultiplyExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 996;
                    if (!( this.precpred(this._ctx, 32))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 32)");
                    }
                    this.state = 997; 
                    this.multiply();
                    this.state = 998; 
                    localctx.right = this.expression(33);
                    break;

                case 2:
                    localctx = new DivideExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1000;
                    if (!( this.precpred(this._ctx, 31))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 31)");
                    }
                    this.state = 1001; 
                    this.divide();
                    this.state = 1002; 
                    localctx.right = this.expression(32);
                    break;

                case 3:
                    localctx = new ModuloExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1004;
                    if (!( this.precpred(this._ctx, 30))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 30)");
                    }
                    this.state = 1005; 
                    this.modulo();
                    this.state = 1006; 
                    localctx.right = this.expression(31);
                    break;

                case 4:
                    localctx = new IntDivideExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1008;
                    if (!( this.precpred(this._ctx, 29))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 29)");
                    }
                    this.state = 1009; 
                    this.idivide();
                    this.state = 1010; 
                    localctx.right = this.expression(30);
                    break;

                case 5:
                    localctx = new AddExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1012;
                    if (!( this.precpred(this._ctx, 28))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 28)");
                    }
                    this.state = 1013;
                    localctx.op = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(_la===OParser.PLUS || _la===OParser.MINUS)) {
                        localctx.op = this._errHandler.recoverInline(this);
                    }
                    this.consume();
                    this.state = 1014; 
                    localctx.right = this.expression(29);
                    break;

                case 6:
                    localctx = new LessThanExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1015;
                    if (!( this.precpred(this._ctx, 27))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 27)");
                    }
                    this.state = 1016;
                    this.match(OParser.LT);
                    this.state = 1017; 
                    localctx.right = this.expression(28);
                    break;

                case 7:
                    localctx = new LessThanOrEqualExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1018;
                    if (!( this.precpred(this._ctx, 26))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 26)");
                    }
                    this.state = 1019;
                    this.match(OParser.LTE);
                    this.state = 1020; 
                    localctx.right = this.expression(27);
                    break;

                case 8:
                    localctx = new GreaterThanExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1021;
                    if (!( this.precpred(this._ctx, 25))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 25)");
                    }
                    this.state = 1022;
                    this.match(OParser.GT);
                    this.state = 1023; 
                    localctx.right = this.expression(26);
                    break;

                case 9:
                    localctx = new GreaterThanOrEqualExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1024;
                    if (!( this.precpred(this._ctx, 24))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 24)");
                    }
                    this.state = 1025;
                    this.match(OParser.GTE);
                    this.state = 1026; 
                    localctx.right = this.expression(25);
                    break;

                case 10:
                    localctx = new IsNotExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1027;
                    if (!( this.precpred(this._ctx, 21))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 21)");
                    }
                    this.state = 1028;
                    this.match(OParser.IS);
                    this.state = 1029;
                    this.match(OParser.NOT);
                    this.state = 1030; 
                    localctx.right = this.expression(22);
                    break;

                case 11:
                    localctx = new IsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1031;
                    if (!( this.precpred(this._ctx, 20))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 20)");
                    }
                    this.state = 1032;
                    this.match(OParser.IS);
                    this.state = 1033; 
                    localctx.right = this.expression(21);
                    break;

                case 12:
                    localctx = new EqualsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1034;
                    if (!( this.precpred(this._ctx, 19))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 19)");
                    }
                    this.state = 1035;
                    this.match(OParser.EQ2);
                    this.state = 1036; 
                    localctx.right = this.expression(20);
                    break;

                case 13:
                    localctx = new NotEqualsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1037;
                    if (!( this.precpred(this._ctx, 18))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 18)");
                    }
                    this.state = 1038;
                    this.match(OParser.XEQ);
                    this.state = 1039; 
                    localctx.right = this.expression(19);
                    break;

                case 14:
                    localctx = new RoughlyEqualsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1040;
                    if (!( this.precpred(this._ctx, 17))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 17)");
                    }
                    this.state = 1041;
                    this.match(OParser.TEQ);
                    this.state = 1042; 
                    localctx.right = this.expression(18);
                    break;

                case 15:
                    localctx = new OrExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1043;
                    if (!( this.precpred(this._ctx, 16))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 16)");
                    }
                    this.state = 1044;
                    this.match(OParser.PIPE2);
                    this.state = 1045; 
                    localctx.right = this.expression(17);
                    break;

                case 16:
                    localctx = new AndExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1046;
                    if (!( this.precpred(this._ctx, 15))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 15)");
                    }
                    this.state = 1047;
                    this.match(OParser.AMP2);
                    this.state = 1048; 
                    localctx.right = this.expression(16);
                    break;

                case 17:
                    localctx = new TernaryExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.test = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1049;
                    if (!( this.precpred(this._ctx, 14))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 14)");
                    }
                    this.state = 1050;
                    this.match(OParser.QMARK);
                    this.state = 1051; 
                    localctx.ifTrue = this.expression(0);
                    this.state = 1052;
                    this.match(OParser.COLON);
                    this.state = 1053; 
                    localctx.ifFalse = this.expression(15);
                    break;

                case 18:
                    localctx = new InExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1055;
                    if (!( this.precpred(this._ctx, 12))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 12)");
                    }
                    this.state = 1056;
                    this.match(OParser.IN);
                    this.state = 1057; 
                    localctx.right = this.expression(13);
                    break;

                case 19:
                    localctx = new ContainsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1058;
                    if (!( this.precpred(this._ctx, 11))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 11)");
                    }
                    this.state = 1059;
                    this.match(OParser.CONTAINS);
                    this.state = 1060; 
                    localctx.right = this.expression(12);
                    break;

                case 20:
                    localctx = new ContainsAllExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1061;
                    if (!( this.precpred(this._ctx, 10))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 10)");
                    }
                    this.state = 1062;
                    this.match(OParser.CONTAINS);
                    this.state = 1063;
                    this.match(OParser.ALL);
                    this.state = 1064; 
                    localctx.right = this.expression(11);
                    break;

                case 21:
                    localctx = new ContainsAnyExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1065;
                    if (!( this.precpred(this._ctx, 9))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 9)");
                    }
                    this.state = 1066;
                    this.match(OParser.CONTAINS);
                    this.state = 1067;
                    this.match(OParser.ANY);
                    this.state = 1068; 
                    localctx.right = this.expression(10);
                    break;

                case 22:
                    localctx = new NotInExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1069;
                    if (!( this.precpred(this._ctx, 8))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 8)");
                    }
                    this.state = 1070;
                    this.match(OParser.NOT);
                    this.state = 1071;
                    this.match(OParser.IN);
                    this.state = 1072; 
                    localctx.right = this.expression(9);
                    break;

                case 23:
                    localctx = new NotContainsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1073;
                    if (!( this.precpred(this._ctx, 7))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)");
                    }
                    this.state = 1074;
                    this.match(OParser.NOT);
                    this.state = 1075;
                    this.match(OParser.CONTAINS);
                    this.state = 1076; 
                    localctx.right = this.expression(8);
                    break;

                case 24:
                    localctx = new NotContainsAllExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1077;
                    if (!( this.precpred(this._ctx, 6))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
                    }
                    this.state = 1078;
                    this.match(OParser.NOT);
                    this.state = 1079;
                    this.match(OParser.CONTAINS);
                    this.state = 1080;
                    this.match(OParser.ALL);
                    this.state = 1081; 
                    localctx.right = this.expression(7);
                    break;

                case 25:
                    localctx = new NotContainsAnyExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1082;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 1083;
                    this.match(OParser.NOT);
                    this.state = 1084;
                    this.match(OParser.CONTAINS);
                    this.state = 1085;
                    this.match(OParser.ANY);
                    this.state = 1086; 
                    localctx.right = this.expression(6);
                    break;

                case 26:
                    localctx = new IsNotAnExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1087;
                    if (!( this.precpred(this._ctx, 23))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 23)");
                    }
                    this.state = 1088;
                    this.match(OParser.IS);
                    this.state = 1089;
                    this.match(OParser.NOT);
                    this.state = 1090; 
                    localctx.right = this.an_expression();
                    break;

                case 27:
                    localctx = new IsAnExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1091;
                    if (!( this.precpred(this._ctx, 22))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 22)");
                    }
                    this.state = 1092;
                    this.match(OParser.IS);
                    this.state = 1093; 
                    localctx.right = this.an_expression();
                    break;

                case 28:
                    localctx = new IteratorExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.exp = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_expression);
                    this.state = 1094;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 1095;
                    this.match(OParser.FOR);
                    this.state = 1096;
                    this.match(OParser.EACH);
                    this.state = 1097;
                    this.match(OParser.LPAR);
                    this.state = 1098; 
                    localctx.name = this.variable_identifier();
                    this.state = 1099;
                    this.match(OParser.IN);
                    this.state = 1100; 
                    localctx.source = this.expression(0);
                    this.state = 1101;
                    this.match(OParser.RPAR);
                    break;

                } 
            }
            this.state = 1107;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,68,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 An_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 = OParser.RULE_an_expression;
    this.typ = null; // Category_or_any_typeContext
    return this;
}

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

An_expressionContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

An_expressionContext.prototype.category_or_any_type = function() {
    return this.getTypedRuleContext(Category_or_any_typeContext,0);
};

An_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAn_expression(this);
	}
};

An_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAn_expression(this);
	}
};




OParser.prototype.an_expression = function() {

    var localctx = new An_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 94, OParser.RULE_an_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1108;
        if (!( this.willBeAOrAn())) {
            throw new antlr4.error.FailedPredicateException(this, "$parser.willBeAOrAn()");
        }
        this.state = 1109;
        this.match(OParser.VARIABLE_IDENTIFIER);
        this.state = 1110; 
        localctx.typ = this.category_or_any_type();
    } 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 Closure_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 = OParser.RULE_closure_expression;
    this.name = null; // Type_identifierContext
    return this;
}

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

Closure_expressionContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};

Closure_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterClosure_expression(this);
	}
};

Closure_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitClosure_expression(this);
	}
};




OParser.prototype.closure_expression = function() {

    var localctx = new Closure_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 96, OParser.RULE_closure_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1112; 
        localctx.name = this.type_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 Instance_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 = OParser.RULE_instance_expression;
    return this;
}

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


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

function SelectorExpressionContext(parser, ctx) {
	Instance_expressionContext.call(this, parser);
    this.parent = null; // Instance_expressionContext;
    this.selector = null; // Selector_expressionContext;
    Instance_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SelectorExpressionContext.prototype = Object.create(Instance_expressionContext.prototype);
SelectorExpressionContext.prototype.constructor = SelectorExpressionContext;

SelectorExpressionContext.prototype.instance_expression = function() {
    return this.getTypedRuleContext(Instance_expressionContext,0);
};

SelectorExpressionContext.prototype.selector_expression = function() {
    return this.getTypedRuleContext(Selector_expressionContext,0);
};
SelectorExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSelectorExpression(this);
	}
};

SelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSelectorExpression(this);
	}
};


function SelectableExpressionContext(parser, ctx) {
	Instance_expressionContext.call(this, parser);
    this.parent = null; // Selectable_expressionContext;
    Instance_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SelectableExpressionContext.prototype = Object.create(Instance_expressionContext.prototype);
SelectableExpressionContext.prototype.constructor = SelectableExpressionContext;

SelectableExpressionContext.prototype.selectable_expression = function() {
    return this.getTypedRuleContext(Selectable_expressionContext,0);
};
SelectableExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSelectableExpression(this);
	}
};

SelectableExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSelectableExpression(this);
	}
};



OParser.prototype.instance_expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Instance_expressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 98;
    this.enterRecursionRule(localctx, 98, OParser.RULE_instance_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new SelectableExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1115; 
        localctx.parent = this.selectable_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1121;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,69,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new SelectorExpressionContext(this, new Instance_expressionContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_instance_expression);
                this.state = 1117;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1118; 
                localctx.selector = this.selector_expression(); 
            }
            this.state = 1123;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,69,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 Method_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 = OParser.RULE_method_expression;
    return this;
}

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

Method_expressionContext.prototype.blob_expression = function() {
    return this.getTypedRuleContext(Blob_expressionContext,0);
};

Method_expressionContext.prototype.document_expression = function() {
    return this.getTypedRuleContext(Document_expressionContext,0);
};

Method_expressionContext.prototype.filtered_list_expression = function() {
    return this.getTypedRuleContext(Filtered_list_expressionContext,0);
};

Method_expressionContext.prototype.fetch_store_expression = function() {
    return this.getTypedRuleContext(Fetch_store_expressionContext,0);
};

Method_expressionContext.prototype.read_all_expression = function() {
    return this.getTypedRuleContext(Read_all_expressionContext,0);
};

Method_expressionContext.prototype.read_one_expression = function() {
    return this.getTypedRuleContext(Read_one_expressionContext,0);
};

Method_expressionContext.prototype.sorted_expression = function() {
    return this.getTypedRuleContext(Sorted_expressionContext,0);
};

Method_expressionContext.prototype.method_call = function() {
    return this.getTypedRuleContext(Method_callContext,0);
};

Method_expressionContext.prototype.constructor_expression = function() {
    return this.getTypedRuleContext(Constructor_expressionContext,0);
};

Method_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMethod_expression(this);
	}
};

Method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMethod_expression(this);
	}
};




OParser.prototype.method_expression = function() {

    var localctx = new Method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 100, OParser.RULE_method_expression);
    try {
        this.state = 1133;
        var la_ = this._interp.adaptivePredict(this._input,70,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1124; 
            this.blob_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1125; 
            this.document_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1126; 
            this.filtered_list_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1127; 
            this.fetch_store_expression();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1128; 
            this.read_all_expression();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1129; 
            this.read_one_expression();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 1130; 
            this.sorted_expression();
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 1131; 
            this.method_call();
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 1132; 
            this.constructor_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 Blob_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 = OParser.RULE_blob_expression;
    return this;
}

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

Blob_expressionContext.prototype.BLOB = function() {
    return this.getToken(OParser.BLOB, 0);
};

Blob_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

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

Blob_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Blob_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterBlob_expression(this);
	}
};

Blob_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitBlob_expression(this);
	}
};




OParser.prototype.blob_expression = function() {

    var localctx = new Blob_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 102, OParser.RULE_blob_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1135;
        this.match(OParser.BLOB);
        this.state = 1136;
        this.match(OParser.LPAR);
        this.state = 1137; 
        this.expression(0);
        this.state = 1138;
        this.match(OParser.RPAR);
    } 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 Document_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 = OParser.RULE_document_expression;
    return this;
}

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

Document_expressionContext.prototype.DOCUMENT = function() {
    return this.getToken(OParser.DOCUMENT, 0);
};

Document_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Document_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

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

Document_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDocument_expression(this);
	}
};

Document_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDocument_expression(this);
	}
};




OParser.prototype.document_expression = function() {

    var localctx = new Document_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 104, OParser.RULE_document_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1140;
        this.match(OParser.DOCUMENT);
        this.state = 1141;
        this.match(OParser.LPAR);
        this.state = 1143;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 1142; 
            this.expression(0);
        }

        this.state = 1145;
        this.match(OParser.RPAR);
    } 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 Write_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 = OParser.RULE_write_statement;
    this.what = null; // ExpressionContext
    this.target = null; // ExpressionContext
    return this;
}

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

Write_statementContext.prototype.WRITE = function() {
    return this.getToken(OParser.WRITE, 0);
};

Write_statementContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Write_statementContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Write_statementContext.prototype.TO = function() {
    return this.getToken(OParser.TO, 0);
};

Write_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

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

Write_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterWrite_statement(this);
	}
};

Write_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitWrite_statement(this);
	}
};




OParser.prototype.write_statement = function() {

    var localctx = new Write_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 106, OParser.RULE_write_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1147;
        this.match(OParser.WRITE);
        this.state = 1148;
        this.match(OParser.LPAR);
        this.state = 1149; 
        localctx.what = this.expression(0);
        this.state = 1150;
        this.match(OParser.RPAR);
        this.state = 1151;
        this.match(OParser.TO);
        this.state = 1152; 
        localctx.target = this.expression(0);
        this.state = 1153;
        this.match(OParser.SEMI);
    } 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 Filtered_list_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 = OParser.RULE_filtered_list_expression;
    this.source = null; // ExpressionContext
    this.name = null; // Variable_identifierContext
    this.predicate = null; // ExpressionContext
    return this;
}

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

Filtered_list_expressionContext.prototype.FILTERED = function() {
    return this.getToken(OParser.FILTERED, 0);
};

Filtered_list_expressionContext.prototype.LPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.LPAR);
    } else {
        return this.getToken(OParser.LPAR, i);
    }
};


Filtered_list_expressionContext.prototype.RPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.RPAR);
    } else {
        return this.getToken(OParser.RPAR, i);
    }
};


Filtered_list_expressionContext.prototype.WITH = function() {
    return this.getToken(OParser.WITH, 0);
};

Filtered_list_expressionContext.prototype.WHERE = function() {
    return this.getToken(OParser.WHERE, 0);
};

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

Filtered_list_expressionContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Filtered_list_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterFiltered_list_expression(this);
	}
};

Filtered_list_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitFiltered_list_expression(this);
	}
};




OParser.prototype.filtered_list_expression = function() {

    var localctx = new Filtered_list_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 108, OParser.RULE_filtered_list_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1155;
        this.match(OParser.FILTERED);
        this.state = 1156;
        this.match(OParser.LPAR);
        this.state = 1157; 
        localctx.source = this.expression(0);
        this.state = 1158;
        this.match(OParser.RPAR);
        this.state = 1159;
        this.match(OParser.WITH);
        this.state = 1160;
        this.match(OParser.LPAR);
        this.state = 1161; 
        localctx.name = this.variable_identifier();
        this.state = 1162;
        this.match(OParser.RPAR);
        this.state = 1163;
        this.match(OParser.WHERE);
        this.state = 1164;
        this.match(OParser.LPAR);
        this.state = 1165; 
        localctx.predicate = this.expression(0);
        this.state = 1166;
        this.match(OParser.RPAR);
    } 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 Fetch_store_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 = OParser.RULE_fetch_store_expression;
    return this;
}

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


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


function FetchOneContext(parser, ctx) {
	Fetch_store_expressionContext.call(this, parser);
    this.typ = null; // Mutable_category_typeContext;
    this.predicate = null; // ExpressionContext;
    Fetch_store_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

FetchOneContext.prototype = Object.create(Fetch_store_expressionContext.prototype);
FetchOneContext.prototype.constructor = FetchOneContext;

FetchOneContext.prototype.FETCH = function() {
    return this.getToken(OParser.FETCH, 0);
};

FetchOneContext.prototype.ONE = function() {
    return this.getToken(OParser.ONE, 0);
};

FetchOneContext.prototype.WHERE = function() {
    return this.getToken(OParser.WHERE, 0);
};

FetchOneContext.prototype.LPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.LPAR);
    } else {
        return this.getToken(OParser.LPAR, i);
    }
};


FetchOneContext.prototype.RPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.RPAR);
    } else {
        return this.getToken(OParser.RPAR, i);
    }
};


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

FetchOneContext.prototype.mutable_category_type = function() {
    return this.getTypedRuleContext(Mutable_category_typeContext,0);
};
FetchOneContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterFetchOne(this);
	}
};

FetchOneContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitFetchOne(this);
	}
};


function FetchManyContext(parser, ctx) {
	Fetch_store_expressionContext.call(this, parser);
    this.typ = null; // Mutable_category_typeContext;
    this.xstart = null; // ExpressionContext;
    this.xstop = null; // ExpressionContext;
    this.predicate = null; // ExpressionContext;
    this.orderby = null; // Order_by_listContext;
    Fetch_store_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

FetchManyContext.prototype = Object.create(Fetch_store_expressionContext.prototype);
FetchManyContext.prototype.constructor = FetchManyContext;

FetchManyContext.prototype.FETCH = function() {
    return this.getToken(OParser.FETCH, 0);
};

FetchManyContext.prototype.WHERE = function() {
    return this.getToken(OParser.WHERE, 0);
};

FetchManyContext.prototype.LPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.LPAR);
    } else {
        return this.getToken(OParser.LPAR, i);
    }
};


FetchManyContext.prototype.RPAR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.RPAR);
    } else {
        return this.getToken(OParser.RPAR, i);
    }
};


FetchManyContext.prototype.ORDER = function() {
    return this.getToken(OParser.ORDER, 0);
};

FetchManyContext.prototype.BY = function() {
    return this.getToken(OParser.BY, 0);
};

FetchManyContext.prototype.ALL = function() {
    return this.getToken(OParser.ALL, 0);
};

FetchManyContext.prototype.ROWS = function() {
    return this.getToken(OParser.ROWS, 0);
};

FetchManyContext.prototype.TO = function() {
    return this.getToken(OParser.TO, 0);
};

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

FetchManyContext.prototype.order_by_list = function() {
    return this.getTypedRuleContext(Order_by_listContext,0);
};

FetchManyContext.prototype.mutable_category_type = function() {
    return this.getTypedRuleContext(Mutable_category_typeContext,0);
};
FetchManyContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterFetchMany(this);
	}
};

FetchManyContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitFetchMany(this);
	}
};



OParser.prototype.fetch_store_expression = function() {

    var localctx = new Fetch_store_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 110, OParser.RULE_fetch_store_expression);
    var _la = 0; // Token type
    try {
        this.state = 1219;
        var la_ = this._interp.adaptivePredict(this._input,78,this._ctx);
        switch(la_) {
        case 1:
            localctx = new FetchOneContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1168;
            this.match(OParser.FETCH);
            this.state = 1169;
            this.match(OParser.ONE);
            this.state = 1174;
            _la = this._input.LA(1);
            if(_la===OParser.LPAR) {
                this.state = 1170;
                this.match(OParser.LPAR);
                this.state = 1171; 
                localctx.typ = this.mutable_category_type();
                this.state = 1172;
                this.match(OParser.RPAR);
            }

            this.state = 1176;
            this.match(OParser.WHERE);
            this.state = 1177;
            this.match(OParser.LPAR);
            this.state = 1178; 
            localctx.predicate = this.expression(0);
            this.state = 1179;
            this.match(OParser.RPAR);
            break;

        case 2:
            localctx = new FetchManyContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1181;
            this.match(OParser.FETCH);
            this.state = 1202;
            switch(this._input.LA(1)) {
            case OParser.ALL:
                this.state = 1182;
                this.match(OParser.ALL);
                this.state = 1187;
                var la_ = this._interp.adaptivePredict(this._input,73,this._ctx);
                if(la_===1) {
                    this.state = 1183;
                    this.match(OParser.LPAR);
                    this.state = 1184; 
                    localctx.typ = this.mutable_category_type();
                    this.state = 1185;
                    this.match(OParser.RPAR);

                }
                break;
            case OParser.LPAR:
            case OParser.ROWS:
                this.state = 1193;
                _la = this._input.LA(1);
                if(_la===OParser.LPAR) {
                    this.state = 1189;
                    this.match(OParser.LPAR);
                    this.state = 1190; 
                    localctx.typ = this.mutable_category_type();
                    this.state = 1191;
                    this.match(OParser.RPAR);
                }

                this.state = 1195;
                this.match(OParser.ROWS);
                this.state = 1196;
                this.match(OParser.LPAR);
                this.state = 1197; 
                localctx.xstart = this.expression(0);
                this.state = 1198;
                this.match(OParser.TO);
                this.state = 1199; 
                localctx.xstop = this.expression(0);
                this.state = 1200;
                this.match(OParser.RPAR);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 1209;
            var la_ = this._interp.adaptivePredict(this._input,76,this._ctx);
            if(la_===1) {
                this.state = 1204;
                this.match(OParser.WHERE);
                this.state = 1205;
                this.match(OParser.LPAR);
                this.state = 1206; 
                localctx.predicate = this.expression(0);
                this.state = 1207;
                this.match(OParser.RPAR);

            }
            this.state = 1217;
            var la_ = this._interp.adaptivePredict(this._input,77,this._ctx);
            if(la_===1) {
                this.state = 1211;
                this.match(OParser.ORDER);
                this.state = 1212;
                this.match(OParser.BY);
                this.state = 1213;
                this.match(OParser.LPAR);
                this.state = 1214; 
                localctx.orderby = this.order_by_list();
                this.state = 1215;
                this.match(OParser.RPAR);

            }
            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 Sorted_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 = OParser.RULE_sorted_expression;
    this.source = null; // Instance_expressionContext
    this.key = null; // Instance_expressionContext
    return this;
}

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

Sorted_expressionContext.prototype.SORTED = function() {
    return this.getToken(OParser.SORTED, 0);
};

Sorted_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Sorted_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Sorted_expressionContext.prototype.instance_expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Instance_expressionContext);
    } else {
        return this.getTypedRuleContext(Instance_expressionContext,i);
    }
};

Sorted_expressionContext.prototype.DESC = function() {
    return this.getToken(OParser.DESC, 0);
};

Sorted_expressionContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

Sorted_expressionContext.prototype.key_token = function() {
    return this.getTypedRuleContext(Key_tokenContext,0);
};

Sorted_expressionContext.prototype.EQ = function() {
    return this.getToken(OParser.EQ, 0);
};

Sorted_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSorted_expression(this);
	}
};

Sorted_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSorted_expression(this);
	}
};




OParser.prototype.sorted_expression = function() {

    var localctx = new Sorted_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 112, OParser.RULE_sorted_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1221;
        this.match(OParser.SORTED);
        this.state = 1223;
        _la = this._input.LA(1);
        if(_la===OParser.DESC) {
            this.state = 1222;
            this.match(OParser.DESC);
        }

        this.state = 1225;
        this.match(OParser.LPAR);
        this.state = 1226; 
        localctx.source = this.instance_expression(0);
        this.state = 1232;
        _la = this._input.LA(1);
        if(_la===OParser.COMMA) {
            this.state = 1227;
            this.match(OParser.COMMA);
            this.state = 1228; 
            this.key_token();
            this.state = 1229;
            this.match(OParser.EQ);
            this.state = 1230; 
            localctx.key = this.instance_expression(0);
        }

        this.state = 1234;
        this.match(OParser.RPAR);
    } 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 Selector_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 = OParser.RULE_selector_expression;
    return this;
}

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


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


function SliceSelectorContext(parser, ctx) {
	Selector_expressionContext.call(this, parser);
    this.xslice = null; // Slice_argumentsContext;
    Selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SliceSelectorContext.prototype = Object.create(Selector_expressionContext.prototype);
SliceSelectorContext.prototype.constructor = SliceSelectorContext;

SliceSelectorContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

SliceSelectorContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

SliceSelectorContext.prototype.slice_arguments = function() {
    return this.getTypedRuleContext(Slice_argumentsContext,0);
};
SliceSelectorContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSliceSelector(this);
	}
};

SliceSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSliceSelector(this);
	}
};


function MemberSelectorContext(parser, ctx) {
	Selector_expressionContext.call(this, parser);
    this.name = null; // Variable_identifierContext;
    Selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MemberSelectorContext.prototype = Object.create(Selector_expressionContext.prototype);
MemberSelectorContext.prototype.constructor = MemberSelectorContext;

MemberSelectorContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

MemberSelectorContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
MemberSelectorContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMemberSelector(this);
	}
};

MemberSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMemberSelector(this);
	}
};


function ItemSelectorContext(parser, ctx) {
	Selector_expressionContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    Selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ItemSelectorContext.prototype = Object.create(Selector_expressionContext.prototype);
ItemSelectorContext.prototype.constructor = ItemSelectorContext;

ItemSelectorContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

ItemSelectorContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

ItemSelectorContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
ItemSelectorContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterItemSelector(this);
	}
};

ItemSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitItemSelector(this);
	}
};



OParser.prototype.selector_expression = function() {

    var localctx = new Selector_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 114, OParser.RULE_selector_expression);
    try {
        this.state = 1246;
        var la_ = this._interp.adaptivePredict(this._input,81,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MemberSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1236;
            this.match(OParser.DOT);
            this.state = 1237; 
            localctx.name = this.variable_identifier();
            break;

        case 2:
            localctx = new ItemSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1238;
            this.match(OParser.LBRAK);
            this.state = 1239; 
            localctx.exp = this.expression(0);
            this.state = 1240;
            this.match(OParser.RBRAK);
            break;

        case 3:
            localctx = new SliceSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1242;
            this.match(OParser.LBRAK);
            this.state = 1243; 
            localctx.xslice = this.slice_arguments();
            this.state = 1244;
            this.match(OParser.RBRAK);
            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 Constructor_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 = OParser.RULE_constructor_expression;
    this.typ = null; // Mutable_category_typeContext
    this.args = null; // Argument_assignment_listContext
    return this;
}

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

Constructor_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Constructor_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Constructor_expressionContext.prototype.mutable_category_type = function() {
    return this.getTypedRuleContext(Mutable_category_typeContext,0);
};

Constructor_expressionContext.prototype.argument_assignment_list = function() {
    return this.getTypedRuleContext(Argument_assignment_listContext,0);
};

Constructor_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterConstructor_expression(this);
	}
};

Constructor_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitConstructor_expression(this);
	}
};




OParser.prototype.constructor_expression = function() {

    var localctx = new Constructor_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 116, OParser.RULE_constructor_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1248; 
        localctx.typ = this.mutable_category_type();
        this.state = 1249;
        this.match(OParser.LPAR);
        this.state = 1251;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 1250; 
            localctx.args = this.argument_assignment_list(0);
        }

        this.state = 1253;
        this.match(OParser.RPAR);
    } 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 Argument_assignment_listContext(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 = OParser.RULE_argument_assignment_list;
    return this;
}

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


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

function ExpressionAssignmentListContext(parser, ctx) {
	Argument_assignment_listContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    Argument_assignment_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ExpressionAssignmentListContext.prototype = Object.create(Argument_assignment_listContext.prototype);
ExpressionAssignmentListContext.prototype.constructor = ExpressionAssignmentListContext;

ExpressionAssignmentListContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
ExpressionAssignmentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterExpressionAssignmentList(this);
	}
};

ExpressionAssignmentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitExpressionAssignmentList(this);
	}
};


function ArgumentAssignmentListContext(parser, ctx) {
	Argument_assignment_listContext.call(this, parser);
    this.item = null; // Argument_assignmentContext;
    Argument_assignment_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ArgumentAssignmentListContext.prototype = Object.create(Argument_assignment_listContext.prototype);
ArgumentAssignmentListContext.prototype.constructor = ArgumentAssignmentListContext;

ArgumentAssignmentListContext.prototype.argument_assignment = function() {
    return this.getTypedRuleContext(Argument_assignmentContext,0);
};
ArgumentAssignmentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterArgumentAssignmentList(this);
	}
};

ArgumentAssignmentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitArgumentAssignmentList(this);
	}
};


function ArgumentAssignmentListItemContext(parser, ctx) {
	Argument_assignment_listContext.call(this, parser);
    this.items = null; // Argument_assignment_listContext;
    this.item = null; // Argument_assignmentContext;
    Argument_assignment_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ArgumentAssignmentListItemContext.prototype = Object.create(Argument_assignment_listContext.prototype);
ArgumentAssignmentListItemContext.prototype.constructor = ArgumentAssignmentListItemContext;

ArgumentAssignmentListItemContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

ArgumentAssignmentListItemContext.prototype.argument_assignment_list = function() {
    return this.getTypedRuleContext(Argument_assignment_listContext,0);
};

ArgumentAssignmentListItemContext.prototype.argument_assignment = function() {
    return this.getTypedRuleContext(Argument_assignmentContext,0);
};
ArgumentAssignmentListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterArgumentAssignmentListItem(this);
	}
};

ArgumentAssignmentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitArgumentAssignmentListItem(this);
	}
};



OParser.prototype.argument_assignment_list = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Argument_assignment_listContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 118;
    this.enterRecursionRule(localctx, 118, OParser.RULE_argument_assignment_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1260;
        var la_ = this._interp.adaptivePredict(this._input,83,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ExpressionAssignmentListContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 1256; 
            localctx.exp = this.expression(0);
            this.state = 1257;
            if (!( this.willNotBe(this.equalToken()))) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.willNotBe($parser.equalToken())");
            }
            break;

        case 2:
            localctx = new ArgumentAssignmentListContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1259; 
            localctx.item = this.argument_assignment();
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1267;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,84,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new ArgumentAssignmentListItemContext(this, new Argument_assignment_listContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_argument_assignment_list);
                this.state = 1262;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1263;
                this.match(OParser.COMMA);
                this.state = 1264; 
                localctx.item = this.argument_assignment(); 
            }
            this.state = 1269;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,84,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 Argument_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 = OParser.RULE_argument_assignment;
    this.name = null; // Variable_identifierContext
    this.exp = null; // ExpressionContext
    return this;
}

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

Argument_assignmentContext.prototype.assign = function() {
    return this.getTypedRuleContext(AssignContext,0);
};

Argument_assignmentContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

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

Argument_assignmentContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterArgument_assignment(this);
	}
};

Argument_assignmentContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitArgument_assignment(this);
	}
};




OParser.prototype.argument_assignment = function() {

    var localctx = new Argument_assignmentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 120, OParser.RULE_argument_assignment);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1270; 
        localctx.name = this.variable_identifier();
        this.state = 1271; 
        this.assign();
        this.state = 1272; 
        localctx.exp = this.expression(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 Assign_instance_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 = OParser.RULE_assign_instance_statement;
    this.inst = null; // Assignable_instanceContext
    this.exp = null; // ExpressionContext
    return this;
}

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

Assign_instance_statementContext.prototype.assign = function() {
    return this.getTypedRuleContext(AssignContext,0);
};

Assign_instance_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Assign_instance_statementContext.prototype.assignable_instance = function() {
    return this.getTypedRuleContext(Assignable_instanceContext,0);
};

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

Assign_instance_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAssign_instance_statement(this);
	}
};

Assign_instance_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAssign_instance_statement(this);
	}
};




OParser.prototype.assign_instance_statement = function() {

    var localctx = new Assign_instance_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 122, OParser.RULE_assign_instance_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1274; 
        localctx.inst = this.assignable_instance(0);
        this.state = 1275; 
        this.assign();
        this.state = 1276; 
        localctx.exp = this.expression(0);
        this.state = 1277;
        this.match(OParser.SEMI);
    } 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 Child_instanceContext(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 = OParser.RULE_child_instance;
    return this;
}

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


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


function MemberInstanceContext(parser, ctx) {
	Child_instanceContext.call(this, parser);
    this.name = null; // Variable_identifierContext;
    Child_instanceContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MemberInstanceContext.prototype = Object.create(Child_instanceContext.prototype);
MemberInstanceContext.prototype.constructor = MemberInstanceContext;

MemberInstanceContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

MemberInstanceContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
MemberInstanceContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMemberInstance(this);
	}
};

MemberInstanceContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMemberInstance(this);
	}
};


function ItemInstanceContext(parser, ctx) {
	Child_instanceContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    Child_instanceContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ItemInstanceContext.prototype = Object.create(Child_instanceContext.prototype);
ItemInstanceContext.prototype.constructor = ItemInstanceContext;

ItemInstanceContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

ItemInstanceContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

ItemInstanceContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
ItemInstanceContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterItemInstance(this);
	}
};

ItemInstanceContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitItemInstance(this);
	}
};



OParser.prototype.child_instance = function() {

    var localctx = new Child_instanceContext(this, this._ctx, this.state);
    this.enterRule(localctx, 124, OParser.RULE_child_instance);
    try {
        this.state = 1285;
        switch(this._input.LA(1)) {
        case OParser.DOT:
            localctx = new MemberInstanceContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1279;
            this.match(OParser.DOT);
            this.state = 1280; 
            localctx.name = this.variable_identifier();
            break;
        case OParser.LBRAK:
            localctx = new ItemInstanceContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1281;
            this.match(OParser.LBRAK);
            this.state = 1282; 
            localctx.exp = this.expression(0);
            this.state = 1283;
            this.match(OParser.RBRAK);
            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 Assign_tuple_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 = OParser.RULE_assign_tuple_statement;
    this.items = null; // Variable_identifier_listContext
    this.exp = null; // ExpressionContext
    return this;
}

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

Assign_tuple_statementContext.prototype.assign = function() {
    return this.getTypedRuleContext(AssignContext,0);
};

Assign_tuple_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Assign_tuple_statementContext.prototype.variable_identifier_list = function() {
    return this.getTypedRuleContext(Variable_identifier_listContext,0);
};

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

Assign_tuple_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAssign_tuple_statement(this);
	}
};

Assign_tuple_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAssign_tuple_statement(this);
	}
};




OParser.prototype.assign_tuple_statement = function() {

    var localctx = new Assign_tuple_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 126, OParser.RULE_assign_tuple_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1287; 
        localctx.items = this.variable_identifier_list();
        this.state = 1288; 
        this.assign();
        this.state = 1289; 
        localctx.exp = this.expression(0);
        this.state = 1290;
        this.match(OParser.SEMI);
    } 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 Null_literalContext(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 = OParser.RULE_null_literal;
    return this;
}

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

Null_literalContext.prototype.NULL = function() {
    return this.getToken(OParser.NULL, 0);
};

Null_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNull_literal(this);
	}
};

Null_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNull_literal(this);
	}
};




OParser.prototype.null_literal = function() {

    var localctx = new Null_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 128, OParser.RULE_null_literal);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1292;
        this.match(OParser.NULL);
    } 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 Declaration_listContext(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 = OParser.RULE_declaration_list;
    return this;
}

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


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


function FullDeclarationListContext(parser, ctx) {
	Declaration_listContext.call(this, parser);
    Declaration_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

FullDeclarationListContext.prototype = Object.create(Declaration_listContext.prototype);
FullDeclarationListContext.prototype.constructor = FullDeclarationListContext;

FullDeclarationListContext.prototype.lfs = function() {
    return this.getTypedRuleContext(LfsContext,0);
};

FullDeclarationListContext.prototype.EOF = function() {
    return this.getToken(OParser.EOF, 0);
};

FullDeclarationListContext.prototype.declarations = function() {
    return this.getTypedRuleContext(DeclarationsContext,0);
};
FullDeclarationListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterFullDeclarationList(this);
	}
};

FullDeclarationListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitFullDeclarationList(this);
	}
};



OParser.prototype.declaration_list = function() {

    var localctx = new Declaration_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 130, OParser.RULE_declaration_list);
    var _la = 0; // Token type
    try {
        localctx = new FullDeclarationListContext(this, localctx);
        this.enterOuterAlt(localctx, 1);
        this.state = 1295;
        _la = this._input.LA(1);
        if(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ABSTRACT - 46)) | (1 << (OParser.ANY - 46)) | (1 << (OParser.ATTRIBUTE - 46)))) !== 0) || _la===OParser.CATEGORY || _la===OParser.ENUMERATED || ((((_la - 110)) & ~0x1f) == 0 && ((1 << (_la - 110)) & ((1 << (OParser.METHOD - 110)) | (1 << (OParser.NATIVE - 110)) | (1 << (OParser.SINGLETON - 110)) | (1 << (OParser.STORABLE - 110)) | (1 << (OParser.TEST - 110)))) !== 0) || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 1294; 
            this.declarations();
        }

        this.state = 1297; 
        this.lfs();
        this.state = 1298;
        this.match(OParser.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 DeclarationsContext(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 = OParser.RULE_declarations;
    return this;
}

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

DeclarationsContext.prototype.declaration = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(DeclarationContext);
    } else {
        return this.getTypedRuleContext(DeclarationContext,i);
    }
};

DeclarationsContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

DeclarationsContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDeclarations(this);
	}
};

DeclarationsContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDeclarations(this);
	}
};




OParser.prototype.declarations = function() {

    var localctx = new DeclarationsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 132, OParser.RULE_declarations);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1300; 
        this.declaration();
        this.state = 1306;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ABSTRACT - 46)) | (1 << (OParser.ANY - 46)) | (1 << (OParser.ATTRIBUTE - 46)))) !== 0) || _la===OParser.CATEGORY || _la===OParser.ENUMERATED || ((((_la - 110)) & ~0x1f) == 0 && ((1 << (_la - 110)) & ((1 << (OParser.METHOD - 110)) | (1 << (OParser.NATIVE - 110)) | (1 << (OParser.SINGLETON - 110)) | (1 << (OParser.STORABLE - 110)) | (1 << (OParser.TEST - 110)))) !== 0) || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 1301; 
            this.lfp();
            this.state = 1302; 
            this.declaration();
            this.state = 1308;
            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 DeclarationContext(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 = OParser.RULE_declaration;
    return this;
}

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

DeclarationContext.prototype.attribute_declaration = function() {
    return this.getTypedRuleContext(Attribute_declarationContext,0);
};

DeclarationContext.prototype.category_declaration = function() {
    return this.getTypedRuleContext(Category_declarationContext,0);
};

DeclarationContext.prototype.resource_declaration = function() {
    return this.getTypedRuleContext(Resource_declarationContext,0);
};

DeclarationContext.prototype.enum_declaration = function() {
    return this.getTypedRuleContext(Enum_declarationContext,0);
};

DeclarationContext.prototype.method_declaration = function() {
    return this.getTypedRuleContext(Method_declarationContext,0);
};

DeclarationContext.prototype.comment_statement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Comment_statementContext);
    } else {
        return this.getTypedRuleContext(Comment_statementContext,i);
    }
};

DeclarationContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

DeclarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDeclaration(this);
	}
};

DeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDeclaration(this);
	}
};




OParser.prototype.declaration = function() {

    var localctx = new DeclarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 134, OParser.RULE_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1314;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMENT) {
            this.state = 1309; 
            this.comment_statement();
            this.state = 1310; 
            this.lfp();
            this.state = 1316;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1322;
        var la_ = this._interp.adaptivePredict(this._input,89,this._ctx);
        switch(la_) {
        case 1:
            this.state = 1317; 
            this.attribute_declaration();
            break;

        case 2:
            this.state = 1318; 
            this.category_declaration();
            break;

        case 3:
            this.state = 1319; 
            this.resource_declaration();
            break;

        case 4:
            this.state = 1320; 
            this.enum_declaration();
            break;

        case 5:
            this.state = 1321; 
            this.method_declaration();
            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 Resource_declarationContext(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 = OParser.RULE_resource_declaration;
    return this;
}

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

Resource_declarationContext.prototype.native_resource_declaration = function() {
    return this.getTypedRuleContext(Native_resource_declarationContext,0);
};

Resource_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterResource_declaration(this);
	}
};

Resource_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitResource_declaration(this);
	}
};




OParser.prototype.resource_declaration = function() {

    var localctx = new Resource_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 136, OParser.RULE_resource_declaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1324; 
        this.native_resource_declaration();
    } 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 Enum_declarationContext(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 = OParser.RULE_enum_declaration;
    return this;
}

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

Enum_declarationContext.prototype.enum_category_declaration = function() {
    return this.getTypedRuleContext(Enum_category_declarationContext,0);
};

Enum_declarationContext.prototype.enum_native_declaration = function() {
    return this.getTypedRuleContext(Enum_native_declarationContext,0);
};

Enum_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterEnum_declaration(this);
	}
};

Enum_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitEnum_declaration(this);
	}
};




OParser.prototype.enum_declaration = function() {

    var localctx = new Enum_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 138, OParser.RULE_enum_declaration);
    try {
        this.state = 1328;
        var la_ = this._interp.adaptivePredict(this._input,90,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1326; 
            this.enum_category_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1327; 
            this.enum_native_declaration();
            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 Native_symbol_listContext(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 = OParser.RULE_native_symbol_list;
    return this;
}

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

Native_symbol_listContext.prototype.native_symbol = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Native_symbolContext);
    } else {
        return this.getTypedRuleContext(Native_symbolContext,i);
    }
};

Native_symbol_listContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

Native_symbol_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_symbol_list(this);
	}
};

Native_symbol_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_symbol_list(this);
	}
};




OParser.prototype.native_symbol_list = function() {

    var localctx = new Native_symbol_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 140, OParser.RULE_native_symbol_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1330; 
        this.native_symbol();
        this.state = 1336;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.SYMBOL_IDENTIFIER) {
            this.state = 1331; 
            this.lfp();
            this.state = 1332; 
            this.native_symbol();
            this.state = 1338;
            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 Category_symbol_listContext(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 = OParser.RULE_category_symbol_list;
    return this;
}

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

Category_symbol_listContext.prototype.category_symbol = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Category_symbolContext);
    } else {
        return this.getTypedRuleContext(Category_symbolContext,i);
    }
};

Category_symbol_listContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

Category_symbol_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCategory_symbol_list(this);
	}
};

Category_symbol_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCategory_symbol_list(this);
	}
};




OParser.prototype.category_symbol_list = function() {

    var localctx = new Category_symbol_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 142, OParser.RULE_category_symbol_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1339; 
        this.category_symbol();
        this.state = 1345;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.SYMBOL_IDENTIFIER) {
            this.state = 1340; 
            this.lfp();
            this.state = 1341; 
            this.category_symbol();
            this.state = 1347;
            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 Symbol_listContext(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 = OParser.RULE_symbol_list;
    return this;
}

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

Symbol_listContext.prototype.symbol_identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Symbol_identifierContext);
    } else {
        return this.getTypedRuleContext(Symbol_identifierContext,i);
    }
};

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


Symbol_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSymbol_list(this);
	}
};

Symbol_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSymbol_list(this);
	}
};




OParser.prototype.symbol_list = function() {

    var localctx = new Symbol_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 144, OParser.RULE_symbol_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1348; 
        this.symbol_identifier();
        this.state = 1353;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMA) {
            this.state = 1349;
            this.match(OParser.COMMA);
            this.state = 1350; 
            this.symbol_identifier();
            this.state = 1355;
            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 Attribute_constraintContext(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 = OParser.RULE_attribute_constraint;
    return this;
}

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


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


function MatchingSetContext(parser, ctx) {
	Attribute_constraintContext.call(this, parser);
    this.source = null; // Set_literalContext;
    Attribute_constraintContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MatchingSetContext.prototype = Object.create(Attribute_constraintContext.prototype);
MatchingSetContext.prototype.constructor = MatchingSetContext;

MatchingSetContext.prototype.IN = function() {
    return this.getToken(OParser.IN, 0);
};

MatchingSetContext.prototype.set_literal = function() {
    return this.getTypedRuleContext(Set_literalContext,0);
};
MatchingSetContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMatchingSet(this);
	}
};

MatchingSetContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMatchingSet(this);
	}
};


function MatchingPatternContext(parser, ctx) {
	Attribute_constraintContext.call(this, parser);
    this.text = null; // Token;
    Attribute_constraintContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MatchingPatternContext.prototype = Object.create(Attribute_constraintContext.prototype);
MatchingPatternContext.prototype.constructor = MatchingPatternContext;

MatchingPatternContext.prototype.MATCHING = function() {
    return this.getToken(OParser.MATCHING, 0);
};

MatchingPatternContext.prototype.TEXT_LITERAL = function() {
    return this.getToken(OParser.TEXT_LITERAL, 0);
};
MatchingPatternContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMatchingPattern(this);
	}
};

MatchingPatternContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMatchingPattern(this);
	}
};


function MatchingListContext(parser, ctx) {
	Attribute_constraintContext.call(this, parser);
    this.source = null; // List_literalContext;
    Attribute_constraintContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MatchingListContext.prototype = Object.create(Attribute_constraintContext.prototype);
MatchingListContext.prototype.constructor = MatchingListContext;

MatchingListContext.prototype.IN = function() {
    return this.getToken(OParser.IN, 0);
};

MatchingListContext.prototype.list_literal = function() {
    return this.getTypedRuleContext(List_literalContext,0);
};
MatchingListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMatchingList(this);
	}
};

MatchingListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMatchingList(this);
	}
};


function MatchingRangeContext(parser, ctx) {
	Attribute_constraintContext.call(this, parser);
    this.source = null; // Range_literalContext;
    Attribute_constraintContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MatchingRangeContext.prototype = Object.create(Attribute_constraintContext.prototype);
MatchingRangeContext.prototype.constructor = MatchingRangeContext;

MatchingRangeContext.prototype.IN = function() {
    return this.getToken(OParser.IN, 0);
};

MatchingRangeContext.prototype.range_literal = function() {
    return this.getTypedRuleContext(Range_literalContext,0);
};
MatchingRangeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMatchingRange(this);
	}
};

MatchingRangeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMatchingRange(this);
	}
};


function MatchingExpressionContext(parser, ctx) {
	Attribute_constraintContext.call(this, parser);
    this.exp = null; // ExpressionContext;
    Attribute_constraintContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MatchingExpressionContext.prototype = Object.create(Attribute_constraintContext.prototype);
MatchingExpressionContext.prototype.constructor = MatchingExpressionContext;

MatchingExpressionContext.prototype.MATCHING = function() {
    return this.getToken(OParser.MATCHING, 0);
};

MatchingExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
MatchingExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMatchingExpression(this);
	}
};

MatchingExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMatchingExpression(this);
	}
};



OParser.prototype.attribute_constraint = function() {

    var localctx = new Attribute_constraintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 146, OParser.RULE_attribute_constraint);
    try {
        this.state = 1366;
        var la_ = this._interp.adaptivePredict(this._input,94,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MatchingListContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1356;
            this.match(OParser.IN);
            this.state = 1357; 
            localctx.source = this.list_literal();
            break;

        case 2:
            localctx = new MatchingSetContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1358;
            this.match(OParser.IN);
            this.state = 1359; 
            localctx.source = this.set_literal();
            break;

        case 3:
            localctx = new MatchingRangeContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1360;
            this.match(OParser.IN);
            this.state = 1361; 
            localctx.source = this.range_literal();
            break;

        case 4:
            localctx = new MatchingPatternContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1362;
            this.match(OParser.MATCHING);
            this.state = 1363;
            localctx.text = this.match(OParser.TEXT_LITERAL);
            break;

        case 5:
            localctx = new MatchingExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1364;
            this.match(OParser.MATCHING);
            this.state = 1365; 
            localctx.exp = this.expression(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 List_literalContext(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 = OParser.RULE_list_literal;
    return this;
}

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

List_literalContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

List_literalContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

List_literalContext.prototype.MUTABLE = function() {
    return this.getToken(OParser.MUTABLE, 0);
};

List_literalContext.prototype.expression_list = function() {
    return this.getTypedRuleContext(Expression_listContext,0);
};

List_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterList_literal(this);
	}
};

List_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitList_literal(this);
	}
};




OParser.prototype.list_literal = function() {

    var localctx = new List_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 148, OParser.RULE_list_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1369;
        _la = this._input.LA(1);
        if(_la===OParser.MUTABLE) {
            this.state = 1368;
            this.match(OParser.MUTABLE);
        }

        this.state = 1371;
        this.match(OParser.LBRAK);
        this.state = 1373;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 1372; 
            this.expression_list();
        }

        this.state = 1375;
        this.match(OParser.RBRAK);
    } 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 Set_literalContext(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 = OParser.RULE_set_literal;
    return this;
}

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

Set_literalContext.prototype.LT = function() {
    return this.getToken(OParser.LT, 0);
};

Set_literalContext.prototype.GT = function() {
    return this.getToken(OParser.GT, 0);
};

Set_literalContext.prototype.MUTABLE = function() {
    return this.getToken(OParser.MUTABLE, 0);
};

Set_literalContext.prototype.expression_list = function() {
    return this.getTypedRuleContext(Expression_listContext,0);
};

Set_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSet_literal(this);
	}
};

Set_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSet_literal(this);
	}
};




OParser.prototype.set_literal = function() {

    var localctx = new Set_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 150, OParser.RULE_set_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1378;
        _la = this._input.LA(1);
        if(_la===OParser.MUTABLE) {
            this.state = 1377;
            this.match(OParser.MUTABLE);
        }

        this.state = 1380;
        this.match(OParser.LT);
        this.state = 1382;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 1381; 
            this.expression_list();
        }

        this.state = 1384;
        this.match(OParser.GT);
    } 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 Expression_listContext(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 = OParser.RULE_expression_list;
    return this;
}

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

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

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


Expression_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterExpression_list(this);
	}
};

Expression_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitExpression_list(this);
	}
};




OParser.prototype.expression_list = function() {

    var localctx = new Expression_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 152, OParser.RULE_expression_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1386; 
        this.expression(0);
        this.state = 1391;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMA) {
            this.state = 1387;
            this.match(OParser.COMMA);
            this.state = 1388; 
            this.expression(0);
            this.state = 1393;
            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 Range_literalContext(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 = OParser.RULE_range_literal;
    this.low = null; // ExpressionContext
    this.high = null; // ExpressionContext
    return this;
}

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

Range_literalContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

Range_literalContext.prototype.RANGE = function() {
    return this.getToken(OParser.RANGE, 0);
};

Range_literalContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

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

Range_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterRange_literal(this);
	}
};

Range_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitRange_literal(this);
	}
};




OParser.prototype.range_literal = function() {

    var localctx = new Range_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 154, OParser.RULE_range_literal);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1394;
        this.match(OParser.LBRAK);
        this.state = 1395; 
        localctx.low = this.expression(0);
        this.state = 1396;
        this.match(OParser.RANGE);
        this.state = 1397; 
        localctx.high = this.expression(0);
        this.state = 1398;
        this.match(OParser.RBRAK);
    } 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 TypedefContext(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 = OParser.RULE_typedef;
    return this;
}

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


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

function IteratorTypeContext(parser, ctx) {
	TypedefContext.call(this, parser);
    this.i = null; // TypedefContext;
    TypedefContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IteratorTypeContext.prototype = Object.create(TypedefContext.prototype);
IteratorTypeContext.prototype.constructor = IteratorTypeContext;

IteratorTypeContext.prototype.ITERATOR = function() {
    return this.getToken(OParser.ITERATOR, 0);
};

IteratorTypeContext.prototype.LT = function() {
    return this.getToken(OParser.LT, 0);
};

IteratorTypeContext.prototype.GT = function() {
    return this.getToken(OParser.GT, 0);
};

IteratorTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
IteratorTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIteratorType(this);
	}
};

IteratorTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIteratorType(this);
	}
};


function SetTypeContext(parser, ctx) {
	TypedefContext.call(this, parser);
    this.s = null; // TypedefContext;
    TypedefContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SetTypeContext.prototype = Object.create(TypedefContext.prototype);
SetTypeContext.prototype.constructor = SetTypeContext;

SetTypeContext.prototype.LTGT = function() {
    return this.getToken(OParser.LTGT, 0);
};

SetTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
SetTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSetType(this);
	}
};

SetTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSetType(this);
	}
};


function ListTypeContext(parser, ctx) {
	TypedefContext.call(this, parser);
    this.l = null; // TypedefContext;
    TypedefContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ListTypeContext.prototype = Object.create(TypedefContext.prototype);
ListTypeContext.prototype.constructor = ListTypeContext;

ListTypeContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

ListTypeContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

ListTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
ListTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterListType(this);
	}
};

ListTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitListType(this);
	}
};


function DictTypeContext(parser, ctx) {
	TypedefContext.call(this, parser);
    this.d = null; // TypedefContext;
    TypedefContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DictTypeContext.prototype = Object.create(TypedefContext.prototype);
DictTypeContext.prototype.constructor = DictTypeContext;

DictTypeContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

DictTypeContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

DictTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
DictTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDictType(this);
	}
};

DictTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDictType(this);
	}
};


function CursorTypeContext(parser, ctx) {
	TypedefContext.call(this, parser);
    this.c = null; // TypedefContext;
    TypedefContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CursorTypeContext.prototype = Object.create(TypedefContext.prototype);
CursorTypeContext.prototype.constructor = CursorTypeContext;

CursorTypeContext.prototype.CURSOR = function() {
    return this.getToken(OParser.CURSOR, 0);
};

CursorTypeContext.prototype.LT = function() {
    return this.getToken(OParser.LT, 0);
};

CursorTypeContext.prototype.GT = function() {
    return this.getToken(OParser.GT, 0);
};

CursorTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
CursorTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCursorType(this);
	}
};

CursorTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCursorType(this);
	}
};


function PrimaryTypeContext(parser, ctx) {
	TypedefContext.call(this, parser);
    this.p = null; // Primary_typeContext;
    TypedefContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PrimaryTypeContext.prototype = Object.create(TypedefContext.prototype);
PrimaryTypeContext.prototype.constructor = PrimaryTypeContext;

PrimaryTypeContext.prototype.primary_type = function() {
    return this.getTypedRuleContext(Primary_typeContext,0);
};
PrimaryTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPrimaryType(this);
	}
};

PrimaryTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPrimaryType(this);
	}
};



OParser.prototype.typedef = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new TypedefContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 156;
    this.enterRecursionRule(localctx, 156, OParser.RULE_typedef, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1412;
        switch(this._input.LA(1)) {
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.CODE:
        case OParser.DOCUMENT:
        case OParser.BLOB:
        case OParser.IMAGE:
        case OParser.UUID:
        case OParser.TYPE_IDENTIFIER:
            localctx = new PrimaryTypeContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 1401; 
            localctx.p = this.primary_type();
            break;
        case OParser.CURSOR:
            localctx = new CursorTypeContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1402;
            this.match(OParser.CURSOR);
            this.state = 1403;
            this.match(OParser.LT);
            this.state = 1404; 
            localctx.c = this.typedef(0);
            this.state = 1405;
            this.match(OParser.GT);
            break;
        case OParser.ITERATOR:
            localctx = new IteratorTypeContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1407;
            this.match(OParser.ITERATOR);
            this.state = 1408;
            this.match(OParser.LT);
            this.state = 1409; 
            localctx.i = this.typedef(0);
            this.state = 1410;
            this.match(OParser.GT);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1424;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,102,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 = 1422;
                var la_ = this._interp.adaptivePredict(this._input,101,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new SetTypeContext(this, new TypedefContext(this, _parentctx, _parentState));
                    localctx.s = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_typedef);
                    this.state = 1414;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 1415;
                    this.match(OParser.LTGT);
                    break;

                case 2:
                    localctx = new ListTypeContext(this, new TypedefContext(this, _parentctx, _parentState));
                    localctx.l = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_typedef);
                    this.state = 1416;
                    if (!( this.precpred(this._ctx, 4))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
                    }
                    this.state = 1417;
                    this.match(OParser.LBRAK);
                    this.state = 1418;
                    this.match(OParser.RBRAK);
                    break;

                case 3:
                    localctx = new DictTypeContext(this, new TypedefContext(this, _parentctx, _parentState));
                    localctx.d = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_typedef);
                    this.state = 1419;
                    if (!( this.precpred(this._ctx, 3))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                    }
                    this.state = 1420;
                    this.match(OParser.LCURL);
                    this.state = 1421;
                    this.match(OParser.RCURL);
                    break;

                } 
            }
            this.state = 1426;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,102,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 Primary_typeContext(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 = OParser.RULE_primary_type;
    return this;
}

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


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


function NativeTypeContext(parser, ctx) {
	Primary_typeContext.call(this, parser);
    this.n = null; // Native_typeContext;
    Primary_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NativeTypeContext.prototype = Object.create(Primary_typeContext.prototype);
NativeTypeContext.prototype.constructor = NativeTypeContext;

NativeTypeContext.prototype.native_type = function() {
    return this.getTypedRuleContext(Native_typeContext,0);
};
NativeTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNativeType(this);
	}
};

NativeTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNativeType(this);
	}
};


function CategoryTypeContext(parser, ctx) {
	Primary_typeContext.call(this, parser);
    this.c = null; // Category_typeContext;
    Primary_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CategoryTypeContext.prototype = Object.create(Primary_typeContext.prototype);
CategoryTypeContext.prototype.constructor = CategoryTypeContext;

CategoryTypeContext.prototype.category_type = function() {
    return this.getTypedRuleContext(Category_typeContext,0);
};
CategoryTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCategoryType(this);
	}
};

CategoryTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCategoryType(this);
	}
};



OParser.prototype.primary_type = function() {

    var localctx = new Primary_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 158, OParser.RULE_primary_type);
    try {
        this.state = 1429;
        switch(this._input.LA(1)) {
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.CODE:
        case OParser.DOCUMENT:
        case OParser.BLOB:
        case OParser.IMAGE:
        case OParser.UUID:
            localctx = new NativeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1427; 
            localctx.n = this.native_type();
            break;
        case OParser.TYPE_IDENTIFIER:
            localctx = new CategoryTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1428; 
            localctx.c = this.category_type();
            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 Native_typeContext(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 = OParser.RULE_native_type;
    return this;
}

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


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


function PeriodTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PeriodTypeContext.prototype = Object.create(Native_typeContext.prototype);
PeriodTypeContext.prototype.constructor = PeriodTypeContext;

PeriodTypeContext.prototype.PERIOD = function() {
    return this.getToken(OParser.PERIOD, 0);
};
PeriodTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPeriodType(this);
	}
};

PeriodTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPeriodType(this);
	}
};


function BooleanTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

BooleanTypeContext.prototype = Object.create(Native_typeContext.prototype);
BooleanTypeContext.prototype.constructor = BooleanTypeContext;

BooleanTypeContext.prototype.BOOLEAN = function() {
    return this.getToken(OParser.BOOLEAN, 0);
};
BooleanTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterBooleanType(this);
	}
};

BooleanTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitBooleanType(this);
	}
};


function DocumentTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DocumentTypeContext.prototype = Object.create(Native_typeContext.prototype);
DocumentTypeContext.prototype.constructor = DocumentTypeContext;

DocumentTypeContext.prototype.DOCUMENT = function() {
    return this.getToken(OParser.DOCUMENT, 0);
};
DocumentTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDocumentType(this);
	}
};

DocumentTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDocumentType(this);
	}
};


function CharacterTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CharacterTypeContext.prototype = Object.create(Native_typeContext.prototype);
CharacterTypeContext.prototype.constructor = CharacterTypeContext;

CharacterTypeContext.prototype.CHARACTER = function() {
    return this.getToken(OParser.CHARACTER, 0);
};
CharacterTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCharacterType(this);
	}
};

CharacterTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCharacterType(this);
	}
};


function TextTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TextTypeContext.prototype = Object.create(Native_typeContext.prototype);
TextTypeContext.prototype.constructor = TextTypeContext;

TextTypeContext.prototype.TEXT = function() {
    return this.getToken(OParser.TEXT, 0);
};
TextTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTextType(this);
	}
};

TextTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTextType(this);
	}
};


function ImageTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ImageTypeContext.prototype = Object.create(Native_typeContext.prototype);
ImageTypeContext.prototype.constructor = ImageTypeContext;

ImageTypeContext.prototype.IMAGE = function() {
    return this.getToken(OParser.IMAGE, 0);
};
ImageTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterImageType(this);
	}
};

ImageTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitImageType(this);
	}
};


function TimeTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TimeTypeContext.prototype = Object.create(Native_typeContext.prototype);
TimeTypeContext.prototype.constructor = TimeTypeContext;

TimeTypeContext.prototype.TIME = function() {
    return this.getToken(OParser.TIME, 0);
};
TimeTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTimeType(this);
	}
};

TimeTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTimeType(this);
	}
};


function IntegerTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IntegerTypeContext.prototype = Object.create(Native_typeContext.prototype);
IntegerTypeContext.prototype.constructor = IntegerTypeContext;

IntegerTypeContext.prototype.INTEGER = function() {
    return this.getToken(OParser.INTEGER, 0);
};
IntegerTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIntegerType(this);
	}
};

IntegerTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIntegerType(this);
	}
};


function DateTimeTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DateTimeTypeContext.prototype = Object.create(Native_typeContext.prototype);
DateTimeTypeContext.prototype.constructor = DateTimeTypeContext;

DateTimeTypeContext.prototype.DATETIME = function() {
    return this.getToken(OParser.DATETIME, 0);
};
DateTimeTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDateTimeType(this);
	}
};

DateTimeTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDateTimeType(this);
	}
};


function BlobTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

BlobTypeContext.prototype = Object.create(Native_typeContext.prototype);
BlobTypeContext.prototype.constructor = BlobTypeContext;

BlobTypeContext.prototype.BLOB = function() {
    return this.getToken(OParser.BLOB, 0);
};
BlobTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterBlobType(this);
	}
};

BlobTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitBlobType(this);
	}
};


function UUIDTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

UUIDTypeContext.prototype = Object.create(Native_typeContext.prototype);
UUIDTypeContext.prototype.constructor = UUIDTypeContext;

UUIDTypeContext.prototype.UUID = function() {
    return this.getToken(OParser.UUID, 0);
};
UUIDTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterUUIDType(this);
	}
};

UUIDTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitUUIDType(this);
	}
};


function DecimalTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DecimalTypeContext.prototype = Object.create(Native_typeContext.prototype);
DecimalTypeContext.prototype.constructor = DecimalTypeContext;

DecimalTypeContext.prototype.DECIMAL = function() {
    return this.getToken(OParser.DECIMAL, 0);
};
DecimalTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDecimalType(this);
	}
};

DecimalTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDecimalType(this);
	}
};


function CodeTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CodeTypeContext.prototype = Object.create(Native_typeContext.prototype);
CodeTypeContext.prototype.constructor = CodeTypeContext;

CodeTypeContext.prototype.CODE = function() {
    return this.getToken(OParser.CODE, 0);
};
CodeTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCodeType(this);
	}
};

CodeTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCodeType(this);
	}
};


function DateTypeContext(parser, ctx) {
	Native_typeContext.call(this, parser);
    Native_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DateTypeContext.prototype = Object.create(Native_typeContext.prototype);
DateTypeContext.prototype.constructor = DateTypeContext;

DateTypeContext.prototype.DATE = function() {
    return this.getToken(OParser.DATE, 0);
};
DateTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDateType(this);
	}
};

DateTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDateType(this);
	}
};



OParser.prototype.native_type = function() {

    var localctx = new Native_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 160, OParser.RULE_native_type);
    try {
        this.state = 1445;
        switch(this._input.LA(1)) {
        case OParser.BOOLEAN:
            localctx = new BooleanTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1431;
            this.match(OParser.BOOLEAN);
            break;
        case OParser.CHARACTER:
            localctx = new CharacterTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1432;
            this.match(OParser.CHARACTER);
            break;
        case OParser.TEXT:
            localctx = new TextTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1433;
            this.match(OParser.TEXT);
            break;
        case OParser.IMAGE:
            localctx = new ImageTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1434;
            this.match(OParser.IMAGE);
            break;
        case OParser.INTEGER:
            localctx = new IntegerTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1435;
            this.match(OParser.INTEGER);
            break;
        case OParser.DECIMAL:
            localctx = new DecimalTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 1436;
            this.match(OParser.DECIMAL);
            break;
        case OParser.DOCUMENT:
            localctx = new DocumentTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 1437;
            this.match(OParser.DOCUMENT);
            break;
        case OParser.DATE:
            localctx = new DateTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 1438;
            this.match(OParser.DATE);
            break;
        case OParser.DATETIME:
            localctx = new DateTimeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 1439;
            this.match(OParser.DATETIME);
            break;
        case OParser.TIME:
            localctx = new TimeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 1440;
            this.match(OParser.TIME);
            break;
        case OParser.PERIOD:
            localctx = new PeriodTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 1441;
            this.match(OParser.PERIOD);
            break;
        case OParser.CODE:
            localctx = new CodeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 1442;
            this.match(OParser.CODE);
            break;
        case OParser.BLOB:
            localctx = new BlobTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 1443;
            this.match(OParser.BLOB);
            break;
        case OParser.UUID:
            localctx = new UUIDTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 14);
            this.state = 1444;
            this.match(OParser.UUID);
            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 Category_typeContext(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 = OParser.RULE_category_type;
    this.t1 = null; // Token
    return this;
}

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

Category_typeContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(OParser.TYPE_IDENTIFIER, 0);
};

Category_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCategory_type(this);
	}
};

Category_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCategory_type(this);
	}
};




OParser.prototype.category_type = function() {

    var localctx = new Category_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 162, OParser.RULE_category_type);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1447;
        localctx.t1 = this.match(OParser.TYPE_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 Mutable_category_typeContext(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 = OParser.RULE_mutable_category_type;
    return this;
}

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

Mutable_category_typeContext.prototype.category_type = function() {
    return this.getTypedRuleContext(Category_typeContext,0);
};

Mutable_category_typeContext.prototype.MUTABLE = function() {
    return this.getToken(OParser.MUTABLE, 0);
};

Mutable_category_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMutable_category_type(this);
	}
};

Mutable_category_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMutable_category_type(this);
	}
};




OParser.prototype.mutable_category_type = function() {

    var localctx = new Mutable_category_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 164, OParser.RULE_mutable_category_type);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1450;
        _la = this._input.LA(1);
        if(_la===OParser.MUTABLE) {
            this.state = 1449;
            this.match(OParser.MUTABLE);
        }

        this.state = 1452; 
        this.category_type();
    } 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 Code_typeContext(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 = OParser.RULE_code_type;
    this.t1 = null; // Token
    return this;
}

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

Code_typeContext.prototype.CODE = function() {
    return this.getToken(OParser.CODE, 0);
};

Code_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCode_type(this);
	}
};

Code_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCode_type(this);
	}
};




OParser.prototype.code_type = function() {

    var localctx = new Code_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 166, OParser.RULE_code_type);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1454;
        localctx.t1 = this.match(OParser.CODE);
    } 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 Category_declarationContext(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 = OParser.RULE_category_declaration;
    return this;
}

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


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


function ConcreteCategoryDeclarationContext(parser, ctx) {
	Category_declarationContext.call(this, parser);
    this.decl = null; // Concrete_category_declarationContext;
    Category_declarationContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ConcreteCategoryDeclarationContext.prototype = Object.create(Category_declarationContext.prototype);
ConcreteCategoryDeclarationContext.prototype.constructor = ConcreteCategoryDeclarationContext;

ConcreteCategoryDeclarationContext.prototype.concrete_category_declaration = function() {
    return this.getTypedRuleContext(Concrete_category_declarationContext,0);
};
ConcreteCategoryDeclarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterConcreteCategoryDeclaration(this);
	}
};

ConcreteCategoryDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitConcreteCategoryDeclaration(this);
	}
};


function NativeCategoryDeclarationContext(parser, ctx) {
	Category_declarationContext.call(this, parser);
    this.decl = null; // Native_category_declarationContext;
    Category_declarationContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NativeCategoryDeclarationContext.prototype = Object.create(Category_declarationContext.prototype);
NativeCategoryDeclarationContext.prototype.constructor = NativeCategoryDeclarationContext;

NativeCategoryDeclarationContext.prototype.native_category_declaration = function() {
    return this.getTypedRuleContext(Native_category_declarationContext,0);
};
NativeCategoryDeclarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNativeCategoryDeclaration(this);
	}
};

NativeCategoryDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNativeCategoryDeclaration(this);
	}
};


function SingletonCategoryDeclarationContext(parser, ctx) {
	Category_declarationContext.call(this, parser);
    this.decl = null; // Singleton_category_declarationContext;
    Category_declarationContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SingletonCategoryDeclarationContext.prototype = Object.create(Category_declarationContext.prototype);
SingletonCategoryDeclarationContext.prototype.constructor = SingletonCategoryDeclarationContext;

SingletonCategoryDeclarationContext.prototype.singleton_category_declaration = function() {
    return this.getTypedRuleContext(Singleton_category_declarationContext,0);
};
SingletonCategoryDeclarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSingletonCategoryDeclaration(this);
	}
};

SingletonCategoryDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSingletonCategoryDeclaration(this);
	}
};



OParser.prototype.category_declaration = function() {

    var localctx = new Category_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 168, OParser.RULE_category_declaration);
    try {
        this.state = 1459;
        var la_ = this._interp.adaptivePredict(this._input,106,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ConcreteCategoryDeclarationContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1456; 
            localctx.decl = this.concrete_category_declaration();
            break;

        case 2:
            localctx = new NativeCategoryDeclarationContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1457; 
            localctx.decl = this.native_category_declaration();
            break;

        case 3:
            localctx = new SingletonCategoryDeclarationContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1458; 
            localctx.decl = this.singleton_category_declaration();
            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 Type_identifier_listContext(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 = OParser.RULE_type_identifier_list;
    return this;
}

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

Type_identifier_listContext.prototype.type_identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Type_identifierContext);
    } else {
        return this.getTypedRuleContext(Type_identifierContext,i);
    }
};

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


Type_identifier_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterType_identifier_list(this);
	}
};

Type_identifier_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitType_identifier_list(this);
	}
};




OParser.prototype.type_identifier_list = function() {

    var localctx = new Type_identifier_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 170, OParser.RULE_type_identifier_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1461; 
        this.type_identifier();
        this.state = 1466;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMA) {
            this.state = 1462;
            this.match(OParser.COMMA);
            this.state = 1463; 
            this.type_identifier();
            this.state = 1468;
            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 Method_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 = OParser.RULE_method_identifier;
    return this;
}

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

Method_identifierContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Method_identifierContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};

Method_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMethod_identifier(this);
	}
};

Method_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMethod_identifier(this);
	}
};




OParser.prototype.method_identifier = function() {

    var localctx = new Method_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 172, OParser.RULE_method_identifier);
    try {
        this.state = 1471;
        switch(this._input.LA(1)) {
        case OParser.VARIABLE_IDENTIFIER:
            this.enterOuterAlt(localctx, 1);
            this.state = 1469; 
            this.variable_identifier();
            break;
        case OParser.TYPE_IDENTIFIER:
            this.enterOuterAlt(localctx, 2);
            this.state = 1470; 
            this.type_identifier();
            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 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 = OParser.RULE_identifier;
    return this;
}

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


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


function TypeIdentifierContext(parser, ctx) {
	IdentifierContext.call(this, parser);
    IdentifierContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TypeIdentifierContext.prototype = Object.create(IdentifierContext.prototype);
TypeIdentifierContext.prototype.constructor = TypeIdentifierContext;

TypeIdentifierContext.prototype.type_identifier = function() {
    return this.getTypedRuleContext(Type_identifierContext,0);
};
TypeIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTypeIdentifier(this);
	}
};

TypeIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTypeIdentifier(this);
	}
};


function SymbolIdentifierContext(parser, ctx) {
	IdentifierContext.call(this, parser);
    IdentifierContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SymbolIdentifierContext.prototype = Object.create(IdentifierContext.prototype);
SymbolIdentifierContext.prototype.constructor = SymbolIdentifierContext;

SymbolIdentifierContext.prototype.symbol_identifier = function() {
    return this.getTypedRuleContext(Symbol_identifierContext,0);
};
SymbolIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSymbolIdentifier(this);
	}
};

SymbolIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSymbolIdentifier(this);
	}
};


function VariableIdentifierContext(parser, ctx) {
	IdentifierContext.call(this, parser);
    IdentifierContext.prototype.copyFrom.call(this, ctx);
    return this;
}

VariableIdentifierContext.prototype = Object.create(IdentifierContext.prototype);
VariableIdentifierContext.prototype.constructor = VariableIdentifierContext;

VariableIdentifierContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
VariableIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterVariableIdentifier(this);
	}
};

VariableIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitVariableIdentifier(this);
	}
};



OParser.prototype.identifier = function() {

    var localctx = new IdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 174, OParser.RULE_identifier);
    try {
        this.state = 1476;
        switch(this._input.LA(1)) {
        case OParser.VARIABLE_IDENTIFIER:
            localctx = new VariableIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1473; 
            this.variable_identifier();
            break;
        case OParser.TYPE_IDENTIFIER:
            localctx = new TypeIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1474; 
            this.type_identifier();
            break;
        case OParser.SYMBOL_IDENTIFIER:
            localctx = new SymbolIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1475; 
            this.symbol_identifier();
            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 Variable_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 = OParser.RULE_variable_identifier;
    return this;
}

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

Variable_identifierContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Variable_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterVariable_identifier(this);
	}
};

Variable_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitVariable_identifier(this);
	}
};




OParser.prototype.variable_identifier = function() {

    var localctx = new Variable_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 176, OParser.RULE_variable_identifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1478;
        this.match(OParser.VARIABLE_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 Attribute_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 = OParser.RULE_attribute_identifier;
    return this;
}

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

Attribute_identifierContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Attribute_identifierContext.prototype.STORABLE = function() {
    return this.getToken(OParser.STORABLE, 0);
};

Attribute_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAttribute_identifier(this);
	}
};

Attribute_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAttribute_identifier(this);
	}
};




OParser.prototype.attribute_identifier = function() {

    var localctx = new Attribute_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 178, OParser.RULE_attribute_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1480;
        _la = this._input.LA(1);
        if(!(_la===OParser.STORABLE || _la===OParser.VARIABLE_IDENTIFIER)) {
        this._errHandler.recoverInline(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 Type_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 = OParser.RULE_type_identifier;
    return this;
}

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

Type_identifierContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(OParser.TYPE_IDENTIFIER, 0);
};

Type_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterType_identifier(this);
	}
};

Type_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitType_identifier(this);
	}
};




OParser.prototype.type_identifier = function() {

    var localctx = new Type_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 180, OParser.RULE_type_identifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1482;
        this.match(OParser.TYPE_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 Symbol_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 = OParser.RULE_symbol_identifier;
    return this;
}

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

Symbol_identifierContext.prototype.SYMBOL_IDENTIFIER = function() {
    return this.getToken(OParser.SYMBOL_IDENTIFIER, 0);
};

Symbol_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSymbol_identifier(this);
	}
};

Symbol_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSymbol_identifier(this);
	}
};




OParser.prototype.symbol_identifier = function() {

    var localctx = new Symbol_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 182, OParser.RULE_symbol_identifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1484;
        this.match(OParser.SYMBOL_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 Argument_listContext(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 = OParser.RULE_argument_list;
    return this;
}

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

Argument_listContext.prototype.argument = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ArgumentContext);
    } else {
        return this.getTypedRuleContext(ArgumentContext,i);
    }
};

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


Argument_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterArgument_list(this);
	}
};

Argument_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitArgument_list(this);
	}
};




OParser.prototype.argument_list = function() {

    var localctx = new Argument_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 184, OParser.RULE_argument_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1486; 
        this.argument();
        this.state = 1491;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMA) {
            this.state = 1487;
            this.match(OParser.COMMA);
            this.state = 1488; 
            this.argument();
            this.state = 1493;
            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 ArgumentContext(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 = OParser.RULE_argument;
    return this;
}

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


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


function OperatorArgumentContext(parser, ctx) {
	ArgumentContext.call(this, parser);
    this.arg = null; // Operator_argumentContext;
    ArgumentContext.prototype.copyFrom.call(this, ctx);
    return this;
}

OperatorArgumentContext.prototype = Object.create(ArgumentContext.prototype);
OperatorArgumentContext.prototype.constructor = OperatorArgumentContext;

OperatorArgumentContext.prototype.operator_argument = function() {
    return this.getTypedRuleContext(Operator_argumentContext,0);
};

OperatorArgumentContext.prototype.MUTABLE = function() {
    return this.getToken(OParser.MUTABLE, 0);
};
OperatorArgumentContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOperatorArgument(this);
	}
};

OperatorArgumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOperatorArgument(this);
	}
};


function CodeArgumentContext(parser, ctx) {
	ArgumentContext.call(this, parser);
    this.arg = null; // Code_argumentContext;
    ArgumentContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CodeArgumentContext.prototype = Object.create(ArgumentContext.prototype);
CodeArgumentContext.prototype.constructor = CodeArgumentContext;

CodeArgumentContext.prototype.code_argument = function() {
    return this.getTypedRuleContext(Code_argumentContext,0);
};
CodeArgumentContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCodeArgument(this);
	}
};

CodeArgumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCodeArgument(this);
	}
};



OParser.prototype.argument = function() {

    var localctx = new ArgumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 186, OParser.RULE_argument);
    var _la = 0; // Token type
    try {
        this.state = 1499;
        var la_ = this._interp.adaptivePredict(this._input,112,this._ctx);
        switch(la_) {
        case 1:
            localctx = new CodeArgumentContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1494; 
            localctx.arg = this.code_argument();
            break;

        case 2:
            localctx = new OperatorArgumentContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1496;
            _la = this._input.LA(1);
            if(_la===OParser.MUTABLE) {
                this.state = 1495;
                this.match(OParser.MUTABLE);
            }

            this.state = 1498; 
            localctx.arg = this.operator_argument();
            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 Operator_argumentContext(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 = OParser.RULE_operator_argument;
    return this;
}

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

Operator_argumentContext.prototype.named_argument = function() {
    return this.getTypedRuleContext(Named_argumentContext,0);
};

Operator_argumentContext.prototype.typed_argument = function() {
    return this.getTypedRuleContext(Typed_argumentContext,0);
};

Operator_argumentContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOperator_argument(this);
	}
};

Operator_argumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOperator_argument(this);
	}
};




OParser.prototype.operator_argument = function() {

    var localctx = new Operator_argumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 188, OParser.RULE_operator_argument);
    try {
        this.state = 1503;
        switch(this._input.LA(1)) {
        case OParser.VARIABLE_IDENTIFIER:
            this.enterOuterAlt(localctx, 1);
            this.state = 1501; 
            this.named_argument();
            break;
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.CODE:
        case OParser.DOCUMENT:
        case OParser.BLOB:
        case OParser.IMAGE:
        case OParser.UUID:
        case OParser.ITERATOR:
        case OParser.CURSOR:
        case OParser.ANY:
        case OParser.TYPE_IDENTIFIER:
            this.enterOuterAlt(localctx, 2);
            this.state = 1502; 
            this.typed_argument();
            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 Named_argumentContext(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 = OParser.RULE_named_argument;
    return this;
}

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

Named_argumentContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Named_argumentContext.prototype.EQ = function() {
    return this.getToken(OParser.EQ, 0);
};

Named_argumentContext.prototype.literal_expression = function() {
    return this.getTypedRuleContext(Literal_expressionContext,0);
};

Named_argumentContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNamed_argument(this);
	}
};

Named_argumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNamed_argument(this);
	}
};




OParser.prototype.named_argument = function() {

    var localctx = new Named_argumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 190, OParser.RULE_named_argument);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1505; 
        this.variable_identifier();
        this.state = 1508;
        _la = this._input.LA(1);
        if(_la===OParser.EQ) {
            this.state = 1506;
            this.match(OParser.EQ);
            this.state = 1507; 
            this.literal_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 Code_argumentContext(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 = OParser.RULE_code_argument;
    this.name = null; // Variable_identifierContext
    return this;
}

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

Code_argumentContext.prototype.code_type = function() {
    return this.getTypedRuleContext(Code_typeContext,0);
};

Code_argumentContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Code_argumentContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCode_argument(this);
	}
};

Code_argumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCode_argument(this);
	}
};




OParser.prototype.code_argument = function() {

    var localctx = new Code_argumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 192, OParser.RULE_code_argument);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1510; 
        this.code_type();
        this.state = 1511; 
        localctx.name = this.variable_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 Category_or_any_typeContext(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 = OParser.RULE_category_or_any_type;
    return this;
}

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

Category_or_any_typeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};

Category_or_any_typeContext.prototype.any_type = function() {
    return this.getTypedRuleContext(Any_typeContext,0);
};

Category_or_any_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCategory_or_any_type(this);
	}
};

Category_or_any_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCategory_or_any_type(this);
	}
};




OParser.prototype.category_or_any_type = function() {

    var localctx = new Category_or_any_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 194, OParser.RULE_category_or_any_type);
    try {
        this.state = 1515;
        switch(this._input.LA(1)) {
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.CODE:
        case OParser.DOCUMENT:
        case OParser.BLOB:
        case OParser.IMAGE:
        case OParser.UUID:
        case OParser.ITERATOR:
        case OParser.CURSOR:
        case OParser.TYPE_IDENTIFIER:
            this.enterOuterAlt(localctx, 1);
            this.state = 1513; 
            this.typedef(0);
            break;
        case OParser.ANY:
            this.enterOuterAlt(localctx, 2);
            this.state = 1514; 
            this.any_type(0);
            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 Any_typeContext(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 = OParser.RULE_any_type;
    return this;
}

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


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

function AnyListTypeContext(parser, ctx) {
	Any_typeContext.call(this, parser);
    Any_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AnyListTypeContext.prototype = Object.create(Any_typeContext.prototype);
AnyListTypeContext.prototype.constructor = AnyListTypeContext;

AnyListTypeContext.prototype.any_type = function() {
    return this.getTypedRuleContext(Any_typeContext,0);
};

AnyListTypeContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

AnyListTypeContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};
AnyListTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAnyListType(this);
	}
};

AnyListTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAnyListType(this);
	}
};


function AnyTypeContext(parser, ctx) {
	Any_typeContext.call(this, parser);
    Any_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AnyTypeContext.prototype = Object.create(Any_typeContext.prototype);
AnyTypeContext.prototype.constructor = AnyTypeContext;

AnyTypeContext.prototype.ANY = function() {
    return this.getToken(OParser.ANY, 0);
};
AnyTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAnyType(this);
	}
};

AnyTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAnyType(this);
	}
};


function AnyDictTypeContext(parser, ctx) {
	Any_typeContext.call(this, parser);
    Any_typeContext.prototype.copyFrom.call(this, ctx);
    return this;
}

AnyDictTypeContext.prototype = Object.create(Any_typeContext.prototype);
AnyDictTypeContext.prototype.constructor = AnyDictTypeContext;

AnyDictTypeContext.prototype.any_type = function() {
    return this.getTypedRuleContext(Any_typeContext,0);
};

AnyDictTypeContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

AnyDictTypeContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};
AnyDictTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAnyDictType(this);
	}
};

AnyDictTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAnyDictType(this);
	}
};



OParser.prototype.any_type = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Any_typeContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 196;
    this.enterRecursionRule(localctx, 196, OParser.RULE_any_type, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new AnyTypeContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1518;
        this.match(OParser.ANY);
        this._ctx.stop = this._input.LT(-1);
        this.state = 1528;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,117,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 = 1526;
                var la_ = this._interp.adaptivePredict(this._input,116,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new AnyListTypeContext(this, new Any_typeContext(this, _parentctx, _parentState));
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_any_type);
                    this.state = 1520;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 1521;
                    this.match(OParser.LBRAK);
                    this.state = 1522;
                    this.match(OParser.RBRAK);
                    break;

                case 2:
                    localctx = new AnyDictTypeContext(this, new Any_typeContext(this, _parentctx, _parentState));
                    this.pushNewRecursionContext(localctx, _startState, OParser.RULE_any_type);
                    this.state = 1523;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 1524;
                    this.match(OParser.LCURL);
                    this.state = 1525;
                    this.match(OParser.RCURL);
                    break;

                } 
            }
            this.state = 1530;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,117,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 Member_method_declaration_listContext(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 = OParser.RULE_member_method_declaration_list;
    return this;
}

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

Member_method_declaration_listContext.prototype.member_method_declaration = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Member_method_declarationContext);
    } else {
        return this.getTypedRuleContext(Member_method_declarationContext,i);
    }
};

Member_method_declaration_listContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

Member_method_declaration_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMember_method_declaration_list(this);
	}
};

Member_method_declaration_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMember_method_declaration_list(this);
	}
};




OParser.prototype.member_method_declaration_list = function() {

    var localctx = new Member_method_declaration_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 198, OParser.RULE_member_method_declaration_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1531; 
        this.member_method_declaration();
        this.state = 1537;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ABSTRACT - 46)))) !== 0) || ((((_la - 103)) & ~0x1f) == 0 && ((1 << (_la - 103)) & ((1 << (OParser.GETTER - 103)) | (1 << (OParser.METHOD - 103)) | (1 << (OParser.OPERATOR - 103)))) !== 0) || _la===OParser.SETTER || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 1532; 
            this.lfp();
            this.state = 1533; 
            this.member_method_declaration();
            this.state = 1539;
            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 Member_method_declarationContext(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 = OParser.RULE_member_method_declaration;
    return this;
}

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

Member_method_declarationContext.prototype.setter_method_declaration = function() {
    return this.getTypedRuleContext(Setter_method_declarationContext,0);
};

Member_method_declarationContext.prototype.getter_method_declaration = function() {
    return this.getTypedRuleContext(Getter_method_declarationContext,0);
};

Member_method_declarationContext.prototype.concrete_method_declaration = function() {
    return this.getTypedRuleContext(Concrete_method_declarationContext,0);
};

Member_method_declarationContext.prototype.abstract_method_declaration = function() {
    return this.getTypedRuleContext(Abstract_method_declarationContext,0);
};

Member_method_declarationContext.prototype.operator_method_declaration = function() {
    return this.getTypedRuleContext(Operator_method_declarationContext,0);
};

Member_method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMember_method_declaration(this);
	}
};

Member_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMember_method_declaration(this);
	}
};




OParser.prototype.member_method_declaration = function() {

    var localctx = new Member_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 200, OParser.RULE_member_method_declaration);
    try {
        this.state = 1545;
        var la_ = this._interp.adaptivePredict(this._input,119,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1540; 
            this.setter_method_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1541; 
            this.getter_method_declaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1542; 
            this.concrete_method_declaration();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1543; 
            this.abstract_method_declaration();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1544; 
            this.operator_method_declaration();
            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 Native_member_method_declaration_listContext(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 = OParser.RULE_native_member_method_declaration_list;
    return this;
}

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

Native_member_method_declaration_listContext.prototype.native_member_method_declaration = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Native_member_method_declarationContext);
    } else {
        return this.getTypedRuleContext(Native_member_method_declarationContext,i);
    }
};

Native_member_method_declaration_listContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

Native_member_method_declaration_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_member_method_declaration_list(this);
	}
};

Native_member_method_declaration_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_member_method_declaration_list(this);
	}
};




OParser.prototype.native_member_method_declaration_list = function() {

    var localctx = new Native_member_method_declaration_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 202, OParser.RULE_native_member_method_declaration_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1547; 
        this.native_member_method_declaration();
        this.state = 1553;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.ANY - 46)))) !== 0) || ((((_la - 103)) & ~0x1f) == 0 && ((1 << (_la - 103)) & ((1 << (OParser.GETTER - 103)) | (1 << (OParser.METHOD - 103)) | (1 << (OParser.NATIVE - 103)))) !== 0) || _la===OParser.SETTER || _la===OParser.TYPE_IDENTIFIER) {
            this.state = 1548; 
            this.lfp();
            this.state = 1549; 
            this.native_member_method_declaration();
            this.state = 1555;
            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 Native_member_method_declarationContext(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 = OParser.RULE_native_member_method_declaration;
    return this;
}

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

Native_member_method_declarationContext.prototype.native_getter_declaration = function() {
    return this.getTypedRuleContext(Native_getter_declarationContext,0);
};

Native_member_method_declarationContext.prototype.native_setter_declaration = function() {
    return this.getTypedRuleContext(Native_setter_declarationContext,0);
};

Native_member_method_declarationContext.prototype.native_method_declaration = function() {
    return this.getTypedRuleContext(Native_method_declarationContext,0);
};

Native_member_method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_member_method_declaration(this);
	}
};

Native_member_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_member_method_declaration(this);
	}
};




OParser.prototype.native_member_method_declaration = function() {

    var localctx = new Native_member_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 204, OParser.RULE_native_member_method_declaration);
    try {
        this.state = 1559;
        var la_ = this._interp.adaptivePredict(this._input,121,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1556; 
            this.native_getter_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1557; 
            this.native_setter_declaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1558; 
            this.native_method_declaration();
            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 Native_category_bindingContext(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 = OParser.RULE_native_category_binding;
    return this;
}

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


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


function Python2CategoryBindingContext(parser, ctx) {
	Native_category_bindingContext.call(this, parser);
    this.binding = null; // Python_category_bindingContext;
    Native_category_bindingContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Python2CategoryBindingContext.prototype = Object.create(Native_category_bindingContext.prototype);
Python2CategoryBindingContext.prototype.constructor = Python2CategoryBindingContext;

Python2CategoryBindingContext.prototype.PYTHON2 = function() {
    return this.getToken(OParser.PYTHON2, 0);
};

Python2CategoryBindingContext.prototype.python_category_binding = function() {
    return this.getTypedRuleContext(Python_category_bindingContext,0);
};
Python2CategoryBindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython2CategoryBinding(this);
	}
};

Python2CategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython2CategoryBinding(this);
	}
};


function Python3CategoryBindingContext(parser, ctx) {
	Native_category_bindingContext.call(this, parser);
    this.binding = null; // Python_category_bindingContext;
    Native_category_bindingContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Python3CategoryBindingContext.prototype = Object.create(Native_category_bindingContext.prototype);
Python3CategoryBindingContext.prototype.constructor = Python3CategoryBindingContext;

Python3CategoryBindingContext.prototype.PYTHON3 = function() {
    return this.getToken(OParser.PYTHON3, 0);
};

Python3CategoryBindingContext.prototype.python_category_binding = function() {
    return this.getTypedRuleContext(Python_category_bindingContext,0);
};
Python3CategoryBindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython3CategoryBinding(this);
	}
};

Python3CategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython3CategoryBinding(this);
	}
};


function JavaCategoryBindingContext(parser, ctx) {
	Native_category_bindingContext.call(this, parser);
    this.binding = null; // Java_class_identifier_expressionContext;
    Native_category_bindingContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaCategoryBindingContext.prototype = Object.create(Native_category_bindingContext.prototype);
JavaCategoryBindingContext.prototype.constructor = JavaCategoryBindingContext;

JavaCategoryBindingContext.prototype.JAVA = function() {
    return this.getToken(OParser.JAVA, 0);
};

JavaCategoryBindingContext.prototype.java_class_identifier_expression = function() {
    return this.getTypedRuleContext(Java_class_identifier_expressionContext,0);
};
JavaCategoryBindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaCategoryBinding(this);
	}
};

JavaCategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaCategoryBinding(this);
	}
};


function CSharpCategoryBindingContext(parser, ctx) {
	Native_category_bindingContext.call(this, parser);
    this.binding = null; // Csharp_identifier_expressionContext;
    Native_category_bindingContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpCategoryBindingContext.prototype = Object.create(Native_category_bindingContext.prototype);
CSharpCategoryBindingContext.prototype.constructor = CSharpCategoryBindingContext;

CSharpCategoryBindingContext.prototype.CSHARP = function() {
    return this.getToken(OParser.CSHARP, 0);
};

CSharpCategoryBindingContext.prototype.csharp_identifier_expression = function() {
    return this.getTypedRuleContext(Csharp_identifier_expressionContext,0);
};
CSharpCategoryBindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpCategoryBinding(this);
	}
};

CSharpCategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpCategoryBinding(this);
	}
};


function JavaScriptCategoryBindingContext(parser, ctx) {
	Native_category_bindingContext.call(this, parser);
    this.binding = null; // Javascript_category_bindingContext;
    Native_category_bindingContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaScriptCategoryBindingContext.prototype = Object.create(Native_category_bindingContext.prototype);
JavaScriptCategoryBindingContext.prototype.constructor = JavaScriptCategoryBindingContext;

JavaScriptCategoryBindingContext.prototype.JAVASCRIPT = function() {
    return this.getToken(OParser.JAVASCRIPT, 0);
};

JavaScriptCategoryBindingContext.prototype.javascript_category_binding = function() {
    return this.getTypedRuleContext(Javascript_category_bindingContext,0);
};
JavaScriptCategoryBindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaScriptCategoryBinding(this);
	}
};

JavaScriptCategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaScriptCategoryBinding(this);
	}
};



OParser.prototype.native_category_binding = function() {

    var localctx = new Native_category_bindingContext(this, this._ctx, this.state);
    this.enterRule(localctx, 206, OParser.RULE_native_category_binding);
    try {
        this.state = 1571;
        switch(this._input.LA(1)) {
        case OParser.JAVA:
            localctx = new JavaCategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1561;
            this.match(OParser.JAVA);
            this.state = 1562; 
            localctx.binding = this.java_class_identifier_expression(0);
            break;
        case OParser.CSHARP:
            localctx = new CSharpCategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1563;
            this.match(OParser.CSHARP);
            this.state = 1564; 
            localctx.binding = this.csharp_identifier_expression(0);
            break;
        case OParser.PYTHON2:
            localctx = new Python2CategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1565;
            this.match(OParser.PYTHON2);
            this.state = 1566; 
            localctx.binding = this.python_category_binding();
            break;
        case OParser.PYTHON3:
            localctx = new Python3CategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1567;
            this.match(OParser.PYTHON3);
            this.state = 1568; 
            localctx.binding = this.python_category_binding();
            break;
        case OParser.JAVASCRIPT:
            localctx = new JavaScriptCategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1569;
            this.match(OParser.JAVASCRIPT);
            this.state = 1570; 
            localctx.binding = this.javascript_category_binding();
            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 Python_category_bindingContext(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 = OParser.RULE_python_category_binding;
    return this;
}

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

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

Python_category_bindingContext.prototype.python_module = function() {
    return this.getTypedRuleContext(Python_moduleContext,0);
};

Python_category_bindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython_category_binding(this);
	}
};

Python_category_bindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython_category_binding(this);
	}
};




OParser.prototype.python_category_binding = function() {

    var localctx = new Python_category_bindingContext(this, this._ctx, this.state);
    this.enterRule(localctx, 208, OParser.RULE_python_category_binding);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1573; 
        this.identifier();
        this.state = 1575;
        _la = this._input.LA(1);
        if(_la===OParser.FROM) {
            this.state = 1574; 
            this.python_module();
        }

    } 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 Python_moduleContext(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 = OParser.RULE_python_module;
    return this;
}

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

Python_moduleContext.prototype.FROM = function() {
    return this.getToken(OParser.FROM, 0);
};

Python_moduleContext.prototype.module_token = function() {
    return this.getTypedRuleContext(Module_tokenContext,0);
};

Python_moduleContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

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

Python_moduleContext.prototype.DOT = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.DOT);
    } else {
        return this.getToken(OParser.DOT, i);
    }
};


Python_moduleContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython_module(this);
	}
};

Python_moduleContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython_module(this);
	}
};




OParser.prototype.python_module = function() {

    var localctx = new Python_moduleContext(this, this._ctx, this.state);
    this.enterRule(localctx, 210, OParser.RULE_python_module);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1577;
        this.match(OParser.FROM);
        this.state = 1578; 
        this.module_token();
        this.state = 1579;
        this.match(OParser.COLON);
        this.state = 1580; 
        this.identifier();
        this.state = 1585;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.DOT) {
            this.state = 1581;
            this.match(OParser.DOT);
            this.state = 1582; 
            this.identifier();
            this.state = 1587;
            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 Javascript_category_bindingContext(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 = OParser.RULE_javascript_category_binding;
    return this;
}

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

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

Javascript_category_bindingContext.prototype.javascript_module = function() {
    return this.getTypedRuleContext(Javascript_moduleContext,0);
};

Javascript_category_bindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_category_binding(this);
	}
};

Javascript_category_bindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_category_binding(this);
	}
};




OParser.prototype.javascript_category_binding = function() {

    var localctx = new Javascript_category_bindingContext(this, this._ctx, this.state);
    this.enterRule(localctx, 212, OParser.RULE_javascript_category_binding);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1588; 
        this.identifier();
        this.state = 1590;
        _la = this._input.LA(1);
        if(_la===OParser.FROM) {
            this.state = 1589; 
            this.javascript_module();
        }

    } 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 Javascript_moduleContext(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 = OParser.RULE_javascript_module;
    return this;
}

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

Javascript_moduleContext.prototype.FROM = function() {
    return this.getToken(OParser.FROM, 0);
};

Javascript_moduleContext.prototype.module_token = function() {
    return this.getTypedRuleContext(Module_tokenContext,0);
};

Javascript_moduleContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

Javascript_moduleContext.prototype.javascript_identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Javascript_identifierContext);
    } else {
        return this.getTypedRuleContext(Javascript_identifierContext,i);
    }
};

Javascript_moduleContext.prototype.SLASH = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.SLASH);
    } else {
        return this.getToken(OParser.SLASH, i);
    }
};


Javascript_moduleContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

Javascript_moduleContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_module(this);
	}
};

Javascript_moduleContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_module(this);
	}
};




OParser.prototype.javascript_module = function() {

    var localctx = new Javascript_moduleContext(this, this._ctx, this.state);
    this.enterRule(localctx, 214, OParser.RULE_javascript_module);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1592;
        this.match(OParser.FROM);
        this.state = 1593; 
        this.module_token();
        this.state = 1594;
        this.match(OParser.COLON);
        this.state = 1596;
        _la = this._input.LA(1);
        if(_la===OParser.SLASH) {
            this.state = 1595;
            this.match(OParser.SLASH);
        }

        this.state = 1598; 
        this.javascript_identifier();
        this.state = 1603;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.SLASH) {
            this.state = 1599;
            this.match(OParser.SLASH);
            this.state = 1600; 
            this.javascript_identifier();
            this.state = 1605;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1608;
        _la = this._input.LA(1);
        if(_la===OParser.DOT) {
            this.state = 1606;
            this.match(OParser.DOT);
            this.state = 1607; 
            this.javascript_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 Variable_identifier_listContext(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 = OParser.RULE_variable_identifier_list;
    return this;
}

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

Variable_identifier_listContext.prototype.variable_identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Variable_identifierContext);
    } else {
        return this.getTypedRuleContext(Variable_identifierContext,i);
    }
};

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


Variable_identifier_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterVariable_identifier_list(this);
	}
};

Variable_identifier_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitVariable_identifier_list(this);
	}
};




OParser.prototype.variable_identifier_list = function() {

    var localctx = new Variable_identifier_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 216, OParser.RULE_variable_identifier_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1610; 
        this.variable_identifier();
        this.state = 1615;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMA) {
            this.state = 1611;
            this.match(OParser.COMMA);
            this.state = 1612; 
            this.variable_identifier();
            this.state = 1617;
            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 Attribute_identifier_listContext(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 = OParser.RULE_attribute_identifier_list;
    return this;
}

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

Attribute_identifier_listContext.prototype.attribute_identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Attribute_identifierContext);
    } else {
        return this.getTypedRuleContext(Attribute_identifierContext,i);
    }
};

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


Attribute_identifier_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAttribute_identifier_list(this);
	}
};

Attribute_identifier_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAttribute_identifier_list(this);
	}
};




OParser.prototype.attribute_identifier_list = function() {

    var localctx = new Attribute_identifier_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 218, OParser.RULE_attribute_identifier_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1618; 
        this.attribute_identifier();
        this.state = 1623;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMA) {
            this.state = 1619;
            this.match(OParser.COMMA);
            this.state = 1620; 
            this.attribute_identifier();
            this.state = 1625;
            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 Method_declarationContext(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 = OParser.RULE_method_declaration;
    return this;
}

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

Method_declarationContext.prototype.abstract_method_declaration = function() {
    return this.getTypedRuleContext(Abstract_method_declarationContext,0);
};

Method_declarationContext.prototype.concrete_method_declaration = function() {
    return this.getTypedRuleContext(Concrete_method_declarationContext,0);
};

Method_declarationContext.prototype.native_method_declaration = function() {
    return this.getTypedRuleContext(Native_method_declarationContext,0);
};

Method_declarationContext.prototype.test_method_declaration = function() {
    return this.getTypedRuleContext(Test_method_declarationContext,0);
};

Method_declarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMethod_declaration(this);
	}
};

Method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMethod_declaration(this);
	}
};




OParser.prototype.method_declaration = function() {

    var localctx = new Method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 220, OParser.RULE_method_declaration);
    try {
        this.state = 1630;
        var la_ = this._interp.adaptivePredict(this._input,131,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1626; 
            this.abstract_method_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1627; 
            this.concrete_method_declaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1628; 
            this.native_method_declaration();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1629; 
            this.test_method_declaration();
            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 Comment_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 = OParser.RULE_comment_statement;
    return this;
}

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

Comment_statementContext.prototype.COMMENT = function() {
    return this.getToken(OParser.COMMENT, 0);
};

Comment_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterComment_statement(this);
	}
};

Comment_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitComment_statement(this);
	}
};




OParser.prototype.comment_statement = function() {

    var localctx = new Comment_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 222, OParser.RULE_comment_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1632;
        this.match(OParser.COMMENT);
    } 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 Native_statement_listContext(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 = OParser.RULE_native_statement_list;
    return this;
}

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

Native_statement_listContext.prototype.native_statement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Native_statementContext);
    } else {
        return this.getTypedRuleContext(Native_statementContext,i);
    }
};

Native_statement_listContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

Native_statement_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNative_statement_list(this);
	}
};

Native_statement_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNative_statement_list(this);
	}
};




OParser.prototype.native_statement_list = function() {

    var localctx = new Native_statement_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 224, OParser.RULE_native_statement_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1634; 
        this.native_statement();
        this.state = 1640;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.JAVA) | (1 << OParser.CSHARP) | (1 << OParser.PYTHON2) | (1 << OParser.PYTHON3) | (1 << OParser.JAVASCRIPT))) !== 0)) {
            this.state = 1635; 
            this.lfp();
            this.state = 1636; 
            this.native_statement();
            this.state = 1642;
            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 Native_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 = OParser.RULE_native_statement;
    return this;
}

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


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


function CSharpNativeStatementContext(parser, ctx) {
	Native_statementContext.call(this, parser);
    Native_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpNativeStatementContext.prototype = Object.create(Native_statementContext.prototype);
CSharpNativeStatementContext.prototype.constructor = CSharpNativeStatementContext;

CSharpNativeStatementContext.prototype.CSHARP = function() {
    return this.getToken(OParser.CSHARP, 0);
};

CSharpNativeStatementContext.prototype.csharp_statement = function() {
    return this.getTypedRuleContext(Csharp_statementContext,0);
};
CSharpNativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpNativeStatement(this);
	}
};

CSharpNativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpNativeStatement(this);
	}
};


function JavaNativeStatementContext(parser, ctx) {
	Native_statementContext.call(this, parser);
    Native_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaNativeStatementContext.prototype = Object.create(Native_statementContext.prototype);
JavaNativeStatementContext.prototype.constructor = JavaNativeStatementContext;

JavaNativeStatementContext.prototype.JAVA = function() {
    return this.getToken(OParser.JAVA, 0);
};

JavaNativeStatementContext.prototype.java_statement = function() {
    return this.getTypedRuleContext(Java_statementContext,0);
};
JavaNativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaNativeStatement(this);
	}
};

JavaNativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaNativeStatement(this);
	}
};


function JavaScriptNativeStatementContext(parser, ctx) {
	Native_statementContext.call(this, parser);
    Native_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaScriptNativeStatementContext.prototype = Object.create(Native_statementContext.prototype);
JavaScriptNativeStatementContext.prototype.constructor = JavaScriptNativeStatementContext;

JavaScriptNativeStatementContext.prototype.JAVASCRIPT = function() {
    return this.getToken(OParser.JAVASCRIPT, 0);
};

JavaScriptNativeStatementContext.prototype.javascript_native_statement = function() {
    return this.getTypedRuleContext(Javascript_native_statementContext,0);
};
JavaScriptNativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaScriptNativeStatement(this);
	}
};

JavaScriptNativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaScriptNativeStatement(this);
	}
};


function Python2NativeStatementContext(parser, ctx) {
	Native_statementContext.call(this, parser);
    Native_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Python2NativeStatementContext.prototype = Object.create(Native_statementContext.prototype);
Python2NativeStatementContext.prototype.constructor = Python2NativeStatementContext;

Python2NativeStatementContext.prototype.PYTHON2 = function() {
    return this.getToken(OParser.PYTHON2, 0);
};

Python2NativeStatementContext.prototype.python_native_statement = function() {
    return this.getTypedRuleContext(Python_native_statementContext,0);
};
Python2NativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython2NativeStatement(this);
	}
};

Python2NativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython2NativeStatement(this);
	}
};


function Python3NativeStatementContext(parser, ctx) {
	Native_statementContext.call(this, parser);
    Native_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Python3NativeStatementContext.prototype = Object.create(Native_statementContext.prototype);
Python3NativeStatementContext.prototype.constructor = Python3NativeStatementContext;

Python3NativeStatementContext.prototype.PYTHON3 = function() {
    return this.getToken(OParser.PYTHON3, 0);
};

Python3NativeStatementContext.prototype.python_native_statement = function() {
    return this.getTypedRuleContext(Python_native_statementContext,0);
};
Python3NativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython3NativeStatement(this);
	}
};

Python3NativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython3NativeStatement(this);
	}
};



OParser.prototype.native_statement = function() {

    var localctx = new Native_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 226, OParser.RULE_native_statement);
    try {
        this.state = 1653;
        switch(this._input.LA(1)) {
        case OParser.JAVA:
            localctx = new JavaNativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1643;
            this.match(OParser.JAVA);
            this.state = 1644; 
            this.java_statement();
            break;
        case OParser.CSHARP:
            localctx = new CSharpNativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1645;
            this.match(OParser.CSHARP);
            this.state = 1646; 
            this.csharp_statement();
            break;
        case OParser.PYTHON2:
            localctx = new Python2NativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1647;
            this.match(OParser.PYTHON2);
            this.state = 1648; 
            this.python_native_statement();
            break;
        case OParser.PYTHON3:
            localctx = new Python3NativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1649;
            this.match(OParser.PYTHON3);
            this.state = 1650; 
            this.python_native_statement();
            break;
        case OParser.JAVASCRIPT:
            localctx = new JavaScriptNativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1651;
            this.match(OParser.JAVASCRIPT);
            this.state = 1652; 
            this.javascript_native_statement();
            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 Python_native_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 = OParser.RULE_python_native_statement;
    return this;
}

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

Python_native_statementContext.prototype.python_statement = function() {
    return this.getTypedRuleContext(Python_statementContext,0);
};

Python_native_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Python_native_statementContext.prototype.python_module = function() {
    return this.getTypedRuleContext(Python_moduleContext,0);
};

Python_native_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython_native_statement(this);
	}
};

Python_native_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython_native_statement(this);
	}
};




OParser.prototype.python_native_statement = function() {

    var localctx = new Python_native_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 228, OParser.RULE_python_native_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1655; 
        this.python_statement();
        this.state = 1657;
        _la = this._input.LA(1);
        if(_la===OParser.SEMI) {
            this.state = 1656;
            this.match(OParser.SEMI);
        }

        this.state = 1660;
        _la = this._input.LA(1);
        if(_la===OParser.FROM) {
            this.state = 1659; 
            this.python_module();
        }

    } 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 Javascript_native_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 = OParser.RULE_javascript_native_statement;
    return this;
}

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

Javascript_native_statementContext.prototype.javascript_statement = function() {
    return this.getTypedRuleContext(Javascript_statementContext,0);
};

Javascript_native_statementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

Javascript_native_statementContext.prototype.javascript_module = function() {
    return this.getTypedRuleContext(Javascript_moduleContext,0);
};

Javascript_native_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_native_statement(this);
	}
};

Javascript_native_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_native_statement(this);
	}
};




OParser.prototype.javascript_native_statement = function() {

    var localctx = new Javascript_native_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 230, OParser.RULE_javascript_native_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1662; 
        this.javascript_statement();
        this.state = 1664;
        _la = this._input.LA(1);
        if(_la===OParser.SEMI) {
            this.state = 1663;
            this.match(OParser.SEMI);
        }

        this.state = 1667;
        _la = this._input.LA(1);
        if(_la===OParser.FROM) {
            this.state = 1666; 
            this.javascript_module();
        }

    } 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 Statement_listContext(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 = OParser.RULE_statement_list;
    return this;
}

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

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

Statement_listContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

Statement_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterStatement_list(this);
	}
};

Statement_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitStatement_list(this);
	}
};




OParser.prototype.statement_list = function() {

    var localctx = new Statement_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 232, OParser.RULE_statement_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1669; 
        this.statement();
        this.state = 1675;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMENT || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)) | (1 << (OParser.CODE - 46)) | (1 << (OParser.DOCUMENT - 46)) | (1 << (OParser.BLOB - 46)) | (1 << (OParser.IMAGE - 46)) | (1 << (OParser.UUID - 46)) | (1 << (OParser.ITERATOR - 46)) | (1 << (OParser.CURSOR - 46)) | (1 << (OParser.BREAK - 46)))) !== 0) || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (OParser.DELETE - 85)) | (1 << (OParser.DO - 85)) | (1 << (OParser.FLUSH - 85)) | (1 << (OParser.FOR - 85)) | (1 << (OParser.IF - 85)) | (1 << (OParser.METHOD - 85)))) !== 0) || ((((_la - 131)) & ~0x1f) == 0 && ((1 << (_la - 131)) & ((1 << (OParser.RETURN - 131)) | (1 << (OParser.STORE - 131)) | (1 << (OParser.SWITCH - 131)) | (1 << (OParser.THROW - 131)) | (1 << (OParser.TRY - 131)) | (1 << (OParser.WITH - 131)) | (1 << (OParser.WHILE - 131)) | (1 << (OParser.WRITE - 131)) | (1 << (OParser.SYMBOL_IDENTIFIER - 131)) | (1 << (OParser.TYPE_IDENTIFIER - 131)) | (1 << (OParser.VARIABLE_IDENTIFIER - 131)))) !== 0)) {
            this.state = 1670; 
            this.lfp();
            this.state = 1671; 
            this.statement();
            this.state = 1677;
            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 Assertion_listContext(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 = OParser.RULE_assertion_list;
    return this;
}

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

Assertion_listContext.prototype.assertion = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(AssertionContext);
    } else {
        return this.getTypedRuleContext(AssertionContext,i);
    }
};

Assertion_listContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

Assertion_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAssertion_list(this);
	}
};

Assertion_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAssertion_list(this);
	}
};




OParser.prototype.assertion_list = function() {

    var localctx = new Assertion_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 234, OParser.RULE_assertion_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1678; 
        this.assertion();
        this.state = 1684;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 1679; 
            this.lfp();
            this.state = 1680; 
            this.assertion();
            this.state = 1686;
            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 Switch_case_statement_listContext(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 = OParser.RULE_switch_case_statement_list;
    return this;
}

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

Switch_case_statement_listContext.prototype.switch_case_statement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Switch_case_statementContext);
    } else {
        return this.getTypedRuleContext(Switch_case_statementContext,i);
    }
};

Switch_case_statement_listContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

Switch_case_statement_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSwitch_case_statement_list(this);
	}
};

Switch_case_statement_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSwitch_case_statement_list(this);
	}
};




OParser.prototype.switch_case_statement_list = function() {

    var localctx = new Switch_case_statement_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 236, OParser.RULE_switch_case_statement_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1687; 
        this.switch_case_statement();
        this.state = 1693;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.CASE) {
            this.state = 1688; 
            this.lfp();
            this.state = 1689; 
            this.switch_case_statement();
            this.state = 1695;
            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 Catch_statement_listContext(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 = OParser.RULE_catch_statement_list;
    return this;
}

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

Catch_statement_listContext.prototype.catch_statement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Catch_statementContext);
    } else {
        return this.getTypedRuleContext(Catch_statementContext,i);
    }
};

Catch_statement_listContext.prototype.lfp = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(LfpContext);
    } else {
        return this.getTypedRuleContext(LfpContext,i);
    }
};

Catch_statement_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCatch_statement_list(this);
	}
};

Catch_statement_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCatch_statement_list(this);
	}
};




OParser.prototype.catch_statement_list = function() {

    var localctx = new Catch_statement_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 238, OParser.RULE_catch_statement_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1696; 
        this.catch_statement();
        this.state = 1702;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,141,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1697; 
                this.lfp();
                this.state = 1698; 
                this.catch_statement(); 
            }
            this.state = 1704;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,141,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 Literal_collectionContext(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 = OParser.RULE_literal_collection;
    return this;
}

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


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


function LiteralListLiteralContext(parser, ctx) {
	Literal_collectionContext.call(this, parser);
    Literal_collectionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LiteralListLiteralContext.prototype = Object.create(Literal_collectionContext.prototype);
LiteralListLiteralContext.prototype.constructor = LiteralListLiteralContext;

LiteralListLiteralContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

LiteralListLiteralContext.prototype.literal_list_literal = function() {
    return this.getTypedRuleContext(Literal_list_literalContext,0);
};

LiteralListLiteralContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};
LiteralListLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLiteralListLiteral(this);
	}
};

LiteralListLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLiteralListLiteral(this);
	}
};


function LiteralRangeLiteralContext(parser, ctx) {
	Literal_collectionContext.call(this, parser);
    this.low = null; // Atomic_literalContext;
    this.high = null; // Atomic_literalContext;
    Literal_collectionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LiteralRangeLiteralContext.prototype = Object.create(Literal_collectionContext.prototype);
LiteralRangeLiteralContext.prototype.constructor = LiteralRangeLiteralContext;

LiteralRangeLiteralContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

LiteralRangeLiteralContext.prototype.RANGE = function() {
    return this.getToken(OParser.RANGE, 0);
};

LiteralRangeLiteralContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

LiteralRangeLiteralContext.prototype.atomic_literal = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Atomic_literalContext);
    } else {
        return this.getTypedRuleContext(Atomic_literalContext,i);
    }
};
LiteralRangeLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLiteralRangeLiteral(this);
	}
};

LiteralRangeLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLiteralRangeLiteral(this);
	}
};


function LiteralSetLiteralContext(parser, ctx) {
	Literal_collectionContext.call(this, parser);
    Literal_collectionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LiteralSetLiteralContext.prototype = Object.create(Literal_collectionContext.prototype);
LiteralSetLiteralContext.prototype.constructor = LiteralSetLiteralContext;

LiteralSetLiteralContext.prototype.LT = function() {
    return this.getToken(OParser.LT, 0);
};

LiteralSetLiteralContext.prototype.literal_list_literal = function() {
    return this.getTypedRuleContext(Literal_list_literalContext,0);
};

LiteralSetLiteralContext.prototype.GT = function() {
    return this.getToken(OParser.GT, 0);
};
LiteralSetLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLiteralSetLiteral(this);
	}
};

LiteralSetLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLiteralSetLiteral(this);
	}
};



OParser.prototype.literal_collection = function() {

    var localctx = new Literal_collectionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 240, OParser.RULE_literal_collection);
    try {
        this.state = 1719;
        var la_ = this._interp.adaptivePredict(this._input,142,this._ctx);
        switch(la_) {
        case 1:
            localctx = new LiteralRangeLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1705;
            this.match(OParser.LBRAK);
            this.state = 1706; 
            localctx.low = this.atomic_literal();
            this.state = 1707;
            this.match(OParser.RANGE);
            this.state = 1708; 
            localctx.high = this.atomic_literal();
            this.state = 1709;
            this.match(OParser.RBRAK);
            break;

        case 2:
            localctx = new LiteralListLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1711;
            this.match(OParser.LBRAK);
            this.state = 1712; 
            this.literal_list_literal();
            this.state = 1713;
            this.match(OParser.RBRAK);
            break;

        case 3:
            localctx = new LiteralSetLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1715;
            this.match(OParser.LT);
            this.state = 1716; 
            this.literal_list_literal();
            this.state = 1717;
            this.match(OParser.GT);
            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 Atomic_literalContext(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 = OParser.RULE_atomic_literal;
    return this;
}

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


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


function MinIntegerLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MinIntegerLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
MinIntegerLiteralContext.prototype.constructor = MinIntegerLiteralContext;

MinIntegerLiteralContext.prototype.MIN_INTEGER = function() {
    return this.getToken(OParser.MIN_INTEGER, 0);
};
MinIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMinIntegerLiteral(this);
	}
};

MinIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMinIntegerLiteral(this);
	}
};


function DateLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DateLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
DateLiteralContext.prototype.constructor = DateLiteralContext;

DateLiteralContext.prototype.DATE_LITERAL = function() {
    return this.getToken(OParser.DATE_LITERAL, 0);
};
DateLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDateLiteral(this);
	}
};

DateLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDateLiteral(this);
	}
};


function BooleanLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

BooleanLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
BooleanLiteralContext.prototype.constructor = BooleanLiteralContext;

BooleanLiteralContext.prototype.BOOLEAN_LITERAL = function() {
    return this.getToken(OParser.BOOLEAN_LITERAL, 0);
};
BooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterBooleanLiteral(this);
	}
};

BooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitBooleanLiteral(this);
	}
};


function HexadecimalLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

HexadecimalLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
HexadecimalLiteralContext.prototype.constructor = HexadecimalLiteralContext;

HexadecimalLiteralContext.prototype.HEXA_LITERAL = function() {
    return this.getToken(OParser.HEXA_LITERAL, 0);
};
HexadecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterHexadecimalLiteral(this);
	}
};

HexadecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitHexadecimalLiteral(this);
	}
};


function UUIDLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

UUIDLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
UUIDLiteralContext.prototype.constructor = UUIDLiteralContext;

UUIDLiteralContext.prototype.UUID_LITERAL = function() {
    return this.getToken(OParser.UUID_LITERAL, 0);
};
UUIDLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterUUIDLiteral(this);
	}
};

UUIDLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitUUIDLiteral(this);
	}
};


function MaxIntegerLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

MaxIntegerLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
MaxIntegerLiteralContext.prototype.constructor = MaxIntegerLiteralContext;

MaxIntegerLiteralContext.prototype.MAX_INTEGER = function() {
    return this.getToken(OParser.MAX_INTEGER, 0);
};
MaxIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMaxIntegerLiteral(this);
	}
};

MaxIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMaxIntegerLiteral(this);
	}
};


function DateTimeLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DateTimeLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
DateTimeLiteralContext.prototype.constructor = DateTimeLiteralContext;

DateTimeLiteralContext.prototype.DATETIME_LITERAL = function() {
    return this.getToken(OParser.DATETIME_LITERAL, 0);
};
DateTimeLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDateTimeLiteral(this);
	}
};

DateTimeLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDateTimeLiteral(this);
	}
};


function PeriodLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PeriodLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
PeriodLiteralContext.prototype.constructor = PeriodLiteralContext;

PeriodLiteralContext.prototype.PERIOD_LITERAL = function() {
    return this.getToken(OParser.PERIOD_LITERAL, 0);
};
PeriodLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPeriodLiteral(this);
	}
};

PeriodLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPeriodLiteral(this);
	}
};


function DecimalLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

DecimalLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
DecimalLiteralContext.prototype.constructor = DecimalLiteralContext;

DecimalLiteralContext.prototype.DECIMAL_LITERAL = function() {
    return this.getToken(OParser.DECIMAL_LITERAL, 0);
};
DecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDecimalLiteral(this);
	}
};

DecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDecimalLiteral(this);
	}
};


function TextLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TextLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
TextLiteralContext.prototype.constructor = TextLiteralContext;

TextLiteralContext.prototype.TEXT_LITERAL = function() {
    return this.getToken(OParser.TEXT_LITERAL, 0);
};
TextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTextLiteral(this);
	}
};

TextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTextLiteral(this);
	}
};


function NullLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.n = null; // Null_literalContext;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

NullLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
NullLiteralContext.prototype.constructor = NullLiteralContext;

NullLiteralContext.prototype.null_literal = function() {
    return this.getTypedRuleContext(Null_literalContext,0);
};
NullLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNullLiteral(this);
	}
};

NullLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNullLiteral(this);
	}
};


function IntegerLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IntegerLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
IntegerLiteralContext.prototype.constructor = IntegerLiteralContext;

IntegerLiteralContext.prototype.INTEGER_LITERAL = function() {
    return this.getToken(OParser.INTEGER_LITERAL, 0);
};
IntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIntegerLiteral(this);
	}
};

IntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIntegerLiteral(this);
	}
};


function TimeLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

TimeLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
TimeLiteralContext.prototype.constructor = TimeLiteralContext;

TimeLiteralContext.prototype.TIME_LITERAL = function() {
    return this.getToken(OParser.TIME_LITERAL, 0);
};
TimeLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTimeLiteral(this);
	}
};

TimeLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTimeLiteral(this);
	}
};


function CharacterLiteralContext(parser, ctx) {
	Atomic_literalContext.call(this, parser);
    this.t = null; // Token;
    Atomic_literalContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CharacterLiteralContext.prototype = Object.create(Atomic_literalContext.prototype);
CharacterLiteralContext.prototype.constructor = CharacterLiteralContext;

CharacterLiteralContext.prototype.CHAR_LITERAL = function() {
    return this.getToken(OParser.CHAR_LITERAL, 0);
};
CharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCharacterLiteral(this);
	}
};

CharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCharacterLiteral(this);
	}
};



OParser.prototype.atomic_literal = function() {

    var localctx = new Atomic_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 242, OParser.RULE_atomic_literal);
    try {
        this.state = 1735;
        switch(this._input.LA(1)) {
        case OParser.MIN_INTEGER:
            localctx = new MinIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1721;
            localctx.t = this.match(OParser.MIN_INTEGER);
            break;
        case OParser.MAX_INTEGER:
            localctx = new MaxIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1722;
            localctx.t = this.match(OParser.MAX_INTEGER);
            break;
        case OParser.INTEGER_LITERAL:
            localctx = new IntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1723;
            localctx.t = this.match(OParser.INTEGER_LITERAL);
            break;
        case OParser.HEXA_LITERAL:
            localctx = new HexadecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1724;
            localctx.t = this.match(OParser.HEXA_LITERAL);
            break;
        case OParser.CHAR_LITERAL:
            localctx = new CharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1725;
            localctx.t = this.match(OParser.CHAR_LITERAL);
            break;
        case OParser.DATE_LITERAL:
            localctx = new DateLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 1726;
            localctx.t = this.match(OParser.DATE_LITERAL);
            break;
        case OParser.TIME_LITERAL:
            localctx = new TimeLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 1727;
            localctx.t = this.match(OParser.TIME_LITERAL);
            break;
        case OParser.TEXT_LITERAL:
            localctx = new TextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 1728;
            localctx.t = this.match(OParser.TEXT_LITERAL);
            break;
        case OParser.DECIMAL_LITERAL:
            localctx = new DecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 1729;
            localctx.t = this.match(OParser.DECIMAL_LITERAL);
            break;
        case OParser.DATETIME_LITERAL:
            localctx = new DateTimeLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 1730;
            localctx.t = this.match(OParser.DATETIME_LITERAL);
            break;
        case OParser.BOOLEAN_LITERAL:
            localctx = new BooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 1731;
            localctx.t = this.match(OParser.BOOLEAN_LITERAL);
            break;
        case OParser.PERIOD_LITERAL:
            localctx = new PeriodLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 1732;
            localctx.t = this.match(OParser.PERIOD_LITERAL);
            break;
        case OParser.UUID_LITERAL:
            localctx = new UUIDLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 1733;
            localctx.t = this.match(OParser.UUID_LITERAL);
            break;
        case OParser.NULL:
            localctx = new NullLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 14);
            this.state = 1734; 
            localctx.n = this.null_literal();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Literal_list_literalContext(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 = OParser.RULE_literal_list_literal;
    return this;
}

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

Literal_list_literalContext.prototype.atomic_literal = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Atomic_literalContext);
    } else {
        return this.getTypedRuleContext(Atomic_literalContext,i);
    }
};

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


Literal_list_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLiteral_list_literal(this);
	}
};

Literal_list_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLiteral_list_literal(this);
	}
};




OParser.prototype.literal_list_literal = function() {

    var localctx = new Literal_list_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 244, OParser.RULE_literal_list_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1737; 
        this.atomic_literal();
        this.state = 1742;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMA) {
            this.state = 1738;
            this.match(OParser.COMMA);
            this.state = 1739; 
            this.atomic_literal();
            this.state = 1744;
            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 Selectable_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 = OParser.RULE_selectable_expression;
    return this;
}

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


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


function ThisExpressionContext(parser, ctx) {
	Selectable_expressionContext.call(this, parser);
    this.exp = null; // This_expressionContext;
    Selectable_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ThisExpressionContext.prototype = Object.create(Selectable_expressionContext.prototype);
ThisExpressionContext.prototype.constructor = ThisExpressionContext;

ThisExpressionContext.prototype.this_expression = function() {
    return this.getTypedRuleContext(This_expressionContext,0);
};
ThisExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterThisExpression(this);
	}
};

ThisExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitThisExpression(this);
	}
};


function ParenthesisExpressionContext(parser, ctx) {
	Selectable_expressionContext.call(this, parser);
    this.exp = null; // Parenthesis_expressionContext;
    Selectable_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ParenthesisExpressionContext.prototype = Object.create(Selectable_expressionContext.prototype);
ParenthesisExpressionContext.prototype.constructor = ParenthesisExpressionContext;

ParenthesisExpressionContext.prototype.parenthesis_expression = function() {
    return this.getTypedRuleContext(Parenthesis_expressionContext,0);
};
ParenthesisExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterParenthesisExpression(this);
	}
};

ParenthesisExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitParenthesisExpression(this);
	}
};


function LiteralExpressionContext(parser, ctx) {
	Selectable_expressionContext.call(this, parser);
    this.exp = null; // Literal_expressionContext;
    Selectable_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

LiteralExpressionContext.prototype = Object.create(Selectable_expressionContext.prototype);
LiteralExpressionContext.prototype.constructor = LiteralExpressionContext;

LiteralExpressionContext.prototype.literal_expression = function() {
    return this.getTypedRuleContext(Literal_expressionContext,0);
};
LiteralExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLiteralExpression(this);
	}
};

LiteralExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLiteralExpression(this);
	}
};


function IdentifierExpressionContext(parser, ctx) {
	Selectable_expressionContext.call(this, parser);
    this.exp = null; // IdentifierContext;
    Selectable_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IdentifierExpressionContext.prototype = Object.create(Selectable_expressionContext.prototype);
IdentifierExpressionContext.prototype.constructor = IdentifierExpressionContext;

IdentifierExpressionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};
IdentifierExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIdentifierExpression(this);
	}
};

IdentifierExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIdentifierExpression(this);
	}
};



OParser.prototype.selectable_expression = function() {

    var localctx = new Selectable_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 246, OParser.RULE_selectable_expression);
    try {
        this.state = 1749;
        var la_ = this._interp.adaptivePredict(this._input,145,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ParenthesisExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1745; 
            localctx.exp = this.parenthesis_expression();
            break;

        case 2:
            localctx = new LiteralExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1746; 
            localctx.exp = this.literal_expression();
            break;

        case 3:
            localctx = new IdentifierExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1747; 
            localctx.exp = this.identifier();
            break;

        case 4:
            localctx = new ThisExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1748; 
            localctx.exp = this.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 This_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 = OParser.RULE_this_expression;
    return this;
}

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

This_expressionContext.prototype.SELF = function() {
    return this.getToken(OParser.SELF, 0);
};

This_expressionContext.prototype.THIS = function() {
    return this.getToken(OParser.THIS, 0);
};

This_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterThis_expression(this);
	}
};

This_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitThis_expression(this);
	}
};




OParser.prototype.this_expression = function() {

    var localctx = new This_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 248, OParser.RULE_this_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1751;
        _la = this._input.LA(1);
        if(!(_la===OParser.SELF || _la===OParser.THIS)) {
        this._errHandler.recoverInline(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 Parenthesis_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 = OParser.RULE_parenthesis_expression;
    return this;
}

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

Parenthesis_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

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

Parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Parenthesis_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterParenthesis_expression(this);
	}
};

Parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitParenthesis_expression(this);
	}
};




OParser.prototype.parenthesis_expression = function() {

    var localctx = new Parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 250, OParser.RULE_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1753;
        this.match(OParser.LPAR);
        this.state = 1754; 
        this.expression(0);
        this.state = 1755;
        this.match(OParser.RPAR);
    } 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 Literal_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 = OParser.RULE_literal_expression;
    return this;
}

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

Literal_expressionContext.prototype.atomic_literal = function() {
    return this.getTypedRuleContext(Atomic_literalContext,0);
};

Literal_expressionContext.prototype.collection_literal = function() {
    return this.getTypedRuleContext(Collection_literalContext,0);
};

Literal_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLiteral_expression(this);
	}
};

Literal_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLiteral_expression(this);
	}
};




OParser.prototype.literal_expression = function() {

    var localctx = new Literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 252, OParser.RULE_literal_expression);
    try {
        this.state = 1759;
        switch(this._input.LA(1)) {
        case OParser.NULL:
        case OParser.BOOLEAN_LITERAL:
        case OParser.CHAR_LITERAL:
        case OParser.MIN_INTEGER:
        case OParser.MAX_INTEGER:
        case OParser.TEXT_LITERAL:
        case OParser.UUID_LITERAL:
        case OParser.INTEGER_LITERAL:
        case OParser.HEXA_LITERAL:
        case OParser.DECIMAL_LITERAL:
        case OParser.DATETIME_LITERAL:
        case OParser.TIME_LITERAL:
        case OParser.DATE_LITERAL:
        case OParser.PERIOD_LITERAL:
            this.enterOuterAlt(localctx, 1);
            this.state = 1757; 
            this.atomic_literal();
            break;
        case OParser.LPAR:
        case OParser.LBRAK:
        case OParser.LCURL:
        case OParser.LT:
        case OParser.MUTABLE:
            this.enterOuterAlt(localctx, 2);
            this.state = 1758; 
            this.collection_literal();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Collection_literalContext(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 = OParser.RULE_collection_literal;
    return this;
}

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

Collection_literalContext.prototype.range_literal = function() {
    return this.getTypedRuleContext(Range_literalContext,0);
};

Collection_literalContext.prototype.list_literal = function() {
    return this.getTypedRuleContext(List_literalContext,0);
};

Collection_literalContext.prototype.set_literal = function() {
    return this.getTypedRuleContext(Set_literalContext,0);
};

Collection_literalContext.prototype.dict_literal = function() {
    return this.getTypedRuleContext(Dict_literalContext,0);
};

Collection_literalContext.prototype.tuple_literal = function() {
    return this.getTypedRuleContext(Tuple_literalContext,0);
};

Collection_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCollection_literal(this);
	}
};

Collection_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCollection_literal(this);
	}
};




OParser.prototype.collection_literal = function() {

    var localctx = new Collection_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 254, OParser.RULE_collection_literal);
    try {
        this.state = 1766;
        var la_ = this._interp.adaptivePredict(this._input,147,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1761; 
            this.range_literal();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1762; 
            this.list_literal();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1763; 
            this.set_literal();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1764; 
            this.dict_literal();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1765; 
            this.tuple_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 Tuple_literalContext(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 = OParser.RULE_tuple_literal;
    return this;
}

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

Tuple_literalContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Tuple_literalContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Tuple_literalContext.prototype.MUTABLE = function() {
    return this.getToken(OParser.MUTABLE, 0);
};

Tuple_literalContext.prototype.expression_tuple = function() {
    return this.getTypedRuleContext(Expression_tupleContext,0);
};

Tuple_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterTuple_literal(this);
	}
};

Tuple_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitTuple_literal(this);
	}
};




OParser.prototype.tuple_literal = function() {

    var localctx = new Tuple_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 256, OParser.RULE_tuple_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1769;
        _la = this._input.LA(1);
        if(_la===OParser.MUTABLE) {
            this.state = 1768;
            this.match(OParser.MUTABLE);
        }

        this.state = 1771;
        this.match(OParser.LPAR);
        this.state = 1773;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 1772; 
            this.expression_tuple();
        }

        this.state = 1775;
        this.match(OParser.RPAR);
    } 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 Dict_literalContext(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 = OParser.RULE_dict_literal;
    return this;
}

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

Dict_literalContext.prototype.LCURL = function() {
    return this.getToken(OParser.LCURL, 0);
};

Dict_literalContext.prototype.RCURL = function() {
    return this.getToken(OParser.RCURL, 0);
};

Dict_literalContext.prototype.MUTABLE = function() {
    return this.getToken(OParser.MUTABLE, 0);
};

Dict_literalContext.prototype.dict_entry_list = function() {
    return this.getTypedRuleContext(Dict_entry_listContext,0);
};

Dict_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDict_literal(this);
	}
};

Dict_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDict_literal(this);
	}
};




OParser.prototype.dict_literal = function() {

    var localctx = new Dict_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 258, OParser.RULE_dict_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1778;
        _la = this._input.LA(1);
        if(_la===OParser.MUTABLE) {
            this.state = 1777;
            this.match(OParser.MUTABLE);
        }

        this.state = 1780;
        this.match(OParser.LCURL);
        this.state = 1782;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 1781; 
            this.dict_entry_list();
        }

        this.state = 1784;
        this.match(OParser.RCURL);
    } 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 Expression_tupleContext(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 = OParser.RULE_expression_tuple;
    return this;
}

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

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

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


Expression_tupleContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterExpression_tuple(this);
	}
};

Expression_tupleContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitExpression_tuple(this);
	}
};




OParser.prototype.expression_tuple = function() {

    var localctx = new Expression_tupleContext(this, this._ctx, this.state);
    this.enterRule(localctx, 260, OParser.RULE_expression_tuple);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1786; 
        this.expression(0);
        this.state = 1787;
        this.match(OParser.COMMA);
        this.state = 1796;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << OParser.LPAR) | (1 << OParser.LBRAK) | (1 << OParser.LCURL) | (1 << OParser.XMARK) | (1 << OParser.MINUS))) !== 0) || ((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (OParser.LT - 36)) | (1 << (OParser.CODE - 36)) | (1 << (OParser.DOCUMENT - 36)) | (1 << (OParser.BLOB - 36)))) !== 0) || ((((_la - 94)) & ~0x1f) == 0 && ((1 << (_la - 94)) & ((1 << (OParser.EXECUTE - 94)) | (1 << (OParser.FETCH - 94)) | (1 << (OParser.FILTERED - 94)) | (1 << (OParser.MUTABLE - 94)) | (1 << (OParser.NULL - 94)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.SORTED - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.MIN_INTEGER - 128)) | (1 << (OParser.MAX_INTEGER - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 161)) & ~0x1f) == 0 && ((1 << (_la - 161)) & ((1 << (OParser.TEXT_LITERAL - 161)) | (1 << (OParser.UUID_LITERAL - 161)) | (1 << (OParser.INTEGER_LITERAL - 161)) | (1 << (OParser.HEXA_LITERAL - 161)) | (1 << (OParser.DECIMAL_LITERAL - 161)) | (1 << (OParser.DATETIME_LITERAL - 161)) | (1 << (OParser.TIME_LITERAL - 161)) | (1 << (OParser.DATE_LITERAL - 161)) | (1 << (OParser.PERIOD_LITERAL - 161)))) !== 0)) {
            this.state = 1788; 
            this.expression(0);
            this.state = 1793;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===OParser.COMMA) {
                this.state = 1789;
                this.match(OParser.COMMA);
                this.state = 1790; 
                this.expression(0);
                this.state = 1795;
                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 Dict_entry_listContext(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 = OParser.RULE_dict_entry_list;
    return this;
}

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

Dict_entry_listContext.prototype.dict_entry = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Dict_entryContext);
    } else {
        return this.getTypedRuleContext(Dict_entryContext,i);
    }
};

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


Dict_entry_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDict_entry_list(this);
	}
};

Dict_entry_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDict_entry_list(this);
	}
};




OParser.prototype.dict_entry_list = function() {

    var localctx = new Dict_entry_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 262, OParser.RULE_dict_entry_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1798; 
        this.dict_entry();
        this.state = 1803;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMA) {
            this.state = 1799;
            this.match(OParser.COMMA);
            this.state = 1800; 
            this.dict_entry();
            this.state = 1805;
            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 Dict_entryContext(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 = OParser.RULE_dict_entry;
    this.key = null; // ExpressionContext
    this.value = null; // ExpressionContext
    return this;
}

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

Dict_entryContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

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

Dict_entryContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDict_entry(this);
	}
};

Dict_entryContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDict_entry(this);
	}
};




OParser.prototype.dict_entry = function() {

    var localctx = new Dict_entryContext(this, this._ctx, this.state);
    this.enterRule(localctx, 264, OParser.RULE_dict_entry);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1806; 
        localctx.key = this.expression(0);
        this.state = 1807;
        this.match(OParser.COLON);
        this.state = 1808; 
        localctx.value = this.expression(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 Slice_argumentsContext(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 = OParser.RULE_slice_arguments;
    return this;
}

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


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


function SliceFirstAndLastContext(parser, ctx) {
	Slice_argumentsContext.call(this, parser);
    this.first = null; // ExpressionContext;
    this.last = null; // ExpressionContext;
    Slice_argumentsContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SliceFirstAndLastContext.prototype = Object.create(Slice_argumentsContext.prototype);
SliceFirstAndLastContext.prototype.constructor = SliceFirstAndLastContext;

SliceFirstAndLastContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

SliceFirstAndLastContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};
SliceFirstAndLastContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSliceFirstAndLast(this);
	}
};

SliceFirstAndLastContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSliceFirstAndLast(this);
	}
};


function SliceLastOnlyContext(parser, ctx) {
	Slice_argumentsContext.call(this, parser);
    this.last = null; // ExpressionContext;
    Slice_argumentsContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SliceLastOnlyContext.prototype = Object.create(Slice_argumentsContext.prototype);
SliceLastOnlyContext.prototype.constructor = SliceLastOnlyContext;

SliceLastOnlyContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

SliceLastOnlyContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
SliceLastOnlyContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSliceLastOnly(this);
	}
};

SliceLastOnlyContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSliceLastOnly(this);
	}
};


function SliceFirstOnlyContext(parser, ctx) {
	Slice_argumentsContext.call(this, parser);
    this.first = null; // ExpressionContext;
    Slice_argumentsContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SliceFirstOnlyContext.prototype = Object.create(Slice_argumentsContext.prototype);
SliceFirstOnlyContext.prototype.constructor = SliceFirstOnlyContext;

SliceFirstOnlyContext.prototype.COLON = function() {
    return this.getToken(OParser.COLON, 0);
};

SliceFirstOnlyContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
SliceFirstOnlyContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSliceFirstOnly(this);
	}
};

SliceFirstOnlyContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSliceFirstOnly(this);
	}
};



OParser.prototype.slice_arguments = function() {

    var localctx = new Slice_argumentsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 266, OParser.RULE_slice_arguments);
    try {
        this.state = 1819;
        var la_ = this._interp.adaptivePredict(this._input,155,this._ctx);
        switch(la_) {
        case 1:
            localctx = new SliceFirstAndLastContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1810; 
            localctx.first = this.expression(0);
            this.state = 1811;
            this.match(OParser.COLON);
            this.state = 1812; 
            localctx.last = this.expression(0);
            break;

        case 2:
            localctx = new SliceFirstOnlyContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1814; 
            localctx.first = this.expression(0);
            this.state = 1815;
            this.match(OParser.COLON);
            break;

        case 3:
            localctx = new SliceLastOnlyContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1817;
            this.match(OParser.COLON);
            this.state = 1818; 
            localctx.last = this.expression(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 Assign_variable_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 = OParser.RULE_assign_variable_statement;
    return this;
}

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

Assign_variable_statementContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};

Assign_variable_statementContext.prototype.assign = function() {
    return this.getTypedRuleContext(AssignContext,0);
};

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

Assign_variable_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAssign_variable_statement(this);
	}
};

Assign_variable_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAssign_variable_statement(this);
	}
};




OParser.prototype.assign_variable_statement = function() {

    var localctx = new Assign_variable_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 268, OParser.RULE_assign_variable_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1821; 
        this.variable_identifier();
        this.state = 1822; 
        this.assign();
        this.state = 1823; 
        this.expression(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 Assignable_instanceContext(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 = OParser.RULE_assignable_instance;
    return this;
}

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


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

function ChildInstanceContext(parser, ctx) {
	Assignable_instanceContext.call(this, parser);
    Assignable_instanceContext.prototype.copyFrom.call(this, ctx);
    return this;
}

ChildInstanceContext.prototype = Object.create(Assignable_instanceContext.prototype);
ChildInstanceContext.prototype.constructor = ChildInstanceContext;

ChildInstanceContext.prototype.assignable_instance = function() {
    return this.getTypedRuleContext(Assignable_instanceContext,0);
};

ChildInstanceContext.prototype.child_instance = function() {
    return this.getTypedRuleContext(Child_instanceContext,0);
};
ChildInstanceContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterChildInstance(this);
	}
};

ChildInstanceContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitChildInstance(this);
	}
};


function RootInstanceContext(parser, ctx) {
	Assignable_instanceContext.call(this, parser);
    Assignable_instanceContext.prototype.copyFrom.call(this, ctx);
    return this;
}

RootInstanceContext.prototype = Object.create(Assignable_instanceContext.prototype);
RootInstanceContext.prototype.constructor = RootInstanceContext;

RootInstanceContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
RootInstanceContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterRootInstance(this);
	}
};

RootInstanceContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitRootInstance(this);
	}
};



OParser.prototype.assignable_instance = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Assignable_instanceContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 270;
    this.enterRecursionRule(localctx, 270, OParser.RULE_assignable_instance, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new RootInstanceContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1826; 
        this.variable_identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1832;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,156,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new ChildInstanceContext(this, new Assignable_instanceContext(this, _parentctx, _parentState));
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_assignable_instance);
                this.state = 1828;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1829; 
                this.child_instance(); 
            }
            this.state = 1834;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,156,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 Is_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 = OParser.RULE_is_expression;
    return this;
}

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


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


function IsATypeExpressionContext(parser, ctx) {
	Is_expressionContext.call(this, parser);
    Is_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IsATypeExpressionContext.prototype = Object.create(Is_expressionContext.prototype);
IsATypeExpressionContext.prototype.constructor = IsATypeExpressionContext;

IsATypeExpressionContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

IsATypeExpressionContext.prototype.category_or_any_type = function() {
    return this.getTypedRuleContext(Category_or_any_typeContext,0);
};
IsATypeExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIsATypeExpression(this);
	}
};

IsATypeExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIsATypeExpression(this);
	}
};


function IsOtherExpressionContext(parser, ctx) {
	Is_expressionContext.call(this, parser);
    Is_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

IsOtherExpressionContext.prototype = Object.create(Is_expressionContext.prototype);
IsOtherExpressionContext.prototype.constructor = IsOtherExpressionContext;

IsOtherExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
IsOtherExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIsOtherExpression(this);
	}
};

IsOtherExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIsOtherExpression(this);
	}
};



OParser.prototype.is_expression = function() {

    var localctx = new Is_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 272, OParser.RULE_is_expression);
    try {
        this.state = 1839;
        var la_ = this._interp.adaptivePredict(this._input,157,this._ctx);
        switch(la_) {
        case 1:
            localctx = new IsATypeExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1835;
            if (!( this.willBeAOrAn())) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.willBeAOrAn()");
            }
            this.state = 1836;
            this.match(OParser.VARIABLE_IDENTIFIER);
            this.state = 1837; 
            this.category_or_any_type();
            break;

        case 2:
            localctx = new IsOtherExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1838; 
            this.expression(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 Read_all_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 = OParser.RULE_read_all_expression;
    this.source = null; // ExpressionContext
    return this;
}

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

Read_all_expressionContext.prototype.READ = function() {
    return this.getToken(OParser.READ, 0);
};

Read_all_expressionContext.prototype.ALL = function() {
    return this.getToken(OParser.ALL, 0);
};

Read_all_expressionContext.prototype.FROM = function() {
    return this.getToken(OParser.FROM, 0);
};

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

Read_all_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterRead_all_expression(this);
	}
};

Read_all_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitRead_all_expression(this);
	}
};




OParser.prototype.read_all_expression = function() {

    var localctx = new Read_all_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 274, OParser.RULE_read_all_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1841;
        this.match(OParser.READ);
        this.state = 1842;
        this.match(OParser.ALL);
        this.state = 1843;
        this.match(OParser.FROM);
        this.state = 1844; 
        localctx.source = this.expression(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 Read_one_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 = OParser.RULE_read_one_expression;
    this.source = null; // ExpressionContext
    return this;
}

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

Read_one_expressionContext.prototype.READ = function() {
    return this.getToken(OParser.READ, 0);
};

Read_one_expressionContext.prototype.ONE = function() {
    return this.getToken(OParser.ONE, 0);
};

Read_one_expressionContext.prototype.FROM = function() {
    return this.getToken(OParser.FROM, 0);
};

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

Read_one_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterRead_one_expression(this);
	}
};

Read_one_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitRead_one_expression(this);
	}
};




OParser.prototype.read_one_expression = function() {

    var localctx = new Read_one_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 276, OParser.RULE_read_one_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1846;
        this.match(OParser.READ);
        this.state = 1847;
        this.match(OParser.ONE);
        this.state = 1848;
        this.match(OParser.FROM);
        this.state = 1849; 
        localctx.source = this.expression(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 Order_by_listContext(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 = OParser.RULE_order_by_list;
    return this;
}

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

Order_by_listContext.prototype.order_by = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Order_byContext);
    } else {
        return this.getTypedRuleContext(Order_byContext,i);
    }
};

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


Order_by_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOrder_by_list(this);
	}
};

Order_by_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOrder_by_list(this);
	}
};




OParser.prototype.order_by_list = function() {

    var localctx = new Order_by_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 278, OParser.RULE_order_by_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1851; 
        this.order_by();
        this.state = 1856;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.COMMA) {
            this.state = 1852;
            this.match(OParser.COMMA);
            this.state = 1853; 
            this.order_by();
            this.state = 1858;
            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 Order_byContext(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 = OParser.RULE_order_by;
    return this;
}

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

Order_byContext.prototype.variable_identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Variable_identifierContext);
    } else {
        return this.getTypedRuleContext(Variable_identifierContext,i);
    }
};

Order_byContext.prototype.DOT = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(OParser.DOT);
    } else {
        return this.getToken(OParser.DOT, i);
    }
};


Order_byContext.prototype.ASC = function() {
    return this.getToken(OParser.ASC, 0);
};

Order_byContext.prototype.DESC = function() {
    return this.getToken(OParser.DESC, 0);
};

Order_byContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOrder_by(this);
	}
};

Order_byContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOrder_by(this);
	}
};




OParser.prototype.order_by = function() {

    var localctx = new Order_byContext(this, this._ctx, this.state);
    this.enterRule(localctx, 280, OParser.RULE_order_by);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1859; 
        this.variable_identifier();
        this.state = 1864;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===OParser.DOT) {
            this.state = 1860;
            this.match(OParser.DOT);
            this.state = 1861; 
            this.variable_identifier();
            this.state = 1866;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1868;
        _la = this._input.LA(1);
        if(_la===OParser.ASC || _la===OParser.DESC) {
            this.state = 1867;
            _la = this._input.LA(1);
            if(!(_la===OParser.ASC || _la===OParser.DESC)) {
            this._errHandler.recoverInline(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 OperatorContext(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 = OParser.RULE_operator;
    return this;
}

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


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


function OperatorPlusContext(parser, ctx) {
	OperatorContext.call(this, parser);
    OperatorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

OperatorPlusContext.prototype = Object.create(OperatorContext.prototype);
OperatorPlusContext.prototype.constructor = OperatorPlusContext;

OperatorPlusContext.prototype.PLUS = function() {
    return this.getToken(OParser.PLUS, 0);
};
OperatorPlusContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOperatorPlus(this);
	}
};

OperatorPlusContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOperatorPlus(this);
	}
};


function OperatorDivideContext(parser, ctx) {
	OperatorContext.call(this, parser);
    OperatorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

OperatorDivideContext.prototype = Object.create(OperatorContext.prototype);
OperatorDivideContext.prototype.constructor = OperatorDivideContext;

OperatorDivideContext.prototype.divide = function() {
    return this.getTypedRuleContext(DivideContext,0);
};
OperatorDivideContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOperatorDivide(this);
	}
};

OperatorDivideContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOperatorDivide(this);
	}
};


function OperatorIDivideContext(parser, ctx) {
	OperatorContext.call(this, parser);
    OperatorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

OperatorIDivideContext.prototype = Object.create(OperatorContext.prototype);
OperatorIDivideContext.prototype.constructor = OperatorIDivideContext;

OperatorIDivideContext.prototype.idivide = function() {
    return this.getTypedRuleContext(IdivideContext,0);
};
OperatorIDivideContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOperatorIDivide(this);
	}
};

OperatorIDivideContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOperatorIDivide(this);
	}
};


function OperatorMultiplyContext(parser, ctx) {
	OperatorContext.call(this, parser);
    OperatorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

OperatorMultiplyContext.prototype = Object.create(OperatorContext.prototype);
OperatorMultiplyContext.prototype.constructor = OperatorMultiplyContext;

OperatorMultiplyContext.prototype.multiply = function() {
    return this.getTypedRuleContext(MultiplyContext,0);
};
OperatorMultiplyContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOperatorMultiply(this);
	}
};

OperatorMultiplyContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOperatorMultiply(this);
	}
};


function OperatorMinusContext(parser, ctx) {
	OperatorContext.call(this, parser);
    OperatorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

OperatorMinusContext.prototype = Object.create(OperatorContext.prototype);
OperatorMinusContext.prototype.constructor = OperatorMinusContext;

OperatorMinusContext.prototype.MINUS = function() {
    return this.getToken(OParser.MINUS, 0);
};
OperatorMinusContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOperatorMinus(this);
	}
};

OperatorMinusContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOperatorMinus(this);
	}
};


function OperatorModuloContext(parser, ctx) {
	OperatorContext.call(this, parser);
    OperatorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

OperatorModuloContext.prototype = Object.create(OperatorContext.prototype);
OperatorModuloContext.prototype.constructor = OperatorModuloContext;

OperatorModuloContext.prototype.modulo = function() {
    return this.getTypedRuleContext(ModuloContext,0);
};
OperatorModuloContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterOperatorModulo(this);
	}
};

OperatorModuloContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitOperatorModulo(this);
	}
};



OParser.prototype.operator = function() {

    var localctx = new OperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 282, OParser.RULE_operator);
    try {
        this.state = 1876;
        switch(this._input.LA(1)) {
        case OParser.PLUS:
            localctx = new OperatorPlusContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1870;
            this.match(OParser.PLUS);
            break;
        case OParser.MINUS:
            localctx = new OperatorMinusContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1871;
            this.match(OParser.MINUS);
            break;
        case OParser.STAR:
            localctx = new OperatorMultiplyContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1872; 
            this.multiply();
            break;
        case OParser.SLASH:
            localctx = new OperatorDivideContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1873; 
            this.divide();
            break;
        case OParser.BSLASH:
            localctx = new OperatorIDivideContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1874; 
            this.idivide();
            break;
        case OParser.PERCENT:
        case OParser.MODULO:
            localctx = new OperatorModuloContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 1875; 
            this.modulo();
            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 New_tokenContext(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 = OParser.RULE_new_token;
    this.i1 = null; // Token
    return this;
}

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

New_tokenContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

New_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterNew_token(this);
	}
};

New_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitNew_token(this);
	}
};




OParser.prototype.new_token = function() {

    var localctx = new New_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 284, OParser.RULE_new_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1878;
        localctx.i1 = this.match(OParser.VARIABLE_IDENTIFIER);
        this.state = 1879;
        if (!( this.isText(localctx.i1,"new"))) {
            throw new antlr4.error.FailedPredicateException(this, "$parser.isText($i1,\"new\")");
        }
    } 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 Key_tokenContext(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 = OParser.RULE_key_token;
    this.i1 = null; // Token
    return this;
}

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

Key_tokenContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Key_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterKey_token(this);
	}
};

Key_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitKey_token(this);
	}
};




OParser.prototype.key_token = function() {

    var localctx = new Key_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 286, OParser.RULE_key_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1881;
        localctx.i1 = this.match(OParser.VARIABLE_IDENTIFIER);
        this.state = 1882;
        if (!( this.isText(localctx.i1,"key"))) {
            throw new antlr4.error.FailedPredicateException(this, "$parser.isText($i1,\"key\")");
        }
    } 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 Module_tokenContext(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 = OParser.RULE_module_token;
    this.i1 = null; // Token
    return this;
}

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

Module_tokenContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Module_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterModule_token(this);
	}
};

Module_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitModule_token(this);
	}
};




OParser.prototype.module_token = function() {

    var localctx = new Module_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 288, OParser.RULE_module_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1884;
        localctx.i1 = this.match(OParser.VARIABLE_IDENTIFIER);
        this.state = 1885;
        if (!( this.isText(localctx.i1,"module"))) {
            throw new antlr4.error.FailedPredicateException(this, "$parser.isText($i1,\"module\")");
        }
    } 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 Value_tokenContext(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 = OParser.RULE_value_token;
    this.i1 = null; // Token
    return this;
}

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

Value_tokenContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Value_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterValue_token(this);
	}
};

Value_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitValue_token(this);
	}
};




OParser.prototype.value_token = function() {

    var localctx = new Value_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 290, OParser.RULE_value_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1887;
        localctx.i1 = this.match(OParser.VARIABLE_IDENTIFIER);
        this.state = 1888;
        if (!( this.isText(localctx.i1,"value"))) {
            throw new antlr4.error.FailedPredicateException(this, "$parser.isText($i1,\"value\")");
        }
    } 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 Symbols_tokenContext(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 = OParser.RULE_symbols_token;
    this.i1 = null; // Token
    return this;
}

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

Symbols_tokenContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Symbols_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterSymbols_token(this);
	}
};

Symbols_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitSymbols_token(this);
	}
};




OParser.prototype.symbols_token = function() {

    var localctx = new Symbols_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 292, OParser.RULE_symbols_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1890;
        localctx.i1 = this.match(OParser.VARIABLE_IDENTIFIER);
        this.state = 1891;
        if (!( this.isText(localctx.i1,"symbols"))) {
            throw new antlr4.error.FailedPredicateException(this, "$parser.isText($i1,\"symbols\")");
        }
    } 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 AssignContext(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 = OParser.RULE_assign;
    return this;
}

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

AssignContext.prototype.EQ = function() {
    return this.getToken(OParser.EQ, 0);
};

AssignContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterAssign(this);
	}
};

AssignContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitAssign(this);
	}
};




OParser.prototype.assign = function() {

    var localctx = new AssignContext(this, this._ctx, this.state);
    this.enterRule(localctx, 294, OParser.RULE_assign);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1893;
        this.match(OParser.EQ);
    } 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 MultiplyContext(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 = OParser.RULE_multiply;
    return this;
}

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

MultiplyContext.prototype.STAR = function() {
    return this.getToken(OParser.STAR, 0);
};

MultiplyContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterMultiply(this);
	}
};

MultiplyContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitMultiply(this);
	}
};




OParser.prototype.multiply = function() {

    var localctx = new MultiplyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 296, OParser.RULE_multiply);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1895;
        this.match(OParser.STAR);
    } 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 DivideContext(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 = OParser.RULE_divide;
    return this;
}

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

DivideContext.prototype.SLASH = function() {
    return this.getToken(OParser.SLASH, 0);
};

DivideContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterDivide(this);
	}
};

DivideContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitDivide(this);
	}
};




OParser.prototype.divide = function() {

    var localctx = new DivideContext(this, this._ctx, this.state);
    this.enterRule(localctx, 298, OParser.RULE_divide);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1897;
        this.match(OParser.SLASH);
    } 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 IdivideContext(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 = OParser.RULE_idivide;
    return this;
}

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

IdivideContext.prototype.BSLASH = function() {
    return this.getToken(OParser.BSLASH, 0);
};

IdivideContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterIdivide(this);
	}
};

IdivideContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitIdivide(this);
	}
};




OParser.prototype.idivide = function() {

    var localctx = new IdivideContext(this, this._ctx, this.state);
    this.enterRule(localctx, 300, OParser.RULE_idivide);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1899;
        this.match(OParser.BSLASH);
    } 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 ModuloContext(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 = OParser.RULE_modulo;
    return this;
}

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

ModuloContext.prototype.PERCENT = function() {
    return this.getToken(OParser.PERCENT, 0);
};

ModuloContext.prototype.MODULO = function() {
    return this.getToken(OParser.MODULO, 0);
};

ModuloContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterModulo(this);
	}
};

ModuloContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitModulo(this);
	}
};




OParser.prototype.modulo = function() {

    var localctx = new ModuloContext(this, this._ctx, this.state);
    this.enterRule(localctx, 302, OParser.RULE_modulo);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1901;
        _la = this._input.LA(1);
        if(!(_la===OParser.PERCENT || _la===OParser.MODULO)) {
        this._errHandler.recoverInline(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 LfsContext(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 = OParser.RULE_lfs;
    return this;
}

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


LfsContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLfs(this);
	}
};

LfsContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLfs(this);
	}
};




OParser.prototype.lfs = function() {

    var localctx = new LfsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 304, OParser.RULE_lfs);
    try {
        this.enterOuterAlt(localctx, 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 LfpContext(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 = OParser.RULE_lfp;
    return this;
}

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


LfpContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterLfp(this);
	}
};

LfpContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitLfp(this);
	}
};




OParser.prototype.lfp = function() {

    var localctx = new LfpContext(this, this._ctx, this.state);
    this.enterRule(localctx, 306, OParser.RULE_lfp);
    try {
        this.enterOuterAlt(localctx, 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 Javascript_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 = OParser.RULE_javascript_statement;
    return this;
}

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


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


function JavascriptStatementContext(parser, ctx) {
	Javascript_statementContext.call(this, parser);
    this.exp = null; // Javascript_expressionContext;
    Javascript_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptStatementContext.prototype = Object.create(Javascript_statementContext.prototype);
JavascriptStatementContext.prototype.constructor = JavascriptStatementContext;

JavascriptStatementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

JavascriptStatementContext.prototype.javascript_expression = function() {
    return this.getTypedRuleContext(Javascript_expressionContext,0);
};
JavascriptStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptStatement(this);
	}
};

JavascriptStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptStatement(this);
	}
};


function JavascriptReturnStatementContext(parser, ctx) {
	Javascript_statementContext.call(this, parser);
    this.exp = null; // Javascript_expressionContext;
    Javascript_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptReturnStatementContext.prototype = Object.create(Javascript_statementContext.prototype);
JavascriptReturnStatementContext.prototype.constructor = JavascriptReturnStatementContext;

JavascriptReturnStatementContext.prototype.RETURN = function() {
    return this.getToken(OParser.RETURN, 0);
};

JavascriptReturnStatementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

JavascriptReturnStatementContext.prototype.javascript_expression = function() {
    return this.getTypedRuleContext(Javascript_expressionContext,0);
};
JavascriptReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptReturnStatement(this);
	}
};

JavascriptReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptReturnStatement(this);
	}
};



OParser.prototype.javascript_statement = function() {

    var localctx = new Javascript_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 308, OParser.RULE_javascript_statement);
    try {
        this.state = 1914;
        switch(this._input.LA(1)) {
        case OParser.RETURN:
            localctx = new JavascriptReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1907;
            this.match(OParser.RETURN);
            this.state = 1908; 
            localctx.exp = this.javascript_expression(0);
            this.state = 1909;
            this.match(OParser.SEMI);
            break;
        case OParser.LPAR:
        case OParser.LBRAK:
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.READ:
        case OParser.SELF:
        case OParser.TEST:
        case OParser.THIS:
        case OParser.WRITE:
        case OParser.BOOLEAN_LITERAL:
        case OParser.CHAR_LITERAL:
        case OParser.SYMBOL_IDENTIFIER:
        case OParser.TYPE_IDENTIFIER:
        case OParser.VARIABLE_IDENTIFIER:
        case OParser.DOLLAR_IDENTIFIER:
        case OParser.TEXT_LITERAL:
        case OParser.INTEGER_LITERAL:
        case OParser.DECIMAL_LITERAL:
            localctx = new JavascriptStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1911; 
            localctx.exp = this.javascript_expression(0);
            this.state = 1912;
            this.match(OParser.SEMI);
            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 Javascript_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 = OParser.RULE_javascript_expression;
    return this;
}

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


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

function JavascriptSelectorExpressionContext(parser, ctx) {
	Javascript_expressionContext.call(this, parser);
    this.parent = null; // Javascript_expressionContext;
    this.child = null; // Javascript_selector_expressionContext;
    Javascript_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptSelectorExpressionContext.prototype = Object.create(Javascript_expressionContext.prototype);
JavascriptSelectorExpressionContext.prototype.constructor = JavascriptSelectorExpressionContext;

JavascriptSelectorExpressionContext.prototype.javascript_expression = function() {
    return this.getTypedRuleContext(Javascript_expressionContext,0);
};

JavascriptSelectorExpressionContext.prototype.javascript_selector_expression = function() {
    return this.getTypedRuleContext(Javascript_selector_expressionContext,0);
};
JavascriptSelectorExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptSelectorExpression(this);
	}
};

JavascriptSelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptSelectorExpression(this);
	}
};


function JavascriptPrimaryExpressionContext(parser, ctx) {
	Javascript_expressionContext.call(this, parser);
    this.exp = null; // Javascript_primary_expressionContext;
    Javascript_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptPrimaryExpressionContext.prototype = Object.create(Javascript_expressionContext.prototype);
JavascriptPrimaryExpressionContext.prototype.constructor = JavascriptPrimaryExpressionContext;

JavascriptPrimaryExpressionContext.prototype.javascript_primary_expression = function() {
    return this.getTypedRuleContext(Javascript_primary_expressionContext,0);
};
JavascriptPrimaryExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptPrimaryExpression(this);
	}
};

JavascriptPrimaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptPrimaryExpression(this);
	}
};



OParser.prototype.javascript_expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Javascript_expressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 310;
    this.enterRecursionRule(localctx, 310, OParser.RULE_javascript_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavascriptPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1917; 
        localctx.exp = this.javascript_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1923;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,163,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new JavascriptSelectorExpressionContext(this, new Javascript_expressionContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_javascript_expression);
                this.state = 1919;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1920; 
                localctx.child = this.javascript_selector_expression(); 
            }
            this.state = 1925;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,163,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 Javascript_primary_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 = OParser.RULE_javascript_primary_expression;
    return this;
}

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

Javascript_primary_expressionContext.prototype.javascript_this_expression = function() {
    return this.getTypedRuleContext(Javascript_this_expressionContext,0);
};

Javascript_primary_expressionContext.prototype.javascript_new_expression = function() {
    return this.getTypedRuleContext(Javascript_new_expressionContext,0);
};

Javascript_primary_expressionContext.prototype.javascript_parenthesis_expression = function() {
    return this.getTypedRuleContext(Javascript_parenthesis_expressionContext,0);
};

Javascript_primary_expressionContext.prototype.javascript_identifier_expression = function() {
    return this.getTypedRuleContext(Javascript_identifier_expressionContext,0);
};

Javascript_primary_expressionContext.prototype.javascript_literal_expression = function() {
    return this.getTypedRuleContext(Javascript_literal_expressionContext,0);
};

Javascript_primary_expressionContext.prototype.javascript_method_expression = function() {
    return this.getTypedRuleContext(Javascript_method_expressionContext,0);
};

Javascript_primary_expressionContext.prototype.javascript_item_expression = function() {
    return this.getTypedRuleContext(Javascript_item_expressionContext,0);
};

Javascript_primary_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_primary_expression(this);
	}
};

Javascript_primary_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_primary_expression(this);
	}
};




OParser.prototype.javascript_primary_expression = function() {

    var localctx = new Javascript_primary_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 312, OParser.RULE_javascript_primary_expression);
    try {
        this.state = 1933;
        var la_ = this._interp.adaptivePredict(this._input,164,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1926; 
            this.javascript_this_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1927; 
            this.javascript_new_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1928; 
            this.javascript_parenthesis_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1929; 
            this.javascript_identifier_expression();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1930; 
            this.javascript_literal_expression();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1931; 
            this.javascript_method_expression();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 1932; 
            this.javascript_item_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 Javascript_this_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 = OParser.RULE_javascript_this_expression;
    return this;
}

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

Javascript_this_expressionContext.prototype.this_expression = function() {
    return this.getTypedRuleContext(This_expressionContext,0);
};

Javascript_this_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_this_expression(this);
	}
};

Javascript_this_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_this_expression(this);
	}
};




OParser.prototype.javascript_this_expression = function() {

    var localctx = new Javascript_this_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 314, OParser.RULE_javascript_this_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1935; 
        this.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 Javascript_new_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 = OParser.RULE_javascript_new_expression;
    return this;
}

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

Javascript_new_expressionContext.prototype.new_token = function() {
    return this.getTypedRuleContext(New_tokenContext,0);
};

Javascript_new_expressionContext.prototype.javascript_method_expression = function() {
    return this.getTypedRuleContext(Javascript_method_expressionContext,0);
};

Javascript_new_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_new_expression(this);
	}
};

Javascript_new_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_new_expression(this);
	}
};




OParser.prototype.javascript_new_expression = function() {

    var localctx = new Javascript_new_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 316, OParser.RULE_javascript_new_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1937; 
        this.new_token();
        this.state = 1938; 
        this.javascript_method_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 Javascript_selector_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 = OParser.RULE_javascript_selector_expression;
    return this;
}

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


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


function JavaScriptMemberExpressionContext(parser, ctx) {
	Javascript_selector_expressionContext.call(this, parser);
    this.name = null; // Javascript_identifierContext;
    Javascript_selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaScriptMemberExpressionContext.prototype = Object.create(Javascript_selector_expressionContext.prototype);
JavaScriptMemberExpressionContext.prototype.constructor = JavaScriptMemberExpressionContext;

JavaScriptMemberExpressionContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

JavaScriptMemberExpressionContext.prototype.javascript_identifier = function() {
    return this.getTypedRuleContext(Javascript_identifierContext,0);
};
JavaScriptMemberExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaScriptMemberExpression(this);
	}
};

JavaScriptMemberExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaScriptMemberExpression(this);
	}
};


function JavaScriptItemExpressionContext(parser, ctx) {
	Javascript_selector_expressionContext.call(this, parser);
    this.exp = null; // Javascript_item_expressionContext;
    Javascript_selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaScriptItemExpressionContext.prototype = Object.create(Javascript_selector_expressionContext.prototype);
JavaScriptItemExpressionContext.prototype.constructor = JavaScriptItemExpressionContext;

JavaScriptItemExpressionContext.prototype.javascript_item_expression = function() {
    return this.getTypedRuleContext(Javascript_item_expressionContext,0);
};
JavaScriptItemExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaScriptItemExpression(this);
	}
};

JavaScriptItemExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaScriptItemExpression(this);
	}
};


function JavaScriptMethodExpressionContext(parser, ctx) {
	Javascript_selector_expressionContext.call(this, parser);
    this.method = null; // Javascript_method_expressionContext;
    Javascript_selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaScriptMethodExpressionContext.prototype = Object.create(Javascript_selector_expressionContext.prototype);
JavaScriptMethodExpressionContext.prototype.constructor = JavaScriptMethodExpressionContext;

JavaScriptMethodExpressionContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

JavaScriptMethodExpressionContext.prototype.javascript_method_expression = function() {
    return this.getTypedRuleContext(Javascript_method_expressionContext,0);
};
JavaScriptMethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaScriptMethodExpression(this);
	}
};

JavaScriptMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaScriptMethodExpression(this);
	}
};



OParser.prototype.javascript_selector_expression = function() {

    var localctx = new Javascript_selector_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 318, OParser.RULE_javascript_selector_expression);
    try {
        this.state = 1945;
        var la_ = this._interp.adaptivePredict(this._input,165,this._ctx);
        switch(la_) {
        case 1:
            localctx = new JavaScriptMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1940;
            this.match(OParser.DOT);
            this.state = 1941; 
            localctx.method = this.javascript_method_expression();
            break;

        case 2:
            localctx = new JavaScriptMemberExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1942;
            this.match(OParser.DOT);
            this.state = 1943; 
            localctx.name = this.javascript_identifier();
            break;

        case 3:
            localctx = new JavaScriptItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1944; 
            localctx.exp = this.javascript_item_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 Javascript_method_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 = OParser.RULE_javascript_method_expression;
    this.name = null; // Javascript_identifierContext
    this.args = null; // Javascript_argumentsContext
    return this;
}

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

Javascript_method_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Javascript_method_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Javascript_method_expressionContext.prototype.javascript_identifier = function() {
    return this.getTypedRuleContext(Javascript_identifierContext,0);
};

Javascript_method_expressionContext.prototype.javascript_arguments = function() {
    return this.getTypedRuleContext(Javascript_argumentsContext,0);
};

Javascript_method_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_method_expression(this);
	}
};

Javascript_method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_method_expression(this);
	}
};




OParser.prototype.javascript_method_expression = function() {

    var localctx = new Javascript_method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 320, OParser.RULE_javascript_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1947; 
        localctx.name = this.javascript_identifier();
        this.state = 1948;
        this.match(OParser.LPAR);
        this.state = 1950;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR || _la===OParser.LBRAK || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.TEST - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.WRITE - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 160)) & ~0x1f) == 0 && ((1 << (_la - 160)) & ((1 << (OParser.DOLLAR_IDENTIFIER - 160)) | (1 << (OParser.TEXT_LITERAL - 160)) | (1 << (OParser.INTEGER_LITERAL - 160)) | (1 << (OParser.DECIMAL_LITERAL - 160)))) !== 0)) {
            this.state = 1949; 
            localctx.args = this.javascript_arguments(0);
        }

        this.state = 1952;
        this.match(OParser.RPAR);
    } 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 Javascript_argumentsContext(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 = OParser.RULE_javascript_arguments;
    return this;
}

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


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

function JavascriptArgumentListContext(parser, ctx) {
	Javascript_argumentsContext.call(this, parser);
    this.item = null; // Javascript_expressionContext;
    Javascript_argumentsContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptArgumentListContext.prototype = Object.create(Javascript_argumentsContext.prototype);
JavascriptArgumentListContext.prototype.constructor = JavascriptArgumentListContext;

JavascriptArgumentListContext.prototype.javascript_expression = function() {
    return this.getTypedRuleContext(Javascript_expressionContext,0);
};
JavascriptArgumentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptArgumentList(this);
	}
};

JavascriptArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptArgumentList(this);
	}
};


function JavascriptArgumentListItemContext(parser, ctx) {
	Javascript_argumentsContext.call(this, parser);
    this.items = null; // Javascript_argumentsContext;
    this.item = null; // Javascript_expressionContext;
    Javascript_argumentsContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptArgumentListItemContext.prototype = Object.create(Javascript_argumentsContext.prototype);
JavascriptArgumentListItemContext.prototype.constructor = JavascriptArgumentListItemContext;

JavascriptArgumentListItemContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

JavascriptArgumentListItemContext.prototype.javascript_arguments = function() {
    return this.getTypedRuleContext(Javascript_argumentsContext,0);
};

JavascriptArgumentListItemContext.prototype.javascript_expression = function() {
    return this.getTypedRuleContext(Javascript_expressionContext,0);
};
JavascriptArgumentListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptArgumentListItem(this);
	}
};

JavascriptArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptArgumentListItem(this);
	}
};



OParser.prototype.javascript_arguments = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Javascript_argumentsContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 322;
    this.enterRecursionRule(localctx, 322, OParser.RULE_javascript_arguments, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavascriptArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1955; 
        localctx.item = this.javascript_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 1962;
        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) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new JavascriptArgumentListItemContext(this, new Javascript_argumentsContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_javascript_arguments);
                this.state = 1957;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1958;
                this.match(OParser.COMMA);
                this.state = 1959; 
                localctx.item = this.javascript_expression(0); 
            }
            this.state = 1964;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,167,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 Javascript_item_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 = OParser.RULE_javascript_item_expression;
    this.exp = null; // Javascript_expressionContext
    return this;
}

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

Javascript_item_expressionContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

Javascript_item_expressionContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

Javascript_item_expressionContext.prototype.javascript_expression = function() {
    return this.getTypedRuleContext(Javascript_expressionContext,0);
};

Javascript_item_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_item_expression(this);
	}
};

Javascript_item_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_item_expression(this);
	}
};




OParser.prototype.javascript_item_expression = function() {

    var localctx = new Javascript_item_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 324, OParser.RULE_javascript_item_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1965;
        this.match(OParser.LBRAK);
        this.state = 1966; 
        localctx.exp = this.javascript_expression(0);
        this.state = 1967;
        this.match(OParser.RBRAK);
    } 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 Javascript_parenthesis_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 = OParser.RULE_javascript_parenthesis_expression;
    this.exp = null; // Javascript_expressionContext
    return this;
}

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

Javascript_parenthesis_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Javascript_parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Javascript_parenthesis_expressionContext.prototype.javascript_expression = function() {
    return this.getTypedRuleContext(Javascript_expressionContext,0);
};

Javascript_parenthesis_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_parenthesis_expression(this);
	}
};

Javascript_parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_parenthesis_expression(this);
	}
};




OParser.prototype.javascript_parenthesis_expression = function() {

    var localctx = new Javascript_parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 326, OParser.RULE_javascript_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1969;
        this.match(OParser.LPAR);
        this.state = 1970; 
        localctx.exp = this.javascript_expression(0);
        this.state = 1971;
        this.match(OParser.RPAR);
    } 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 Javascript_identifier_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 = OParser.RULE_javascript_identifier_expression;
    this.name = null; // Javascript_identifierContext
    return this;
}

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

Javascript_identifier_expressionContext.prototype.javascript_identifier = function() {
    return this.getTypedRuleContext(Javascript_identifierContext,0);
};

Javascript_identifier_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_identifier_expression(this);
	}
};

Javascript_identifier_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_identifier_expression(this);
	}
};




OParser.prototype.javascript_identifier_expression = function() {

    var localctx = new Javascript_identifier_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 328, OParser.RULE_javascript_identifier_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1973; 
        localctx.name = this.javascript_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 Javascript_literal_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 = OParser.RULE_javascript_literal_expression;
    return this;
}

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


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


function JavascriptIntegerLiteralContext(parser, ctx) {
	Javascript_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Javascript_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptIntegerLiteralContext.prototype = Object.create(Javascript_literal_expressionContext.prototype);
JavascriptIntegerLiteralContext.prototype.constructor = JavascriptIntegerLiteralContext;

JavascriptIntegerLiteralContext.prototype.INTEGER_LITERAL = function() {
    return this.getToken(OParser.INTEGER_LITERAL, 0);
};
JavascriptIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptIntegerLiteral(this);
	}
};

JavascriptIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptIntegerLiteral(this);
	}
};


function JavascriptBooleanLiteralContext(parser, ctx) {
	Javascript_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Javascript_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptBooleanLiteralContext.prototype = Object.create(Javascript_literal_expressionContext.prototype);
JavascriptBooleanLiteralContext.prototype.constructor = JavascriptBooleanLiteralContext;

JavascriptBooleanLiteralContext.prototype.BOOLEAN_LITERAL = function() {
    return this.getToken(OParser.BOOLEAN_LITERAL, 0);
};
JavascriptBooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptBooleanLiteral(this);
	}
};

JavascriptBooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptBooleanLiteral(this);
	}
};


function JavascriptCharacterLiteralContext(parser, ctx) {
	Javascript_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Javascript_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptCharacterLiteralContext.prototype = Object.create(Javascript_literal_expressionContext.prototype);
JavascriptCharacterLiteralContext.prototype.constructor = JavascriptCharacterLiteralContext;

JavascriptCharacterLiteralContext.prototype.CHAR_LITERAL = function() {
    return this.getToken(OParser.CHAR_LITERAL, 0);
};
JavascriptCharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptCharacterLiteral(this);
	}
};

JavascriptCharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptCharacterLiteral(this);
	}
};


function JavascriptTextLiteralContext(parser, ctx) {
	Javascript_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Javascript_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptTextLiteralContext.prototype = Object.create(Javascript_literal_expressionContext.prototype);
JavascriptTextLiteralContext.prototype.constructor = JavascriptTextLiteralContext;

JavascriptTextLiteralContext.prototype.TEXT_LITERAL = function() {
    return this.getToken(OParser.TEXT_LITERAL, 0);
};
JavascriptTextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptTextLiteral(this);
	}
};

JavascriptTextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptTextLiteral(this);
	}
};


function JavascriptDecimalLiteralContext(parser, ctx) {
	Javascript_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Javascript_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavascriptDecimalLiteralContext.prototype = Object.create(Javascript_literal_expressionContext.prototype);
JavascriptDecimalLiteralContext.prototype.constructor = JavascriptDecimalLiteralContext;

JavascriptDecimalLiteralContext.prototype.DECIMAL_LITERAL = function() {
    return this.getToken(OParser.DECIMAL_LITERAL, 0);
};
JavascriptDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascriptDecimalLiteral(this);
	}
};

JavascriptDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascriptDecimalLiteral(this);
	}
};



OParser.prototype.javascript_literal_expression = function() {

    var localctx = new Javascript_literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 330, OParser.RULE_javascript_literal_expression);
    try {
        this.state = 1980;
        switch(this._input.LA(1)) {
        case OParser.INTEGER_LITERAL:
            localctx = new JavascriptIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1975;
            localctx.t = this.match(OParser.INTEGER_LITERAL);
            break;
        case OParser.DECIMAL_LITERAL:
            localctx = new JavascriptDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1976;
            localctx.t = this.match(OParser.DECIMAL_LITERAL);
            break;
        case OParser.TEXT_LITERAL:
            localctx = new JavascriptTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1977;
            localctx.t = this.match(OParser.TEXT_LITERAL);
            break;
        case OParser.BOOLEAN_LITERAL:
            localctx = new JavascriptBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1978;
            localctx.t = this.match(OParser.BOOLEAN_LITERAL);
            break;
        case OParser.CHAR_LITERAL:
            localctx = new JavascriptCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1979;
            localctx.t = this.match(OParser.CHAR_LITERAL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Javascript_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 = OParser.RULE_javascript_identifier;
    return this;
}

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

Javascript_identifierContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Javascript_identifierContext.prototype.SYMBOL_IDENTIFIER = function() {
    return this.getToken(OParser.SYMBOL_IDENTIFIER, 0);
};

Javascript_identifierContext.prototype.DOLLAR_IDENTIFIER = function() {
    return this.getToken(OParser.DOLLAR_IDENTIFIER, 0);
};

Javascript_identifierContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(OParser.TYPE_IDENTIFIER, 0);
};

Javascript_identifierContext.prototype.BOOLEAN = function() {
    return this.getToken(OParser.BOOLEAN, 0);
};

Javascript_identifierContext.prototype.CHARACTER = function() {
    return this.getToken(OParser.CHARACTER, 0);
};

Javascript_identifierContext.prototype.TEXT = function() {
    return this.getToken(OParser.TEXT, 0);
};

Javascript_identifierContext.prototype.INTEGER = function() {
    return this.getToken(OParser.INTEGER, 0);
};

Javascript_identifierContext.prototype.DECIMAL = function() {
    return this.getToken(OParser.DECIMAL, 0);
};

Javascript_identifierContext.prototype.DATE = function() {
    return this.getToken(OParser.DATE, 0);
};

Javascript_identifierContext.prototype.TIME = function() {
    return this.getToken(OParser.TIME, 0);
};

Javascript_identifierContext.prototype.DATETIME = function() {
    return this.getToken(OParser.DATETIME, 0);
};

Javascript_identifierContext.prototype.PERIOD = function() {
    return this.getToken(OParser.PERIOD, 0);
};

Javascript_identifierContext.prototype.READ = function() {
    return this.getToken(OParser.READ, 0);
};

Javascript_identifierContext.prototype.WRITE = function() {
    return this.getToken(OParser.WRITE, 0);
};

Javascript_identifierContext.prototype.TEST = function() {
    return this.getToken(OParser.TEST, 0);
};

Javascript_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavascript_identifier(this);
	}
};

Javascript_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavascript_identifier(this);
	}
};




OParser.prototype.javascript_identifier = function() {

    var localctx = new Javascript_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 332, OParser.RULE_javascript_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1982;
        _la = this._input.LA(1);
        if(!(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.TEST - 128)) | (1 << (OParser.WRITE - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || _la===OParser.DOLLAR_IDENTIFIER)) {
        this._errHandler.recoverInline(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 Python_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 = OParser.RULE_python_statement;
    return this;
}

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


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


function PythonStatementContext(parser, ctx) {
	Python_statementContext.call(this, parser);
    this.exp = null; // Python_expressionContext;
    Python_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonStatementContext.prototype = Object.create(Python_statementContext.prototype);
PythonStatementContext.prototype.constructor = PythonStatementContext;

PythonStatementContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};
PythonStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonStatement(this);
	}
};

PythonStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonStatement(this);
	}
};


function PythonReturnStatementContext(parser, ctx) {
	Python_statementContext.call(this, parser);
    this.exp = null; // Python_expressionContext;
    Python_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonReturnStatementContext.prototype = Object.create(Python_statementContext.prototype);
PythonReturnStatementContext.prototype.constructor = PythonReturnStatementContext;

PythonReturnStatementContext.prototype.RETURN = function() {
    return this.getToken(OParser.RETURN, 0);
};

PythonReturnStatementContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};
PythonReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonReturnStatement(this);
	}
};

PythonReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonReturnStatement(this);
	}
};



OParser.prototype.python_statement = function() {

    var localctx = new Python_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 334, OParser.RULE_python_statement);
    try {
        this.state = 1987;
        switch(this._input.LA(1)) {
        case OParser.RETURN:
            localctx = new PythonReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1984;
            this.match(OParser.RETURN);
            this.state = 1985; 
            localctx.exp = this.python_expression(0);
            break;
        case OParser.LPAR:
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.READ:
        case OParser.SELF:
        case OParser.TEST:
        case OParser.THIS:
        case OParser.WRITE:
        case OParser.BOOLEAN_LITERAL:
        case OParser.CHAR_LITERAL:
        case OParser.SYMBOL_IDENTIFIER:
        case OParser.TYPE_IDENTIFIER:
        case OParser.VARIABLE_IDENTIFIER:
        case OParser.DOLLAR_IDENTIFIER:
        case OParser.TEXT_LITERAL:
        case OParser.INTEGER_LITERAL:
        case OParser.DECIMAL_LITERAL:
            localctx = new PythonStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1986; 
            localctx.exp = this.python_expression(0);
            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 Python_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 = OParser.RULE_python_expression;
    return this;
}

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


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

function PythonSelectorExpressionContext(parser, ctx) {
	Python_expressionContext.call(this, parser);
    this.parent = null; // Python_expressionContext;
    this.child = null; // Python_selector_expressionContext;
    Python_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonSelectorExpressionContext.prototype = Object.create(Python_expressionContext.prototype);
PythonSelectorExpressionContext.prototype.constructor = PythonSelectorExpressionContext;

PythonSelectorExpressionContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};

PythonSelectorExpressionContext.prototype.python_selector_expression = function() {
    return this.getTypedRuleContext(Python_selector_expressionContext,0);
};
PythonSelectorExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonSelectorExpression(this);
	}
};

PythonSelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonSelectorExpression(this);
	}
};


function PythonPrimaryExpressionContext(parser, ctx) {
	Python_expressionContext.call(this, parser);
    this.exp = null; // Python_primary_expressionContext;
    Python_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonPrimaryExpressionContext.prototype = Object.create(Python_expressionContext.prototype);
PythonPrimaryExpressionContext.prototype.constructor = PythonPrimaryExpressionContext;

PythonPrimaryExpressionContext.prototype.python_primary_expression = function() {
    return this.getTypedRuleContext(Python_primary_expressionContext,0);
};
PythonPrimaryExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonPrimaryExpression(this);
	}
};

PythonPrimaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonPrimaryExpression(this);
	}
};



OParser.prototype.python_expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Python_expressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 336;
    this.enterRecursionRule(localctx, 336, OParser.RULE_python_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new PythonPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1990; 
        localctx.exp = this.python_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1996;
        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) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new PythonSelectorExpressionContext(this, new Python_expressionContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_python_expression);
                this.state = 1992;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1993; 
                localctx.child = this.python_selector_expression(); 
            }
            this.state = 1998;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,170,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 Python_primary_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 = OParser.RULE_python_primary_expression;
    return this;
}

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


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


function PythonParenthesisExpressionContext(parser, ctx) {
	Python_primary_expressionContext.call(this, parser);
    this.exp = null; // Python_parenthesis_expressionContext;
    Python_primary_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonParenthesisExpressionContext.prototype = Object.create(Python_primary_expressionContext.prototype);
PythonParenthesisExpressionContext.prototype.constructor = PythonParenthesisExpressionContext;

PythonParenthesisExpressionContext.prototype.python_parenthesis_expression = function() {
    return this.getTypedRuleContext(Python_parenthesis_expressionContext,0);
};
PythonParenthesisExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonParenthesisExpression(this);
	}
};

PythonParenthesisExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonParenthesisExpression(this);
	}
};


function PythonIdentifierExpressionContext(parser, ctx) {
	Python_primary_expressionContext.call(this, parser);
    this.exp = null; // Python_identifier_expressionContext;
    Python_primary_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonIdentifierExpressionContext.prototype = Object.create(Python_primary_expressionContext.prototype);
PythonIdentifierExpressionContext.prototype.constructor = PythonIdentifierExpressionContext;

PythonIdentifierExpressionContext.prototype.python_identifier_expression = function() {
    return this.getTypedRuleContext(Python_identifier_expressionContext,0);
};
PythonIdentifierExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonIdentifierExpression(this);
	}
};

PythonIdentifierExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonIdentifierExpression(this);
	}
};


function PythonSelfExpressionContext(parser, ctx) {
	Python_primary_expressionContext.call(this, parser);
    this.exp = null; // Python_self_expressionContext;
    Python_primary_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonSelfExpressionContext.prototype = Object.create(Python_primary_expressionContext.prototype);
PythonSelfExpressionContext.prototype.constructor = PythonSelfExpressionContext;

PythonSelfExpressionContext.prototype.python_self_expression = function() {
    return this.getTypedRuleContext(Python_self_expressionContext,0);
};
PythonSelfExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonSelfExpression(this);
	}
};

PythonSelfExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonSelfExpression(this);
	}
};


function PythonLiteralExpressionContext(parser, ctx) {
	Python_primary_expressionContext.call(this, parser);
    this.exp = null; // Python_literal_expressionContext;
    Python_primary_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonLiteralExpressionContext.prototype = Object.create(Python_primary_expressionContext.prototype);
PythonLiteralExpressionContext.prototype.constructor = PythonLiteralExpressionContext;

PythonLiteralExpressionContext.prototype.python_literal_expression = function() {
    return this.getTypedRuleContext(Python_literal_expressionContext,0);
};
PythonLiteralExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonLiteralExpression(this);
	}
};

PythonLiteralExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonLiteralExpression(this);
	}
};


function PythonGlobalMethodExpressionContext(parser, ctx) {
	Python_primary_expressionContext.call(this, parser);
    this.exp = null; // Python_method_expressionContext;
    Python_primary_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonGlobalMethodExpressionContext.prototype = Object.create(Python_primary_expressionContext.prototype);
PythonGlobalMethodExpressionContext.prototype.constructor = PythonGlobalMethodExpressionContext;

PythonGlobalMethodExpressionContext.prototype.python_method_expression = function() {
    return this.getTypedRuleContext(Python_method_expressionContext,0);
};
PythonGlobalMethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonGlobalMethodExpression(this);
	}
};

PythonGlobalMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonGlobalMethodExpression(this);
	}
};



OParser.prototype.python_primary_expression = function() {

    var localctx = new Python_primary_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 338, OParser.RULE_python_primary_expression);
    try {
        this.state = 2004;
        var la_ = this._interp.adaptivePredict(this._input,171,this._ctx);
        switch(la_) {
        case 1:
            localctx = new PythonSelfExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1999; 
            localctx.exp = this.python_self_expression();
            break;

        case 2:
            localctx = new PythonParenthesisExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2000; 
            localctx.exp = this.python_parenthesis_expression();
            break;

        case 3:
            localctx = new PythonIdentifierExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2001; 
            localctx.exp = this.python_identifier_expression(0);
            break;

        case 4:
            localctx = new PythonLiteralExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2002; 
            localctx.exp = this.python_literal_expression();
            break;

        case 5:
            localctx = new PythonGlobalMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2003; 
            localctx.exp = this.python_method_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 Python_self_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 = OParser.RULE_python_self_expression;
    return this;
}

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

Python_self_expressionContext.prototype.this_expression = function() {
    return this.getTypedRuleContext(This_expressionContext,0);
};

Python_self_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython_self_expression(this);
	}
};

Python_self_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython_self_expression(this);
	}
};




OParser.prototype.python_self_expression = function() {

    var localctx = new Python_self_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 340, OParser.RULE_python_self_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2006; 
        this.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 Python_selector_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 = OParser.RULE_python_selector_expression;
    return this;
}

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


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


function PythonMethodExpressionContext(parser, ctx) {
	Python_selector_expressionContext.call(this, parser);
    this.exp = null; // Python_method_expressionContext;
    Python_selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonMethodExpressionContext.prototype = Object.create(Python_selector_expressionContext.prototype);
PythonMethodExpressionContext.prototype.constructor = PythonMethodExpressionContext;

PythonMethodExpressionContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

PythonMethodExpressionContext.prototype.python_method_expression = function() {
    return this.getTypedRuleContext(Python_method_expressionContext,0);
};
PythonMethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonMethodExpression(this);
	}
};

PythonMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonMethodExpression(this);
	}
};


function PythonItemExpressionContext(parser, ctx) {
	Python_selector_expressionContext.call(this, parser);
    this.exp = null; // Python_expressionContext;
    Python_selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonItemExpressionContext.prototype = Object.create(Python_selector_expressionContext.prototype);
PythonItemExpressionContext.prototype.constructor = PythonItemExpressionContext;

PythonItemExpressionContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

PythonItemExpressionContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

PythonItemExpressionContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};
PythonItemExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonItemExpression(this);
	}
};

PythonItemExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonItemExpression(this);
	}
};



OParser.prototype.python_selector_expression = function() {

    var localctx = new Python_selector_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 342, OParser.RULE_python_selector_expression);
    try {
        this.state = 2014;
        switch(this._input.LA(1)) {
        case OParser.DOT:
            localctx = new PythonMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2008;
            this.match(OParser.DOT);
            this.state = 2009; 
            localctx.exp = this.python_method_expression();
            break;
        case OParser.LBRAK:
            localctx = new PythonItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2010;
            this.match(OParser.LBRAK);
            this.state = 2011; 
            localctx.exp = this.python_expression(0);
            this.state = 2012;
            this.match(OParser.RBRAK);
            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 Python_method_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 = OParser.RULE_python_method_expression;
    this.name = null; // Python_identifierContext
    this.args = null; // Python_argument_listContext
    return this;
}

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

Python_method_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Python_method_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Python_method_expressionContext.prototype.python_identifier = function() {
    return this.getTypedRuleContext(Python_identifierContext,0);
};

Python_method_expressionContext.prototype.python_argument_list = function() {
    return this.getTypedRuleContext(Python_argument_listContext,0);
};

Python_method_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython_method_expression(this);
	}
};

Python_method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython_method_expression(this);
	}
};




OParser.prototype.python_method_expression = function() {

    var localctx = new Python_method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 344, OParser.RULE_python_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2016; 
        localctx.name = this.python_identifier();
        this.state = 2017;
        this.match(OParser.LPAR);
        this.state = 2019;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.TEST - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.WRITE - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 160)) & ~0x1f) == 0 && ((1 << (_la - 160)) & ((1 << (OParser.DOLLAR_IDENTIFIER - 160)) | (1 << (OParser.TEXT_LITERAL - 160)) | (1 << (OParser.INTEGER_LITERAL - 160)) | (1 << (OParser.DECIMAL_LITERAL - 160)))) !== 0)) {
            this.state = 2018; 
            localctx.args = this.python_argument_list();
        }

        this.state = 2021;
        this.match(OParser.RPAR);
    } 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 Python_argument_listContext(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 = OParser.RULE_python_argument_list;
    return this;
}

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


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


function PythonOrdinalOnlyArgumentListContext(parser, ctx) {
	Python_argument_listContext.call(this, parser);
    this.ordinal = null; // Python_ordinal_argument_listContext;
    Python_argument_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonOrdinalOnlyArgumentListContext.prototype = Object.create(Python_argument_listContext.prototype);
PythonOrdinalOnlyArgumentListContext.prototype.constructor = PythonOrdinalOnlyArgumentListContext;

PythonOrdinalOnlyArgumentListContext.prototype.python_ordinal_argument_list = function() {
    return this.getTypedRuleContext(Python_ordinal_argument_listContext,0);
};
PythonOrdinalOnlyArgumentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonOrdinalOnlyArgumentList(this);
	}
};

PythonOrdinalOnlyArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonOrdinalOnlyArgumentList(this);
	}
};


function PythonNamedOnlyArgumentListContext(parser, ctx) {
	Python_argument_listContext.call(this, parser);
    this.named = null; // Python_named_argument_listContext;
    Python_argument_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonNamedOnlyArgumentListContext.prototype = Object.create(Python_argument_listContext.prototype);
PythonNamedOnlyArgumentListContext.prototype.constructor = PythonNamedOnlyArgumentListContext;

PythonNamedOnlyArgumentListContext.prototype.python_named_argument_list = function() {
    return this.getTypedRuleContext(Python_named_argument_listContext,0);
};
PythonNamedOnlyArgumentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonNamedOnlyArgumentList(this);
	}
};

PythonNamedOnlyArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonNamedOnlyArgumentList(this);
	}
};


function PythonArgumentListContext(parser, ctx) {
	Python_argument_listContext.call(this, parser);
    this.ordinal = null; // Python_ordinal_argument_listContext;
    this.named = null; // Python_named_argument_listContext;
    Python_argument_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonArgumentListContext.prototype = Object.create(Python_argument_listContext.prototype);
PythonArgumentListContext.prototype.constructor = PythonArgumentListContext;

PythonArgumentListContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

PythonArgumentListContext.prototype.python_ordinal_argument_list = function() {
    return this.getTypedRuleContext(Python_ordinal_argument_listContext,0);
};

PythonArgumentListContext.prototype.python_named_argument_list = function() {
    return this.getTypedRuleContext(Python_named_argument_listContext,0);
};
PythonArgumentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonArgumentList(this);
	}
};

PythonArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonArgumentList(this);
	}
};



OParser.prototype.python_argument_list = function() {

    var localctx = new Python_argument_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 346, OParser.RULE_python_argument_list);
    try {
        this.state = 2029;
        var la_ = this._interp.adaptivePredict(this._input,174,this._ctx);
        switch(la_) {
        case 1:
            localctx = new PythonOrdinalOnlyArgumentListContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2023; 
            localctx.ordinal = this.python_ordinal_argument_list(0);
            break;

        case 2:
            localctx = new PythonNamedOnlyArgumentListContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2024; 
            localctx.named = this.python_named_argument_list(0);
            break;

        case 3:
            localctx = new PythonArgumentListContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2025; 
            localctx.ordinal = this.python_ordinal_argument_list(0);
            this.state = 2026;
            this.match(OParser.COMMA);
            this.state = 2027; 
            localctx.named = this.python_named_argument_list(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 Python_ordinal_argument_listContext(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 = OParser.RULE_python_ordinal_argument_list;
    return this;
}

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


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

function PythonOrdinalArgumentListContext(parser, ctx) {
	Python_ordinal_argument_listContext.call(this, parser);
    this.item = null; // Python_expressionContext;
    Python_ordinal_argument_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonOrdinalArgumentListContext.prototype = Object.create(Python_ordinal_argument_listContext.prototype);
PythonOrdinalArgumentListContext.prototype.constructor = PythonOrdinalArgumentListContext;

PythonOrdinalArgumentListContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};
PythonOrdinalArgumentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonOrdinalArgumentList(this);
	}
};

PythonOrdinalArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonOrdinalArgumentList(this);
	}
};


function PythonOrdinalArgumentListItemContext(parser, ctx) {
	Python_ordinal_argument_listContext.call(this, parser);
    this.items = null; // Python_ordinal_argument_listContext;
    this.item = null; // Python_expressionContext;
    Python_ordinal_argument_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonOrdinalArgumentListItemContext.prototype = Object.create(Python_ordinal_argument_listContext.prototype);
PythonOrdinalArgumentListItemContext.prototype.constructor = PythonOrdinalArgumentListItemContext;

PythonOrdinalArgumentListItemContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

PythonOrdinalArgumentListItemContext.prototype.python_ordinal_argument_list = function() {
    return this.getTypedRuleContext(Python_ordinal_argument_listContext,0);
};

PythonOrdinalArgumentListItemContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};
PythonOrdinalArgumentListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonOrdinalArgumentListItem(this);
	}
};

PythonOrdinalArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonOrdinalArgumentListItem(this);
	}
};



OParser.prototype.python_ordinal_argument_list = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Python_ordinal_argument_listContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 348;
    this.enterRecursionRule(localctx, 348, OParser.RULE_python_ordinal_argument_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new PythonOrdinalArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2032; 
        localctx.item = this.python_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2039;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,175,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new PythonOrdinalArgumentListItemContext(this, new Python_ordinal_argument_listContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_python_ordinal_argument_list);
                this.state = 2034;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2035;
                this.match(OParser.COMMA);
                this.state = 2036; 
                localctx.item = this.python_expression(0); 
            }
            this.state = 2041;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,175,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 Python_named_argument_listContext(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 = OParser.RULE_python_named_argument_list;
    return this;
}

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


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

function PythonNamedArgumentListContext(parser, ctx) {
	Python_named_argument_listContext.call(this, parser);
    this.name = null; // Python_identifierContext;
    this.exp = null; // Python_expressionContext;
    Python_named_argument_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonNamedArgumentListContext.prototype = Object.create(Python_named_argument_listContext.prototype);
PythonNamedArgumentListContext.prototype.constructor = PythonNamedArgumentListContext;

PythonNamedArgumentListContext.prototype.EQ = function() {
    return this.getToken(OParser.EQ, 0);
};

PythonNamedArgumentListContext.prototype.python_identifier = function() {
    return this.getTypedRuleContext(Python_identifierContext,0);
};

PythonNamedArgumentListContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};
PythonNamedArgumentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonNamedArgumentList(this);
	}
};

PythonNamedArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonNamedArgumentList(this);
	}
};


function PythonNamedArgumentListItemContext(parser, ctx) {
	Python_named_argument_listContext.call(this, parser);
    this.items = null; // Python_named_argument_listContext;
    this.name = null; // Python_identifierContext;
    this.exp = null; // Python_expressionContext;
    Python_named_argument_listContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonNamedArgumentListItemContext.prototype = Object.create(Python_named_argument_listContext.prototype);
PythonNamedArgumentListItemContext.prototype.constructor = PythonNamedArgumentListItemContext;

PythonNamedArgumentListItemContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

PythonNamedArgumentListItemContext.prototype.EQ = function() {
    return this.getToken(OParser.EQ, 0);
};

PythonNamedArgumentListItemContext.prototype.python_named_argument_list = function() {
    return this.getTypedRuleContext(Python_named_argument_listContext,0);
};

PythonNamedArgumentListItemContext.prototype.python_identifier = function() {
    return this.getTypedRuleContext(Python_identifierContext,0);
};

PythonNamedArgumentListItemContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};
PythonNamedArgumentListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonNamedArgumentListItem(this);
	}
};

PythonNamedArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonNamedArgumentListItem(this);
	}
};



OParser.prototype.python_named_argument_list = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Python_named_argument_listContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 350;
    this.enterRecursionRule(localctx, 350, OParser.RULE_python_named_argument_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new PythonNamedArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2043; 
        localctx.name = this.python_identifier();
        this.state = 2044;
        this.match(OParser.EQ);
        this.state = 2045; 
        localctx.exp = this.python_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2055;
        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) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new PythonNamedArgumentListItemContext(this, new Python_named_argument_listContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_python_named_argument_list);
                this.state = 2047;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2048;
                this.match(OParser.COMMA);
                this.state = 2049; 
                localctx.name = this.python_identifier();
                this.state = 2050;
                this.match(OParser.EQ);
                this.state = 2051; 
                localctx.exp = this.python_expression(0); 
            }
            this.state = 2057;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,176,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 Python_parenthesis_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 = OParser.RULE_python_parenthesis_expression;
    this.exp = null; // Python_expressionContext
    return this;
}

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

Python_parenthesis_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Python_parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Python_parenthesis_expressionContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};

Python_parenthesis_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython_parenthesis_expression(this);
	}
};

Python_parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython_parenthesis_expression(this);
	}
};




OParser.prototype.python_parenthesis_expression = function() {

    var localctx = new Python_parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 352, OParser.RULE_python_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2058;
        this.match(OParser.LPAR);
        this.state = 2059; 
        localctx.exp = this.python_expression(0);
        this.state = 2060;
        this.match(OParser.RPAR);
    } 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 Python_identifier_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 = OParser.RULE_python_identifier_expression;
    return this;
}

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


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

function PythonChildIdentifierContext(parser, ctx) {
	Python_identifier_expressionContext.call(this, parser);
    this.parent = null; // Python_identifier_expressionContext;
    this.name = null; // Python_identifierContext;
    Python_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonChildIdentifierContext.prototype = Object.create(Python_identifier_expressionContext.prototype);
PythonChildIdentifierContext.prototype.constructor = PythonChildIdentifierContext;

PythonChildIdentifierContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

PythonChildIdentifierContext.prototype.python_identifier_expression = function() {
    return this.getTypedRuleContext(Python_identifier_expressionContext,0);
};

PythonChildIdentifierContext.prototype.python_identifier = function() {
    return this.getTypedRuleContext(Python_identifierContext,0);
};
PythonChildIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonChildIdentifier(this);
	}
};

PythonChildIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonChildIdentifier(this);
	}
};


function PythonPromptoIdentifierContext(parser, ctx) {
	Python_identifier_expressionContext.call(this, parser);
    Python_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonPromptoIdentifierContext.prototype = Object.create(Python_identifier_expressionContext.prototype);
PythonPromptoIdentifierContext.prototype.constructor = PythonPromptoIdentifierContext;

PythonPromptoIdentifierContext.prototype.DOLLAR_IDENTIFIER = function() {
    return this.getToken(OParser.DOLLAR_IDENTIFIER, 0);
};
PythonPromptoIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonPromptoIdentifier(this);
	}
};

PythonPromptoIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonPromptoIdentifier(this);
	}
};


function PythonIdentifierContext(parser, ctx) {
	Python_identifier_expressionContext.call(this, parser);
    this.name = null; // Python_identifierContext;
    Python_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonIdentifierContext.prototype = Object.create(Python_identifier_expressionContext.prototype);
PythonIdentifierContext.prototype.constructor = PythonIdentifierContext;

PythonIdentifierContext.prototype.python_identifier = function() {
    return this.getTypedRuleContext(Python_identifierContext,0);
};
PythonIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonIdentifier(this);
	}
};

PythonIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonIdentifier(this);
	}
};



OParser.prototype.python_identifier_expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Python_identifier_expressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 354;
    this.enterRecursionRule(localctx, 354, OParser.RULE_python_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2065;
        switch(this._input.LA(1)) {
        case OParser.DOLLAR_IDENTIFIER:
            localctx = new PythonPromptoIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 2063;
            this.match(OParser.DOLLAR_IDENTIFIER);
            break;
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.READ:
        case OParser.SELF:
        case OParser.TEST:
        case OParser.THIS:
        case OParser.WRITE:
        case OParser.SYMBOL_IDENTIFIER:
        case OParser.TYPE_IDENTIFIER:
        case OParser.VARIABLE_IDENTIFIER:
            localctx = new PythonIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2064; 
            localctx.name = this.python_identifier();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2072;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,178,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new PythonChildIdentifierContext(this, new Python_identifier_expressionContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_python_identifier_expression);
                this.state = 2067;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2068;
                this.match(OParser.DOT);
                this.state = 2069; 
                localctx.name = this.python_identifier(); 
            }
            this.state = 2074;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,178,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 Python_literal_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 = OParser.RULE_python_literal_expression;
    return this;
}

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


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


function PythonIntegerLiteralContext(parser, ctx) {
	Python_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Python_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonIntegerLiteralContext.prototype = Object.create(Python_literal_expressionContext.prototype);
PythonIntegerLiteralContext.prototype.constructor = PythonIntegerLiteralContext;

PythonIntegerLiteralContext.prototype.INTEGER_LITERAL = function() {
    return this.getToken(OParser.INTEGER_LITERAL, 0);
};
PythonIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonIntegerLiteral(this);
	}
};

PythonIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonIntegerLiteral(this);
	}
};


function PythonBooleanLiteralContext(parser, ctx) {
	Python_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Python_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonBooleanLiteralContext.prototype = Object.create(Python_literal_expressionContext.prototype);
PythonBooleanLiteralContext.prototype.constructor = PythonBooleanLiteralContext;

PythonBooleanLiteralContext.prototype.BOOLEAN_LITERAL = function() {
    return this.getToken(OParser.BOOLEAN_LITERAL, 0);
};
PythonBooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonBooleanLiteral(this);
	}
};

PythonBooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonBooleanLiteral(this);
	}
};


function PythonCharacterLiteralContext(parser, ctx) {
	Python_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Python_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonCharacterLiteralContext.prototype = Object.create(Python_literal_expressionContext.prototype);
PythonCharacterLiteralContext.prototype.constructor = PythonCharacterLiteralContext;

PythonCharacterLiteralContext.prototype.CHAR_LITERAL = function() {
    return this.getToken(OParser.CHAR_LITERAL, 0);
};
PythonCharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonCharacterLiteral(this);
	}
};

PythonCharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonCharacterLiteral(this);
	}
};


function PythonTextLiteralContext(parser, ctx) {
	Python_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Python_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonTextLiteralContext.prototype = Object.create(Python_literal_expressionContext.prototype);
PythonTextLiteralContext.prototype.constructor = PythonTextLiteralContext;

PythonTextLiteralContext.prototype.TEXT_LITERAL = function() {
    return this.getToken(OParser.TEXT_LITERAL, 0);
};
PythonTextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonTextLiteral(this);
	}
};

PythonTextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonTextLiteral(this);
	}
};


function PythonDecimalLiteralContext(parser, ctx) {
	Python_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Python_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

PythonDecimalLiteralContext.prototype = Object.create(Python_literal_expressionContext.prototype);
PythonDecimalLiteralContext.prototype.constructor = PythonDecimalLiteralContext;

PythonDecimalLiteralContext.prototype.DECIMAL_LITERAL = function() {
    return this.getToken(OParser.DECIMAL_LITERAL, 0);
};
PythonDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPythonDecimalLiteral(this);
	}
};

PythonDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPythonDecimalLiteral(this);
	}
};



OParser.prototype.python_literal_expression = function() {

    var localctx = new Python_literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 356, OParser.RULE_python_literal_expression);
    try {
        this.state = 2080;
        switch(this._input.LA(1)) {
        case OParser.INTEGER_LITERAL:
            localctx = new PythonIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2075;
            localctx.t = this.match(OParser.INTEGER_LITERAL);
            break;
        case OParser.DECIMAL_LITERAL:
            localctx = new PythonDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2076;
            localctx.t = this.match(OParser.DECIMAL_LITERAL);
            break;
        case OParser.TEXT_LITERAL:
            localctx = new PythonTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2077;
            localctx.t = this.match(OParser.TEXT_LITERAL);
            break;
        case OParser.BOOLEAN_LITERAL:
            localctx = new PythonBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2078;
            localctx.t = this.match(OParser.BOOLEAN_LITERAL);
            break;
        case OParser.CHAR_LITERAL:
            localctx = new PythonCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2079;
            localctx.t = this.match(OParser.CHAR_LITERAL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Python_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 = OParser.RULE_python_identifier;
    return this;
}

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

Python_identifierContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Python_identifierContext.prototype.SYMBOL_IDENTIFIER = function() {
    return this.getToken(OParser.SYMBOL_IDENTIFIER, 0);
};

Python_identifierContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(OParser.TYPE_IDENTIFIER, 0);
};

Python_identifierContext.prototype.BOOLEAN = function() {
    return this.getToken(OParser.BOOLEAN, 0);
};

Python_identifierContext.prototype.CHARACTER = function() {
    return this.getToken(OParser.CHARACTER, 0);
};

Python_identifierContext.prototype.TEXT = function() {
    return this.getToken(OParser.TEXT, 0);
};

Python_identifierContext.prototype.INTEGER = function() {
    return this.getToken(OParser.INTEGER, 0);
};

Python_identifierContext.prototype.DECIMAL = function() {
    return this.getToken(OParser.DECIMAL, 0);
};

Python_identifierContext.prototype.DATE = function() {
    return this.getToken(OParser.DATE, 0);
};

Python_identifierContext.prototype.TIME = function() {
    return this.getToken(OParser.TIME, 0);
};

Python_identifierContext.prototype.DATETIME = function() {
    return this.getToken(OParser.DATETIME, 0);
};

Python_identifierContext.prototype.PERIOD = function() {
    return this.getToken(OParser.PERIOD, 0);
};

Python_identifierContext.prototype.READ = function() {
    return this.getToken(OParser.READ, 0);
};

Python_identifierContext.prototype.WRITE = function() {
    return this.getToken(OParser.WRITE, 0);
};

Python_identifierContext.prototype.TEST = function() {
    return this.getToken(OParser.TEST, 0);
};

Python_identifierContext.prototype.SELF = function() {
    return this.getToken(OParser.SELF, 0);
};

Python_identifierContext.prototype.THIS = function() {
    return this.getToken(OParser.THIS, 0);
};

Python_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterPython_identifier(this);
	}
};

Python_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitPython_identifier(this);
	}
};




OParser.prototype.python_identifier = function() {

    var localctx = new Python_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 358, OParser.RULE_python_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2082;
        _la = this._input.LA(1);
        if(!(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.TEST - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.WRITE - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0))) {
        this._errHandler.recoverInline(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 Java_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 = OParser.RULE_java_statement;
    return this;
}

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


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


function JavaReturnStatementContext(parser, ctx) {
	Java_statementContext.call(this, parser);
    this.exp = null; // Java_expressionContext;
    Java_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaReturnStatementContext.prototype = Object.create(Java_statementContext.prototype);
JavaReturnStatementContext.prototype.constructor = JavaReturnStatementContext;

JavaReturnStatementContext.prototype.RETURN = function() {
    return this.getToken(OParser.RETURN, 0);
};

JavaReturnStatementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

JavaReturnStatementContext.prototype.java_expression = function() {
    return this.getTypedRuleContext(Java_expressionContext,0);
};
JavaReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaReturnStatement(this);
	}
};

JavaReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaReturnStatement(this);
	}
};


function JavaStatementContext(parser, ctx) {
	Java_statementContext.call(this, parser);
    this.exp = null; // Java_expressionContext;
    Java_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaStatementContext.prototype = Object.create(Java_statementContext.prototype);
JavaStatementContext.prototype.constructor = JavaStatementContext;

JavaStatementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

JavaStatementContext.prototype.java_expression = function() {
    return this.getTypedRuleContext(Java_expressionContext,0);
};
JavaStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaStatement(this);
	}
};

JavaStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaStatement(this);
	}
};



OParser.prototype.java_statement = function() {

    var localctx = new Java_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 360, OParser.RULE_java_statement);
    try {
        this.state = 2091;
        switch(this._input.LA(1)) {
        case OParser.RETURN:
            localctx = new JavaReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2084;
            this.match(OParser.RETURN);
            this.state = 2085; 
            localctx.exp = this.java_expression(0);
            this.state = 2086;
            this.match(OParser.SEMI);
            break;
        case OParser.LPAR:
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.READ:
        case OParser.SELF:
        case OParser.TEST:
        case OParser.THIS:
        case OParser.WRITE:
        case OParser.BOOLEAN_LITERAL:
        case OParser.CHAR_LITERAL:
        case OParser.SYMBOL_IDENTIFIER:
        case OParser.TYPE_IDENTIFIER:
        case OParser.VARIABLE_IDENTIFIER:
        case OParser.NATIVE_IDENTIFIER:
        case OParser.DOLLAR_IDENTIFIER:
        case OParser.TEXT_LITERAL:
        case OParser.INTEGER_LITERAL:
        case OParser.DECIMAL_LITERAL:
            localctx = new JavaStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2088; 
            localctx.exp = this.java_expression(0);
            this.state = 2089;
            this.match(OParser.SEMI);
            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 Java_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 = OParser.RULE_java_expression;
    return this;
}

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


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

function JavaSelectorExpressionContext(parser, ctx) {
	Java_expressionContext.call(this, parser);
    this.parent = null; // Java_expressionContext;
    this.child = null; // Java_selector_expressionContext;
    Java_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaSelectorExpressionContext.prototype = Object.create(Java_expressionContext.prototype);
JavaSelectorExpressionContext.prototype.constructor = JavaSelectorExpressionContext;

JavaSelectorExpressionContext.prototype.java_expression = function() {
    return this.getTypedRuleContext(Java_expressionContext,0);
};

JavaSelectorExpressionContext.prototype.java_selector_expression = function() {
    return this.getTypedRuleContext(Java_selector_expressionContext,0);
};
JavaSelectorExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaSelectorExpression(this);
	}
};

JavaSelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaSelectorExpression(this);
	}
};


function JavaPrimaryExpressionContext(parser, ctx) {
	Java_expressionContext.call(this, parser);
    this.exp = null; // Java_primary_expressionContext;
    Java_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaPrimaryExpressionContext.prototype = Object.create(Java_expressionContext.prototype);
JavaPrimaryExpressionContext.prototype.constructor = JavaPrimaryExpressionContext;

JavaPrimaryExpressionContext.prototype.java_primary_expression = function() {
    return this.getTypedRuleContext(Java_primary_expressionContext,0);
};
JavaPrimaryExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaPrimaryExpression(this);
	}
};

JavaPrimaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaPrimaryExpression(this);
	}
};



OParser.prototype.java_expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Java_expressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 362;
    this.enterRecursionRule(localctx, 362, OParser.RULE_java_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2094; 
        localctx.exp = this.java_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2100;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,181,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new JavaSelectorExpressionContext(this, new Java_expressionContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_java_expression);
                this.state = 2096;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2097; 
                localctx.child = this.java_selector_expression(); 
            }
            this.state = 2102;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,181,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 Java_primary_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 = OParser.RULE_java_primary_expression;
    return this;
}

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

Java_primary_expressionContext.prototype.java_this_expression = function() {
    return this.getTypedRuleContext(Java_this_expressionContext,0);
};

Java_primary_expressionContext.prototype.java_new_expression = function() {
    return this.getTypedRuleContext(Java_new_expressionContext,0);
};

Java_primary_expressionContext.prototype.java_parenthesis_expression = function() {
    return this.getTypedRuleContext(Java_parenthesis_expressionContext,0);
};

Java_primary_expressionContext.prototype.java_identifier_expression = function() {
    return this.getTypedRuleContext(Java_identifier_expressionContext,0);
};

Java_primary_expressionContext.prototype.java_literal_expression = function() {
    return this.getTypedRuleContext(Java_literal_expressionContext,0);
};

Java_primary_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJava_primary_expression(this);
	}
};

Java_primary_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJava_primary_expression(this);
	}
};




OParser.prototype.java_primary_expression = function() {

    var localctx = new Java_primary_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 364, OParser.RULE_java_primary_expression);
    try {
        this.state = 2108;
        var la_ = this._interp.adaptivePredict(this._input,182,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2103; 
            this.java_this_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2104; 
            this.java_new_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2105; 
            this.java_parenthesis_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2106; 
            this.java_identifier_expression(0);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2107; 
            this.java_literal_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 Java_this_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 = OParser.RULE_java_this_expression;
    return this;
}

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

Java_this_expressionContext.prototype.this_expression = function() {
    return this.getTypedRuleContext(This_expressionContext,0);
};

Java_this_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJava_this_expression(this);
	}
};

Java_this_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJava_this_expression(this);
	}
};




OParser.prototype.java_this_expression = function() {

    var localctx = new Java_this_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 366, OParser.RULE_java_this_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2110; 
        this.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 Java_new_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 = OParser.RULE_java_new_expression;
    return this;
}

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

Java_new_expressionContext.prototype.new_token = function() {
    return this.getTypedRuleContext(New_tokenContext,0);
};

Java_new_expressionContext.prototype.java_method_expression = function() {
    return this.getTypedRuleContext(Java_method_expressionContext,0);
};

Java_new_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJava_new_expression(this);
	}
};

Java_new_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJava_new_expression(this);
	}
};




OParser.prototype.java_new_expression = function() {

    var localctx = new Java_new_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 368, OParser.RULE_java_new_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2112; 
        this.new_token();
        this.state = 2113; 
        this.java_method_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 Java_selector_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 = OParser.RULE_java_selector_expression;
    return this;
}

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


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


function JavaItemExpressionContext(parser, ctx) {
	Java_selector_expressionContext.call(this, parser);
    this.exp = null; // Java_item_expressionContext;
    Java_selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaItemExpressionContext.prototype = Object.create(Java_selector_expressionContext.prototype);
JavaItemExpressionContext.prototype.constructor = JavaItemExpressionContext;

JavaItemExpressionContext.prototype.java_item_expression = function() {
    return this.getTypedRuleContext(Java_item_expressionContext,0);
};
JavaItemExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaItemExpression(this);
	}
};

JavaItemExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaItemExpression(this);
	}
};


function JavaMethodExpressionContext(parser, ctx) {
	Java_selector_expressionContext.call(this, parser);
    this.exp = null; // Java_method_expressionContext;
    Java_selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaMethodExpressionContext.prototype = Object.create(Java_selector_expressionContext.prototype);
JavaMethodExpressionContext.prototype.constructor = JavaMethodExpressionContext;

JavaMethodExpressionContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

JavaMethodExpressionContext.prototype.java_method_expression = function() {
    return this.getTypedRuleContext(Java_method_expressionContext,0);
};
JavaMethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaMethodExpression(this);
	}
};

JavaMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaMethodExpression(this);
	}
};



OParser.prototype.java_selector_expression = function() {

    var localctx = new Java_selector_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 370, OParser.RULE_java_selector_expression);
    try {
        this.state = 2118;
        switch(this._input.LA(1)) {
        case OParser.DOT:
            localctx = new JavaMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2115;
            this.match(OParser.DOT);
            this.state = 2116; 
            localctx.exp = this.java_method_expression();
            break;
        case OParser.LBRAK:
            localctx = new JavaItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2117; 
            localctx.exp = this.java_item_expression();
            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 Java_method_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 = OParser.RULE_java_method_expression;
    this.name = null; // Java_identifierContext
    this.args = null; // Java_argumentsContext
    return this;
}

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

Java_method_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Java_method_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Java_method_expressionContext.prototype.java_identifier = function() {
    return this.getTypedRuleContext(Java_identifierContext,0);
};

Java_method_expressionContext.prototype.java_arguments = function() {
    return this.getTypedRuleContext(Java_argumentsContext,0);
};

Java_method_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJava_method_expression(this);
	}
};

Java_method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJava_method_expression(this);
	}
};




OParser.prototype.java_method_expression = function() {

    var localctx = new Java_method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 372, OParser.RULE_java_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2120; 
        localctx.name = this.java_identifier();
        this.state = 2121;
        this.match(OParser.LPAR);
        this.state = 2123;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.TEST - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.WRITE - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)) | (1 << (OParser.NATIVE_IDENTIFIER - 128)))) !== 0) || ((((_la - 160)) & ~0x1f) == 0 && ((1 << (_la - 160)) & ((1 << (OParser.DOLLAR_IDENTIFIER - 160)) | (1 << (OParser.TEXT_LITERAL - 160)) | (1 << (OParser.INTEGER_LITERAL - 160)) | (1 << (OParser.DECIMAL_LITERAL - 160)))) !== 0)) {
            this.state = 2122; 
            localctx.args = this.java_arguments(0);
        }

        this.state = 2125;
        this.match(OParser.RPAR);
    } 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 Java_argumentsContext(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 = OParser.RULE_java_arguments;
    return this;
}

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


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

function JavaArgumentListItemContext(parser, ctx) {
	Java_argumentsContext.call(this, parser);
    this.items = null; // Java_argumentsContext;
    this.item = null; // Java_expressionContext;
    Java_argumentsContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaArgumentListItemContext.prototype = Object.create(Java_argumentsContext.prototype);
JavaArgumentListItemContext.prototype.constructor = JavaArgumentListItemContext;

JavaArgumentListItemContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

JavaArgumentListItemContext.prototype.java_arguments = function() {
    return this.getTypedRuleContext(Java_argumentsContext,0);
};

JavaArgumentListItemContext.prototype.java_expression = function() {
    return this.getTypedRuleContext(Java_expressionContext,0);
};
JavaArgumentListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaArgumentListItem(this);
	}
};

JavaArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaArgumentListItem(this);
	}
};


function JavaArgumentListContext(parser, ctx) {
	Java_argumentsContext.call(this, parser);
    this.item = null; // Java_expressionContext;
    Java_argumentsContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaArgumentListContext.prototype = Object.create(Java_argumentsContext.prototype);
JavaArgumentListContext.prototype.constructor = JavaArgumentListContext;

JavaArgumentListContext.prototype.java_expression = function() {
    return this.getTypedRuleContext(Java_expressionContext,0);
};
JavaArgumentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaArgumentList(this);
	}
};

JavaArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaArgumentList(this);
	}
};



OParser.prototype.java_arguments = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Java_argumentsContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 374;
    this.enterRecursionRule(localctx, 374, OParser.RULE_java_arguments, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2128; 
        localctx.item = this.java_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2135;
        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;
                localctx = new JavaArgumentListItemContext(this, new Java_argumentsContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_java_arguments);
                this.state = 2130;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2131;
                this.match(OParser.COMMA);
                this.state = 2132; 
                localctx.item = this.java_expression(0); 
            }
            this.state = 2137;
            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 Java_item_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 = OParser.RULE_java_item_expression;
    this.exp = null; // Java_expressionContext
    return this;
}

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

Java_item_expressionContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

Java_item_expressionContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

Java_item_expressionContext.prototype.java_expression = function() {
    return this.getTypedRuleContext(Java_expressionContext,0);
};

Java_item_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJava_item_expression(this);
	}
};

Java_item_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJava_item_expression(this);
	}
};




OParser.prototype.java_item_expression = function() {

    var localctx = new Java_item_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 376, OParser.RULE_java_item_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2138;
        this.match(OParser.LBRAK);
        this.state = 2139; 
        localctx.exp = this.java_expression(0);
        this.state = 2140;
        this.match(OParser.RBRAK);
    } 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 Java_parenthesis_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 = OParser.RULE_java_parenthesis_expression;
    this.exp = null; // Java_expressionContext
    return this;
}

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

Java_parenthesis_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Java_parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Java_parenthesis_expressionContext.prototype.java_expression = function() {
    return this.getTypedRuleContext(Java_expressionContext,0);
};

Java_parenthesis_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJava_parenthesis_expression(this);
	}
};

Java_parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJava_parenthesis_expression(this);
	}
};




OParser.prototype.java_parenthesis_expression = function() {

    var localctx = new Java_parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 378, OParser.RULE_java_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2142;
        this.match(OParser.LPAR);
        this.state = 2143; 
        localctx.exp = this.java_expression(0);
        this.state = 2144;
        this.match(OParser.RPAR);
    } 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 Java_identifier_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 = OParser.RULE_java_identifier_expression;
    return this;
}

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


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

function JavaIdentifierContext(parser, ctx) {
	Java_identifier_expressionContext.call(this, parser);
    this.name = null; // Java_identifierContext;
    Java_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaIdentifierContext.prototype = Object.create(Java_identifier_expressionContext.prototype);
JavaIdentifierContext.prototype.constructor = JavaIdentifierContext;

JavaIdentifierContext.prototype.java_identifier = function() {
    return this.getTypedRuleContext(Java_identifierContext,0);
};
JavaIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaIdentifier(this);
	}
};

JavaIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaIdentifier(this);
	}
};


function JavaChildIdentifierContext(parser, ctx) {
	Java_identifier_expressionContext.call(this, parser);
    this.parent = null; // Java_identifier_expressionContext;
    this.name = null; // Java_identifierContext;
    Java_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaChildIdentifierContext.prototype = Object.create(Java_identifier_expressionContext.prototype);
JavaChildIdentifierContext.prototype.constructor = JavaChildIdentifierContext;

JavaChildIdentifierContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

JavaChildIdentifierContext.prototype.java_identifier_expression = function() {
    return this.getTypedRuleContext(Java_identifier_expressionContext,0);
};

JavaChildIdentifierContext.prototype.java_identifier = function() {
    return this.getTypedRuleContext(Java_identifierContext,0);
};
JavaChildIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaChildIdentifier(this);
	}
};

JavaChildIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaChildIdentifier(this);
	}
};



OParser.prototype.java_identifier_expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Java_identifier_expressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 380;
    this.enterRecursionRule(localctx, 380, OParser.RULE_java_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaIdentifierContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2147; 
        localctx.name = this.java_identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2154;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,186,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new JavaChildIdentifierContext(this, new Java_identifier_expressionContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_java_identifier_expression);
                this.state = 2149;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2150;
                this.match(OParser.DOT);
                this.state = 2151; 
                localctx.name = this.java_identifier(); 
            }
            this.state = 2156;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,186,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 Java_class_identifier_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 = OParser.RULE_java_class_identifier_expression;
    return this;
}

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


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

function JavaClassIdentifierContext(parser, ctx) {
	Java_class_identifier_expressionContext.call(this, parser);
    this.klass = null; // Java_identifier_expressionContext;
    Java_class_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaClassIdentifierContext.prototype = Object.create(Java_class_identifier_expressionContext.prototype);
JavaClassIdentifierContext.prototype.constructor = JavaClassIdentifierContext;

JavaClassIdentifierContext.prototype.java_identifier_expression = function() {
    return this.getTypedRuleContext(Java_identifier_expressionContext,0);
};
JavaClassIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaClassIdentifier(this);
	}
};

JavaClassIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaClassIdentifier(this);
	}
};


function JavaChildClassIdentifierContext(parser, ctx) {
	Java_class_identifier_expressionContext.call(this, parser);
    this.parent = null; // Java_class_identifier_expressionContext;
    this.name = null; // Token;
    Java_class_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaChildClassIdentifierContext.prototype = Object.create(Java_class_identifier_expressionContext.prototype);
JavaChildClassIdentifierContext.prototype.constructor = JavaChildClassIdentifierContext;

JavaChildClassIdentifierContext.prototype.java_class_identifier_expression = function() {
    return this.getTypedRuleContext(Java_class_identifier_expressionContext,0);
};

JavaChildClassIdentifierContext.prototype.DOLLAR_IDENTIFIER = function() {
    return this.getToken(OParser.DOLLAR_IDENTIFIER, 0);
};
JavaChildClassIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaChildClassIdentifier(this);
	}
};

JavaChildClassIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaChildClassIdentifier(this);
	}
};



OParser.prototype.java_class_identifier_expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Java_class_identifier_expressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 382;
    this.enterRecursionRule(localctx, 382, OParser.RULE_java_class_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaClassIdentifierContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2158; 
        localctx.klass = this.java_identifier_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2164;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,187,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new JavaChildClassIdentifierContext(this, new Java_class_identifier_expressionContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_java_class_identifier_expression);
                this.state = 2160;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2161;
                localctx.name = this.match(OParser.DOLLAR_IDENTIFIER); 
            }
            this.state = 2166;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,187,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 Java_literal_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 = OParser.RULE_java_literal_expression;
    return this;
}

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


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


function JavaBooleanLiteralContext(parser, ctx) {
	Java_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Java_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaBooleanLiteralContext.prototype = Object.create(Java_literal_expressionContext.prototype);
JavaBooleanLiteralContext.prototype.constructor = JavaBooleanLiteralContext;

JavaBooleanLiteralContext.prototype.BOOLEAN_LITERAL = function() {
    return this.getToken(OParser.BOOLEAN_LITERAL, 0);
};
JavaBooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaBooleanLiteral(this);
	}
};

JavaBooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaBooleanLiteral(this);
	}
};


function JavaCharacterLiteralContext(parser, ctx) {
	Java_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Java_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaCharacterLiteralContext.prototype = Object.create(Java_literal_expressionContext.prototype);
JavaCharacterLiteralContext.prototype.constructor = JavaCharacterLiteralContext;

JavaCharacterLiteralContext.prototype.CHAR_LITERAL = function() {
    return this.getToken(OParser.CHAR_LITERAL, 0);
};
JavaCharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaCharacterLiteral(this);
	}
};

JavaCharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaCharacterLiteral(this);
	}
};


function JavaIntegerLiteralContext(parser, ctx) {
	Java_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Java_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaIntegerLiteralContext.prototype = Object.create(Java_literal_expressionContext.prototype);
JavaIntegerLiteralContext.prototype.constructor = JavaIntegerLiteralContext;

JavaIntegerLiteralContext.prototype.INTEGER_LITERAL = function() {
    return this.getToken(OParser.INTEGER_LITERAL, 0);
};
JavaIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaIntegerLiteral(this);
	}
};

JavaIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaIntegerLiteral(this);
	}
};


function JavaTextLiteralContext(parser, ctx) {
	Java_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Java_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaTextLiteralContext.prototype = Object.create(Java_literal_expressionContext.prototype);
JavaTextLiteralContext.prototype.constructor = JavaTextLiteralContext;

JavaTextLiteralContext.prototype.TEXT_LITERAL = function() {
    return this.getToken(OParser.TEXT_LITERAL, 0);
};
JavaTextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaTextLiteral(this);
	}
};

JavaTextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaTextLiteral(this);
	}
};


function JavaDecimalLiteralContext(parser, ctx) {
	Java_literal_expressionContext.call(this, parser);
    this.t = null; // Token;
    Java_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

JavaDecimalLiteralContext.prototype = Object.create(Java_literal_expressionContext.prototype);
JavaDecimalLiteralContext.prototype.constructor = JavaDecimalLiteralContext;

JavaDecimalLiteralContext.prototype.DECIMAL_LITERAL = function() {
    return this.getToken(OParser.DECIMAL_LITERAL, 0);
};
JavaDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJavaDecimalLiteral(this);
	}
};

JavaDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJavaDecimalLiteral(this);
	}
};



OParser.prototype.java_literal_expression = function() {

    var localctx = new Java_literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 384, OParser.RULE_java_literal_expression);
    try {
        this.state = 2172;
        switch(this._input.LA(1)) {
        case OParser.INTEGER_LITERAL:
            localctx = new JavaIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2167;
            localctx.t = this.match(OParser.INTEGER_LITERAL);
            break;
        case OParser.DECIMAL_LITERAL:
            localctx = new JavaDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2168;
            localctx.t = this.match(OParser.DECIMAL_LITERAL);
            break;
        case OParser.TEXT_LITERAL:
            localctx = new JavaTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2169;
            localctx.t = this.match(OParser.TEXT_LITERAL);
            break;
        case OParser.BOOLEAN_LITERAL:
            localctx = new JavaBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2170;
            localctx.t = this.match(OParser.BOOLEAN_LITERAL);
            break;
        case OParser.CHAR_LITERAL:
            localctx = new JavaCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2171;
            localctx.t = this.match(OParser.CHAR_LITERAL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Java_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 = OParser.RULE_java_identifier;
    return this;
}

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

Java_identifierContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Java_identifierContext.prototype.SYMBOL_IDENTIFIER = function() {
    return this.getToken(OParser.SYMBOL_IDENTIFIER, 0);
};

Java_identifierContext.prototype.NATIVE_IDENTIFIER = function() {
    return this.getToken(OParser.NATIVE_IDENTIFIER, 0);
};

Java_identifierContext.prototype.DOLLAR_IDENTIFIER = function() {
    return this.getToken(OParser.DOLLAR_IDENTIFIER, 0);
};

Java_identifierContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(OParser.TYPE_IDENTIFIER, 0);
};

Java_identifierContext.prototype.BOOLEAN = function() {
    return this.getToken(OParser.BOOLEAN, 0);
};

Java_identifierContext.prototype.CHARACTER = function() {
    return this.getToken(OParser.CHARACTER, 0);
};

Java_identifierContext.prototype.TEXT = function() {
    return this.getToken(OParser.TEXT, 0);
};

Java_identifierContext.prototype.INTEGER = function() {
    return this.getToken(OParser.INTEGER, 0);
};

Java_identifierContext.prototype.DECIMAL = function() {
    return this.getToken(OParser.DECIMAL, 0);
};

Java_identifierContext.prototype.DATE = function() {
    return this.getToken(OParser.DATE, 0);
};

Java_identifierContext.prototype.TIME = function() {
    return this.getToken(OParser.TIME, 0);
};

Java_identifierContext.prototype.DATETIME = function() {
    return this.getToken(OParser.DATETIME, 0);
};

Java_identifierContext.prototype.PERIOD = function() {
    return this.getToken(OParser.PERIOD, 0);
};

Java_identifierContext.prototype.READ = function() {
    return this.getToken(OParser.READ, 0);
};

Java_identifierContext.prototype.WRITE = function() {
    return this.getToken(OParser.WRITE, 0);
};

Java_identifierContext.prototype.TEST = function() {
    return this.getToken(OParser.TEST, 0);
};

Java_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterJava_identifier(this);
	}
};

Java_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitJava_identifier(this);
	}
};




OParser.prototype.java_identifier = function() {

    var localctx = new Java_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 386, OParser.RULE_java_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2174;
        _la = this._input.LA(1);
        if(!(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.TEST - 128)) | (1 << (OParser.WRITE - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)) | (1 << (OParser.NATIVE_IDENTIFIER - 128)))) !== 0) || _la===OParser.DOLLAR_IDENTIFIER)) {
        this._errHandler.recoverInline(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 Csharp_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 = OParser.RULE_csharp_statement;
    return this;
}

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


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


function CSharpReturnStatementContext(parser, ctx) {
	Csharp_statementContext.call(this, parser);
    this.exp = null; // Csharp_expressionContext;
    Csharp_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpReturnStatementContext.prototype = Object.create(Csharp_statementContext.prototype);
CSharpReturnStatementContext.prototype.constructor = CSharpReturnStatementContext;

CSharpReturnStatementContext.prototype.RETURN = function() {
    return this.getToken(OParser.RETURN, 0);
};

CSharpReturnStatementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

CSharpReturnStatementContext.prototype.csharp_expression = function() {
    return this.getTypedRuleContext(Csharp_expressionContext,0);
};
CSharpReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpReturnStatement(this);
	}
};

CSharpReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpReturnStatement(this);
	}
};


function CSharpStatementContext(parser, ctx) {
	Csharp_statementContext.call(this, parser);
    this.exp = null; // Csharp_expressionContext;
    Csharp_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpStatementContext.prototype = Object.create(Csharp_statementContext.prototype);
CSharpStatementContext.prototype.constructor = CSharpStatementContext;

CSharpStatementContext.prototype.SEMI = function() {
    return this.getToken(OParser.SEMI, 0);
};

CSharpStatementContext.prototype.csharp_expression = function() {
    return this.getTypedRuleContext(Csharp_expressionContext,0);
};
CSharpStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpStatement(this);
	}
};

CSharpStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpStatement(this);
	}
};



OParser.prototype.csharp_statement = function() {

    var localctx = new Csharp_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 388, OParser.RULE_csharp_statement);
    try {
        this.state = 2183;
        switch(this._input.LA(1)) {
        case OParser.RETURN:
            localctx = new CSharpReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2176;
            this.match(OParser.RETURN);
            this.state = 2177; 
            localctx.exp = this.csharp_expression(0);
            this.state = 2178;
            this.match(OParser.SEMI);
            break;
        case OParser.LPAR:
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.READ:
        case OParser.SELF:
        case OParser.TEST:
        case OParser.THIS:
        case OParser.WRITE:
        case OParser.BOOLEAN_LITERAL:
        case OParser.CHAR_LITERAL:
        case OParser.SYMBOL_IDENTIFIER:
        case OParser.TYPE_IDENTIFIER:
        case OParser.VARIABLE_IDENTIFIER:
        case OParser.DOLLAR_IDENTIFIER:
        case OParser.TEXT_LITERAL:
        case OParser.INTEGER_LITERAL:
        case OParser.DECIMAL_LITERAL:
            localctx = new CSharpStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2180; 
            localctx.exp = this.csharp_expression(0);
            this.state = 2181;
            this.match(OParser.SEMI);
            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 Csharp_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 = OParser.RULE_csharp_expression;
    return this;
}

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


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

function CSharpSelectorExpressionContext(parser, ctx) {
	Csharp_expressionContext.call(this, parser);
    this.parent = null; // Csharp_expressionContext;
    this.child = null; // Csharp_selector_expressionContext;
    Csharp_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpSelectorExpressionContext.prototype = Object.create(Csharp_expressionContext.prototype);
CSharpSelectorExpressionContext.prototype.constructor = CSharpSelectorExpressionContext;

CSharpSelectorExpressionContext.prototype.csharp_expression = function() {
    return this.getTypedRuleContext(Csharp_expressionContext,0);
};

CSharpSelectorExpressionContext.prototype.csharp_selector_expression = function() {
    return this.getTypedRuleContext(Csharp_selector_expressionContext,0);
};
CSharpSelectorExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpSelectorExpression(this);
	}
};

CSharpSelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpSelectorExpression(this);
	}
};


function CSharpPrimaryExpressionContext(parser, ctx) {
	Csharp_expressionContext.call(this, parser);
    this.exp = null; // Csharp_primary_expressionContext;
    Csharp_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpPrimaryExpressionContext.prototype = Object.create(Csharp_expressionContext.prototype);
CSharpPrimaryExpressionContext.prototype.constructor = CSharpPrimaryExpressionContext;

CSharpPrimaryExpressionContext.prototype.csharp_primary_expression = function() {
    return this.getTypedRuleContext(Csharp_primary_expressionContext,0);
};
CSharpPrimaryExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpPrimaryExpression(this);
	}
};

CSharpPrimaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpPrimaryExpression(this);
	}
};



OParser.prototype.csharp_expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Csharp_expressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 390;
    this.enterRecursionRule(localctx, 390, OParser.RULE_csharp_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new CSharpPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2186; 
        localctx.exp = this.csharp_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2192;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,190,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new CSharpSelectorExpressionContext(this, new Csharp_expressionContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_csharp_expression);
                this.state = 2188;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2189; 
                localctx.child = this.csharp_selector_expression(); 
            }
            this.state = 2194;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,190,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 Csharp_primary_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 = OParser.RULE_csharp_primary_expression;
    return this;
}

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

Csharp_primary_expressionContext.prototype.csharp_this_expression = function() {
    return this.getTypedRuleContext(Csharp_this_expressionContext,0);
};

Csharp_primary_expressionContext.prototype.csharp_new_expression = function() {
    return this.getTypedRuleContext(Csharp_new_expressionContext,0);
};

Csharp_primary_expressionContext.prototype.csharp_parenthesis_expression = function() {
    return this.getTypedRuleContext(Csharp_parenthesis_expressionContext,0);
};

Csharp_primary_expressionContext.prototype.csharp_identifier_expression = function() {
    return this.getTypedRuleContext(Csharp_identifier_expressionContext,0);
};

Csharp_primary_expressionContext.prototype.csharp_literal_expression = function() {
    return this.getTypedRuleContext(Csharp_literal_expressionContext,0);
};

Csharp_primary_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCsharp_primary_expression(this);
	}
};

Csharp_primary_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCsharp_primary_expression(this);
	}
};




OParser.prototype.csharp_primary_expression = function() {

    var localctx = new Csharp_primary_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 392, OParser.RULE_csharp_primary_expression);
    try {
        this.state = 2200;
        var la_ = this._interp.adaptivePredict(this._input,191,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2195; 
            this.csharp_this_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2196; 
            this.csharp_new_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2197; 
            this.csharp_parenthesis_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2198; 
            this.csharp_identifier_expression(0);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2199; 
            this.csharp_literal_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 Csharp_this_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 = OParser.RULE_csharp_this_expression;
    return this;
}

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

Csharp_this_expressionContext.prototype.this_expression = function() {
    return this.getTypedRuleContext(This_expressionContext,0);
};

Csharp_this_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCsharp_this_expression(this);
	}
};

Csharp_this_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCsharp_this_expression(this);
	}
};




OParser.prototype.csharp_this_expression = function() {

    var localctx = new Csharp_this_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 394, OParser.RULE_csharp_this_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2202; 
        this.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 Csharp_new_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 = OParser.RULE_csharp_new_expression;
    return this;
}

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

Csharp_new_expressionContext.prototype.new_token = function() {
    return this.getTypedRuleContext(New_tokenContext,0);
};

Csharp_new_expressionContext.prototype.csharp_method_expression = function() {
    return this.getTypedRuleContext(Csharp_method_expressionContext,0);
};

Csharp_new_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCsharp_new_expression(this);
	}
};

Csharp_new_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCsharp_new_expression(this);
	}
};




OParser.prototype.csharp_new_expression = function() {

    var localctx = new Csharp_new_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 396, OParser.RULE_csharp_new_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2204; 
        this.new_token();
        this.state = 2205; 
        this.csharp_method_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 Csharp_selector_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 = OParser.RULE_csharp_selector_expression;
    return this;
}

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


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


function CSharpMethodExpressionContext(parser, ctx) {
	Csharp_selector_expressionContext.call(this, parser);
    this.exp = null; // Csharp_method_expressionContext;
    Csharp_selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpMethodExpressionContext.prototype = Object.create(Csharp_selector_expressionContext.prototype);
CSharpMethodExpressionContext.prototype.constructor = CSharpMethodExpressionContext;

CSharpMethodExpressionContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

CSharpMethodExpressionContext.prototype.csharp_method_expression = function() {
    return this.getTypedRuleContext(Csharp_method_expressionContext,0);
};
CSharpMethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpMethodExpression(this);
	}
};

CSharpMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpMethodExpression(this);
	}
};


function CSharpItemExpressionContext(parser, ctx) {
	Csharp_selector_expressionContext.call(this, parser);
    this.exp = null; // Csharp_item_expressionContext;
    Csharp_selector_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpItemExpressionContext.prototype = Object.create(Csharp_selector_expressionContext.prototype);
CSharpItemExpressionContext.prototype.constructor = CSharpItemExpressionContext;

CSharpItemExpressionContext.prototype.csharp_item_expression = function() {
    return this.getTypedRuleContext(Csharp_item_expressionContext,0);
};
CSharpItemExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpItemExpression(this);
	}
};

CSharpItemExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpItemExpression(this);
	}
};



OParser.prototype.csharp_selector_expression = function() {

    var localctx = new Csharp_selector_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 398, OParser.RULE_csharp_selector_expression);
    try {
        this.state = 2210;
        switch(this._input.LA(1)) {
        case OParser.DOT:
            localctx = new CSharpMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2207;
            this.match(OParser.DOT);
            this.state = 2208; 
            localctx.exp = this.csharp_method_expression();
            break;
        case OParser.LBRAK:
            localctx = new CSharpItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2209; 
            localctx.exp = this.csharp_item_expression();
            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 Csharp_method_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 = OParser.RULE_csharp_method_expression;
    this.name = null; // Csharp_identifierContext
    this.args = null; // Csharp_argumentsContext
    return this;
}

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

Csharp_method_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Csharp_method_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Csharp_method_expressionContext.prototype.csharp_identifier = function() {
    return this.getTypedRuleContext(Csharp_identifierContext,0);
};

Csharp_method_expressionContext.prototype.csharp_arguments = function() {
    return this.getTypedRuleContext(Csharp_argumentsContext,0);
};

Csharp_method_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCsharp_method_expression(this);
	}
};

Csharp_method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCsharp_method_expression(this);
	}
};




OParser.prototype.csharp_method_expression = function() {

    var localctx = new Csharp_method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 400, OParser.RULE_csharp_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2212; 
        localctx.name = this.csharp_identifier();
        this.state = 2213;
        this.match(OParser.LPAR);
        this.state = 2215;
        _la = this._input.LA(1);
        if(_la===OParser.LPAR || ((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.SELF - 128)) | (1 << (OParser.TEST - 128)) | (1 << (OParser.THIS - 128)) | (1 << (OParser.WRITE - 128)) | (1 << (OParser.BOOLEAN_LITERAL - 128)) | (1 << (OParser.CHAR_LITERAL - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0) || ((((_la - 160)) & ~0x1f) == 0 && ((1 << (_la - 160)) & ((1 << (OParser.DOLLAR_IDENTIFIER - 160)) | (1 << (OParser.TEXT_LITERAL - 160)) | (1 << (OParser.INTEGER_LITERAL - 160)) | (1 << (OParser.DECIMAL_LITERAL - 160)))) !== 0)) {
            this.state = 2214; 
            localctx.args = this.csharp_arguments(0);
        }

        this.state = 2217;
        this.match(OParser.RPAR);
    } 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 Csharp_argumentsContext(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 = OParser.RULE_csharp_arguments;
    return this;
}

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


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

function CSharpArgumentListContext(parser, ctx) {
	Csharp_argumentsContext.call(this, parser);
    this.item = null; // Csharp_expressionContext;
    Csharp_argumentsContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpArgumentListContext.prototype = Object.create(Csharp_argumentsContext.prototype);
CSharpArgumentListContext.prototype.constructor = CSharpArgumentListContext;

CSharpArgumentListContext.prototype.csharp_expression = function() {
    return this.getTypedRuleContext(Csharp_expressionContext,0);
};
CSharpArgumentListContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpArgumentList(this);
	}
};

CSharpArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpArgumentList(this);
	}
};


function CSharpArgumentListItemContext(parser, ctx) {
	Csharp_argumentsContext.call(this, parser);
    this.items = null; // Csharp_argumentsContext;
    this.item = null; // Csharp_expressionContext;
    Csharp_argumentsContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpArgumentListItemContext.prototype = Object.create(Csharp_argumentsContext.prototype);
CSharpArgumentListItemContext.prototype.constructor = CSharpArgumentListItemContext;

CSharpArgumentListItemContext.prototype.COMMA = function() {
    return this.getToken(OParser.COMMA, 0);
};

CSharpArgumentListItemContext.prototype.csharp_arguments = function() {
    return this.getTypedRuleContext(Csharp_argumentsContext,0);
};

CSharpArgumentListItemContext.prototype.csharp_expression = function() {
    return this.getTypedRuleContext(Csharp_expressionContext,0);
};
CSharpArgumentListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpArgumentListItem(this);
	}
};

CSharpArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpArgumentListItem(this);
	}
};



OParser.prototype.csharp_arguments = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Csharp_argumentsContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 402;
    this.enterRecursionRule(localctx, 402, OParser.RULE_csharp_arguments, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new CSharpArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2220; 
        localctx.item = this.csharp_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2227;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,194,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new CSharpArgumentListItemContext(this, new Csharp_argumentsContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_csharp_arguments);
                this.state = 2222;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2223;
                this.match(OParser.COMMA);
                this.state = 2224; 
                localctx.item = this.csharp_expression(0); 
            }
            this.state = 2229;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,194,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 Csharp_item_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 = OParser.RULE_csharp_item_expression;
    this.exp = null; // Csharp_expressionContext
    return this;
}

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

Csharp_item_expressionContext.prototype.LBRAK = function() {
    return this.getToken(OParser.LBRAK, 0);
};

Csharp_item_expressionContext.prototype.RBRAK = function() {
    return this.getToken(OParser.RBRAK, 0);
};

Csharp_item_expressionContext.prototype.csharp_expression = function() {
    return this.getTypedRuleContext(Csharp_expressionContext,0);
};

Csharp_item_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCsharp_item_expression(this);
	}
};

Csharp_item_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCsharp_item_expression(this);
	}
};




OParser.prototype.csharp_item_expression = function() {

    var localctx = new Csharp_item_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 404, OParser.RULE_csharp_item_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2230;
        this.match(OParser.LBRAK);
        this.state = 2231; 
        localctx.exp = this.csharp_expression(0);
        this.state = 2232;
        this.match(OParser.RBRAK);
    } 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 Csharp_parenthesis_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 = OParser.RULE_csharp_parenthesis_expression;
    this.exp = null; // Csharp_expressionContext
    return this;
}

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

Csharp_parenthesis_expressionContext.prototype.LPAR = function() {
    return this.getToken(OParser.LPAR, 0);
};

Csharp_parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(OParser.RPAR, 0);
};

Csharp_parenthesis_expressionContext.prototype.csharp_expression = function() {
    return this.getTypedRuleContext(Csharp_expressionContext,0);
};

Csharp_parenthesis_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCsharp_parenthesis_expression(this);
	}
};

Csharp_parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCsharp_parenthesis_expression(this);
	}
};




OParser.prototype.csharp_parenthesis_expression = function() {

    var localctx = new Csharp_parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 406, OParser.RULE_csharp_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2234;
        this.match(OParser.LPAR);
        this.state = 2235; 
        localctx.exp = this.csharp_expression(0);
        this.state = 2236;
        this.match(OParser.RPAR);
    } 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 Csharp_identifier_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 = OParser.RULE_csharp_identifier_expression;
    return this;
}

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


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

function CSharpIdentifierContext(parser, ctx) {
	Csharp_identifier_expressionContext.call(this, parser);
    this.name = null; // Csharp_identifierContext;
    Csharp_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpIdentifierContext.prototype = Object.create(Csharp_identifier_expressionContext.prototype);
CSharpIdentifierContext.prototype.constructor = CSharpIdentifierContext;

CSharpIdentifierContext.prototype.csharp_identifier = function() {
    return this.getTypedRuleContext(Csharp_identifierContext,0);
};
CSharpIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpIdentifier(this);
	}
};

CSharpIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpIdentifier(this);
	}
};


function CSharpChildIdentifierContext(parser, ctx) {
	Csharp_identifier_expressionContext.call(this, parser);
    this.parent = null; // Csharp_identifier_expressionContext;
    this.name = null; // Csharp_identifierContext;
    Csharp_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpChildIdentifierContext.prototype = Object.create(Csharp_identifier_expressionContext.prototype);
CSharpChildIdentifierContext.prototype.constructor = CSharpChildIdentifierContext;

CSharpChildIdentifierContext.prototype.DOT = function() {
    return this.getToken(OParser.DOT, 0);
};

CSharpChildIdentifierContext.prototype.csharp_identifier_expression = function() {
    return this.getTypedRuleContext(Csharp_identifier_expressionContext,0);
};

CSharpChildIdentifierContext.prototype.csharp_identifier = function() {
    return this.getTypedRuleContext(Csharp_identifierContext,0);
};
CSharpChildIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpChildIdentifier(this);
	}
};

CSharpChildIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpChildIdentifier(this);
	}
};


function CSharpPromptoIdentifierContext(parser, ctx) {
	Csharp_identifier_expressionContext.call(this, parser);
    Csharp_identifier_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpPromptoIdentifierContext.prototype = Object.create(Csharp_identifier_expressionContext.prototype);
CSharpPromptoIdentifierContext.prototype.constructor = CSharpPromptoIdentifierContext;

CSharpPromptoIdentifierContext.prototype.DOLLAR_IDENTIFIER = function() {
    return this.getToken(OParser.DOLLAR_IDENTIFIER, 0);
};
CSharpPromptoIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpPromptoIdentifier(this);
	}
};

CSharpPromptoIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpPromptoIdentifier(this);
	}
};



OParser.prototype.csharp_identifier_expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Csharp_identifier_expressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 408;
    this.enterRecursionRule(localctx, 408, OParser.RULE_csharp_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2241;
        switch(this._input.LA(1)) {
        case OParser.DOLLAR_IDENTIFIER:
            localctx = new CSharpPromptoIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 2239;
            this.match(OParser.DOLLAR_IDENTIFIER);
            break;
        case OParser.BOOLEAN:
        case OParser.CHARACTER:
        case OParser.TEXT:
        case OParser.INTEGER:
        case OParser.DECIMAL:
        case OParser.DATE:
        case OParser.TIME:
        case OParser.DATETIME:
        case OParser.PERIOD:
        case OParser.READ:
        case OParser.TEST:
        case OParser.WRITE:
        case OParser.SYMBOL_IDENTIFIER:
        case OParser.TYPE_IDENTIFIER:
        case OParser.VARIABLE_IDENTIFIER:
            localctx = new CSharpIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2240; 
            localctx.name = this.csharp_identifier();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2248;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,196,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new CSharpChildIdentifierContext(this, new Csharp_identifier_expressionContext(this, _parentctx, _parentState));
                localctx.parent = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, OParser.RULE_csharp_identifier_expression);
                this.state = 2243;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2244;
                this.match(OParser.DOT);
                this.state = 2245; 
                localctx.name = this.csharp_identifier(); 
            }
            this.state = 2250;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,196,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 Csharp_literal_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 = OParser.RULE_csharp_literal_expression;
    return this;
}

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


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


function CSharpBooleanLiteralContext(parser, ctx) {
	Csharp_literal_expressionContext.call(this, parser);
    Csharp_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpBooleanLiteralContext.prototype = Object.create(Csharp_literal_expressionContext.prototype);
CSharpBooleanLiteralContext.prototype.constructor = CSharpBooleanLiteralContext;

CSharpBooleanLiteralContext.prototype.BOOLEAN_LITERAL = function() {
    return this.getToken(OParser.BOOLEAN_LITERAL, 0);
};
CSharpBooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpBooleanLiteral(this);
	}
};

CSharpBooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpBooleanLiteral(this);
	}
};


function CSharpIntegerLiteralContext(parser, ctx) {
	Csharp_literal_expressionContext.call(this, parser);
    Csharp_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpIntegerLiteralContext.prototype = Object.create(Csharp_literal_expressionContext.prototype);
CSharpIntegerLiteralContext.prototype.constructor = CSharpIntegerLiteralContext;

CSharpIntegerLiteralContext.prototype.INTEGER_LITERAL = function() {
    return this.getToken(OParser.INTEGER_LITERAL, 0);
};
CSharpIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpIntegerLiteral(this);
	}
};

CSharpIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpIntegerLiteral(this);
	}
};


function CSharpDecimalLiteralContext(parser, ctx) {
	Csharp_literal_expressionContext.call(this, parser);
    Csharp_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpDecimalLiteralContext.prototype = Object.create(Csharp_literal_expressionContext.prototype);
CSharpDecimalLiteralContext.prototype.constructor = CSharpDecimalLiteralContext;

CSharpDecimalLiteralContext.prototype.DECIMAL_LITERAL = function() {
    return this.getToken(OParser.DECIMAL_LITERAL, 0);
};
CSharpDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpDecimalLiteral(this);
	}
};

CSharpDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpDecimalLiteral(this);
	}
};


function CSharpCharacterLiteralContext(parser, ctx) {
	Csharp_literal_expressionContext.call(this, parser);
    Csharp_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpCharacterLiteralContext.prototype = Object.create(Csharp_literal_expressionContext.prototype);
CSharpCharacterLiteralContext.prototype.constructor = CSharpCharacterLiteralContext;

CSharpCharacterLiteralContext.prototype.CHAR_LITERAL = function() {
    return this.getToken(OParser.CHAR_LITERAL, 0);
};
CSharpCharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpCharacterLiteral(this);
	}
};

CSharpCharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpCharacterLiteral(this);
	}
};


function CSharpTextLiteralContext(parser, ctx) {
	Csharp_literal_expressionContext.call(this, parser);
    Csharp_literal_expressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

CSharpTextLiteralContext.prototype = Object.create(Csharp_literal_expressionContext.prototype);
CSharpTextLiteralContext.prototype.constructor = CSharpTextLiteralContext;

CSharpTextLiteralContext.prototype.TEXT_LITERAL = function() {
    return this.getToken(OParser.TEXT_LITERAL, 0);
};
CSharpTextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCSharpTextLiteral(this);
	}
};

CSharpTextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCSharpTextLiteral(this);
	}
};



OParser.prototype.csharp_literal_expression = function() {

    var localctx = new Csharp_literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 410, OParser.RULE_csharp_literal_expression);
    try {
        this.state = 2256;
        switch(this._input.LA(1)) {
        case OParser.INTEGER_LITERAL:
            localctx = new CSharpIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2251;
            this.match(OParser.INTEGER_LITERAL);
            break;
        case OParser.DECIMAL_LITERAL:
            localctx = new CSharpDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2252;
            this.match(OParser.DECIMAL_LITERAL);
            break;
        case OParser.TEXT_LITERAL:
            localctx = new CSharpTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2253;
            this.match(OParser.TEXT_LITERAL);
            break;
        case OParser.BOOLEAN_LITERAL:
            localctx = new CSharpBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2254;
            this.match(OParser.BOOLEAN_LITERAL);
            break;
        case OParser.CHAR_LITERAL:
            localctx = new CSharpCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2255;
            this.match(OParser.CHAR_LITERAL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Csharp_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 = OParser.RULE_csharp_identifier;
    return this;
}

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

Csharp_identifierContext.prototype.VARIABLE_IDENTIFIER = function() {
    return this.getToken(OParser.VARIABLE_IDENTIFIER, 0);
};

Csharp_identifierContext.prototype.SYMBOL_IDENTIFIER = function() {
    return this.getToken(OParser.SYMBOL_IDENTIFIER, 0);
};

Csharp_identifierContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(OParser.TYPE_IDENTIFIER, 0);
};

Csharp_identifierContext.prototype.BOOLEAN = function() {
    return this.getToken(OParser.BOOLEAN, 0);
};

Csharp_identifierContext.prototype.CHARACTER = function() {
    return this.getToken(OParser.CHARACTER, 0);
};

Csharp_identifierContext.prototype.TEXT = function() {
    return this.getToken(OParser.TEXT, 0);
};

Csharp_identifierContext.prototype.INTEGER = function() {
    return this.getToken(OParser.INTEGER, 0);
};

Csharp_identifierContext.prototype.DECIMAL = function() {
    return this.getToken(OParser.DECIMAL, 0);
};

Csharp_identifierContext.prototype.DATE = function() {
    return this.getToken(OParser.DATE, 0);
};

Csharp_identifierContext.prototype.TIME = function() {
    return this.getToken(OParser.TIME, 0);
};

Csharp_identifierContext.prototype.DATETIME = function() {
    return this.getToken(OParser.DATETIME, 0);
};

Csharp_identifierContext.prototype.PERIOD = function() {
    return this.getToken(OParser.PERIOD, 0);
};

Csharp_identifierContext.prototype.READ = function() {
    return this.getToken(OParser.READ, 0);
};

Csharp_identifierContext.prototype.WRITE = function() {
    return this.getToken(OParser.WRITE, 0);
};

Csharp_identifierContext.prototype.TEST = function() {
    return this.getToken(OParser.TEST, 0);
};

Csharp_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.enterCsharp_identifier(this);
	}
};

Csharp_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof OParserListener ) {
        listener.exitCsharp_identifier(this);
	}
};




OParser.prototype.csharp_identifier = function() {

    var localctx = new Csharp_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 412, OParser.RULE_csharp_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2258;
        _la = this._input.LA(1);
        if(!(((((_la - 46)) & ~0x1f) == 0 && ((1 << (_la - 46)) & ((1 << (OParser.BOOLEAN - 46)) | (1 << (OParser.CHARACTER - 46)) | (1 << (OParser.TEXT - 46)) | (1 << (OParser.INTEGER - 46)) | (1 << (OParser.DECIMAL - 46)) | (1 << (OParser.DATE - 46)) | (1 << (OParser.TIME - 46)) | (1 << (OParser.DATETIME - 46)) | (1 << (OParser.PERIOD - 46)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (OParser.READ - 128)) | (1 << (OParser.TEST - 128)) | (1 << (OParser.WRITE - 128)) | (1 << (OParser.SYMBOL_IDENTIFIER - 128)) | (1 << (OParser.TYPE_IDENTIFIER - 128)) | (1 << (OParser.VARIABLE_IDENTIFIER - 128)))) !== 0))) {
        this._errHandler.recoverInline(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;
};


OParser.prototype.sempred = function(localctx, ruleIndex, predIndex) {
	switch(ruleIndex) {
	case 7:
			return this.derived_list_sempred(localctx, predIndex);
	case 17:
			return this.native_category_binding_list_sempred(localctx, predIndex);
	case 36:
			return this.else_if_statement_list_sempred(localctx, predIndex);
	case 44:
			return this.callable_parent_sempred(localctx, predIndex);
	case 46:
			return this.expression_sempred(localctx, predIndex);
	case 47:
			return this.an_expression_sempred(localctx, predIndex);
	case 49:
			return this.instance_expression_sempred(localctx, predIndex);
	case 59:
			return this.argument_assignment_list_sempred(localctx, predIndex);
	case 78:
			return this.typedef_sempred(localctx, predIndex);
	case 98:
			return this.any_type_sempred(localctx, predIndex);
	case 135:
			return this.assignable_instance_sempred(localctx, predIndex);
	case 136:
			return this.is_expression_sempred(localctx, predIndex);
	case 142:
			return this.new_token_sempred(localctx, predIndex);
	case 143:
			return this.key_token_sempred(localctx, predIndex);
	case 144:
			return this.module_token_sempred(localctx, predIndex);
	case 145:
			return this.value_token_sempred(localctx, predIndex);
	case 146:
			return this.symbols_token_sempred(localctx, predIndex);
	case 155:
			return this.javascript_expression_sempred(localctx, predIndex);
	case 161:
			return this.javascript_arguments_sempred(localctx, predIndex);
	case 168:
			return this.python_expression_sempred(localctx, predIndex);
	case 174:
			return this.python_ordinal_argument_list_sempred(localctx, predIndex);
	case 175:
			return this.python_named_argument_list_sempred(localctx, predIndex);
	case 177:
			return this.python_identifier_expression_sempred(localctx, predIndex);
	case 181:
			return this.java_expression_sempred(localctx, predIndex);
	case 187:
			return this.java_arguments_sempred(localctx, predIndex);
	case 190:
			return this.java_identifier_expression_sempred(localctx, predIndex);
	case 191:
			return this.java_class_identifier_expression_sempred(localctx, predIndex);
	case 195:
			return this.csharp_expression_sempred(localctx, predIndex);
	case 201:
			return this.csharp_arguments_sempred(localctx, predIndex);
	case 204:
			return this.csharp_identifier_expression_sempred(localctx, predIndex);
    default:
        throw "No predicate with index:" + ruleIndex;
   }
};

OParser.prototype.derived_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 0:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.native_category_binding_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 1:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.else_if_statement_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 2:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.callable_parent_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 3:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 4:
			return this.precpred(this._ctx, 32);
		case 5:
			return this.precpred(this._ctx, 31);
		case 6:
			return this.precpred(this._ctx, 30);
		case 7:
			return this.precpred(this._ctx, 29);
		case 8:
			return this.precpred(this._ctx, 28);
		case 9:
			return this.precpred(this._ctx, 27);
		case 10:
			return this.precpred(this._ctx, 26);
		case 11:
			return this.precpred(this._ctx, 25);
		case 12:
			return this.precpred(this._ctx, 24);
		case 13:
			return this.precpred(this._ctx, 21);
		case 14:
			return this.precpred(this._ctx, 20);
		case 15:
			return this.precpred(this._ctx, 19);
		case 16:
			return this.precpred(this._ctx, 18);
		case 17:
			return this.precpred(this._ctx, 17);
		case 18:
			return this.precpred(this._ctx, 16);
		case 19:
			return this.precpred(this._ctx, 15);
		case 20:
			return this.precpred(this._ctx, 14);
		case 21:
			return this.precpred(this._ctx, 12);
		case 22:
			return this.precpred(this._ctx, 11);
		case 23:
			return this.precpred(this._ctx, 10);
		case 24:
			return this.precpred(this._ctx, 9);
		case 25:
			return this.precpred(this._ctx, 8);
		case 26:
			return this.precpred(this._ctx, 7);
		case 27:
			return this.precpred(this._ctx, 6);
		case 28:
			return this.precpred(this._ctx, 5);
		case 29:
			return this.precpred(this._ctx, 23);
		case 30:
			return this.precpred(this._ctx, 22);
		case 31:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.an_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 32:
			return this.willBeAOrAn();
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.instance_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 33:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.argument_assignment_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 34:
			return this.willNotBe(this.equalToken());
		case 35:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.typedef_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 36:
			return this.precpred(this._ctx, 5);
		case 37:
			return this.precpred(this._ctx, 4);
		case 38:
			return this.precpred(this._ctx, 3);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.any_type_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 39:
			return this.precpred(this._ctx, 2);
		case 40:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.assignable_instance_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 41:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.is_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 42:
			return this.willBeAOrAn();
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.new_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 43:
			return this.isText(localctx.i1,"new");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.key_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 44:
			return this.isText(localctx.i1,"key");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.module_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 45:
			return this.isText(localctx.i1,"module");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.value_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 46:
			return this.isText(localctx.i1,"value");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.symbols_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 47:
			return this.isText(localctx.i1,"symbols");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.javascript_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 48:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.javascript_arguments_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 49:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.python_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 50:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.python_ordinal_argument_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 51:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.python_named_argument_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 52:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.python_identifier_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 53:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.java_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 54:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.java_arguments_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 55:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.java_identifier_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 56:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.java_class_identifier_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 57:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.csharp_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 58:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.csharp_arguments_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 59:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

OParser.prototype.csharp_identifier_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 60:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};


exports.OParser = OParser;




© 2015 - 2025 Weber Informatics LLC | Privacy Policy