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

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

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

var grammarFileName = "MParser.g4";

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

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

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

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

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

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

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

Enum_category_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Enum_category_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Enum_category_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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.attribute_identifier_list = function() {
    return this.getTypedRuleContext(Attribute_identifier_listContext,0);
};

Enum_category_declarationContext.prototype.COMMA = function() {
    return this.getToken(MParser.COMMA, 0);
};

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

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




MParser.prototype.enum_category_declaration = function() {

    var localctx = new Enum_category_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 0, MParser.RULE_enum_category_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 414;
        this.match(MParser.ENUM);
        this.state = 415; 
        localctx.name = this.type_identifier();
        this.state = 416;
        this.match(MParser.LPAR);
        this.state = 423;
        switch(this._input.LA(1)) {
        case MParser.TYPE_IDENTIFIER:
            this.state = 417; 
            localctx.derived = this.type_identifier();
            this.state = 420;
            _la = this._input.LA(1);
            if(_la===MParser.COMMA) {
                this.state = 418;
                this.match(MParser.COMMA);
                this.state = 419; 
                localctx.attrs = this.attribute_identifier_list();
            }

            break;
        case MParser.STORABLE:
        case MParser.VARIABLE_IDENTIFIER:
            this.state = 422; 
            localctx.attrs = this.attribute_identifier_list();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 425;
        this.match(MParser.RPAR);
        this.state = 426;
        this.match(MParser.COLON);
        this.state = 427; 
        this.indent();
        this.state = 428; 
        localctx.symbols = this.category_symbol_list();
        this.state = 429; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.ENUM = function() {
    return this.getToken(MParser.ENUM, 0);
};

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

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

Enum_native_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Enum_native_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Enum_native_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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 MParserListener ) {
        listener.enterEnum_native_declaration(this);
	}
};

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




MParser.prototype.enum_native_declaration = function() {

    var localctx = new Enum_native_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 2, MParser.RULE_enum_native_declaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 431;
        this.match(MParser.ENUM);
        this.state = 432; 
        localctx.name = this.type_identifier();
        this.state = 433;
        this.match(MParser.LPAR);
        this.state = 434; 
        localctx.typ = this.native_type();
        this.state = 435;
        this.match(MParser.RPAR);
        this.state = 436;
        this.match(MParser.COLON);
        this.state = 437; 
        this.indent();
        this.state = 438; 
        localctx.symbols = this.native_symbol_list();
        this.state = 439; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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(MParser.EQ, 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 MParserListener ) {
        listener.enterNative_symbol(this);
	}
};

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




MParser.prototype.native_symbol = function() {

    var localctx = new Native_symbolContext(this, this._ctx, this.state);
    this.enterRule(localctx, 4, MParser.RULE_native_symbol);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 441; 
        localctx.name = this.symbol_identifier();
        this.state = 442;
        this.match(MParser.EQ);
        this.state = 443; 
        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 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 = MParser.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(MParser.LPAR, 0);
};

Category_symbolContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 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 MParserListener ) {
        listener.enterCategory_symbol(this);
	}
};

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




MParser.prototype.category_symbol = function() {

    var localctx = new Category_symbolContext(this, this._ctx, this.state);
    this.enterRule(localctx, 6, MParser.RULE_category_symbol);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 445; 
        localctx.name = this.symbol_identifier();
        this.state = 446;
        this.match(MParser.LPAR);
        this.state = 448;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 447; 
            localctx.args = this.argument_assignment_list(0);
        }

        this.state = 450;
        this.match(MParser.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 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 = MParser.RULE_attribute_declaration;
    this.name = null; // Attribute_identifierContext
    this.typ = null; // TypedefContext
    this.match = null; // Attribute_constraintContext
    this.indices = null; // Index_clauseContext
    return this;
}

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

Attribute_declarationContext.prototype.ATTR = function() {
    return this.getToken(MParser.ATTR, 0);
};

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

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

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

Attribute_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Attribute_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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.PASS = function() {
    return this.getToken(MParser.PASS, 0);
};

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

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

Attribute_declarationContext.prototype.index_clause = function() {
    return this.getTypedRuleContext(Index_clauseContext,0);
};

Attribute_declarationContext.prototype.lfp = function() {
    return this.getTypedRuleContext(LfpContext,0);
};

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

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




MParser.prototype.attribute_declaration = function() {

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

        this.state = 455;
        this.match(MParser.ATTR);
        this.state = 456; 
        localctx.name = this.attribute_identifier();
        this.state = 457;
        this.match(MParser.LPAR);
        this.state = 458; 
        localctx.typ = this.typedef(0);
        this.state = 459;
        this.match(MParser.RPAR);
        this.state = 460;
        this.match(MParser.COLON);
        this.state = 461; 
        this.indent();
        this.state = 477;
        switch(this._input.LA(1)) {
        case MParser.PASS:
            this.state = 462;
            this.match(MParser.PASS);
            break;
        case MParser.IN:
        case MParser.INDEX:
        case MParser.MATCHING:
            this.state = 475;
            switch(this._input.LA(1)) {
            case MParser.IN:
            case MParser.MATCHING:
                this.state = 463; 
                localctx.match = this.attribute_constraint();
                this.state = 467;
                var la_ = this._interp.adaptivePredict(this._input,4,this._ctx);
                if(la_===1) {
                    this.state = 464; 
                    this.lfp();
                    this.state = 465; 
                    localctx.indices = this.index_clause();

                }
                break;
            case MParser.INDEX:
                this.state = 469; 
                localctx.indices = this.index_clause();
                this.state = 473;
                var la_ = this._interp.adaptivePredict(this._input,5,this._ctx);
                if(la_===1) {
                    this.state = 470; 
                    this.lfp();
                    this.state = 471; 
                    localctx.match = this.attribute_constraint();

                }
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 479; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Index_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = MParser.RULE_index_clause;
    this.indices = null; // Variable_identifier_listContext
    return this;
}

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

Index_clauseContext.prototype.INDEX = function() {
    return this.getToken(MParser.INDEX, 0);
};

Index_clauseContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

Index_clauseContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

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

Index_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterIndex_clause(this);
	}
};

Index_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitIndex_clause(this);
	}
};




MParser.prototype.index_clause = function() {

    var localctx = new Index_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 10, MParser.RULE_index_clause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 481;
        this.match(MParser.INDEX);
        this.state = 482;
        this.match(MParser.LPAR);
        this.state = 484;
        _la = this._input.LA(1);
        if(_la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 483; 
            localctx.indices = this.variable_identifier_list();
        }

        this.state = 486;
        this.match(MParser.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 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 = MParser.RULE_concrete_category_declaration;
    this.name = null; // Type_identifierContext
    this.derived = null; // Derived_listContext
    this.attrs = null; // Attribute_identifier_listContext
    this.methods = null; // Member_method_declaration_listContext
    return this;
}

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

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

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

Concrete_category_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Concrete_category_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Concrete_category_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

Concrete_category_declarationContext.prototype.CLASS = function() {
    return this.getToken(MParser.CLASS, 0);
};

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

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

Concrete_category_declarationContext.prototype.COMMA = function() {
    return this.getToken(MParser.COMMA, 0);
};

Concrete_category_declarationContext.prototype.PASS = function() {
    return this.getToken(MParser.PASS, 0);
};

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

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

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

Concrete_category_declarationContext.prototype.member_method_declaration_list = function() {
    return this.getTypedRuleContext(Member_method_declaration_listContext,0);
};

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

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




MParser.prototype.concrete_category_declaration = function() {

    var localctx = new Concrete_category_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 12, MParser.RULE_concrete_category_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 489;
        _la = this._input.LA(1);
        if(_la===MParser.STORABLE) {
            this.state = 488;
            this.match(MParser.STORABLE);
        }

        this.state = 491;
        _la = this._input.LA(1);
        if(!(_la===MParser.CATEGORY || _la===MParser.CLASS)) {
        this._errHandler.recoverInline(this);
        }
        this.consume();
        this.state = 492; 
        localctx.name = this.type_identifier();
        this.state = 493;
        this.match(MParser.LPAR);
        this.state = 500;
        var la_ = this._interp.adaptivePredict(this._input,10,this._ctx);
        switch(la_) {
        case 1:
            this.state = 494; 
            localctx.derived = this.derived_list();
            break;

        case 2:
            this.state = 495; 
            localctx.attrs = this.attribute_identifier_list();
            break;

        case 3:
            this.state = 496; 
            localctx.derived = this.derived_list();
            this.state = 497;
            this.match(MParser.COMMA);
            this.state = 498; 
            localctx.attrs = this.attribute_identifier_list();
            break;

        }
        this.state = 502;
        this.match(MParser.RPAR);
        this.state = 503;
        this.match(MParser.COLON);
        this.state = 504; 
        this.indent();
        this.state = 507;
        switch(this._input.LA(1)) {
        case MParser.ABSTRACT:
        case MParser.DEF:
            this.state = 505; 
            localctx.methods = this.member_method_declaration_list();
            break;
        case MParser.PASS:
            this.state = 506;
            this.match(MParser.PASS);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 509; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.RULE_singleton_category_declaration;
    this.name = null; // Type_identifierContext
    this.attrs = null; // Attribute_identifier_listContext
    this.methods = null; // Member_method_declaration_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(MParser.SINGLETON, 0);
};

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

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

Singleton_category_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Singleton_category_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Singleton_category_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

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

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

Singleton_category_declarationContext.prototype.PASS = function() {
    return this.getToken(MParser.PASS, 0);
};

Singleton_category_declarationContext.prototype.member_method_declaration_list = function() {
    return this.getTypedRuleContext(Member_method_declaration_listContext,0);
};

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

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




MParser.prototype.singleton_category_declaration = function() {

    var localctx = new Singleton_category_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 14, MParser.RULE_singleton_category_declaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 511;
        this.match(MParser.SINGLETON);
        this.state = 512; 
        localctx.name = this.type_identifier();
        this.state = 513;
        this.match(MParser.LPAR);
        this.state = 514; 
        localctx.attrs = this.attribute_identifier_list();
        this.state = 515;
        this.match(MParser.RPAR);
        this.state = 516;
        this.match(MParser.COLON);
        this.state = 517; 
        this.indent();
        this.state = 520;
        switch(this._input.LA(1)) {
        case MParser.ABSTRACT:
        case MParser.DEF:
            this.state = 518; 
            localctx.methods = this.member_method_declaration_list();
            break;
        case MParser.PASS:
            this.state = 519;
            this.match(MParser.PASS);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 522; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.RULE_derived_list;
    this.items = null; // Type_identifier_listContext
    return this;
}

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

Derived_listContext.prototype.type_identifier_list = function() {
    return this.getTypedRuleContext(Type_identifier_listContext,0);
};

Derived_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDerived_list(this);
	}
};

Derived_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDerived_list(this);
	}
};




MParser.prototype.derived_list = function() {

    var localctx = new Derived_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 16, MParser.RULE_derived_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 524; 
        localctx.items = this.type_identifier_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 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 = MParser.RULE_operator_method_declaration;
    this.op = null; // OperatorContext
    this.arg = null; // Operator_argumentContext
    this.typ = null; // TypedefContext
    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.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

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

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

Operator_method_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Operator_method_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Operator_method_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};

Operator_method_declarationContext.prototype.RARROW = function() {
    return this.getToken(MParser.RARROW, 0);
};

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

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

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




MParser.prototype.operator_method_declaration = function() {

    var localctx = new Operator_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 18, MParser.RULE_operator_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 526;
        this.match(MParser.DEF);
        this.state = 527;
        this.match(MParser.OPERATOR);
        this.state = 528; 
        localctx.op = this.operator();
        this.state = 529;
        this.match(MParser.LPAR);
        this.state = 530; 
        localctx.arg = this.operator_argument();
        this.state = 531;
        this.match(MParser.RPAR);
        this.state = 534;
        _la = this._input.LA(1);
        if(_la===MParser.RARROW) {
            this.state = 532;
            this.match(MParser.RARROW);
            this.state = 533; 
            localctx.typ = this.typedef(0);
        }

        this.state = 536;
        this.match(MParser.COLON);
        this.state = 537; 
        this.indent();
        this.state = 538; 
        localctx.stmts = this.statement_list();
        this.state = 539; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

Setter_method_declarationContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

Setter_method_declarationContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

Setter_method_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Setter_method_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Setter_method_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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 MParserListener ) {
        listener.enterSetter_method_declaration(this);
	}
};

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




MParser.prototype.setter_method_declaration = function() {

    var localctx = new Setter_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 20, MParser.RULE_setter_method_declaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 541;
        this.match(MParser.DEF);
        this.state = 542; 
        localctx.name = this.variable_identifier();
        this.state = 543;
        this.match(MParser.SETTER);
        this.state = 544;
        this.match(MParser.LPAR);
        this.state = 545;
        this.match(MParser.RPAR);
        this.state = 546;
        this.match(MParser.COLON);
        this.state = 547; 
        this.indent();
        this.state = 548; 
        localctx.stmts = this.statement_list();
        this.state = 549; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

Native_setter_declarationContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

Native_setter_declarationContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

Native_setter_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Native_setter_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Native_setter_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

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

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

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

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

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




MParser.prototype.native_setter_declaration = function() {

    var localctx = new Native_setter_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 22, MParser.RULE_native_setter_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 551;
        this.match(MParser.DEF);
        this.state = 552; 
        localctx.name = this.variable_identifier();
        this.state = 554;
        _la = this._input.LA(1);
        if(_la===MParser.NATIVE) {
            this.state = 553;
            this.match(MParser.NATIVE);
        }

        this.state = 556;
        this.match(MParser.SETTER);
        this.state = 557;
        this.match(MParser.LPAR);
        this.state = 558;
        this.match(MParser.RPAR);
        this.state = 559;
        this.match(MParser.COLON);
        this.state = 560; 
        this.indent();
        this.state = 561; 
        localctx.stmts = this.native_statement_list();
        this.state = 562; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

Getter_method_declarationContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

Getter_method_declarationContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

Getter_method_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Getter_method_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Getter_method_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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 MParserListener ) {
        listener.enterGetter_method_declaration(this);
	}
};

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




MParser.prototype.getter_method_declaration = function() {

    var localctx = new Getter_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 24, MParser.RULE_getter_method_declaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 564;
        this.match(MParser.DEF);
        this.state = 565; 
        localctx.name = this.variable_identifier();
        this.state = 566;
        this.match(MParser.GETTER);
        this.state = 567;
        this.match(MParser.LPAR);
        this.state = 568;
        this.match(MParser.RPAR);
        this.state = 569;
        this.match(MParser.COLON);
        this.state = 570; 
        this.indent();
        this.state = 571; 
        localctx.stmts = this.statement_list();
        this.state = 572; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

Native_getter_declarationContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

Native_getter_declarationContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

Native_getter_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Native_getter_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Native_getter_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

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

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

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

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

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




MParser.prototype.native_getter_declaration = function() {

    var localctx = new Native_getter_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 26, MParser.RULE_native_getter_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 574;
        this.match(MParser.DEF);
        this.state = 575; 
        localctx.name = this.variable_identifier();
        this.state = 577;
        _la = this._input.LA(1);
        if(_la===MParser.NATIVE) {
            this.state = 576;
            this.match(MParser.NATIVE);
        }

        this.state = 579;
        this.match(MParser.GETTER);
        this.state = 580;
        this.match(MParser.LPAR);
        this.state = 581;
        this.match(MParser.RPAR);
        this.state = 582;
        this.match(MParser.COLON);
        this.state = 583; 
        this.indent();
        this.state = 584; 
        localctx.stmts = this.native_statement_list();
        this.state = 585; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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(MParser.NATIVE, 0);
};

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

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

Native_category_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Native_category_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Native_category_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

Native_category_declarationContext.prototype.CLASS = function() {
    return this.getToken(MParser.CLASS, 0);
};

Native_category_declarationContext.prototype.CATEGORY = function() {
    return this.getToken(MParser.CATEGORY, 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(MParser.STORABLE, 0);
};

Native_category_declarationContext.prototype.lfp = function() {
    return this.getTypedRuleContext(LfpContext,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 MParserListener ) {
        listener.enterNative_category_declaration(this);
	}
};

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




MParser.prototype.native_category_declaration = function() {

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

        this.state = 590;
        this.match(MParser.NATIVE);
        this.state = 591;
        _la = this._input.LA(1);
        if(!(_la===MParser.CATEGORY || _la===MParser.CLASS)) {
        this._errHandler.recoverInline(this);
        }
        this.consume();
        this.state = 592; 
        localctx.name = this.type_identifier();
        this.state = 593;
        this.match(MParser.LPAR);
        this.state = 595;
        _la = this._input.LA(1);
        if(_la===MParser.STORABLE || _la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 594; 
            localctx.attrs = this.attribute_identifier_list();
        }

        this.state = 597;
        this.match(MParser.RPAR);
        this.state = 598;
        this.match(MParser.COLON);
        this.state = 599; 
        this.indent();
        this.state = 600; 
        localctx.bindings = this.native_category_bindings();
        this.state = 604;
        var la_ = this._interp.adaptivePredict(this._input,18,this._ctx);
        if(la_===1) {
            this.state = 601; 
            this.lfp();
            this.state = 602; 
            localctx.methods = this.native_member_method_declaration_list();

        }
        this.state = 606; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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(MParser.NATIVE, 0);
};

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

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

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

Native_resource_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Native_resource_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Native_resource_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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.lfp = function() {
    return this.getTypedRuleContext(LfpContext,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 MParserListener ) {
        listener.enterNative_resource_declaration(this);
	}
};

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




MParser.prototype.native_resource_declaration = function() {

    var localctx = new Native_resource_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 30, MParser.RULE_native_resource_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 608;
        this.match(MParser.NATIVE);
        this.state = 609;
        this.match(MParser.RESOURCE);
        this.state = 610; 
        localctx.name = this.type_identifier();
        this.state = 611;
        this.match(MParser.LPAR);
        this.state = 613;
        _la = this._input.LA(1);
        if(_la===MParser.STORABLE || _la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 612; 
            localctx.attrs = this.attribute_identifier_list();
        }

        this.state = 615;
        this.match(MParser.RPAR);
        this.state = 616;
        this.match(MParser.COLON);
        this.state = 617; 
        this.indent();
        this.state = 618; 
        localctx.bindings = this.native_category_bindings();
        this.state = 622;
        var la_ = this._interp.adaptivePredict(this._input,20,this._ctx);
        if(la_===1) {
            this.state = 619; 
            this.lfp();
            this.state = 620; 
            localctx.methods = this.native_member_method_declaration_list();

        }
        this.state = 624; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

Native_category_bindingsContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Native_category_bindingsContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Native_category_bindingsContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

Native_category_bindingsContext.prototype.CLASS = function() {
    return this.getToken(MParser.CLASS, 0);
};

Native_category_bindingsContext.prototype.CATEGORY = function() {
    return this.getToken(MParser.CATEGORY, 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 MParserListener ) {
        listener.enterNative_category_bindings(this);
	}
};

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




MParser.prototype.native_category_bindings = function() {

    var localctx = new Native_category_bindingsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 32, MParser.RULE_native_category_bindings);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 626;
        this.match(MParser.DEF);
        this.state = 627;
        _la = this._input.LA(1);
        if(!(_la===MParser.CATEGORY || _la===MParser.CLASS)) {
        this._errHandler.recoverInline(this);
        }
        this.consume();
        this.state = 628;
        this.match(MParser.BINDINGS);
        this.state = 629;
        this.match(MParser.COLON);
        this.state = 630; 
        this.indent();
        this.state = 631; 
        localctx.items = this.native_category_binding_list(0);
        this.state = 632; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.lfp = function() {
    return this.getTypedRuleContext(LfpContext,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 MParserListener ) {
        listener.enterNativeCategoryBindingListItem(this);
	}
};

NativeCategoryBindingListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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.native_category_binding = function() {
    return this.getTypedRuleContext(Native_category_bindingContext,0);
};
NativeCategoryBindingListContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterNativeCategoryBindingList(this);
	}
};

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



MParser.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, MParser.RULE_native_category_binding_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new NativeCategoryBindingListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 635; 
        localctx.item = this.native_category_binding();
        this._ctx.stop = this._input.LT(-1);
        this.state = 643;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,21,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, MParser.RULE_native_category_binding_list);
                this.state = 637;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 638; 
                this.lfp();
                this.state = 639; 
                localctx.item = this.native_category_binding(); 
            }
            this.state = 645;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,21,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 = MParser.RULE_abstract_method_declaration;
    this.name = null; // Method_identifierContext
    this.args = null; // Argument_listContext
    this.typ = null; // TypedefContext
    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(MParser.ABSTRACT, 0);
};

Abstract_method_declarationContext.prototype.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

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

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

Abstract_method_declarationContext.prototype.RARROW = function() {
    return this.getToken(MParser.RARROW, 0);
};

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

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

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

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




MParser.prototype.abstract_method_declaration = function() {

    var localctx = new Abstract_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 36, MParser.RULE_abstract_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 646;
        this.match(MParser.ABSTRACT);
        this.state = 647;
        this.match(MParser.DEF);
        this.state = 648; 
        localctx.name = this.method_identifier();
        this.state = 649;
        this.match(MParser.LPAR);
        this.state = 651;
        _la = this._input.LA(1);
        if(_la===MParser.CODE || _la===MParser.MUTABLE || _la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 650; 
            localctx.args = this.argument_list();
        }

        this.state = 653;
        this.match(MParser.RPAR);
        this.state = 656;
        _la = this._input.LA(1);
        if(_la===MParser.RARROW) {
            this.state = 654;
            this.match(MParser.RARROW);
            this.state = 655; 
            localctx.typ = this.typedef(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 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 = MParser.RULE_concrete_method_declaration;
    this.name = null; // Method_identifierContext
    this.args = null; // Argument_listContext
    this.typ = null; // TypedefContext
    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.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

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

Concrete_method_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Concrete_method_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Concrete_method_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

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

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

Concrete_method_declarationContext.prototype.RARROW = function() {
    return this.getToken(MParser.RARROW, 0);
};

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

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

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

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




MParser.prototype.concrete_method_declaration = function() {

    var localctx = new Concrete_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 38, MParser.RULE_concrete_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 658;
        this.match(MParser.DEF);
        this.state = 659; 
        localctx.name = this.method_identifier();
        this.state = 660;
        this.match(MParser.LPAR);
        this.state = 662;
        _la = this._input.LA(1);
        if(_la===MParser.CODE || _la===MParser.MUTABLE || _la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 661; 
            localctx.args = this.argument_list();
        }

        this.state = 664;
        this.match(MParser.RPAR);
        this.state = 667;
        _la = this._input.LA(1);
        if(_la===MParser.RARROW) {
            this.state = 665;
            this.match(MParser.RARROW);
            this.state = 666; 
            localctx.typ = this.typedef(0);
        }

        this.state = 669;
        this.match(MParser.COLON);
        this.state = 670; 
        this.indent();
        this.state = 671; 
        localctx.stmts = this.statement_list();
        this.state = 672; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.RULE_native_method_declaration;
    this.name = null; // Method_identifierContext
    this.args = null; // Argument_listContext
    this.typ = null; // Category_or_any_typeContext
    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.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

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

Native_method_declarationContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Native_method_declarationContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Native_method_declarationContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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(MParser.NATIVE, 0);
};

Native_method_declarationContext.prototype.RARROW = function() {
    return this.getToken(MParser.RARROW, 0);
};

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

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

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

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




MParser.prototype.native_method_declaration = function() {

    var localctx = new Native_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 40, MParser.RULE_native_method_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 674;
        this.match(MParser.DEF);
        this.state = 676;
        _la = this._input.LA(1);
        if(_la===MParser.NATIVE) {
            this.state = 675;
            this.match(MParser.NATIVE);
        }

        this.state = 678; 
        localctx.name = this.method_identifier();
        this.state = 679;
        this.match(MParser.LPAR);
        this.state = 681;
        _la = this._input.LA(1);
        if(_la===MParser.CODE || _la===MParser.MUTABLE || _la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 680; 
            localctx.args = this.argument_list();
        }

        this.state = 683;
        this.match(MParser.RPAR);
        this.state = 686;
        _la = this._input.LA(1);
        if(_la===MParser.RARROW) {
            this.state = 684;
            this.match(MParser.RARROW);
            this.state = 685; 
            localctx.typ = this.category_or_any_type();
        }

        this.state = 688;
        this.match(MParser.COLON);
        this.state = 689; 
        this.indent();
        this.state = 690; 
        localctx.stmts = this.native_statement_list();
        this.state = 691; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.DEF = function() {
    return this.getToken(MParser.DEF, 0);
};

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

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

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

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


Test_method_declarationContext.prototype.indent = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IndentContext);
    } else {
        return this.getTypedRuleContext(IndentContext,i);
    }
};

Test_method_declarationContext.prototype.dedent = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(DedentContext);
    } else {
        return this.getTypedRuleContext(DedentContext,i);
    }
};

Test_method_declarationContext.prototype.lfp = function() {
    return this.getTypedRuleContext(LfpContext,0);
};

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

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

Test_method_declarationContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,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 MParserListener ) {
        listener.enterTest_method_declaration(this);
	}
};

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




MParser.prototype.test_method_declaration = function() {

    var localctx = new Test_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 42, MParser.RULE_test_method_declaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 693;
        this.match(MParser.DEF);
        this.state = 694;
        this.match(MParser.TEST);
        this.state = 695;
        localctx.name = this.match(MParser.TEXT_LITERAL);
        this.state = 696;
        this.match(MParser.LPAR);
        this.state = 697;
        this.match(MParser.RPAR);
        this.state = 698;
        this.match(MParser.COLON);
        this.state = 699; 
        this.indent();
        this.state = 700; 
        localctx.stmts = this.statement_list();
        this.state = 701; 
        this.dedent();
        this.state = 702; 
        this.lfp();
        this.state = 703;
        this.match(MParser.VERIFYING);
        this.state = 704;
        this.match(MParser.COLON);
        this.state = 710;
        switch(this._input.LA(1)) {
        case MParser.LF:
            this.state = 705; 
            this.indent();
            this.state = 706; 
            localctx.exps = this.assertion_list();
            this.state = 707; 
            this.dedent();
            break;
        case MParser.SYMBOL_IDENTIFIER:
            this.state = 709; 
            localctx.error = 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 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 = MParser.RULE_assertion;
    this.exp = null; // ExpressionContext
    return this;
}

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

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

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

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




MParser.prototype.assertion = function() {

    var localctx = new AssertionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 44, MParser.RULE_assertion);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 712; 
        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 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 = MParser.RULE_typed_argument;
    this.name = null; // Variable_identifierContext
    this.typ = null; // Category_or_any_typeContext
    this.attrs = null; // Attribute_identifier_listContext
    this.value = null; // Literal_expressionContext
    return this;
}

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

Typed_argumentContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

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

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

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

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

Typed_argumentContext.prototype.EQ = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterTyped_argument(this);
	}
};

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




MParser.prototype.typed_argument = function() {

    var localctx = new Typed_argumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 46, MParser.RULE_typed_argument);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 714; 
        localctx.name = this.variable_identifier();
        this.state = 715;
        this.match(MParser.COLON);
        this.state = 716; 
        localctx.typ = this.category_or_any_type();
        this.state = 721;
        _la = this._input.LA(1);
        if(_la===MParser.LPAR) {
            this.state = 717;
            this.match(MParser.LPAR);
            this.state = 718; 
            localctx.attrs = this.attribute_identifier_list();
            this.state = 719;
            this.match(MParser.RPAR);
        }

        this.state = 725;
        _la = this._input.LA(1);
        if(_la===MParser.EQ) {
            this.state = 723;
            this.match(MParser.EQ);
            this.state = 724; 
            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 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 = MParser.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 MParserListener ) {
        listener.enterCommentStatement(this);
	}
};

CommentStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterStoreStatement(this);
	}
};

StoreStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterWithSingletonStatement(this);
	}
};

WithSingletonStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterWriteStatement(this);
	}
};

WriteStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterWhileStatement(this);
	}
};

WhileStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterWithResourceStatement(this);
	}
};

WithResourceStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterRaiseStatement(this);
	}
};

RaiseStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterBreakStatement(this);
	}
};

BreakStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterAssignInstanceStatement(this);
	}
};

AssignInstanceStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterIfStatement(this);
	}
};

IfStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterSwitchStatement(this);
	}
};

SwitchStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterTryStatement(this);
	}
};

TryStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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.method_call = function() {
    return this.getTypedRuleContext(Method_callContext,0);
};
MethodCallStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMethodCallStatement(this);
	}
};

MethodCallStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterReturnStatement(this);
	}
};

ReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterAssignTupleStatement(this);
	}
};

AssignTupleStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterClosureStatement(this);
	}
};

ClosureStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterFlushStatement(this);
	}
};

FlushStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterDoWhileStatement(this);
	}
};

DoWhileStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterForEachStatement(this);
	}
};

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



MParser.prototype.statement = function() {

    var localctx = new StatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 48, MParser.RULE_statement);
    try {
        this.state = 746;
        var la_ = this._interp.adaptivePredict(this._input,32,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MethodCallStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 727; 
            localctx.stmt = this.method_call();
            break;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        case 19:
            localctx = new CommentStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 19);
            this.state = 745; 
            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 = MParser.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(MParser.FLUSH, 0);
};

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

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

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

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




MParser.prototype.flush_statement = function() {

    var localctx = new Flush_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 50, MParser.RULE_flush_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 748;
        this.match(MParser.FLUSH);
        this.state = 749;
        this.match(MParser.LPAR);
        this.state = 750;
        this.match(MParser.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 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 = MParser.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(MParser.DELETE, 0);
};

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


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


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(MParser.STORE, 0);
};

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

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

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




MParser.prototype.store_statement = function() {

    var localctx = new Store_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 52, MParser.RULE_store_statement);
    try {
        this.state = 772;
        var la_ = this._interp.adaptivePredict(this._input,33,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 752;
            this.match(MParser.DELETE);
            this.state = 753;
            this.match(MParser.LPAR);
            this.state = 754; 
            localctx.to_del = this.expression_list();
            this.state = 755;
            this.match(MParser.RPAR);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 757;
            this.match(MParser.STORE);
            this.state = 758;
            this.match(MParser.LPAR);
            this.state = 759; 
            localctx.to_add = this.expression_list();
            this.state = 760;
            this.match(MParser.RPAR);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 762;
            this.match(MParser.DELETE);
            this.state = 763;
            this.match(MParser.LPAR);
            this.state = 764; 
            localctx.to_del = this.expression_list();
            this.state = 765;
            this.match(MParser.RPAR);
            this.state = 766;
            this.match(MParser.AND);
            this.state = 767;
            this.match(MParser.STORE);
            this.state = 768;
            this.match(MParser.LPAR);
            this.state = 769; 
            localctx.to_add = this.expression_list();
            this.state = 770;
            this.match(MParser.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 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 = MParser.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(MParser.LPAR, 0);
};

Method_callContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterMethod_call(this);
	}
};

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




MParser.prototype.method_call = function() {

    var localctx = new Method_callContext(this, this._ctx, this.state);
    this.enterRule(localctx, 54, MParser.RULE_method_call);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 774; 
        localctx.method = this.method_selector();
        this.state = 775;
        this.match(MParser.LPAR);
        this.state = 777;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 776; 
            localctx.args = this.argument_assignment_list(0);
        }

        this.state = 779;
        this.match(MParser.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 = MParser.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(MParser.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 MParserListener ) {
        listener.enterMethodParent(this);
	}
};

MethodParentContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterMethodName(this);
	}
};

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



MParser.prototype.method_selector = function() {

    var localctx = new Method_selectorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 56, MParser.RULE_method_selector);
    try {
        this.state = 786;
        var la_ = this._interp.adaptivePredict(this._input,35,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MethodNameContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 781; 
            localctx.name = this.method_identifier();
            break;

        case 2:
            localctx = new MethodParentContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 782; 
            localctx.parent = this.callable_parent(0);
            this.state = 783;
            this.match(MParser.DOT);
            this.state = 784; 
            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 = MParser.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 MParserListener ) {
        listener.enterCallableSelector(this);
	}
};

CallableSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterCallableRoot(this);
	}
};

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



MParser.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 = 58;
    this.enterRecursionRule(localctx, 58, MParser.RULE_callable_parent, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new CallableRootContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 789; 
        localctx.name = this.identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 795;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,36,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, MParser.RULE_callable_parent);
                this.state = 791;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 792; 
                localctx.select = this.callable_selector(); 
            }
            this.state = 797;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,36,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 = MParser.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(MParser.LBRAK, 0);
};

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

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

CallableItemSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DOT, 0);
};

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

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



MParser.prototype.callable_selector = function() {

    var localctx = new Callable_selectorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 60, MParser.RULE_callable_selector);
    try {
        this.state = 804;
        switch(this._input.LA(1)) {
        case MParser.DOT:
            localctx = new CallableMemberSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 798;
            this.match(MParser.DOT);
            this.state = 799; 
            localctx.name = this.variable_identifier();
            break;
        case MParser.LBRAK:
            localctx = new CallableItemSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 800;
            this.match(MParser.LBRAK);
            this.state = 801; 
            localctx.exp = this.expression(0);
            this.state = 802;
            this.match(MParser.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 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 = MParser.RULE_with_resource_statement;
    this.stmt = null; // Assign_variable_statementContext
    this.stmts = null; // Statement_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(MParser.WITH, 0);
};

With_resource_statementContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

With_resource_statementContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

With_resource_statementContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

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

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

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

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




MParser.prototype.with_resource_statement = function() {

    var localctx = new With_resource_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 62, MParser.RULE_with_resource_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 806;
        this.match(MParser.WITH);
        this.state = 807; 
        localctx.stmt = this.assign_variable_statement();
        this.state = 808;
        this.match(MParser.COLON);
        this.state = 809; 
        this.indent();
        this.state = 810; 
        localctx.stmts = this.statement_list();
        this.state = 811; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.RULE_with_singleton_statement;
    this.typ = null; // Type_identifierContext
    this.stmts = null; // Statement_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(MParser.WITH, 0);
};

With_singleton_statementContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

With_singleton_statementContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

With_singleton_statementContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

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

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

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

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




MParser.prototype.with_singleton_statement = function() {

    var localctx = new With_singleton_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 64, MParser.RULE_with_singleton_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 813;
        this.match(MParser.WITH);
        this.state = 814; 
        localctx.typ = this.type_identifier();
        this.state = 815;
        this.match(MParser.COLON);
        this.state = 816; 
        this.indent();
        this.state = 817; 
        localctx.stmts = this.statement_list();
        this.state = 818; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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(MParser.SWITCH, 0);
};

Switch_statementContext.prototype.ON = function() {
    return this.getToken(MParser.ON, 0);
};

Switch_statementContext.prototype.COLON = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(MParser.COLON);
    } else {
        return this.getToken(MParser.COLON, i);
    }
};


Switch_statementContext.prototype.indent = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IndentContext);
    } else {
        return this.getTypedRuleContext(IndentContext,i);
    }
};

Switch_statementContext.prototype.dedent = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(DedentContext);
    } else {
        return this.getTypedRuleContext(DedentContext,i);
    }
};

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.lfp = function() {
    return this.getTypedRuleContext(LfpContext,0);
};

Switch_statementContext.prototype.OTHERWISE = function() {
    return this.getToken(MParser.OTHERWISE, 0);
};

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

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

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




MParser.prototype.switch_statement = function() {

    var localctx = new Switch_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 66, MParser.RULE_switch_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 820;
        this.match(MParser.SWITCH);
        this.state = 821;
        this.match(MParser.ON);
        this.state = 822; 
        localctx.exp = this.expression(0);
        this.state = 823;
        this.match(MParser.COLON);
        this.state = 824; 
        this.indent();
        this.state = 825; 
        localctx.cases = this.switch_case_statement_list();
        this.state = 833;
        var la_ = this._interp.adaptivePredict(this._input,38,this._ctx);
        if(la_===1) {
            this.state = 826; 
            this.lfp();
            this.state = 827;
            this.match(MParser.OTHERWISE);
            this.state = 828;
            this.match(MParser.COLON);
            this.state = 829; 
            this.indent();
            this.state = 830; 
            localctx.stmts = this.statement_list();
            this.state = 831; 
            this.dedent();

        }
        this.state = 835; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.WHEN = function() {
    return this.getToken(MParser.WHEN, 0);
};

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

AtomicSwitchCaseContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

AtomicSwitchCaseContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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 MParserListener ) {
        listener.enterAtomicSwitchCase(this);
	}
};

AtomicSwitchCaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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.WHEN = function() {
    return this.getToken(MParser.WHEN, 0);
};

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

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

CollectionSwitchCaseContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

CollectionSwitchCaseContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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 MParserListener ) {
        listener.enterCollectionSwitchCase(this);
	}
};

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



MParser.prototype.switch_case_statement = function() {

    var localctx = new Switch_case_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 68, MParser.RULE_switch_case_statement);
    try {
        this.state = 852;
        var la_ = this._interp.adaptivePredict(this._input,39,this._ctx);
        switch(la_) {
        case 1:
            localctx = new AtomicSwitchCaseContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 837;
            this.match(MParser.WHEN);
            this.state = 838; 
            localctx.exp = this.atomic_literal();
            this.state = 839;
            this.match(MParser.COLON);
            this.state = 840; 
            this.indent();
            this.state = 841; 
            localctx.stmts = this.statement_list();
            this.state = 842; 
            this.dedent();
            break;

        case 2:
            localctx = new CollectionSwitchCaseContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 844;
            this.match(MParser.WHEN);
            this.state = 845;
            this.match(MParser.IN);
            this.state = 846; 
            localctx.exp = this.literal_collection();
            this.state = 847;
            this.match(MParser.COLON);
            this.state = 848; 
            this.indent();
            this.state = 849; 
            localctx.stmts = this.statement_list();
            this.state = 850; 
            this.dedent();
            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 = MParser.RULE_for_each_statement;
    this.name1 = null; // Variable_identifierContext
    this.name2 = null; // Variable_identifierContext
    this.source = null; // ExpressionContext
    this.stmts = null; // Statement_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(MParser.FOR, 0);
};

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

For_each_statementContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

For_each_statementContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

For_each_statementContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};

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

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

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




MParser.prototype.for_each_statement = function() {

    var localctx = new For_each_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 70, MParser.RULE_for_each_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 854;
        this.match(MParser.FOR);
        this.state = 855; 
        localctx.name1 = this.variable_identifier();
        this.state = 858;
        _la = this._input.LA(1);
        if(_la===MParser.COMMA) {
            this.state = 856;
            this.match(MParser.COMMA);
            this.state = 857; 
            localctx.name2 = this.variable_identifier();
        }

        this.state = 860;
        this.match(MParser.IN);
        this.state = 861; 
        localctx.source = this.expression(0);
        this.state = 862;
        this.match(MParser.COLON);
        this.state = 863; 
        this.indent();
        this.state = 864; 
        localctx.stmts = this.statement_list();
        this.state = 865; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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(MParser.DO, 0);
};

Do_while_statementContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

Do_while_statementContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

Do_while_statementContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

Do_while_statementContext.prototype.lfp = function() {
    return this.getTypedRuleContext(LfpContext,0);
};

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

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

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

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

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




MParser.prototype.do_while_statement = function() {

    var localctx = new Do_while_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 72, MParser.RULE_do_while_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 867;
        this.match(MParser.DO);
        this.state = 868;
        this.match(MParser.COLON);
        this.state = 869; 
        this.indent();
        this.state = 870; 
        localctx.stmts = this.statement_list();
        this.state = 871; 
        this.dedent();
        this.state = 872; 
        this.lfp();
        this.state = 873;
        this.match(MParser.WHILE);
        this.state = 874; 
        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 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 = MParser.RULE_while_statement;
    this.exp = null; // ExpressionContext
    this.stmts = null; // Statement_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(MParser.WHILE, 0);
};

While_statementContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

While_statementContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

While_statementContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

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

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

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

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




MParser.prototype.while_statement = function() {

    var localctx = new While_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 74, MParser.RULE_while_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 876;
        this.match(MParser.WHILE);
        this.state = 877; 
        localctx.exp = this.expression(0);
        this.state = 878;
        this.match(MParser.COLON);
        this.state = 879; 
        this.indent();
        this.state = 880; 
        localctx.stmts = this.statement_list();
        this.state = 881; 
        this.dedent();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.RULE_if_statement;
    this.exp = null; // ExpressionContext
    this.stmts = null; // Statement_listContext
    this.elseIfs = null; // Else_if_statement_listContext
    this.elseStmts = null; // Statement_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(MParser.IF, 0);
};

If_statementContext.prototype.COLON = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(MParser.COLON);
    } else {
        return this.getToken(MParser.COLON, i);
    }
};


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

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

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

If_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);
    }
};

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

If_statementContext.prototype.ELSE = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterIf_statement(this);
	}
};

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




MParser.prototype.if_statement = function() {

    var localctx = new If_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 76, MParser.RULE_if_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 883;
        this.match(MParser.IF);
        this.state = 884; 
        localctx.exp = this.expression(0);
        this.state = 885;
        this.match(MParser.COLON);
        this.state = 886; 
        this.indent();
        this.state = 887; 
        localctx.stmts = this.statement_list();
        this.state = 888; 
        this.dedent();
        this.state = 892;
        var la_ = this._interp.adaptivePredict(this._input,41,this._ctx);
        if(la_===1) {
            this.state = 889; 
            this.lfp();
            this.state = 890; 
            localctx.elseIfs = this.else_if_statement_list(0);

        }
        this.state = 901;
        var la_ = this._interp.adaptivePredict(this._input,42,this._ctx);
        if(la_===1) {
            this.state = 894; 
            this.lfp();
            this.state = 895;
            this.match(MParser.ELSE);
            this.state = 896;
            this.match(MParser.COLON);
            this.state = 897; 
            this.indent();
            this.state = 898; 
            localctx.elseStmts = this.statement_list();
            this.state = 899; 
            this.dedent();

        }
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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_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(MParser.ELSE, 0);
};

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

ElseIfStatementListContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

ElseIfStatementListContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

ElseIfStatementListContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

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

ElseIfStatementListContext.prototype.statement_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};
ElseIfStatementListContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterElseIfStatementList(this);
	}
};

ElseIfStatementListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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_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.lfp = function() {
    return this.getTypedRuleContext(LfpContext,0);
};

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

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

ElseIfStatementListItemContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

ElseIfStatementListItemContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

ElseIfStatementListItemContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,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_list = function() {
    return this.getTypedRuleContext(Statement_listContext,0);
};
ElseIfStatementListItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterElseIfStatementListItem(this);
	}
};

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



MParser.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 = 78;
    this.enterRecursionRule(localctx, 78, MParser.RULE_else_if_statement_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new ElseIfStatementListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 904;
        this.match(MParser.ELSE);
        this.state = 905;
        this.match(MParser.IF);
        this.state = 906; 
        localctx.exp = this.expression(0);
        this.state = 907;
        this.match(MParser.COLON);
        this.state = 908; 
        this.indent();
        this.state = 909; 
        localctx.stmts = this.statement_list();
        this.state = 910; 
        this.dedent();
        this._ctx.stop = this._input.LT(-1);
        this.state = 924;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,43,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, MParser.RULE_else_if_statement_list);
                this.state = 912;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 913; 
                this.lfp();
                this.state = 914;
                this.match(MParser.ELSE);
                this.state = 915;
                this.match(MParser.IF);
                this.state = 916; 
                localctx.exp = this.expression(0);
                this.state = 917;
                this.match(MParser.COLON);
                this.state = 918; 
                this.indent();
                this.state = 919; 
                localctx.stmts = this.statement_list();
                this.state = 920; 
                this.dedent(); 
            }
            this.state = 926;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,43,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 = MParser.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.RAISE = function() {
    return this.getToken(MParser.RAISE, 0);
};

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

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

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




MParser.prototype.raise_statement = function() {

    var localctx = new Raise_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 80, MParser.RULE_raise_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 927;
        this.match(MParser.RAISE);
        this.state = 928; 
        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 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 = MParser.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(MParser.TRY, 0);
};

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


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

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

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

Try_statementContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,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.EXCEPT = function() {
    return this.getToken(MParser.EXCEPT, 0);
};

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

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

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

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




MParser.prototype.try_statement = function() {

    var localctx = new Try_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 82, MParser.RULE_try_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 930;
        this.match(MParser.TRY);
        this.state = 931; 
        localctx.name = this.variable_identifier();
        this.state = 932;
        this.match(MParser.COLON);
        this.state = 933; 
        this.indent();
        this.state = 934; 
        localctx.stmts = this.statement_list();
        this.state = 935; 
        this.dedent();
        this.state = 936; 
        this.lfs();
        this.state = 938;
        var la_ = this._interp.adaptivePredict(this._input,44,this._ctx);
        if(la_===1) {
            this.state = 937; 
            localctx.handlers = this.catch_statement_list();

        }
        this.state = 947;
        _la = this._input.LA(1);
        if(_la===MParser.EXCEPT) {
            this.state = 940;
            this.match(MParser.EXCEPT);
            this.state = 941;
            this.match(MParser.COLON);
            this.state = 942; 
            this.indent();
            this.state = 943; 
            localctx.anyStmts = this.statement_list();
            this.state = 944; 
            this.dedent();
            this.state = 945; 
            this.lfs();
        }

        this.state = 956;
        _la = this._input.LA(1);
        if(_la===MParser.FINALLY) {
            this.state = 949;
            this.match(MParser.FINALLY);
            this.state = 950;
            this.match(MParser.COLON);
            this.state = 951; 
            this.indent();
            this.state = 952; 
            localctx.finalStmts = this.statement_list();
            this.state = 953; 
            this.dedent();
            this.state = 954; 
            this.lfs();
        }

        this.state = 958; 
        this.lfs();
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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.EXCEPT = function() {
    return this.getToken(MParser.EXCEPT, 0);
};

CatchAtomicStatementContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

CatchAtomicStatementContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

CatchAtomicStatementContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

CatchAtomicStatementContext.prototype.lfs = function() {
    return this.getTypedRuleContext(LfsContext,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 MParserListener ) {
        listener.enterCatchAtomicStatement(this);
	}
};

CatchAtomicStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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.EXCEPT = function() {
    return this.getToken(MParser.EXCEPT, 0);
};

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

CatchCollectionStatementContext.prototype.LBRAK = function() {
    return this.getToken(MParser.LBRAK, 0);
};

CatchCollectionStatementContext.prototype.RBRAK = function() {
    return this.getToken(MParser.RBRAK, 0);
};

CatchCollectionStatementContext.prototype.COLON = function() {
    return this.getToken(MParser.COLON, 0);
};

CatchCollectionStatementContext.prototype.indent = function() {
    return this.getTypedRuleContext(IndentContext,0);
};

CatchCollectionStatementContext.prototype.dedent = function() {
    return this.getTypedRuleContext(DedentContext,0);
};

CatchCollectionStatementContext.prototype.lfs = function() {
    return this.getTypedRuleContext(LfsContext,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 MParserListener ) {
        listener.enterCatchCollectionStatement(this);
	}
};

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



MParser.prototype.catch_statement = function() {

    var localctx = new Catch_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 84, MParser.RULE_catch_statement);
    try {
        this.state = 979;
        var la_ = this._interp.adaptivePredict(this._input,47,this._ctx);
        switch(la_) {
        case 1:
            localctx = new CatchAtomicStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 960;
            this.match(MParser.EXCEPT);
            this.state = 961; 
            localctx.name = this.symbol_identifier();
            this.state = 962;
            this.match(MParser.COLON);
            this.state = 963; 
            this.indent();
            this.state = 964; 
            localctx.stmts = this.statement_list();
            this.state = 965; 
            this.dedent();
            this.state = 966; 
            this.lfs();
            break;

        case 2:
            localctx = new CatchCollectionStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 968;
            this.match(MParser.EXCEPT);
            this.state = 969;
            this.match(MParser.IN);
            this.state = 970;
            this.match(MParser.LBRAK);
            this.state = 971; 
            localctx.exp = this.symbol_list();
            this.state = 972;
            this.match(MParser.RBRAK);
            this.state = 973;
            this.match(MParser.COLON);
            this.state = 974; 
            this.indent();
            this.state = 975; 
            localctx.stmts = this.statement_list();
            this.state = 976; 
            this.dedent();
            this.state = 977; 
            this.lfs();
            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 = MParser.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(MParser.BREAK, 0);
};

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

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




MParser.prototype.break_statement = function() {

    var localctx = new Break_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 86, MParser.RULE_break_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 981;
        this.match(MParser.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 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 = MParser.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(MParser.RETURN, 0);
};

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

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

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




MParser.prototype.return_statement = function() {

    var localctx = new Return_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 88, MParser.RULE_return_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 983;
        this.match(MParser.RETURN);
        this.state = 985;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 984; 
            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 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 = MParser.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 MParserListener ) {
        listener.enterIntDivideExpression(this);
	}
};

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


function TernaryExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.ifTrue = null; // ExpressionContext;
    this.test = 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.IF = function() {
    return this.getToken(MParser.IF, 0);
};

TernaryExpressionContext.prototype.ELSE = function() {
    return this.getToken(MParser.ELSE, 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 MParserListener ) {
        listener.enterTernaryExpression(this);
	}
};

TernaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CONTAINS, 0);
};

ContainsAllExpressionContext.prototype.ALL = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterContainsAllExpression(this);
	}
};

ContainsAllExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterNotEqualsExpression(this);
	}
};

NotEqualsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterInExpression(this);
	}
};

InExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitInExpression(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.NOT = function() {
    return this.getToken(MParser.NOT, 0);
};

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

NotExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterGreaterThanExpression(this);
	}
};

GreaterThanExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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.OR = function() {
    return this.getToken(MParser.OR, 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 MParserListener ) {
        listener.enterOrExpression(this);
	}
};

OrExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CODE, 0);
};

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

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

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

CodeExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterLessThanOrEqualExpression(this);
	}
};

LessThanOrEqualExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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.AND = function() {
    return this.getToken(MParser.AND, 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 MParserListener ) {
        listener.enterAndExpression(this);
	}
};

AndExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterClosureExpression(this);
	}
};

ClosureExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.NOT, 0);
};

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

NotContainsAnyExpressionContext.prototype.ANY = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterNotContainsAnyExpression(this);
	}
};

NotContainsAnyExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterContainsExpression(this);
	}
};

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


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

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

FilteredListExpressionContext.prototype.filtered_list_suffix = function() {
    return this.getTypedRuleContext(Filtered_list_suffixContext,0);
};

FilteredListExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
FilteredListExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterFilteredListExpression(this);
	}
};

FilteredListExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitFilteredListExpression(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(MParser.NOT, 0);
};

NotContainsExpressionContext.prototype.CONTAINS = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterNotContainsExpression(this);
	}
};

NotContainsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterMultiplyExpression(this);
	}
};

MultiplyExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterRoughlyEqualsExpression(this);
	}
};

RoughlyEqualsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitRoughlyEqualsExpression(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(MParser.EXECUTE, 0);
};

ExecuteExpressionContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

ExecuteExpressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

ExecuteExpressionContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
ExecuteExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterExecuteExpression(this);
	}
};

ExecuteExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterMethodExpression(this);
	}
};

MethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterGreaterThanOrEqualExpression(this);
	}
};

GreaterThanOrEqualExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.NOT, 0);
};

NotInExpressionContext.prototype.IN = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterNotInExpression(this);
	}
};

NotInExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.FOR, 0);
};

IteratorExpressionContext.prototype.IN = function() {
    return this.getToken(MParser.IN, 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 MParserListener ) {
        listener.enterIteratorExpression(this);
	}
};

IteratorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitIteratorExpression(this);
	}
};


function IsNotExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // Is_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(MParser.IS, 0);
};

IsNotExpressionContext.prototype.NOT = function() {
    return this.getToken(MParser.NOT, 0);
};

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

IsNotExpressionContext.prototype.is_expression = function() {
    return this.getTypedRuleContext(Is_expressionContext,0);
};
IsNotExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterIsNotExpression(this);
	}
};

IsNotExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterDivideExpression(this);
	}
};

DivideExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDivideExpression(this);
	}
};


function IsExpressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.right = null; // Is_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(MParser.IS, 0);
};

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

IsExpressionContext.prototype.is_expression = function() {
    return this.getTypedRuleContext(Is_expressionContext,0);
};
IsExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterIsExpression(this);
	}
};

IsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.MINUS, 0);
};

MinusExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
MinusExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMinusExpression(this);
	}
};

MinusExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.PLUS, 0);
};

AddExpressionContext.prototype.MINUS = function() {
    return this.getToken(MParser.MINUS, 0);
};
AddExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterAddExpression(this);
	}
};

AddExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.NOT, 0);
};

NotContainsAllExpressionContext.prototype.CONTAINS = function() {
    return this.getToken(MParser.CONTAINS, 0);
};

NotContainsAllExpressionContext.prototype.ALL = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterNotContainsAllExpression(this);
	}
};

NotContainsAllExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterInstanceExpression(this);
	}
};

InstanceExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitInstanceExpression(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(MParser.CONTAINS, 0);
};

ContainsAnyExpressionContext.prototype.ANY = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterContainsAnyExpression(this);
	}
};

ContainsAnyExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitContainsAnyExpression(this);
	}
};


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

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

CastExpressionContext.prototype.AS = function() {
    return this.getToken(MParser.AS, 0);
};

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

CastExpressionContext.prototype.category_or_any_type = function() {
    return this.getTypedRuleContext(Category_or_any_typeContext,0);
};
CastExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCastExpression(this);
	}
};

CastExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCastExpression(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 MParserListener ) {
        listener.enterModuloExpression(this);
	}
};

ModuloExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterLessThanExpression(this);
	}
};

LessThanExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterEqualsExpression(this);
	}
};

EqualsExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitEqualsExpression(this);
	}
};



MParser.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 = 90;
    this.enterRecursionRule(localctx, 90, MParser.RULE_expression, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1005;
        var la_ = this._interp.adaptivePredict(this._input,49,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MinusExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 988;
            this.match(MParser.MINUS);
            this.state = 989; 
            localctx.exp = this.expression(32);
            break;

        case 2:
            localctx = new NotExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 990;
            this.match(MParser.NOT);
            this.state = 991; 
            localctx.exp = this.expression(31);
            break;

        case 3:
            localctx = new InstanceExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 992; 
            localctx.exp = this.instance_expression(0);
            break;

        case 4:
            localctx = new MethodExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 993; 
            localctx.exp = this.method_expression();
            break;

        case 5:
            localctx = new CodeExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 994;
            this.match(MParser.CODE);
            this.state = 995;
            this.match(MParser.LPAR);
            this.state = 996; 
            localctx.exp = this.expression(0);
            this.state = 997;
            this.match(MParser.RPAR);
            break;

        case 6:
            localctx = new ExecuteExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 999;
            this.match(MParser.EXECUTE);
            this.state = 1000;
            this.match(MParser.LPAR);
            this.state = 1001; 
            localctx.name = this.variable_identifier();
            this.state = 1002;
            this.match(MParser.RPAR);
            break;

        case 7:
            localctx = new ClosureExpressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1004; 
            localctx.exp = this.closure_expression();
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1111;
        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;
                this.state = 1109;
                var la_ = this._interp.adaptivePredict(this._input,50,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new MultiplyExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1007;
                    if (!( this.precpred(this._ctx, 30))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 30)");
                    }
                    this.state = 1008; 
                    this.multiply();
                    this.state = 1009; 
                    localctx.right = this.expression(31);
                    break;

                case 2:
                    localctx = new DivideExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1011;
                    if (!( this.precpred(this._ctx, 29))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 29)");
                    }
                    this.state = 1012; 
                    this.divide();
                    this.state = 1013; 
                    localctx.right = this.expression(30);
                    break;

                case 3:
                    localctx = new ModuloExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1015;
                    if (!( this.precpred(this._ctx, 28))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 28)");
                    }
                    this.state = 1016; 
                    this.modulo();
                    this.state = 1017; 
                    localctx.right = this.expression(29);
                    break;

                case 4:
                    localctx = new IntDivideExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1019;
                    if (!( this.precpred(this._ctx, 27))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 27)");
                    }
                    this.state = 1020; 
                    this.idivide();
                    this.state = 1021; 
                    localctx.right = this.expression(28);
                    break;

                case 5:
                    localctx = new AddExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1023;
                    if (!( this.precpred(this._ctx, 26))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 26)");
                    }
                    this.state = 1024;
                    localctx.op = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(_la===MParser.PLUS || _la===MParser.MINUS)) {
                        localctx.op = this._errHandler.recoverInline(this);
                    }
                    this.consume();
                    this.state = 1025; 
                    localctx.right = this.expression(27);
                    break;

                case 6:
                    localctx = new LessThanExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1026;
                    if (!( this.precpred(this._ctx, 25))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 25)");
                    }
                    this.state = 1027;
                    this.match(MParser.LT);
                    this.state = 1028; 
                    localctx.right = this.expression(26);
                    break;

                case 7:
                    localctx = new LessThanOrEqualExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1029;
                    if (!( this.precpred(this._ctx, 24))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 24)");
                    }
                    this.state = 1030;
                    this.match(MParser.LTE);
                    this.state = 1031; 
                    localctx.right = this.expression(25);
                    break;

                case 8:
                    localctx = new GreaterThanExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1032;
                    if (!( this.precpred(this._ctx, 23))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 23)");
                    }
                    this.state = 1033;
                    this.match(MParser.GT);
                    this.state = 1034; 
                    localctx.right = this.expression(24);
                    break;

                case 9:
                    localctx = new GreaterThanOrEqualExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1035;
                    if (!( this.precpred(this._ctx, 22))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 22)");
                    }
                    this.state = 1036;
                    this.match(MParser.GTE);
                    this.state = 1037; 
                    localctx.right = this.expression(23);
                    break;

                case 10:
                    localctx = new EqualsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1038;
                    if (!( this.precpred(this._ctx, 19))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 19)");
                    }
                    this.state = 1039;
                    this.match(MParser.EQ2);
                    this.state = 1040; 
                    localctx.right = this.expression(20);
                    break;

                case 11:
                    localctx = new NotEqualsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1041;
                    if (!( this.precpred(this._ctx, 18))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 18)");
                    }
                    this.state = 1042;
                    this.match(MParser.XEQ);
                    this.state = 1043; 
                    localctx.right = this.expression(19);
                    break;

                case 12:
                    localctx = new RoughlyEqualsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1044;
                    if (!( this.precpred(this._ctx, 17))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 17)");
                    }
                    this.state = 1045;
                    this.match(MParser.TEQ);
                    this.state = 1046; 
                    localctx.right = this.expression(18);
                    break;

                case 13:
                    localctx = new OrExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1047;
                    if (!( this.precpred(this._ctx, 16))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 16)");
                    }
                    this.state = 1048;
                    this.match(MParser.OR);
                    this.state = 1049; 
                    localctx.right = this.expression(17);
                    break;

                case 14:
                    localctx = new AndExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1050;
                    if (!( this.precpred(this._ctx, 15))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 15)");
                    }
                    this.state = 1051;
                    this.match(MParser.AND);
                    this.state = 1052; 
                    localctx.right = this.expression(16);
                    break;

                case 15:
                    localctx = new TernaryExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.ifTrue = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1053;
                    if (!( this.precpred(this._ctx, 14))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 14)");
                    }
                    this.state = 1054;
                    this.match(MParser.IF);
                    this.state = 1055; 
                    localctx.test = this.expression(0);
                    this.state = 1056;
                    this.match(MParser.ELSE);
                    this.state = 1057; 
                    localctx.ifFalse = this.expression(15);
                    break;

                case 16:
                    localctx = new InExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1059;
                    if (!( this.precpred(this._ctx, 12))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 12)");
                    }
                    this.state = 1060;
                    this.match(MParser.IN);
                    this.state = 1061; 
                    localctx.right = this.expression(13);
                    break;

                case 17:
                    localctx = new ContainsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1062;
                    if (!( this.precpred(this._ctx, 11))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 11)");
                    }
                    this.state = 1063;
                    this.match(MParser.CONTAINS);
                    this.state = 1064; 
                    localctx.right = this.expression(12);
                    break;

                case 18:
                    localctx = new ContainsAllExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1065;
                    if (!( this.precpred(this._ctx, 10))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 10)");
                    }
                    this.state = 1066;
                    this.match(MParser.CONTAINS);
                    this.state = 1067;
                    this.match(MParser.ALL);
                    this.state = 1068; 
                    localctx.right = this.expression(11);
                    break;

                case 19:
                    localctx = new ContainsAnyExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1069;
                    if (!( this.precpred(this._ctx, 9))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 9)");
                    }
                    this.state = 1070;
                    this.match(MParser.CONTAINS);
                    this.state = 1071;
                    this.match(MParser.ANY);
                    this.state = 1072; 
                    localctx.right = this.expression(10);
                    break;

                case 20:
                    localctx = new NotInExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1073;
                    if (!( this.precpred(this._ctx, 8))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 8)");
                    }
                    this.state = 1074;
                    this.match(MParser.NOT);
                    this.state = 1075;
                    this.match(MParser.IN);
                    this.state = 1076; 
                    localctx.right = this.expression(9);
                    break;

                case 21:
                    localctx = new NotContainsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1077;
                    if (!( this.precpred(this._ctx, 7))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)");
                    }
                    this.state = 1078;
                    this.match(MParser.NOT);
                    this.state = 1079;
                    this.match(MParser.CONTAINS);
                    this.state = 1080; 
                    localctx.right = this.expression(8);
                    break;

                case 22:
                    localctx = new NotContainsAllExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1081;
                    if (!( this.precpred(this._ctx, 6))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
                    }
                    this.state = 1082;
                    this.match(MParser.NOT);
                    this.state = 1083;
                    this.match(MParser.CONTAINS);
                    this.state = 1084;
                    this.match(MParser.ALL);
                    this.state = 1085; 
                    localctx.right = this.expression(7);
                    break;

                case 23:
                    localctx = new NotContainsAnyExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1086;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 1087;
                    this.match(MParser.NOT);
                    this.state = 1088;
                    this.match(MParser.CONTAINS);
                    this.state = 1089;
                    this.match(MParser.ANY);
                    this.state = 1090; 
                    localctx.right = this.expression(6);
                    break;

                case 24:
                    localctx = new IteratorExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.exp = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1091;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 1092;
                    this.match(MParser.FOR);
                    this.state = 1093; 
                    localctx.name = this.variable_identifier();
                    this.state = 1094;
                    this.match(MParser.IN);
                    this.state = 1095; 
                    localctx.source = this.expression(2);
                    break;

                case 25:
                    localctx = new FilteredListExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.src = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1097;
                    if (!( this.precpred(this._ctx, 34))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 34)");
                    }
                    this.state = 1098; 
                    this.filtered_list_suffix();
                    break;

                case 26:
                    localctx = new IsNotExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1099;
                    if (!( this.precpred(this._ctx, 21))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 21)");
                    }
                    this.state = 1100;
                    this.match(MParser.IS);
                    this.state = 1101;
                    this.match(MParser.NOT);
                    this.state = 1102; 
                    localctx.right = this.is_expression();
                    break;

                case 27:
                    localctx = new IsExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1103;
                    if (!( this.precpred(this._ctx, 20))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 20)");
                    }
                    this.state = 1104;
                    this.match(MParser.IS);
                    this.state = 1105; 
                    localctx.right = this.is_expression();
                    break;

                case 28:
                    localctx = new CastExpressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_expression);
                    this.state = 1106;
                    if (!( this.precpred(this._ctx, 13))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 13)");
                    }
                    this.state = 1107;
                    this.match(MParser.AS);
                    this.state = 1108; 
                    localctx.right = this.category_or_any_type();
                    break;

                } 
            }
            this.state = 1113;
            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 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 = MParser.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 MParserListener ) {
        listener.enterClosure_expression(this);
	}
};

Closure_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitClosure_expression(this);
	}
};




MParser.prototype.closure_expression = function() {

    var localctx = new Closure_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 92, MParser.RULE_closure_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1114; 
        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 = MParser.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; // Instance_selectorContext;
    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.instance_selector = function() {
    return this.getTypedRuleContext(Instance_selectorContext,0);
};
SelectorExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSelectorExpression(this);
	}
};

SelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterSelectableExpression(this);
	}
};

SelectableExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSelectableExpression(this);
	}
};



MParser.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 = 94;
    this.enterRecursionRule(localctx, 94, MParser.RULE_instance_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new SelectableExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1117; 
        localctx.parent = this.selectable_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1123;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,52,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, MParser.RULE_instance_expression);
                this.state = 1119;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1120; 
                localctx.selector = this.instance_selector(); 
            }
            this.state = 1125;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,52,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 = MParser.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.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 MParserListener ) {
        listener.enterMethod_expression(this);
	}
};

Method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitMethod_expression(this);
	}
};




MParser.prototype.method_expression = function() {

    var localctx = new Method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 96, MParser.RULE_method_expression);
    try {
        this.state = 1134;
        var la_ = this._interp.adaptivePredict(this._input,53,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1126; 
            this.blob_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1127; 
            this.document_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1128; 
            this.fetch_store_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1129; 
            this.read_all_expression();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1130; 
            this.read_one_expression();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1131; 
            this.sorted_expression();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 1132; 
            this.method_call();
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 1133; 
            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 Instance_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 = MParser.RULE_instance_selector;
    return this;
}

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


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


function SliceSelectorContext(parser, ctx) {
	Instance_selectorContext.call(this, parser);
    this.xslice = null; // Slice_argumentsContext;
    Instance_selectorContext.prototype.copyFrom.call(this, ctx);
    return this;
}

SliceSelectorContext.prototype = Object.create(Instance_selectorContext.prototype);
SliceSelectorContext.prototype.constructor = SliceSelectorContext;

SliceSelectorContext.prototype.LBRAK = function() {
    return this.getToken(MParser.LBRAK, 0);
};

SliceSelectorContext.prototype.RBRAK = function() {
    return this.getToken(MParser.RBRAK, 0);
};

SliceSelectorContext.prototype.slice_arguments = function() {
    return this.getTypedRuleContext(Slice_argumentsContext,0);
};
SliceSelectorContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSliceSelector(this);
	}
};

SliceSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSliceSelector(this);
	}
};


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

MemberSelectorContext.prototype = Object.create(Instance_selectorContext.prototype);
MemberSelectorContext.prototype.constructor = MemberSelectorContext;

MemberSelectorContext.prototype.DOT = function() {
    return this.getToken(MParser.DOT, 0);
};

MemberSelectorContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
MemberSelectorContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMemberSelector(this);
	}
};

MemberSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitMemberSelector(this);
	}
};


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

ItemSelectorContext.prototype = Object.create(Instance_selectorContext.prototype);
ItemSelectorContext.prototype.constructor = ItemSelectorContext;

ItemSelectorContext.prototype.LBRAK = function() {
    return this.getToken(MParser.LBRAK, 0);
};

ItemSelectorContext.prototype.RBRAK = function() {
    return this.getToken(MParser.RBRAK, 0);
};

ItemSelectorContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
ItemSelectorContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterItemSelector(this);
	}
};

ItemSelectorContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitItemSelector(this);
	}
};



MParser.prototype.instance_selector = function() {

    var localctx = new Instance_selectorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 98, MParser.RULE_instance_selector);
    try {
        this.state = 1149;
        var la_ = this._interp.adaptivePredict(this._input,54,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MemberSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1136;
            if (!( this.wasNot(MParser.WS))) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.wasNot(MParser.WS)");
            }
            this.state = 1137;
            this.match(MParser.DOT);
            this.state = 1138; 
            localctx.name = this.variable_identifier();
            break;

        case 2:
            localctx = new SliceSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1139;
            if (!( this.wasNot(MParser.WS))) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.wasNot(MParser.WS)");
            }
            this.state = 1140;
            this.match(MParser.LBRAK);
            this.state = 1141; 
            localctx.xslice = this.slice_arguments();
            this.state = 1142;
            this.match(MParser.RBRAK);
            break;

        case 3:
            localctx = new ItemSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1144;
            if (!( this.wasNot(MParser.WS))) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.wasNot(MParser.WS)");
            }
            this.state = 1145;
            this.match(MParser.LBRAK);
            this.state = 1146; 
            localctx.exp = this.expression(0);
            this.state = 1147;
            this.match(MParser.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 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 = MParser.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(MParser.BLOB, 0);
};

Blob_expressionContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

Blob_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

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

Blob_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterBlob_expression(this);
	}
};

Blob_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitBlob_expression(this);
	}
};




MParser.prototype.blob_expression = function() {

    var localctx = new Blob_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 100, MParser.RULE_blob_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1151;
        this.match(MParser.BLOB);
        this.state = 1152;
        this.match(MParser.LPAR);
        this.state = 1154;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 1153; 
            this.expression(0);
        }

        this.state = 1156;
        this.match(MParser.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 = MParser.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(MParser.DOCUMENT, 0);
};

Document_expressionContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

Document_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

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

Document_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDocument_expression(this);
	}
};

Document_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDocument_expression(this);
	}
};




MParser.prototype.document_expression = function() {

    var localctx = new Document_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 102, MParser.RULE_document_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1158;
        this.match(MParser.DOCUMENT);
        this.state = 1159;
        this.match(MParser.LPAR);
        this.state = 1161;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 1160; 
            this.expression(0);
        }

        this.state = 1163;
        this.match(MParser.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 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 = MParser.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(MParser.LPAR, 0);
};

Constructor_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterConstructor_expression(this);
	}
};

Constructor_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitConstructor_expression(this);
	}
};




MParser.prototype.constructor_expression = function() {

    var localctx = new Constructor_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 104, MParser.RULE_constructor_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1165; 
        localctx.typ = this.mutable_category_type();
        this.state = 1166;
        this.match(MParser.LPAR);
        this.state = 1168;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 1167; 
            localctx.args = this.argument_assignment_list(0);
        }

        this.state = 1170;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterExpressionAssignmentList(this);
	}
};

ExpressionAssignmentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterArgumentAssignmentList(this);
	}
};

ArgumentAssignmentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterArgumentAssignmentListItem(this);
	}
};

ArgumentAssignmentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitArgumentAssignmentListItem(this);
	}
};



MParser.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 = 106;
    this.enterRecursionRule(localctx, 106, MParser.RULE_argument_assignment_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1177;
        var la_ = this._interp.adaptivePredict(this._input,58,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ExpressionAssignmentListContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 1173; 
            localctx.exp = this.expression(0);
            this.state = 1174;
            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 = 1176; 
            localctx.item = this.argument_assignment();
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1184;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,59,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, MParser.RULE_argument_assignment_list);
                this.state = 1179;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1180;
                this.match(MParser.COMMA);
                this.state = 1181; 
                localctx.item = this.argument_assignment(); 
            }
            this.state = 1186;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,59,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 = MParser.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 MParserListener ) {
        listener.enterArgument_assignment(this);
	}
};

Argument_assignmentContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitArgument_assignment(this);
	}
};




MParser.prototype.argument_assignment = function() {

    var localctx = new Argument_assignmentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 108, MParser.RULE_argument_assignment);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1187; 
        localctx.name = this.variable_identifier();
        this.state = 1188; 
        this.assign();
        this.state = 1189; 
        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 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 = MParser.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(MParser.WRITE, 0);
};

Write_statementContext.prototype.TO = function() {
    return this.getToken(MParser.TO, 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 MParserListener ) {
        listener.enterWrite_statement(this);
	}
};

Write_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitWrite_statement(this);
	}
};




MParser.prototype.write_statement = function() {

    var localctx = new Write_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 110, MParser.RULE_write_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1191;
        this.match(MParser.WRITE);
        this.state = 1192; 
        localctx.what = this.expression(0);
        this.state = 1193;
        this.match(MParser.TO);
        this.state = 1194; 
        localctx.target = 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 Filtered_list_suffixContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = MParser.RULE_filtered_list_suffix;
    this.name = null; // Variable_identifierContext
    this.predicate = null; // ExpressionContext
    return this;
}

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

Filtered_list_suffixContext.prototype.FILTERED = function() {
    return this.getToken(MParser.FILTERED, 0);
};

Filtered_list_suffixContext.prototype.WITH = function() {
    return this.getToken(MParser.WITH, 0);
};

Filtered_list_suffixContext.prototype.WHERE = function() {
    return this.getToken(MParser.WHERE, 0);
};

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

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

Filtered_list_suffixContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterFiltered_list_suffix(this);
	}
};

Filtered_list_suffixContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitFiltered_list_suffix(this);
	}
};




MParser.prototype.filtered_list_suffix = function() {

    var localctx = new Filtered_list_suffixContext(this, this._ctx, this.state);
    this.enterRule(localctx, 112, MParser.RULE_filtered_list_suffix);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1196;
        this.match(MParser.FILTERED);
        this.state = 1197;
        this.match(MParser.WITH);
        this.state = 1198; 
        localctx.name = this.variable_identifier();
        this.state = 1199;
        this.match(MParser.WHERE);
        this.state = 1200; 
        localctx.predicate = 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 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 = MParser.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(MParser.FETCH, 0);
};

FetchOneContext.prototype.ONE = function() {
    return this.getToken(MParser.ONE, 0);
};

FetchOneContext.prototype.WHERE = function() {
    return this.getToken(MParser.WHERE, 0);
};

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 MParserListener ) {
        listener.enterFetchOne(this);
	}
};

FetchOneContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitFetchOne(this);
	}
};


function FetchManyContext(parser, ctx) {
	Fetch_store_expressionContext.call(this, parser);
    this.xstart = null; // ExpressionContext;
    this.xstop = null; // ExpressionContext;
    this.typ = null; // Mutable_category_typeContext;
    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(MParser.FETCH, 0);
};

FetchManyContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

FetchManyContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

FetchManyContext.prototype.ALL = function() {
    return this.getToken(MParser.ALL, 0);
};

FetchManyContext.prototype.ROWS = function() {
    return this.getToken(MParser.ROWS, 0);
};

FetchManyContext.prototype.TO = function() {
    return this.getToken(MParser.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.WHERE = function() {
    return this.getToken(MParser.WHERE, 0);
};

FetchManyContext.prototype.ORDER = function() {
    return this.getToken(MParser.ORDER, 0);
};

FetchManyContext.prototype.BY = function() {
    return this.getToken(MParser.BY, 0);
};

FetchManyContext.prototype.mutable_category_type = function() {
    return this.getTypedRuleContext(Mutable_category_typeContext,0);
};

FetchManyContext.prototype.order_by_list = function() {
    return this.getTypedRuleContext(Order_by_listContext,0);
};
FetchManyContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterFetchMany(this);
	}
};

FetchManyContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitFetchMany(this);
	}
};



MParser.prototype.fetch_store_expression = function() {

    var localctx = new Fetch_store_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 114, MParser.RULE_fetch_store_expression);
    var _la = 0; // Token type
    try {
        this.state = 1232;
        var la_ = this._interp.adaptivePredict(this._input,65,this._ctx);
        switch(la_) {
        case 1:
            localctx = new FetchOneContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1202;
            this.match(MParser.FETCH);
            this.state = 1203;
            this.match(MParser.ONE);
            this.state = 1205;
            _la = this._input.LA(1);
            if(_la===MParser.MUTABLE || _la===MParser.TYPE_IDENTIFIER) {
                this.state = 1204; 
                localctx.typ = this.mutable_category_type();
            }

            this.state = 1207;
            this.match(MParser.WHERE);
            this.state = 1208; 
            localctx.predicate = this.expression(0);
            break;

        case 2:
            localctx = new FetchManyContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1209;
            this.match(MParser.FETCH);
            this.state = 1216;
            switch(this._input.LA(1)) {
            case MParser.ALL:
                this.state = 1210;
                this.match(MParser.ALL);
                break;
            case MParser.ROWS:
                this.state = 1211;
                this.match(MParser.ROWS);
                this.state = 1212; 
                localctx.xstart = this.expression(0);
                this.state = 1213;
                this.match(MParser.TO);
                this.state = 1214; 
                localctx.xstop = this.expression(0);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 1218;
            this.match(MParser.LPAR);
            this.state = 1220;
            _la = this._input.LA(1);
            if(_la===MParser.MUTABLE || _la===MParser.TYPE_IDENTIFIER) {
                this.state = 1219; 
                localctx.typ = this.mutable_category_type();
            }

            this.state = 1222;
            this.match(MParser.RPAR);
            this.state = 1225;
            var la_ = this._interp.adaptivePredict(this._input,63,this._ctx);
            if(la_===1) {
                this.state = 1223;
                this.match(MParser.WHERE);
                this.state = 1224; 
                localctx.predicate = this.expression(0);

            }
            this.state = 1230;
            var la_ = this._interp.adaptivePredict(this._input,64,this._ctx);
            if(la_===1) {
                this.state = 1227;
                this.match(MParser.ORDER);
                this.state = 1228;
                this.match(MParser.BY);
                this.state = 1229; 
                localctx.orderby = this.order_by_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 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 = MParser.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(MParser.SORTED, 0);
};

Sorted_expressionContext.prototype.LPAR = function() {
    return this.getToken(MParser.LPAR, 0);
};

Sorted_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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(MParser.DESC, 0);
};

Sorted_expressionContext.prototype.COMMA = function() {
    return this.getToken(MParser.COMMA, 0);
};

Sorted_expressionContext.prototype.key_token = function() {
    return this.getTypedRuleContext(Key_tokenContext,0);
};

Sorted_expressionContext.prototype.EQ = function() {
    return this.getToken(MParser.EQ, 0);
};

Sorted_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSorted_expression(this);
	}
};

Sorted_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSorted_expression(this);
	}
};




MParser.prototype.sorted_expression = function() {

    var localctx = new Sorted_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 116, MParser.RULE_sorted_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1234;
        this.match(MParser.SORTED);
        this.state = 1236;
        _la = this._input.LA(1);
        if(_la===MParser.DESC) {
            this.state = 1235;
            this.match(MParser.DESC);
        }

        this.state = 1238;
        this.match(MParser.LPAR);
        this.state = 1239; 
        localctx.source = this.instance_expression(0);
        this.state = 1245;
        _la = this._input.LA(1);
        if(_la===MParser.COMMA) {
            this.state = 1240;
            this.match(MParser.COMMA);
            this.state = 1241; 
            this.key_token();
            this.state = 1242;
            this.match(MParser.EQ);
            this.state = 1243; 
            localctx.key = this.instance_expression(0);
        }

        this.state = 1247;
        this.match(MParser.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 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 = MParser.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.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 MParserListener ) {
        listener.enterAssign_instance_statement(this);
	}
};

Assign_instance_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitAssign_instance_statement(this);
	}
};




MParser.prototype.assign_instance_statement = function() {

    var localctx = new Assign_instance_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 118, MParser.RULE_assign_instance_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1249; 
        localctx.inst = this.assignable_instance(0);
        this.state = 1250; 
        this.assign();
        this.state = 1251; 
        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 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 = MParser.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(MParser.DOT, 0);
};

MemberInstanceContext.prototype.variable_identifier = function() {
    return this.getTypedRuleContext(Variable_identifierContext,0);
};
MemberInstanceContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMemberInstance(this);
	}
};

MemberInstanceContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.LBRAK, 0);
};

ItemInstanceContext.prototype.RBRAK = function() {
    return this.getToken(MParser.RBRAK, 0);
};

ItemInstanceContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
ItemInstanceContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterItemInstance(this);
	}
};

ItemInstanceContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitItemInstance(this);
	}
};



MParser.prototype.child_instance = function() {

    var localctx = new Child_instanceContext(this, this._ctx, this.state);
    this.enterRule(localctx, 120, MParser.RULE_child_instance);
    try {
        this.state = 1261;
        var la_ = this._interp.adaptivePredict(this._input,68,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MemberInstanceContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1253;
            if (!( this.wasNot(MParser.WS))) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.wasNot(MParser.WS)");
            }
            this.state = 1254;
            this.match(MParser.DOT);
            this.state = 1255; 
            localctx.name = this.variable_identifier();
            break;

        case 2:
            localctx = new ItemInstanceContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1256;
            if (!( this.wasNot(MParser.WS))) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.wasNot(MParser.WS)");
            }
            this.state = 1257;
            this.match(MParser.LBRAK);
            this.state = 1258; 
            localctx.exp = this.expression(0);
            this.state = 1259;
            this.match(MParser.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 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 = MParser.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.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 MParserListener ) {
        listener.enterAssign_tuple_statement(this);
	}
};

Assign_tuple_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitAssign_tuple_statement(this);
	}
};




MParser.prototype.assign_tuple_statement = function() {

    var localctx = new Assign_tuple_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 122, MParser.RULE_assign_tuple_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1263; 
        localctx.items = this.variable_identifier_list();
        this.state = 1264; 
        this.assign();
        this.state = 1265; 
        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 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 = MParser.RULE_lfs;
    return this;
}

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

LfsContext.prototype.LF = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(MParser.LF);
    } else {
        return this.getToken(MParser.LF, i);
    }
};


LfsContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterLfs(this);
	}
};

LfsContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitLfs(this);
	}
};




MParser.prototype.lfs = function() {

    var localctx = new LfsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 124, MParser.RULE_lfs);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1270;
        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) {
                this.state = 1267;
                this.match(MParser.LF); 
            }
            this.state = 1272;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,69,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 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 = MParser.RULE_lfp;
    return this;
}

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

LfpContext.prototype.LF = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(MParser.LF);
    } else {
        return this.getToken(MParser.LF, i);
    }
};


LfpContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterLfp(this);
	}
};

LfpContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitLfp(this);
	}
};




MParser.prototype.lfp = function() {

    var localctx = new LfpContext(this, this._ctx, this.state);
    this.enterRule(localctx, 126, MParser.RULE_lfp);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1274; 
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        do {
            this.state = 1273;
            this.match(MParser.LF);
            this.state = 1276; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        } while(_la===MParser.LF);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

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

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

IndentContext.prototype.INDENT = function() {
    return this.getToken(MParser.INDENT, 0);
};

IndentContext.prototype.LF = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(MParser.LF);
    } else {
        return this.getToken(MParser.LF, i);
    }
};


IndentContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterIndent(this);
	}
};

IndentContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitIndent(this);
	}
};




MParser.prototype.indent = function() {

    var localctx = new IndentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 128, MParser.RULE_indent);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1279; 
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        do {
            this.state = 1278;
            this.match(MParser.LF);
            this.state = 1281; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        } while(_la===MParser.LF);
        this.state = 1283;
        this.match(MParser.INDENT);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

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

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

DedentContext.prototype.DEDENT = function() {
    return this.getToken(MParser.DEDENT, 0);
};

DedentContext.prototype.LF = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(MParser.LF);
    } else {
        return this.getToken(MParser.LF, i);
    }
};


DedentContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDedent(this);
	}
};

DedentContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDedent(this);
	}
};




MParser.prototype.dedent = function() {

    var localctx = new DedentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 130, MParser.RULE_dedent);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1288;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.LF) {
            this.state = 1285;
            this.match(MParser.LF);
            this.state = 1290;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1291;
        this.match(MParser.DEDENT);
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.RULE_null_literal;
    return this;
}

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

Null_literalContext.prototype.NONE = function() {
    return this.getToken(MParser.NONE, 0);
};

Null_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterNull_literal(this);
	}
};

Null_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitNull_literal(this);
	}
};




MParser.prototype.null_literal = function() {

    var localctx = new Null_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 132, MParser.RULE_null_literal);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1293;
        this.match(MParser.NONE);
    } catch (re) {
    	if(re instanceof antlr4.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 = MParser.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(MParser.EOF, 0);
};

FullDeclarationListContext.prototype.declarations = function() {
    return this.getTypedRuleContext(DeclarationsContext,0);
};
FullDeclarationListContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterFullDeclarationList(this);
	}
};

FullDeclarationListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitFullDeclarationList(this);
	}
};



MParser.prototype.declaration_list = function() {

    var localctx = new Declaration_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 134, MParser.RULE_declaration_list);
    var _la = 0; // Token type
    try {
        localctx = new FullDeclarationListContext(this, localctx);
        this.enterOuterAlt(localctx, 1);
        this.state = 1296;
        _la = this._input.LA(1);
        if(_la===MParser.COMMENT || ((((_la - 67)) & ~0x1f) == 0 && ((1 << (_la - 67)) & ((1 << (MParser.ABSTRACT - 67)) | (1 << (MParser.ATTR - 67)) | (1 << (MParser.CATEGORY - 67)) | (1 << (MParser.CLASS - 67)) | (1 << (MParser.DEF - 67)) | (1 << (MParser.ENUM - 67)))) !== 0) || ((((_la - 118)) & ~0x1f) == 0 && ((1 << (_la - 118)) & ((1 << (MParser.NATIVE - 118)) | (1 << (MParser.SINGLETON - 118)) | (1 << (MParser.STORABLE - 118)))) !== 0)) {
            this.state = 1295; 
            this.declarations();
        }

        this.state = 1298; 
        this.lfs();
        this.state = 1299;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterDeclarations(this);
	}
};

DeclarationsContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDeclarations(this);
	}
};




MParser.prototype.declarations = function() {

    var localctx = new DeclarationsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 136, MParser.RULE_declarations);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1301; 
        this.declaration();
        this.state = 1307;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,74,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1302; 
                this.lfp();
                this.state = 1303; 
                this.declaration(); 
            }
            this.state = 1309;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,74,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 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 = MParser.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 MParserListener ) {
        listener.enterDeclaration(this);
	}
};

DeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDeclaration(this);
	}
};




MParser.prototype.declaration = function() {

    var localctx = new DeclarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 138, MParser.RULE_declaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1315;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMENT) {
            this.state = 1310; 
            this.comment_statement();
            this.state = 1311; 
            this.lfp();
            this.state = 1317;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1323;
        var la_ = this._interp.adaptivePredict(this._input,76,this._ctx);
        switch(la_) {
        case 1:
            this.state = 1318; 
            this.attribute_declaration();
            break;

        case 2:
            this.state = 1319; 
            this.category_declaration();
            break;

        case 3:
            this.state = 1320; 
            this.resource_declaration();
            break;

        case 4:
            this.state = 1321; 
            this.enum_declaration();
            break;

        case 5:
            this.state = 1322; 
            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 = MParser.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 MParserListener ) {
        listener.enterResource_declaration(this);
	}
};

Resource_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitResource_declaration(this);
	}
};




MParser.prototype.resource_declaration = function() {

    var localctx = new Resource_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 140, MParser.RULE_resource_declaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1325; 
        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 = MParser.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 MParserListener ) {
        listener.enterEnum_declaration(this);
	}
};

Enum_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitEnum_declaration(this);
	}
};




MParser.prototype.enum_declaration = function() {

    var localctx = new Enum_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 142, MParser.RULE_enum_declaration);
    try {
        this.state = 1329;
        var la_ = this._interp.adaptivePredict(this._input,77,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1327; 
            this.enum_category_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1328; 
            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 = MParser.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 MParserListener ) {
        listener.enterNative_symbol_list(this);
	}
};

Native_symbol_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitNative_symbol_list(this);
	}
};




MParser.prototype.native_symbol_list = function() {

    var localctx = new Native_symbol_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 144, MParser.RULE_native_symbol_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1331; 
        this.native_symbol();
        this.state = 1337;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,78,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1332; 
                this.lfp();
                this.state = 1333; 
                this.native_symbol(); 
            }
            this.state = 1339;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,78,this._ctx);
        }

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

function 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 = MParser.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 MParserListener ) {
        listener.enterCategory_symbol_list(this);
	}
};

Category_symbol_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCategory_symbol_list(this);
	}
};




MParser.prototype.category_symbol_list = function() {

    var localctx = new Category_symbol_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 146, MParser.RULE_category_symbol_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1340; 
        this.category_symbol();
        this.state = 1346;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,79,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1341; 
                this.lfp();
                this.state = 1342; 
                this.category_symbol(); 
            }
            this.state = 1348;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,79,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 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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Symbol_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSymbol_list(this);
	}
};

Symbol_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSymbol_list(this);
	}
};




MParser.prototype.symbol_list = function() {

    var localctx = new Symbol_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 148, MParser.RULE_symbol_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1349; 
        this.symbol_identifier();
        this.state = 1354;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1350;
            this.match(MParser.COMMA);
            this.state = 1351; 
            this.symbol_identifier();
            this.state = 1356;
            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 = MParser.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(MParser.IN, 0);
};

MatchingSetContext.prototype.set_literal = function() {
    return this.getTypedRuleContext(Set_literalContext,0);
};
MatchingSetContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMatchingSet(this);
	}
};

MatchingSetContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.MATCHING, 0);
};

MatchingPatternContext.prototype.TEXT_LITERAL = function() {
    return this.getToken(MParser.TEXT_LITERAL, 0);
};
MatchingPatternContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMatchingPattern(this);
	}
};

MatchingPatternContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.IN, 0);
};

MatchingListContext.prototype.list_literal = function() {
    return this.getTypedRuleContext(List_literalContext,0);
};
MatchingListContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMatchingList(this);
	}
};

MatchingListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.IN, 0);
};

MatchingRangeContext.prototype.range_literal = function() {
    return this.getTypedRuleContext(Range_literalContext,0);
};
MatchingRangeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMatchingRange(this);
	}
};

MatchingRangeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.MATCHING, 0);
};

MatchingExpressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
MatchingExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMatchingExpression(this);
	}
};

MatchingExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitMatchingExpression(this);
	}
};



MParser.prototype.attribute_constraint = function() {

    var localctx = new Attribute_constraintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 150, MParser.RULE_attribute_constraint);
    try {
        this.state = 1367;
        var la_ = this._interp.adaptivePredict(this._input,81,this._ctx);
        switch(la_) {
        case 1:
            localctx = new MatchingListContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1357;
            this.match(MParser.IN);
            this.state = 1358; 
            localctx.source = this.list_literal();
            break;

        case 2:
            localctx = new MatchingSetContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1359;
            this.match(MParser.IN);
            this.state = 1360; 
            localctx.source = this.set_literal();
            break;

        case 3:
            localctx = new MatchingRangeContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1361;
            this.match(MParser.IN);
            this.state = 1362; 
            localctx.source = this.range_literal();
            break;

        case 4:
            localctx = new MatchingPatternContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1363;
            this.match(MParser.MATCHING);
            this.state = 1364;
            localctx.text = this.match(MParser.TEXT_LITERAL);
            break;

        case 5:
            localctx = new MatchingExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1365;
            this.match(MParser.MATCHING);
            this.state = 1366; 
            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 = MParser.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(MParser.LBRAK, 0);
};

List_literalContext.prototype.RBRAK = function() {
    return this.getToken(MParser.RBRAK, 0);
};

List_literalContext.prototype.MUTABLE = function() {
    return this.getToken(MParser.MUTABLE, 0);
};

List_literalContext.prototype.expression_list = function() {
    return this.getTypedRuleContext(Expression_listContext,0);
};

List_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterList_literal(this);
	}
};

List_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitList_literal(this);
	}
};




MParser.prototype.list_literal = function() {

    var localctx = new List_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 152, MParser.RULE_list_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1370;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1369;
            this.match(MParser.MUTABLE);
        }

        this.state = 1372;
        this.match(MParser.LBRAK);
        this.state = 1374;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 1373; 
            this.expression_list();
        }

        this.state = 1376;
        this.match(MParser.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 = MParser.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(MParser.LT, 0);
};

Set_literalContext.prototype.GT = function() {
    return this.getToken(MParser.GT, 0);
};

Set_literalContext.prototype.MUTABLE = function() {
    return this.getToken(MParser.MUTABLE, 0);
};

Set_literalContext.prototype.expression_list = function() {
    return this.getTypedRuleContext(Expression_listContext,0);
};

Set_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSet_literal(this);
	}
};

Set_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSet_literal(this);
	}
};




MParser.prototype.set_literal = function() {

    var localctx = new Set_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 154, MParser.RULE_set_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1379;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1378;
            this.match(MParser.MUTABLE);
        }

        this.state = 1381;
        this.match(MParser.LT);
        this.state = 1383;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 1382; 
            this.expression_list();
        }

        this.state = 1385;
        this.match(MParser.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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Expression_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterExpression_list(this);
	}
};

Expression_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitExpression_list(this);
	}
};




MParser.prototype.expression_list = function() {

    var localctx = new Expression_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 156, MParser.RULE_expression_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1387; 
        this.expression(0);
        this.state = 1392;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1388;
            this.match(MParser.COMMA);
            this.state = 1389; 
            this.expression(0);
            this.state = 1394;
            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 = MParser.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(MParser.LBRAK, 0);
};

Range_literalContext.prototype.RANGE = function() {
    return this.getToken(MParser.RANGE, 0);
};

Range_literalContext.prototype.RBRAK = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterRange_literal(this);
	}
};

Range_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitRange_literal(this);
	}
};




MParser.prototype.range_literal = function() {

    var localctx = new Range_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 158, MParser.RULE_range_literal);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1395;
        this.match(MParser.LBRAK);
        this.state = 1396; 
        localctx.low = this.expression(0);
        this.state = 1397;
        this.match(MParser.RANGE);
        this.state = 1398; 
        localctx.high = this.expression(0);
        this.state = 1399;
        this.match(MParser.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 = MParser.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(MParser.ITERATOR, 0);
};

IteratorTypeContext.prototype.LT = function() {
    return this.getToken(MParser.LT, 0);
};

IteratorTypeContext.prototype.GT = function() {
    return this.getToken(MParser.GT, 0);
};

IteratorTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
IteratorTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterIteratorType(this);
	}
};

IteratorTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.LTGT, 0);
};

SetTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
SetTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSetType(this);
	}
};

SetTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.LBRAK, 0);
};

ListTypeContext.prototype.RBRAK = function() {
    return this.getToken(MParser.RBRAK, 0);
};

ListTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
ListTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterListType(this);
	}
};

ListTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.LCURL, 0);
};

DictTypeContext.prototype.RCURL = function() {
    return this.getToken(MParser.RCURL, 0);
};

DictTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
DictTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDictType(this);
	}
};

DictTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CURSOR, 0);
};

CursorTypeContext.prototype.LT = function() {
    return this.getToken(MParser.LT, 0);
};

CursorTypeContext.prototype.GT = function() {
    return this.getToken(MParser.GT, 0);
};

CursorTypeContext.prototype.typedef = function() {
    return this.getTypedRuleContext(TypedefContext,0);
};
CursorTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCursorType(this);
	}
};

CursorTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterPrimaryType(this);
	}
};

PrimaryTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPrimaryType(this);
	}
};



MParser.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 = 160;
    this.enterRecursionRule(localctx, 160, MParser.RULE_typedef, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1413;
        switch(this._input.LA(1)) {
        case MParser.BOOLEAN:
        case MParser.CHARACTER:
        case MParser.TEXT:
        case MParser.INTEGER:
        case MParser.DECIMAL:
        case MParser.DATE:
        case MParser.TIME:
        case MParser.DATETIME:
        case MParser.PERIOD:
        case MParser.CODE:
        case MParser.DOCUMENT:
        case MParser.BLOB:
        case MParser.IMAGE:
        case MParser.UUID:
        case MParser.TYPE_IDENTIFIER:
            localctx = new PrimaryTypeContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 1402; 
            localctx.p = this.primary_type();
            break;
        case MParser.CURSOR:
            localctx = new CursorTypeContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1403;
            this.match(MParser.CURSOR);
            this.state = 1404;
            this.match(MParser.LT);
            this.state = 1405; 
            localctx.c = this.typedef(0);
            this.state = 1406;
            this.match(MParser.GT);
            break;
        case MParser.ITERATOR:
            localctx = new IteratorTypeContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1408;
            this.match(MParser.ITERATOR);
            this.state = 1409;
            this.match(MParser.LT);
            this.state = 1410; 
            localctx.i = this.typedef(0);
            this.state = 1411;
            this.match(MParser.GT);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1425;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,89,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 = 1423;
                var la_ = this._interp.adaptivePredict(this._input,88,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new SetTypeContext(this, new TypedefContext(this, _parentctx, _parentState));
                    localctx.s = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_typedef);
                    this.state = 1415;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 1416;
                    this.match(MParser.LTGT);
                    break;

                case 2:
                    localctx = new ListTypeContext(this, new TypedefContext(this, _parentctx, _parentState));
                    localctx.l = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_typedef);
                    this.state = 1417;
                    if (!( this.precpred(this._ctx, 4))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
                    }
                    this.state = 1418;
                    this.match(MParser.LBRAK);
                    this.state = 1419;
                    this.match(MParser.RBRAK);
                    break;

                case 3:
                    localctx = new DictTypeContext(this, new TypedefContext(this, _parentctx, _parentState));
                    localctx.d = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_typedef);
                    this.state = 1420;
                    if (!( this.precpred(this._ctx, 3))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                    }
                    this.state = 1421;
                    this.match(MParser.LCURL);
                    this.state = 1422;
                    this.match(MParser.RCURL);
                    break;

                } 
            }
            this.state = 1427;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,89,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 = MParser.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 MParserListener ) {
        listener.enterNativeType(this);
	}
};

NativeTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterCategoryType(this);
	}
};

CategoryTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCategoryType(this);
	}
};



MParser.prototype.primary_type = function() {

    var localctx = new Primary_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 162, MParser.RULE_primary_type);
    try {
        this.state = 1430;
        switch(this._input.LA(1)) {
        case MParser.BOOLEAN:
        case MParser.CHARACTER:
        case MParser.TEXT:
        case MParser.INTEGER:
        case MParser.DECIMAL:
        case MParser.DATE:
        case MParser.TIME:
        case MParser.DATETIME:
        case MParser.PERIOD:
        case MParser.CODE:
        case MParser.DOCUMENT:
        case MParser.BLOB:
        case MParser.IMAGE:
        case MParser.UUID:
            localctx = new NativeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1428; 
            localctx.n = this.native_type();
            break;
        case MParser.TYPE_IDENTIFIER:
            localctx = new CategoryTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1429; 
            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 = MParser.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(MParser.PERIOD, 0);
};
PeriodTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPeriodType(this);
	}
};

PeriodTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.BOOLEAN, 0);
};
BooleanTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterBooleanType(this);
	}
};

BooleanTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DOCUMENT, 0);
};
DocumentTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDocumentType(this);
	}
};

DocumentTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CHARACTER, 0);
};
CharacterTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCharacterType(this);
	}
};

CharacterTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.TEXT, 0);
};
TextTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterTextType(this);
	}
};

TextTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.IMAGE, 0);
};
ImageTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterImageType(this);
	}
};

ImageTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.TIME, 0);
};
TimeTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterTimeType(this);
	}
};

TimeTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.INTEGER, 0);
};
IntegerTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterIntegerType(this);
	}
};

IntegerTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DATETIME, 0);
};
DateTimeTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDateTimeType(this);
	}
};

DateTimeTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.BLOB, 0);
};
BlobTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterBlobType(this);
	}
};

BlobTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.UUID, 0);
};
UUIDTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterUUIDType(this);
	}
};

UUIDTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DECIMAL, 0);
};
DecimalTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDecimalType(this);
	}
};

DecimalTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CODE, 0);
};
CodeTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCodeType(this);
	}
};

CodeTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DATE, 0);
};
DateTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDateType(this);
	}
};

DateTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDateType(this);
	}
};



MParser.prototype.native_type = function() {

    var localctx = new Native_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 164, MParser.RULE_native_type);
    try {
        this.state = 1446;
        switch(this._input.LA(1)) {
        case MParser.BOOLEAN:
            localctx = new BooleanTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1432;
            this.match(MParser.BOOLEAN);
            break;
        case MParser.CHARACTER:
            localctx = new CharacterTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1433;
            this.match(MParser.CHARACTER);
            break;
        case MParser.TEXT:
            localctx = new TextTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1434;
            this.match(MParser.TEXT);
            break;
        case MParser.IMAGE:
            localctx = new ImageTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1435;
            this.match(MParser.IMAGE);
            break;
        case MParser.INTEGER:
            localctx = new IntegerTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1436;
            this.match(MParser.INTEGER);
            break;
        case MParser.DECIMAL:
            localctx = new DecimalTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 1437;
            this.match(MParser.DECIMAL);
            break;
        case MParser.DOCUMENT:
            localctx = new DocumentTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 1438;
            this.match(MParser.DOCUMENT);
            break;
        case MParser.DATE:
            localctx = new DateTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 1439;
            this.match(MParser.DATE);
            break;
        case MParser.DATETIME:
            localctx = new DateTimeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 1440;
            this.match(MParser.DATETIME);
            break;
        case MParser.TIME:
            localctx = new TimeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 1441;
            this.match(MParser.TIME);
            break;
        case MParser.PERIOD:
            localctx = new PeriodTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 1442;
            this.match(MParser.PERIOD);
            break;
        case MParser.CODE:
            localctx = new CodeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 1443;
            this.match(MParser.CODE);
            break;
        case MParser.BLOB:
            localctx = new BlobTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 1444;
            this.match(MParser.BLOB);
            break;
        case MParser.UUID:
            localctx = new UUIDTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 14);
            this.state = 1445;
            this.match(MParser.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 = MParser.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(MParser.TYPE_IDENTIFIER, 0);
};

Category_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCategory_type(this);
	}
};

Category_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCategory_type(this);
	}
};




MParser.prototype.category_type = function() {

    var localctx = new Category_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 166, MParser.RULE_category_type);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1448;
        localctx.t1 = this.match(MParser.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 = MParser.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(MParser.MUTABLE, 0);
};

Mutable_category_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMutable_category_type(this);
	}
};

Mutable_category_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitMutable_category_type(this);
	}
};




MParser.prototype.mutable_category_type = function() {

    var localctx = new Mutable_category_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 168, MParser.RULE_mutable_category_type);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1451;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1450;
            this.match(MParser.MUTABLE);
        }

        this.state = 1453; 
        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 = MParser.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(MParser.CODE, 0);
};

Code_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCode_type(this);
	}
};

Code_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCode_type(this);
	}
};




MParser.prototype.code_type = function() {

    var localctx = new Code_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 170, MParser.RULE_code_type);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1455;
        localctx.t1 = this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterConcreteCategoryDeclaration(this);
	}
};

ConcreteCategoryDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterNativeCategoryDeclaration(this);
	}
};

NativeCategoryDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterSingletonCategoryDeclaration(this);
	}
};

SingletonCategoryDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSingletonCategoryDeclaration(this);
	}
};



MParser.prototype.category_declaration = function() {

    var localctx = new Category_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 172, MParser.RULE_category_declaration);
    try {
        this.state = 1460;
        var la_ = this._interp.adaptivePredict(this._input,93,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ConcreteCategoryDeclarationContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1457; 
            localctx.decl = this.concrete_category_declaration();
            break;

        case 2:
            localctx = new NativeCategoryDeclarationContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1458; 
            localctx.decl = this.native_category_declaration();
            break;

        case 3:
            localctx = new SingletonCategoryDeclarationContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1459; 
            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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Type_identifier_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterType_identifier_list(this);
	}
};

Type_identifier_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitType_identifier_list(this);
	}
};




MParser.prototype.type_identifier_list = function() {

    var localctx = new Type_identifier_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 174, MParser.RULE_type_identifier_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1462; 
        this.type_identifier();
        this.state = 1467;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,94,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1463;
                this.match(MParser.COMMA);
                this.state = 1464; 
                this.type_identifier(); 
            }
            this.state = 1469;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,94,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 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 = MParser.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 MParserListener ) {
        listener.enterMethod_identifier(this);
	}
};

Method_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitMethod_identifier(this);
	}
};




MParser.prototype.method_identifier = function() {

    var localctx = new Method_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 176, MParser.RULE_method_identifier);
    try {
        this.state = 1472;
        switch(this._input.LA(1)) {
        case MParser.VARIABLE_IDENTIFIER:
            this.enterOuterAlt(localctx, 1);
            this.state = 1470; 
            this.variable_identifier();
            break;
        case MParser.TYPE_IDENTIFIER:
            this.enterOuterAlt(localctx, 2);
            this.state = 1471; 
            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 = MParser.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 MParserListener ) {
        listener.enterTypeIdentifier(this);
	}
};

TypeIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterSymbolIdentifier(this);
	}
};

SymbolIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterVariableIdentifier(this);
	}
};

VariableIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitVariableIdentifier(this);
	}
};



MParser.prototype.identifier = function() {

    var localctx = new IdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 178, MParser.RULE_identifier);
    try {
        this.state = 1477;
        switch(this._input.LA(1)) {
        case MParser.VARIABLE_IDENTIFIER:
            localctx = new VariableIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1474; 
            this.variable_identifier();
            break;
        case MParser.TYPE_IDENTIFIER:
            localctx = new TypeIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1475; 
            this.type_identifier();
            break;
        case MParser.SYMBOL_IDENTIFIER:
            localctx = new SymbolIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1476; 
            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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Variable_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterVariable_identifier(this);
	}
};

Variable_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitVariable_identifier(this);
	}
};




MParser.prototype.variable_identifier = function() {

    var localctx = new Variable_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 180, MParser.RULE_variable_identifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1479;
        this.match(MParser.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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Attribute_identifierContext.prototype.STORABLE = function() {
    return this.getToken(MParser.STORABLE, 0);
};

Attribute_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterAttribute_identifier(this);
	}
};

Attribute_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitAttribute_identifier(this);
	}
};




MParser.prototype.attribute_identifier = function() {

    var localctx = new Attribute_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 182, MParser.RULE_attribute_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1481;
        _la = this._input.LA(1);
        if(!(_la===MParser.STORABLE || _la===MParser.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 = MParser.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(MParser.TYPE_IDENTIFIER, 0);
};

Type_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterType_identifier(this);
	}
};

Type_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitType_identifier(this);
	}
};




MParser.prototype.type_identifier = function() {

    var localctx = new Type_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 184, MParser.RULE_type_identifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1483;
        this.match(MParser.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 = MParser.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(MParser.SYMBOL_IDENTIFIER, 0);
};

Symbol_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSymbol_identifier(this);
	}
};

Symbol_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSymbol_identifier(this);
	}
};




MParser.prototype.symbol_identifier = function() {

    var localctx = new Symbol_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 186, MParser.RULE_symbol_identifier);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1485;
        this.match(MParser.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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Argument_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterArgument_list(this);
	}
};

Argument_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitArgument_list(this);
	}
};




MParser.prototype.argument_list = function() {

    var localctx = new Argument_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 188, MParser.RULE_argument_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1487; 
        this.argument();
        this.state = 1492;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1488;
            this.match(MParser.COMMA);
            this.state = 1489; 
            this.argument();
            this.state = 1494;
            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 = MParser.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(MParser.MUTABLE, 0);
};
OperatorArgumentContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterOperatorArgument(this);
	}
};

OperatorArgumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterCodeArgument(this);
	}
};

CodeArgumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCodeArgument(this);
	}
};



MParser.prototype.argument = function() {

    var localctx = new ArgumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 190, MParser.RULE_argument);
    var _la = 0; // Token type
    try {
        this.state = 1500;
        switch(this._input.LA(1)) {
        case MParser.CODE:
            localctx = new CodeArgumentContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1495; 
            localctx.arg = this.code_argument();
            break;
        case MParser.MUTABLE:
        case MParser.VARIABLE_IDENTIFIER:
            localctx = new OperatorArgumentContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1497;
            _la = this._input.LA(1);
            if(_la===MParser.MUTABLE) {
                this.state = 1496;
                this.match(MParser.MUTABLE);
            }

            this.state = 1499; 
            localctx.arg = this.operator_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 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 = MParser.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 MParserListener ) {
        listener.enterOperator_argument(this);
	}
};

Operator_argumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitOperator_argument(this);
	}
};




MParser.prototype.operator_argument = function() {

    var localctx = new Operator_argumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 192, MParser.RULE_operator_argument);
    try {
        this.state = 1504;
        var la_ = this._interp.adaptivePredict(this._input,100,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1502; 
            this.named_argument();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1503; 
            this.typed_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 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 = MParser.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(MParser.EQ, 0);
};

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

Named_argumentContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterNamed_argument(this);
	}
};

Named_argumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitNamed_argument(this);
	}
};




MParser.prototype.named_argument = function() {

    var localctx = new Named_argumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 194, MParser.RULE_named_argument);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1506; 
        this.variable_identifier();
        this.state = 1509;
        _la = this._input.LA(1);
        if(_la===MParser.EQ) {
            this.state = 1507;
            this.match(MParser.EQ);
            this.state = 1508; 
            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 = MParser.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 MParserListener ) {
        listener.enterCode_argument(this);
	}
};

Code_argumentContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCode_argument(this);
	}
};




MParser.prototype.code_argument = function() {

    var localctx = new Code_argumentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 196, MParser.RULE_code_argument);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1511; 
        this.code_type();
        this.state = 1512; 
        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 = MParser.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 MParserListener ) {
        listener.enterCategory_or_any_type(this);
	}
};

Category_or_any_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCategory_or_any_type(this);
	}
};




MParser.prototype.category_or_any_type = function() {

    var localctx = new Category_or_any_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 198, MParser.RULE_category_or_any_type);
    try {
        this.state = 1516;
        switch(this._input.LA(1)) {
        case MParser.BOOLEAN:
        case MParser.CHARACTER:
        case MParser.TEXT:
        case MParser.INTEGER:
        case MParser.DECIMAL:
        case MParser.DATE:
        case MParser.TIME:
        case MParser.DATETIME:
        case MParser.PERIOD:
        case MParser.CODE:
        case MParser.DOCUMENT:
        case MParser.BLOB:
        case MParser.IMAGE:
        case MParser.UUID:
        case MParser.ITERATOR:
        case MParser.CURSOR:
        case MParser.TYPE_IDENTIFIER:
            this.enterOuterAlt(localctx, 1);
            this.state = 1514; 
            this.typedef(0);
            break;
        case MParser.ANY:
            this.enterOuterAlt(localctx, 2);
            this.state = 1515; 
            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 = MParser.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(MParser.LBRAK, 0);
};

AnyListTypeContext.prototype.RBRAK = function() {
    return this.getToken(MParser.RBRAK, 0);
};
AnyListTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterAnyListType(this);
	}
};

AnyListTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.ANY, 0);
};
AnyTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterAnyType(this);
	}
};

AnyTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.LCURL, 0);
};

AnyDictTypeContext.prototype.RCURL = function() {
    return this.getToken(MParser.RCURL, 0);
};
AnyDictTypeContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterAnyDictType(this);
	}
};

AnyDictTypeContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitAnyDictType(this);
	}
};



MParser.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 = 200;
    this.enterRecursionRule(localctx, 200, MParser.RULE_any_type, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new AnyTypeContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1519;
        this.match(MParser.ANY);
        this._ctx.stop = this._input.LT(-1);
        this.state = 1529;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,104,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 = 1527;
                var la_ = this._interp.adaptivePredict(this._input,103,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new AnyListTypeContext(this, new Any_typeContext(this, _parentctx, _parentState));
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_any_type);
                    this.state = 1521;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 1522;
                    this.match(MParser.LBRAK);
                    this.state = 1523;
                    this.match(MParser.RBRAK);
                    break;

                case 2:
                    localctx = new AnyDictTypeContext(this, new Any_typeContext(this, _parentctx, _parentState));
                    this.pushNewRecursionContext(localctx, _startState, MParser.RULE_any_type);
                    this.state = 1524;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 1525;
                    this.match(MParser.LCURL);
                    this.state = 1526;
                    this.match(MParser.RCURL);
                    break;

                } 
            }
            this.state = 1531;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,104,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 = MParser.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 MParserListener ) {
        listener.enterMember_method_declaration_list(this);
	}
};

Member_method_declaration_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitMember_method_declaration_list(this);
	}
};




MParser.prototype.member_method_declaration_list = function() {

    var localctx = new Member_method_declaration_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 202, MParser.RULE_member_method_declaration_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1532; 
        this.member_method_declaration();
        this.state = 1538;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,105,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1533; 
                this.lfp();
                this.state = 1534; 
                this.member_method_declaration(); 
            }
            this.state = 1540;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,105,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 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 = MParser.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 MParserListener ) {
        listener.enterMember_method_declaration(this);
	}
};

Member_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitMember_method_declaration(this);
	}
};




MParser.prototype.member_method_declaration = function() {

    var localctx = new Member_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 204, MParser.RULE_member_method_declaration);
    try {
        this.state = 1546;
        var la_ = this._interp.adaptivePredict(this._input,106,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1541; 
            this.setter_method_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1542; 
            this.getter_method_declaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1543; 
            this.concrete_method_declaration();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1544; 
            this.abstract_method_declaration();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1545; 
            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 = MParser.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 MParserListener ) {
        listener.enterNative_member_method_declaration_list(this);
	}
};

Native_member_method_declaration_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitNative_member_method_declaration_list(this);
	}
};




MParser.prototype.native_member_method_declaration_list = function() {

    var localctx = new Native_member_method_declaration_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 206, MParser.RULE_native_member_method_declaration_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1548; 
        this.native_member_method_declaration();
        this.state = 1554;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,107,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1549; 
                this.lfp();
                this.state = 1550; 
                this.native_member_method_declaration(); 
            }
            this.state = 1556;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,107,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 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 = MParser.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 MParserListener ) {
        listener.enterNative_member_method_declaration(this);
	}
};

Native_member_method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitNative_member_method_declaration(this);
	}
};




MParser.prototype.native_member_method_declaration = function() {

    var localctx = new Native_member_method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 208, MParser.RULE_native_member_method_declaration);
    try {
        this.state = 1560;
        var la_ = this._interp.adaptivePredict(this._input,108,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1557; 
            this.native_getter_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1558; 
            this.native_setter_declaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1559; 
            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 = MParser.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(MParser.PYTHON2, 0);
};

Python2CategoryBindingContext.prototype.python_category_binding = function() {
    return this.getTypedRuleContext(Python_category_bindingContext,0);
};
Python2CategoryBindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPython2CategoryBinding(this);
	}
};

Python2CategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.PYTHON3, 0);
};

Python3CategoryBindingContext.prototype.python_category_binding = function() {
    return this.getTypedRuleContext(Python_category_bindingContext,0);
};
Python3CategoryBindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPython3CategoryBinding(this);
	}
};

Python3CategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterJavaCategoryBinding(this);
	}
};

JavaCategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CSHARP, 0);
};

CSharpCategoryBindingContext.prototype.csharp_identifier_expression = function() {
    return this.getTypedRuleContext(Csharp_identifier_expressionContext,0);
};
CSharpCategoryBindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpCategoryBinding(this);
	}
};

CSharpCategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.JAVASCRIPT, 0);
};

JavaScriptCategoryBindingContext.prototype.javascript_category_binding = function() {
    return this.getTypedRuleContext(Javascript_category_bindingContext,0);
};
JavaScriptCategoryBindingContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaScriptCategoryBinding(this);
	}
};

JavaScriptCategoryBindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavaScriptCategoryBinding(this);
	}
};



MParser.prototype.native_category_binding = function() {

    var localctx = new Native_category_bindingContext(this, this._ctx, this.state);
    this.enterRule(localctx, 210, MParser.RULE_native_category_binding);
    try {
        this.state = 1572;
        switch(this._input.LA(1)) {
        case MParser.JAVA:
            localctx = new JavaCategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1562;
            this.match(MParser.JAVA);
            this.state = 1563; 
            localctx.binding = this.java_class_identifier_expression(0);
            break;
        case MParser.CSHARP:
            localctx = new CSharpCategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1564;
            this.match(MParser.CSHARP);
            this.state = 1565; 
            localctx.binding = this.csharp_identifier_expression(0);
            break;
        case MParser.PYTHON2:
            localctx = new Python2CategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1566;
            this.match(MParser.PYTHON2);
            this.state = 1567; 
            localctx.binding = this.python_category_binding();
            break;
        case MParser.PYTHON3:
            localctx = new Python3CategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1568;
            this.match(MParser.PYTHON3);
            this.state = 1569; 
            localctx.binding = this.python_category_binding();
            break;
        case MParser.JAVASCRIPT:
            localctx = new JavaScriptCategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1570;
            this.match(MParser.JAVASCRIPT);
            this.state = 1571; 
            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 = MParser.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 MParserListener ) {
        listener.enterPython_category_binding(this);
	}
};

Python_category_bindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPython_category_binding(this);
	}
};




MParser.prototype.python_category_binding = function() {

    var localctx = new Python_category_bindingContext(this, this._ctx, this.state);
    this.enterRule(localctx, 212, MParser.RULE_python_category_binding);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1574; 
        this.identifier();
        this.state = 1576;
        var la_ = this._interp.adaptivePredict(this._input,110,this._ctx);
        if(la_===1) {
            this.state = 1575; 
            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 = MParser.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(MParser.FROM, 0);
};

Python_moduleContext.prototype.module_token = function() {
    return this.getTypedRuleContext(Module_tokenContext,0);
};

Python_moduleContext.prototype.COLON = function() {
    return this.getToken(MParser.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(MParser.DOT);
    } else {
        return this.getToken(MParser.DOT, i);
    }
};


Python_moduleContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPython_module(this);
	}
};

Python_moduleContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPython_module(this);
	}
};




MParser.prototype.python_module = function() {

    var localctx = new Python_moduleContext(this, this._ctx, this.state);
    this.enterRule(localctx, 214, MParser.RULE_python_module);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1578;
        this.match(MParser.FROM);
        this.state = 1579; 
        this.module_token();
        this.state = 1580;
        this.match(MParser.COLON);
        this.state = 1581; 
        this.identifier();
        this.state = 1586;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,111,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1582;
                this.match(MParser.DOT);
                this.state = 1583; 
                this.identifier(); 
            }
            this.state = 1588;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,111,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 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 = MParser.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 MParserListener ) {
        listener.enterJavascript_category_binding(this);
	}
};

Javascript_category_bindingContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_category_binding(this);
	}
};




MParser.prototype.javascript_category_binding = function() {

    var localctx = new Javascript_category_bindingContext(this, this._ctx, this.state);
    this.enterRule(localctx, 216, MParser.RULE_javascript_category_binding);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1589; 
        this.identifier();
        this.state = 1591;
        var la_ = this._interp.adaptivePredict(this._input,112,this._ctx);
        if(la_===1) {
            this.state = 1590; 
            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 = MParser.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(MParser.FROM, 0);
};

Javascript_moduleContext.prototype.module_token = function() {
    return this.getTypedRuleContext(Module_tokenContext,0);
};

Javascript_moduleContext.prototype.COLON = function() {
    return this.getToken(MParser.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(MParser.SLASH);
    } else {
        return this.getToken(MParser.SLASH, i);
    }
};


Javascript_moduleContext.prototype.DOT = function() {
    return this.getToken(MParser.DOT, 0);
};

Javascript_moduleContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavascript_module(this);
	}
};

Javascript_moduleContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_module(this);
	}
};




MParser.prototype.javascript_module = function() {

    var localctx = new Javascript_moduleContext(this, this._ctx, this.state);
    this.enterRule(localctx, 218, MParser.RULE_javascript_module);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1593;
        this.match(MParser.FROM);
        this.state = 1594; 
        this.module_token();
        this.state = 1595;
        this.match(MParser.COLON);
        this.state = 1597;
        _la = this._input.LA(1);
        if(_la===MParser.SLASH) {
            this.state = 1596;
            this.match(MParser.SLASH);
        }

        this.state = 1599; 
        this.javascript_identifier();
        this.state = 1604;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,114,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1600;
                this.match(MParser.SLASH);
                this.state = 1601; 
                this.javascript_identifier(); 
            }
            this.state = 1606;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,114,this._ctx);
        }

        this.state = 1609;
        var la_ = this._interp.adaptivePredict(this._input,115,this._ctx);
        if(la_===1) {
            this.state = 1607;
            this.match(MParser.DOT);
            this.state = 1608; 
            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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Variable_identifier_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterVariable_identifier_list(this);
	}
};

Variable_identifier_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitVariable_identifier_list(this);
	}
};




MParser.prototype.variable_identifier_list = function() {

    var localctx = new Variable_identifier_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 220, MParser.RULE_variable_identifier_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1611; 
        this.variable_identifier();
        this.state = 1616;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1612;
            this.match(MParser.COMMA);
            this.state = 1613; 
            this.variable_identifier();
            this.state = 1618;
            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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Attribute_identifier_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterAttribute_identifier_list(this);
	}
};

Attribute_identifier_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitAttribute_identifier_list(this);
	}
};




MParser.prototype.attribute_identifier_list = function() {

    var localctx = new Attribute_identifier_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 222, MParser.RULE_attribute_identifier_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1619; 
        this.attribute_identifier();
        this.state = 1624;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1620;
            this.match(MParser.COMMA);
            this.state = 1621; 
            this.attribute_identifier();
            this.state = 1626;
            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 = MParser.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 MParserListener ) {
        listener.enterMethod_declaration(this);
	}
};

Method_declarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitMethod_declaration(this);
	}
};




MParser.prototype.method_declaration = function() {

    var localctx = new Method_declarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 224, MParser.RULE_method_declaration);
    try {
        this.state = 1631;
        var la_ = this._interp.adaptivePredict(this._input,118,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1627; 
            this.abstract_method_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1628; 
            this.concrete_method_declaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1629; 
            this.native_method_declaration();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1630; 
            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 = MParser.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(MParser.COMMENT, 0);
};

Comment_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterComment_statement(this);
	}
};

Comment_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitComment_statement(this);
	}
};




MParser.prototype.comment_statement = function() {

    var localctx = new Comment_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 226, MParser.RULE_comment_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1633;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterNative_statement_list(this);
	}
};

Native_statement_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitNative_statement_list(this);
	}
};




MParser.prototype.native_statement_list = function() {

    var localctx = new Native_statement_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 228, MParser.RULE_native_statement_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1635; 
        this.native_statement();
        this.state = 1641;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,119,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1636; 
                this.lfp();
                this.state = 1637; 
                this.native_statement(); 
            }
            this.state = 1643;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,119,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 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 = MParser.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(MParser.CSHARP, 0);
};

CSharpNativeStatementContext.prototype.csharp_statement = function() {
    return this.getTypedRuleContext(Csharp_statementContext,0);
};
CSharpNativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpNativeStatement(this);
	}
};

CSharpNativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.JAVA, 0);
};

JavaNativeStatementContext.prototype.java_statement = function() {
    return this.getTypedRuleContext(Java_statementContext,0);
};
JavaNativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaNativeStatement(this);
	}
};

JavaNativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.JAVASCRIPT, 0);
};

JavaScriptNativeStatementContext.prototype.javascript_native_statement = function() {
    return this.getTypedRuleContext(Javascript_native_statementContext,0);
};
JavaScriptNativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaScriptNativeStatement(this);
	}
};

JavaScriptNativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.PYTHON2, 0);
};

Python2NativeStatementContext.prototype.python_native_statement = function() {
    return this.getTypedRuleContext(Python_native_statementContext,0);
};
Python2NativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPython2NativeStatement(this);
	}
};

Python2NativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.PYTHON3, 0);
};

Python3NativeStatementContext.prototype.python_native_statement = function() {
    return this.getTypedRuleContext(Python_native_statementContext,0);
};
Python3NativeStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPython3NativeStatement(this);
	}
};

Python3NativeStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPython3NativeStatement(this);
	}
};



MParser.prototype.native_statement = function() {

    var localctx = new Native_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 230, MParser.RULE_native_statement);
    try {
        this.state = 1654;
        switch(this._input.LA(1)) {
        case MParser.JAVA:
            localctx = new JavaNativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1644;
            this.match(MParser.JAVA);
            this.state = 1645; 
            this.java_statement();
            break;
        case MParser.CSHARP:
            localctx = new CSharpNativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1646;
            this.match(MParser.CSHARP);
            this.state = 1647; 
            this.csharp_statement();
            break;
        case MParser.PYTHON2:
            localctx = new Python2NativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1648;
            this.match(MParser.PYTHON2);
            this.state = 1649; 
            this.python_native_statement();
            break;
        case MParser.PYTHON3:
            localctx = new Python3NativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1650;
            this.match(MParser.PYTHON3);
            this.state = 1651; 
            this.python_native_statement();
            break;
        case MParser.JAVASCRIPT:
            localctx = new JavaScriptNativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1652;
            this.match(MParser.JAVASCRIPT);
            this.state = 1653; 
            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 = MParser.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(MParser.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 MParserListener ) {
        listener.enterPython_native_statement(this);
	}
};

Python_native_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPython_native_statement(this);
	}
};




MParser.prototype.python_native_statement = function() {

    var localctx = new Python_native_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 232, MParser.RULE_python_native_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1656; 
        this.python_statement();
        this.state = 1658;
        _la = this._input.LA(1);
        if(_la===MParser.SEMI) {
            this.state = 1657;
            this.match(MParser.SEMI);
        }

        this.state = 1661;
        _la = this._input.LA(1);
        if(_la===MParser.FROM) {
            this.state = 1660; 
            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 = MParser.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(MParser.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 MParserListener ) {
        listener.enterJavascript_native_statement(this);
	}
};

Javascript_native_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_native_statement(this);
	}
};




MParser.prototype.javascript_native_statement = function() {

    var localctx = new Javascript_native_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 234, MParser.RULE_javascript_native_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1663; 
        this.javascript_statement();
        this.state = 1665;
        _la = this._input.LA(1);
        if(_la===MParser.SEMI) {
            this.state = 1664;
            this.match(MParser.SEMI);
        }

        this.state = 1668;
        _la = this._input.LA(1);
        if(_la===MParser.FROM) {
            this.state = 1667; 
            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 = MParser.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 MParserListener ) {
        listener.enterStatement_list(this);
	}
};

Statement_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitStatement_list(this);
	}
};




MParser.prototype.statement_list = function() {

    var localctx = new Statement_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 236, MParser.RULE_statement_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1670; 
        this.statement();
        this.state = 1676;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,125,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1671; 
                this.lfp();
                this.state = 1672; 
                this.statement(); 
            }
            this.state = 1678;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,125,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 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 = MParser.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 MParserListener ) {
        listener.enterAssertion_list(this);
	}
};

Assertion_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitAssertion_list(this);
	}
};




MParser.prototype.assertion_list = function() {

    var localctx = new Assertion_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 238, MParser.RULE_assertion_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1679; 
        this.assertion();
        this.state = 1685;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,126,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1680; 
                this.lfp();
                this.state = 1681; 
                this.assertion(); 
            }
            this.state = 1687;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,126,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 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 = MParser.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 MParserListener ) {
        listener.enterSwitch_case_statement_list(this);
	}
};

Switch_case_statement_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSwitch_case_statement_list(this);
	}
};




MParser.prototype.switch_case_statement_list = function() {

    var localctx = new Switch_case_statement_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 240, MParser.RULE_switch_case_statement_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1688; 
        this.switch_case_statement();
        this.state = 1694;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,127,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1689; 
                this.lfp();
                this.state = 1690; 
                this.switch_case_statement(); 
            }
            this.state = 1696;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,127,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 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 = MParser.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 MParserListener ) {
        listener.enterCatch_statement_list(this);
	}
};

Catch_statement_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCatch_statement_list(this);
	}
};




MParser.prototype.catch_statement_list = function() {

    var localctx = new Catch_statement_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 242, MParser.RULE_catch_statement_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1697; 
        this.catch_statement();
        this.state = 1703;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,128,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1698; 
                this.lfp();
                this.state = 1699; 
                this.catch_statement(); 
            }
            this.state = 1705;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,128,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 = MParser.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(MParser.LBRAK, 0);
};

LiteralListLiteralContext.prototype.literal_list_literal = function() {
    return this.getTypedRuleContext(Literal_list_literalContext,0);
};

LiteralListLiteralContext.prototype.RBRAK = function() {
    return this.getToken(MParser.RBRAK, 0);
};
LiteralListLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterLiteralListLiteral(this);
	}
};

LiteralListLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.LBRAK, 0);
};

LiteralRangeLiteralContext.prototype.RANGE = function() {
    return this.getToken(MParser.RANGE, 0);
};

LiteralRangeLiteralContext.prototype.RBRAK = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterLiteralRangeLiteral(this);
	}
};

LiteralRangeLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.LT, 0);
};

LiteralSetLiteralContext.prototype.literal_list_literal = function() {
    return this.getTypedRuleContext(Literal_list_literalContext,0);
};

LiteralSetLiteralContext.prototype.GT = function() {
    return this.getToken(MParser.GT, 0);
};
LiteralSetLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterLiteralSetLiteral(this);
	}
};

LiteralSetLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitLiteralSetLiteral(this);
	}
};



MParser.prototype.literal_collection = function() {

    var localctx = new Literal_collectionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 244, MParser.RULE_literal_collection);
    try {
        this.state = 1720;
        var la_ = this._interp.adaptivePredict(this._input,129,this._ctx);
        switch(la_) {
        case 1:
            localctx = new LiteralRangeLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1706;
            this.match(MParser.LBRAK);
            this.state = 1707; 
            localctx.low = this.atomic_literal();
            this.state = 1708;
            this.match(MParser.RANGE);
            this.state = 1709; 
            localctx.high = this.atomic_literal();
            this.state = 1710;
            this.match(MParser.RBRAK);
            break;

        case 2:
            localctx = new LiteralListLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1712;
            this.match(MParser.LBRAK);
            this.state = 1713; 
            this.literal_list_literal();
            this.state = 1714;
            this.match(MParser.RBRAK);
            break;

        case 3:
            localctx = new LiteralSetLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1716;
            this.match(MParser.LT);
            this.state = 1717; 
            this.literal_list_literal();
            this.state = 1718;
            this.match(MParser.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 = MParser.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(MParser.MIN_INTEGER, 0);
};
MinIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMinIntegerLiteral(this);
	}
};

MinIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DATE_LITERAL, 0);
};
DateLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDateLiteral(this);
	}
};

DateLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.BOOLEAN_LITERAL, 0);
};
BooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterBooleanLiteral(this);
	}
};

BooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.HEXA_LITERAL, 0);
};
HexadecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterHexadecimalLiteral(this);
	}
};

HexadecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.UUID_LITERAL, 0);
};
UUIDLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterUUIDLiteral(this);
	}
};

UUIDLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.MAX_INTEGER, 0);
};
MaxIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMaxIntegerLiteral(this);
	}
};

MaxIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DATETIME_LITERAL, 0);
};
DateTimeLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDateTimeLiteral(this);
	}
};

DateTimeLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.PERIOD_LITERAL, 0);
};
PeriodLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPeriodLiteral(this);
	}
};

PeriodLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DECIMAL_LITERAL, 0);
};
DecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDecimalLiteral(this);
	}
};

DecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.TEXT_LITERAL, 0);
};
TextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterTextLiteral(this);
	}
};

TextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterNullLiteral(this);
	}
};

NullLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.INTEGER_LITERAL, 0);
};
IntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterIntegerLiteral(this);
	}
};

IntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.TIME_LITERAL, 0);
};
TimeLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterTimeLiteral(this);
	}
};

TimeLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CHAR_LITERAL, 0);
};
CharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCharacterLiteral(this);
	}
};

CharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCharacterLiteral(this);
	}
};



MParser.prototype.atomic_literal = function() {

    var localctx = new Atomic_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 246, MParser.RULE_atomic_literal);
    try {
        this.state = 1736;
        switch(this._input.LA(1)) {
        case MParser.MIN_INTEGER:
            localctx = new MinIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1722;
            localctx.t = this.match(MParser.MIN_INTEGER);
            break;
        case MParser.MAX_INTEGER:
            localctx = new MaxIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1723;
            localctx.t = this.match(MParser.MAX_INTEGER);
            break;
        case MParser.INTEGER_LITERAL:
            localctx = new IntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1724;
            localctx.t = this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.HEXA_LITERAL:
            localctx = new HexadecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1725;
            localctx.t = this.match(MParser.HEXA_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new CharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1726;
            localctx.t = this.match(MParser.CHAR_LITERAL);
            break;
        case MParser.DATE_LITERAL:
            localctx = new DateLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 1727;
            localctx.t = this.match(MParser.DATE_LITERAL);
            break;
        case MParser.TIME_LITERAL:
            localctx = new TimeLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 1728;
            localctx.t = this.match(MParser.TIME_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new TextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 1729;
            localctx.t = this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new DecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 1730;
            localctx.t = this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.DATETIME_LITERAL:
            localctx = new DateTimeLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 1731;
            localctx.t = this.match(MParser.DATETIME_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new BooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 1732;
            localctx.t = this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.PERIOD_LITERAL:
            localctx = new PeriodLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 1733;
            localctx.t = this.match(MParser.PERIOD_LITERAL);
            break;
        case MParser.UUID_LITERAL:
            localctx = new UUIDLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 1734;
            localctx.t = this.match(MParser.UUID_LITERAL);
            break;
        case MParser.NONE:
            localctx = new NullLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 14);
            this.state = 1735; 
            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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Literal_list_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterLiteral_list_literal(this);
	}
};

Literal_list_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitLiteral_list_literal(this);
	}
};




MParser.prototype.literal_list_literal = function() {

    var localctx = new Literal_list_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 248, MParser.RULE_literal_list_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1738; 
        this.atomic_literal();
        this.state = 1743;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1739;
            this.match(MParser.COMMA);
            this.state = 1740; 
            this.atomic_literal();
            this.state = 1745;
            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 = MParser.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 MParserListener ) {
        listener.enterThisExpression(this);
	}
};

ThisExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterParenthesisExpression(this);
	}
};

ParenthesisExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterLiteralExpression(this);
	}
};

LiteralExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterIdentifierExpression(this);
	}
};

IdentifierExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitIdentifierExpression(this);
	}
};



MParser.prototype.selectable_expression = function() {

    var localctx = new Selectable_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 250, MParser.RULE_selectable_expression);
    try {
        this.state = 1750;
        var la_ = this._interp.adaptivePredict(this._input,132,this._ctx);
        switch(la_) {
        case 1:
            localctx = new ParenthesisExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1746; 
            localctx.exp = this.parenthesis_expression();
            break;

        case 2:
            localctx = new LiteralExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1747; 
            localctx.exp = this.literal_expression();
            break;

        case 3:
            localctx = new IdentifierExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1748; 
            localctx.exp = this.identifier();
            break;

        case 4:
            localctx = new ThisExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1749; 
            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 = MParser.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(MParser.SELF, 0);
};

This_expressionContext.prototype.THIS = function() {
    return this.getToken(MParser.THIS, 0);
};

This_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterThis_expression(this);
	}
};

This_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitThis_expression(this);
	}
};




MParser.prototype.this_expression = function() {

    var localctx = new This_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 252, MParser.RULE_this_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1752;
        _la = this._input.LA(1);
        if(!(_la===MParser.SELF || _la===MParser.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 = MParser.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(MParser.LPAR, 0);
};

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

Parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

Parenthesis_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterParenthesis_expression(this);
	}
};

Parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitParenthesis_expression(this);
	}
};




MParser.prototype.parenthesis_expression = function() {

    var localctx = new Parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 254, MParser.RULE_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1754;
        this.match(MParser.LPAR);
        this.state = 1755; 
        this.expression(0);
        this.state = 1756;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterLiteral_expression(this);
	}
};

Literal_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitLiteral_expression(this);
	}
};




MParser.prototype.literal_expression = function() {

    var localctx = new Literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 256, MParser.RULE_literal_expression);
    try {
        this.state = 1760;
        switch(this._input.LA(1)) {
        case MParser.NONE:
        case MParser.BOOLEAN_LITERAL:
        case MParser.CHAR_LITERAL:
        case MParser.MIN_INTEGER:
        case MParser.MAX_INTEGER:
        case MParser.TEXT_LITERAL:
        case MParser.UUID_LITERAL:
        case MParser.INTEGER_LITERAL:
        case MParser.HEXA_LITERAL:
        case MParser.DECIMAL_LITERAL:
        case MParser.DATETIME_LITERAL:
        case MParser.TIME_LITERAL:
        case MParser.DATE_LITERAL:
        case MParser.PERIOD_LITERAL:
            this.enterOuterAlt(localctx, 1);
            this.state = 1758; 
            this.atomic_literal();
            break;
        case MParser.LPAR:
        case MParser.LBRAK:
        case MParser.LCURL:
        case MParser.LT:
        case MParser.MUTABLE:
            this.enterOuterAlt(localctx, 2);
            this.state = 1759; 
            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 = MParser.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 MParserListener ) {
        listener.enterCollection_literal(this);
	}
};

Collection_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCollection_literal(this);
	}
};




MParser.prototype.collection_literal = function() {

    var localctx = new Collection_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 258, MParser.RULE_collection_literal);
    try {
        this.state = 1767;
        var la_ = this._interp.adaptivePredict(this._input,134,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1762; 
            this.range_literal();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1763; 
            this.list_literal();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1764; 
            this.set_literal();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1765; 
            this.dict_literal();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1766; 
            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 = MParser.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(MParser.LPAR, 0);
};

Tuple_literalContext.prototype.RPAR = function() {
    return this.getToken(MParser.RPAR, 0);
};

Tuple_literalContext.prototype.MUTABLE = function() {
    return this.getToken(MParser.MUTABLE, 0);
};

Tuple_literalContext.prototype.expression_tuple = function() {
    return this.getTypedRuleContext(Expression_tupleContext,0);
};

Tuple_literalContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterTuple_literal(this);
	}
};

Tuple_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitTuple_literal(this);
	}
};




MParser.prototype.tuple_literal = function() {

    var localctx = new Tuple_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 260, MParser.RULE_tuple_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1770;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1769;
            this.match(MParser.MUTABLE);
        }

        this.state = 1772;
        this.match(MParser.LPAR);
        this.state = 1774;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 1773; 
            this.expression_tuple();
        }

        this.state = 1776;
        this.match(MParser.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 = MParser.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(MParser.LCURL, 0);
};

Dict_literalContext.prototype.RCURL = function() {
    return this.getToken(MParser.RCURL, 0);
};

Dict_literalContext.prototype.MUTABLE = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterDict_literal(this);
	}
};

Dict_literalContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDict_literal(this);
	}
};




MParser.prototype.dict_literal = function() {

    var localctx = new Dict_literalContext(this, this._ctx, this.state);
    this.enterRule(localctx, 262, MParser.RULE_dict_literal);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1779;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1778;
            this.match(MParser.MUTABLE);
        }

        this.state = 1781;
        this.match(MParser.LCURL);
        this.state = 1783;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 1782; 
            this.dict_entry_list();
        }

        this.state = 1785;
        this.match(MParser.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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Expression_tupleContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterExpression_tuple(this);
	}
};

Expression_tupleContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitExpression_tuple(this);
	}
};




MParser.prototype.expression_tuple = function() {

    var localctx = new Expression_tupleContext(this, this._ctx, this.state);
    this.enterRule(localctx, 264, MParser.RULE_expression_tuple);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1787; 
        this.expression(0);
        this.state = 1788;
        this.match(MParser.COMMA);
        this.state = 1797;
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << MParser.LPAR) | (1 << MParser.LBRAK) | (1 << MParser.LCURL))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (MParser.MINUS - 33)) | (1 << (MParser.LT - 33)) | (1 << (MParser.CODE - 33)) | (1 << (MParser.DOCUMENT - 33)) | (1 << (MParser.BLOB - 33)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (MParser.EXECUTE - 98)) | (1 << (MParser.FETCH - 98)) | (1 << (MParser.MUTABLE - 98)) | (1 << (MParser.NONE - 98)) | (1 << (MParser.NOT - 98)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.SORTED - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.MIN_INTEGER - 132)) | (1 << (MParser.MAX_INTEGER - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 165)) & ~0x1f) == 0 && ((1 << (_la - 165)) & ((1 << (MParser.TEXT_LITERAL - 165)) | (1 << (MParser.UUID_LITERAL - 165)) | (1 << (MParser.INTEGER_LITERAL - 165)) | (1 << (MParser.HEXA_LITERAL - 165)) | (1 << (MParser.DECIMAL_LITERAL - 165)) | (1 << (MParser.DATETIME_LITERAL - 165)) | (1 << (MParser.TIME_LITERAL - 165)) | (1 << (MParser.DATE_LITERAL - 165)) | (1 << (MParser.PERIOD_LITERAL - 165)))) !== 0)) {
            this.state = 1789; 
            this.expression(0);
            this.state = 1794;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===MParser.COMMA) {
                this.state = 1790;
                this.match(MParser.COMMA);
                this.state = 1791; 
                this.expression(0);
                this.state = 1796;
                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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Dict_entry_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDict_entry_list(this);
	}
};

Dict_entry_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDict_entry_list(this);
	}
};




MParser.prototype.dict_entry_list = function() {

    var localctx = new Dict_entry_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 266, MParser.RULE_dict_entry_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1799; 
        this.dict_entry();
        this.state = 1804;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1800;
            this.match(MParser.COMMA);
            this.state = 1801; 
            this.dict_entry();
            this.state = 1806;
            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 = MParser.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(MParser.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 MParserListener ) {
        listener.enterDict_entry(this);
	}
};

Dict_entryContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDict_entry(this);
	}
};




MParser.prototype.dict_entry = function() {

    var localctx = new Dict_entryContext(this, this._ctx, this.state);
    this.enterRule(localctx, 268, MParser.RULE_dict_entry);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1807; 
        localctx.key = this.expression(0);
        this.state = 1808;
        this.match(MParser.COLON);
        this.state = 1809; 
        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 = MParser.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(MParser.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 MParserListener ) {
        listener.enterSliceFirstAndLast(this);
	}
};

SliceFirstAndLastContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.COLON, 0);
};

SliceLastOnlyContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
SliceLastOnlyContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSliceLastOnly(this);
	}
};

SliceLastOnlyContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.COLON, 0);
};

SliceFirstOnlyContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
SliceFirstOnlyContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSliceFirstOnly(this);
	}
};

SliceFirstOnlyContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSliceFirstOnly(this);
	}
};



MParser.prototype.slice_arguments = function() {

    var localctx = new Slice_argumentsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 270, MParser.RULE_slice_arguments);
    try {
        this.state = 1820;
        var la_ = this._interp.adaptivePredict(this._input,142,this._ctx);
        switch(la_) {
        case 1:
            localctx = new SliceFirstAndLastContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1811; 
            localctx.first = this.expression(0);
            this.state = 1812;
            this.match(MParser.COLON);
            this.state = 1813; 
            localctx.last = this.expression(0);
            break;

        case 2:
            localctx = new SliceFirstOnlyContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1815; 
            localctx.first = this.expression(0);
            this.state = 1816;
            this.match(MParser.COLON);
            break;

        case 3:
            localctx = new SliceLastOnlyContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1818;
            this.match(MParser.COLON);
            this.state = 1819; 
            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 = MParser.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 MParserListener ) {
        listener.enterAssign_variable_statement(this);
	}
};

Assign_variable_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitAssign_variable_statement(this);
	}
};




MParser.prototype.assign_variable_statement = function() {

    var localctx = new Assign_variable_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 272, MParser.RULE_assign_variable_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1822; 
        this.variable_identifier();
        this.state = 1823; 
        this.assign();
        this.state = 1824; 
        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 = MParser.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 MParserListener ) {
        listener.enterChildInstance(this);
	}
};

ChildInstanceContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterRootInstance(this);
	}
};

RootInstanceContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitRootInstance(this);
	}
};



MParser.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 = 274;
    this.enterRecursionRule(localctx, 274, MParser.RULE_assignable_instance, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new RootInstanceContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1827; 
        this.variable_identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1833;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,143,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, MParser.RULE_assignable_instance);
                this.state = 1829;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1830; 
                this.child_instance(); 
            }
            this.state = 1835;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,143,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 = MParser.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(MParser.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 MParserListener ) {
        listener.enterIsATypeExpression(this);
	}
};

IsATypeExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterIsOtherExpression(this);
	}
};

IsOtherExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitIsOtherExpression(this);
	}
};



MParser.prototype.is_expression = function() {

    var localctx = new Is_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 276, MParser.RULE_is_expression);
    try {
        this.state = 1840;
        var la_ = this._interp.adaptivePredict(this._input,144,this._ctx);
        switch(la_) {
        case 1:
            localctx = new IsATypeExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1836;
            if (!( this.willBeAOrAn())) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.willBeAOrAn()");
            }
            this.state = 1837;
            this.match(MParser.VARIABLE_IDENTIFIER);
            this.state = 1838; 
            this.category_or_any_type();
            break;

        case 2:
            localctx = new IsOtherExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1839; 
            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 = MParser.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(MParser.READ, 0);
};

Read_all_expressionContext.prototype.ALL = function() {
    return this.getToken(MParser.ALL, 0);
};

Read_all_expressionContext.prototype.FROM = function() {
    return this.getToken(MParser.FROM, 0);
};

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

Read_all_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterRead_all_expression(this);
	}
};

Read_all_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitRead_all_expression(this);
	}
};




MParser.prototype.read_all_expression = function() {

    var localctx = new Read_all_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 278, MParser.RULE_read_all_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1842;
        this.match(MParser.READ);
        this.state = 1843;
        this.match(MParser.ALL);
        this.state = 1844;
        this.match(MParser.FROM);
        this.state = 1845; 
        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 = MParser.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(MParser.READ, 0);
};

Read_one_expressionContext.prototype.ONE = function() {
    return this.getToken(MParser.ONE, 0);
};

Read_one_expressionContext.prototype.FROM = function() {
    return this.getToken(MParser.FROM, 0);
};

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

Read_one_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterRead_one_expression(this);
	}
};

Read_one_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitRead_one_expression(this);
	}
};




MParser.prototype.read_one_expression = function() {

    var localctx = new Read_one_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 280, MParser.RULE_read_one_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1847;
        this.match(MParser.READ);
        this.state = 1848;
        this.match(MParser.ONE);
        this.state = 1849;
        this.match(MParser.FROM);
        this.state = 1850; 
        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 = MParser.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(MParser.COMMA);
    } else {
        return this.getToken(MParser.COMMA, i);
    }
};


Order_by_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterOrder_by_list(this);
	}
};

Order_by_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitOrder_by_list(this);
	}
};




MParser.prototype.order_by_list = function() {

    var localctx = new Order_by_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 282, MParser.RULE_order_by_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1852; 
        this.order_by();
        this.state = 1857;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,145,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1853;
                this.match(MParser.COMMA);
                this.state = 1854; 
                this.order_by(); 
            }
            this.state = 1859;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,145,this._ctx);
        }

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

function 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 = MParser.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(MParser.DOT);
    } else {
        return this.getToken(MParser.DOT, i);
    }
};


Order_byContext.prototype.ASC = function() {
    return this.getToken(MParser.ASC, 0);
};

Order_byContext.prototype.DESC = function() {
    return this.getToken(MParser.DESC, 0);
};

Order_byContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterOrder_by(this);
	}
};

Order_byContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitOrder_by(this);
	}
};




MParser.prototype.order_by = function() {

    var localctx = new Order_byContext(this, this._ctx, this.state);
    this.enterRule(localctx, 284, MParser.RULE_order_by);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1860; 
        this.variable_identifier();
        this.state = 1865;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,146,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1861;
                this.match(MParser.DOT);
                this.state = 1862; 
                this.variable_identifier(); 
            }
            this.state = 1867;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,146,this._ctx);
        }

        this.state = 1869;
        var la_ = this._interp.adaptivePredict(this._input,147,this._ctx);
        if(la_===1) {
            this.state = 1868;
            _la = this._input.LA(1);
            if(!(_la===MParser.ASC || _la===MParser.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 = MParser.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(MParser.PLUS, 0);
};
OperatorPlusContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterOperatorPlus(this);
	}
};

OperatorPlusContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterOperatorDivide(this);
	}
};

OperatorDivideContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterOperatorIDivide(this);
	}
};

OperatorIDivideContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterOperatorMultiply(this);
	}
};

OperatorMultiplyContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.MINUS, 0);
};
OperatorMinusContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterOperatorMinus(this);
	}
};

OperatorMinusContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterOperatorModulo(this);
	}
};

OperatorModuloContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitOperatorModulo(this);
	}
};



MParser.prototype.operator = function() {

    var localctx = new OperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 286, MParser.RULE_operator);
    try {
        this.state = 1877;
        switch(this._input.LA(1)) {
        case MParser.PLUS:
            localctx = new OperatorPlusContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1871;
            this.match(MParser.PLUS);
            break;
        case MParser.MINUS:
            localctx = new OperatorMinusContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1872;
            this.match(MParser.MINUS);
            break;
        case MParser.STAR:
            localctx = new OperatorMultiplyContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1873; 
            this.multiply();
            break;
        case MParser.SLASH:
            localctx = new OperatorDivideContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1874; 
            this.divide();
            break;
        case MParser.BSLASH:
            localctx = new OperatorIDivideContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1875; 
            this.idivide();
            break;
        case MParser.PERCENT:
        case MParser.MODULO:
            localctx = new OperatorModuloContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 1876; 
            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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

New_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterNew_token(this);
	}
};

New_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitNew_token(this);
	}
};




MParser.prototype.new_token = function() {

    var localctx = new New_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 288, MParser.RULE_new_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1879;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1880;
        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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Key_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterKey_token(this);
	}
};

Key_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitKey_token(this);
	}
};




MParser.prototype.key_token = function() {

    var localctx = new Key_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 290, MParser.RULE_key_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1882;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1883;
        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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Module_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterModule_token(this);
	}
};

Module_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitModule_token(this);
	}
};




MParser.prototype.module_token = function() {

    var localctx = new Module_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 292, MParser.RULE_module_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1885;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1886;
        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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Value_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterValue_token(this);
	}
};

Value_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitValue_token(this);
	}
};




MParser.prototype.value_token = function() {

    var localctx = new Value_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 294, MParser.RULE_value_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1888;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1889;
        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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Symbols_tokenContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterSymbols_token(this);
	}
};

Symbols_tokenContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitSymbols_token(this);
	}
};




MParser.prototype.symbols_token = function() {

    var localctx = new Symbols_tokenContext(this, this._ctx, this.state);
    this.enterRule(localctx, 296, MParser.RULE_symbols_token);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1891;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1892;
        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 = MParser.RULE_assign;
    return this;
}

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

AssignContext.prototype.EQ = function() {
    return this.getToken(MParser.EQ, 0);
};

AssignContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterAssign(this);
	}
};

AssignContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitAssign(this);
	}
};




MParser.prototype.assign = function() {

    var localctx = new AssignContext(this, this._ctx, this.state);
    this.enterRule(localctx, 298, MParser.RULE_assign);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1894;
        this.match(MParser.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 = MParser.RULE_multiply;
    return this;
}

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

MultiplyContext.prototype.STAR = function() {
    return this.getToken(MParser.STAR, 0);
};

MultiplyContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterMultiply(this);
	}
};

MultiplyContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitMultiply(this);
	}
};




MParser.prototype.multiply = function() {

    var localctx = new MultiplyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 300, MParser.RULE_multiply);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1896;
        this.match(MParser.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 = MParser.RULE_divide;
    return this;
}

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

DivideContext.prototype.SLASH = function() {
    return this.getToken(MParser.SLASH, 0);
};

DivideContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterDivide(this);
	}
};

DivideContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitDivide(this);
	}
};




MParser.prototype.divide = function() {

    var localctx = new DivideContext(this, this._ctx, this.state);
    this.enterRule(localctx, 302, MParser.RULE_divide);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1898;
        this.match(MParser.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 = MParser.RULE_idivide;
    return this;
}

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

IdivideContext.prototype.BSLASH = function() {
    return this.getToken(MParser.BSLASH, 0);
};

IdivideContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterIdivide(this);
	}
};

IdivideContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitIdivide(this);
	}
};




MParser.prototype.idivide = function() {

    var localctx = new IdivideContext(this, this._ctx, this.state);
    this.enterRule(localctx, 304, MParser.RULE_idivide);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1900;
        this.match(MParser.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 = MParser.RULE_modulo;
    return this;
}

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

ModuloContext.prototype.PERCENT = function() {
    return this.getToken(MParser.PERCENT, 0);
};

ModuloContext.prototype.MODULO = function() {
    return this.getToken(MParser.MODULO, 0);
};

ModuloContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterModulo(this);
	}
};

ModuloContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitModulo(this);
	}
};




MParser.prototype.modulo = function() {

    var localctx = new ModuloContext(this, this._ctx, this.state);
    this.enterRule(localctx, 306, MParser.RULE_modulo);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1902;
        _la = this._input.LA(1);
        if(!(_la===MParser.PERCENT || _la===MParser.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 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 = MParser.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(MParser.SEMI, 0);
};

JavascriptStatementContext.prototype.javascript_expression = function() {
    return this.getTypedRuleContext(Javascript_expressionContext,0);
};
JavascriptStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavascriptStatement(this);
	}
};

JavascriptStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.RETURN, 0);
};

JavascriptReturnStatementContext.prototype.SEMI = function() {
    return this.getToken(MParser.SEMI, 0);
};

JavascriptReturnStatementContext.prototype.javascript_expression = function() {
    return this.getTypedRuleContext(Javascript_expressionContext,0);
};
JavascriptReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavascriptReturnStatement(this);
	}
};

JavascriptReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascriptReturnStatement(this);
	}
};



MParser.prototype.javascript_statement = function() {

    var localctx = new Javascript_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 308, MParser.RULE_javascript_statement);
    try {
        this.state = 1911;
        switch(this._input.LA(1)) {
        case MParser.RETURN:
            localctx = new JavascriptReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1904;
            this.match(MParser.RETURN);
            this.state = 1905; 
            localctx.exp = this.javascript_expression(0);
            this.state = 1906;
            this.match(MParser.SEMI);
            break;
        case MParser.LPAR:
        case MParser.LBRAK:
        case MParser.BOOLEAN:
        case MParser.CHARACTER:
        case MParser.TEXT:
        case MParser.INTEGER:
        case MParser.DECIMAL:
        case MParser.DATE:
        case MParser.TIME:
        case MParser.DATETIME:
        case MParser.PERIOD:
        case MParser.READ:
        case MParser.SELF:
        case MParser.TEST:
        case MParser.THIS:
        case MParser.WRITE:
        case MParser.BOOLEAN_LITERAL:
        case MParser.CHAR_LITERAL:
        case MParser.SYMBOL_IDENTIFIER:
        case MParser.TYPE_IDENTIFIER:
        case MParser.VARIABLE_IDENTIFIER:
        case MParser.DOLLAR_IDENTIFIER:
        case MParser.TEXT_LITERAL:
        case MParser.INTEGER_LITERAL:
        case MParser.DECIMAL_LITERAL:
            localctx = new JavascriptStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1908; 
            localctx.exp = this.javascript_expression(0);
            this.state = 1909;
            this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterJavascriptSelectorExpression(this);
	}
};

JavascriptSelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterJavascriptPrimaryExpression(this);
	}
};

JavascriptPrimaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascriptPrimaryExpression(this);
	}
};



MParser.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, MParser.RULE_javascript_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavascriptPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1914; 
        localctx.exp = this.javascript_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1920;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,150,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, MParser.RULE_javascript_expression);
                this.state = 1916;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1917; 
                localctx.child = this.javascript_selector_expression(); 
            }
            this.state = 1922;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,150,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 = MParser.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 MParserListener ) {
        listener.enterJavascript_primary_expression(this);
	}
};

Javascript_primary_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_primary_expression(this);
	}
};




MParser.prototype.javascript_primary_expression = function() {

    var localctx = new Javascript_primary_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 312, MParser.RULE_javascript_primary_expression);
    try {
        this.state = 1930;
        var la_ = this._interp.adaptivePredict(this._input,151,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1923; 
            this.javascript_this_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1924; 
            this.javascript_new_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1925; 
            this.javascript_parenthesis_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1926; 
            this.javascript_identifier_expression();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1927; 
            this.javascript_literal_expression();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1928; 
            this.javascript_method_expression();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 1929; 
            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 = MParser.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 MParserListener ) {
        listener.enterJavascript_this_expression(this);
	}
};

Javascript_this_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_this_expression(this);
	}
};




MParser.prototype.javascript_this_expression = function() {

    var localctx = new Javascript_this_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 314, MParser.RULE_javascript_this_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1932; 
        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 = MParser.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 MParserListener ) {
        listener.enterJavascript_new_expression(this);
	}
};

Javascript_new_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_new_expression(this);
	}
};




MParser.prototype.javascript_new_expression = function() {

    var localctx = new Javascript_new_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 316, MParser.RULE_javascript_new_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1934; 
        this.new_token();
        this.state = 1935; 
        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 = MParser.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(MParser.DOT, 0);
};

JavaScriptMemberExpressionContext.prototype.javascript_identifier = function() {
    return this.getTypedRuleContext(Javascript_identifierContext,0);
};
JavaScriptMemberExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaScriptMemberExpression(this);
	}
};

JavaScriptMemberExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterJavaScriptItemExpression(this);
	}
};

JavaScriptItemExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DOT, 0);
};

JavaScriptMethodExpressionContext.prototype.javascript_method_expression = function() {
    return this.getTypedRuleContext(Javascript_method_expressionContext,0);
};
JavaScriptMethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaScriptMethodExpression(this);
	}
};

JavaScriptMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavaScriptMethodExpression(this);
	}
};



MParser.prototype.javascript_selector_expression = function() {

    var localctx = new Javascript_selector_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 318, MParser.RULE_javascript_selector_expression);
    try {
        this.state = 1942;
        var la_ = this._interp.adaptivePredict(this._input,152,this._ctx);
        switch(la_) {
        case 1:
            localctx = new JavaScriptMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1937;
            this.match(MParser.DOT);
            this.state = 1938; 
            localctx.method = this.javascript_method_expression();
            break;

        case 2:
            localctx = new JavaScriptMemberExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1939;
            this.match(MParser.DOT);
            this.state = 1940; 
            localctx.name = this.javascript_identifier();
            break;

        case 3:
            localctx = new JavaScriptItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1941; 
            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 = MParser.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(MParser.LPAR, 0);
};

Javascript_method_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterJavascript_method_expression(this);
	}
};

Javascript_method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_method_expression(this);
	}
};




MParser.prototype.javascript_method_expression = function() {

    var localctx = new Javascript_method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 320, MParser.RULE_javascript_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1944; 
        localctx.name = this.javascript_identifier();
        this.state = 1945;
        this.match(MParser.LPAR);
        this.state = 1947;
        _la = this._input.LA(1);
        if(_la===MParser.LPAR || _la===MParser.LBRAK || ((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (MParser.BOOLEAN - 50)) | (1 << (MParser.CHARACTER - 50)) | (1 << (MParser.TEXT - 50)) | (1 << (MParser.INTEGER - 50)) | (1 << (MParser.DECIMAL - 50)) | (1 << (MParser.DATE - 50)) | (1 << (MParser.TIME - 50)) | (1 << (MParser.DATETIME - 50)) | (1 << (MParser.PERIOD - 50)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.TEST - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.WRITE - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 164)) & ~0x1f) == 0 && ((1 << (_la - 164)) & ((1 << (MParser.DOLLAR_IDENTIFIER - 164)) | (1 << (MParser.TEXT_LITERAL - 164)) | (1 << (MParser.INTEGER_LITERAL - 164)) | (1 << (MParser.DECIMAL_LITERAL - 164)))) !== 0)) {
            this.state = 1946; 
            localctx.args = this.javascript_arguments(0);
        }

        this.state = 1949;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterJavascriptArgumentList(this);
	}
};

JavascriptArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterJavascriptArgumentListItem(this);
	}
};

JavascriptArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascriptArgumentListItem(this);
	}
};



MParser.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, MParser.RULE_javascript_arguments, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavascriptArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1952; 
        localctx.item = this.javascript_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 1959;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,154,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, MParser.RULE_javascript_arguments);
                this.state = 1954;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1955;
                this.match(MParser.COMMA);
                this.state = 1956; 
                localctx.item = this.javascript_expression(0); 
            }
            this.state = 1961;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,154,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 = MParser.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(MParser.LBRAK, 0);
};

Javascript_item_expressionContext.prototype.RBRAK = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterJavascript_item_expression(this);
	}
};

Javascript_item_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_item_expression(this);
	}
};




MParser.prototype.javascript_item_expression = function() {

    var localctx = new Javascript_item_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 324, MParser.RULE_javascript_item_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1962;
        this.match(MParser.LBRAK);
        this.state = 1963; 
        localctx.exp = this.javascript_expression(0);
        this.state = 1964;
        this.match(MParser.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 = MParser.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(MParser.LPAR, 0);
};

Javascript_parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterJavascript_parenthesis_expression(this);
	}
};

Javascript_parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_parenthesis_expression(this);
	}
};




MParser.prototype.javascript_parenthesis_expression = function() {

    var localctx = new Javascript_parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 326, MParser.RULE_javascript_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1966;
        this.match(MParser.LPAR);
        this.state = 1967; 
        localctx.exp = this.javascript_expression(0);
        this.state = 1968;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterJavascript_identifier_expression(this);
	}
};

Javascript_identifier_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_identifier_expression(this);
	}
};




MParser.prototype.javascript_identifier_expression = function() {

    var localctx = new Javascript_identifier_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 328, MParser.RULE_javascript_identifier_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1970; 
        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 = MParser.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(MParser.INTEGER_LITERAL, 0);
};
JavascriptIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavascriptIntegerLiteral(this);
	}
};

JavascriptIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.BOOLEAN_LITERAL, 0);
};
JavascriptBooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavascriptBooleanLiteral(this);
	}
};

JavascriptBooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CHAR_LITERAL, 0);
};
JavascriptCharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavascriptCharacterLiteral(this);
	}
};

JavascriptCharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.TEXT_LITERAL, 0);
};
JavascriptTextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavascriptTextLiteral(this);
	}
};

JavascriptTextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DECIMAL_LITERAL, 0);
};
JavascriptDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavascriptDecimalLiteral(this);
	}
};

JavascriptDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascriptDecimalLiteral(this);
	}
};



MParser.prototype.javascript_literal_expression = function() {

    var localctx = new Javascript_literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 330, MParser.RULE_javascript_literal_expression);
    try {
        this.state = 1977;
        switch(this._input.LA(1)) {
        case MParser.INTEGER_LITERAL:
            localctx = new JavascriptIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1972;
            localctx.t = this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new JavascriptDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1973;
            localctx.t = this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new JavascriptTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1974;
            localctx.t = this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new JavascriptBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1975;
            localctx.t = this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new JavascriptCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1976;
            localctx.t = this.match(MParser.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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Javascript_identifierContext.prototype.SYMBOL_IDENTIFIER = function() {
    return this.getToken(MParser.SYMBOL_IDENTIFIER, 0);
};

Javascript_identifierContext.prototype.DOLLAR_IDENTIFIER = function() {
    return this.getToken(MParser.DOLLAR_IDENTIFIER, 0);
};

Javascript_identifierContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(MParser.TYPE_IDENTIFIER, 0);
};

Javascript_identifierContext.prototype.BOOLEAN = function() {
    return this.getToken(MParser.BOOLEAN, 0);
};

Javascript_identifierContext.prototype.CHARACTER = function() {
    return this.getToken(MParser.CHARACTER, 0);
};

Javascript_identifierContext.prototype.TEXT = function() {
    return this.getToken(MParser.TEXT, 0);
};

Javascript_identifierContext.prototype.INTEGER = function() {
    return this.getToken(MParser.INTEGER, 0);
};

Javascript_identifierContext.prototype.DECIMAL = function() {
    return this.getToken(MParser.DECIMAL, 0);
};

Javascript_identifierContext.prototype.DATE = function() {
    return this.getToken(MParser.DATE, 0);
};

Javascript_identifierContext.prototype.TIME = function() {
    return this.getToken(MParser.TIME, 0);
};

Javascript_identifierContext.prototype.DATETIME = function() {
    return this.getToken(MParser.DATETIME, 0);
};

Javascript_identifierContext.prototype.PERIOD = function() {
    return this.getToken(MParser.PERIOD, 0);
};

Javascript_identifierContext.prototype.READ = function() {
    return this.getToken(MParser.READ, 0);
};

Javascript_identifierContext.prototype.WRITE = function() {
    return this.getToken(MParser.WRITE, 0);
};

Javascript_identifierContext.prototype.TEST = function() {
    return this.getToken(MParser.TEST, 0);
};

Javascript_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavascript_identifier(this);
	}
};

Javascript_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavascript_identifier(this);
	}
};




MParser.prototype.javascript_identifier = function() {

    var localctx = new Javascript_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 332, MParser.RULE_javascript_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1979;
        _la = this._input.LA(1);
        if(!(((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (MParser.BOOLEAN - 50)) | (1 << (MParser.CHARACTER - 50)) | (1 << (MParser.TEXT - 50)) | (1 << (MParser.INTEGER - 50)) | (1 << (MParser.DECIMAL - 50)) | (1 << (MParser.DATE - 50)) | (1 << (MParser.TIME - 50)) | (1 << (MParser.DATETIME - 50)) | (1 << (MParser.PERIOD - 50)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.TEST - 132)) | (1 << (MParser.WRITE - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || _la===MParser.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 = MParser.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 MParserListener ) {
        listener.enterPythonStatement(this);
	}
};

PythonStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.RETURN, 0);
};

PythonReturnStatementContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};
PythonReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPythonReturnStatement(this);
	}
};

PythonReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPythonReturnStatement(this);
	}
};



MParser.prototype.python_statement = function() {

    var localctx = new Python_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 334, MParser.RULE_python_statement);
    try {
        this.state = 1984;
        switch(this._input.LA(1)) {
        case MParser.RETURN:
            localctx = new PythonReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1981;
            this.match(MParser.RETURN);
            this.state = 1982; 
            localctx.exp = this.python_expression(0);
            break;
        case MParser.LPAR:
        case MParser.BOOLEAN:
        case MParser.CHARACTER:
        case MParser.TEXT:
        case MParser.INTEGER:
        case MParser.DECIMAL:
        case MParser.DATE:
        case MParser.TIME:
        case MParser.DATETIME:
        case MParser.PERIOD:
        case MParser.READ:
        case MParser.SELF:
        case MParser.TEST:
        case MParser.THIS:
        case MParser.WRITE:
        case MParser.BOOLEAN_LITERAL:
        case MParser.CHAR_LITERAL:
        case MParser.SYMBOL_IDENTIFIER:
        case MParser.TYPE_IDENTIFIER:
        case MParser.VARIABLE_IDENTIFIER:
        case MParser.DOLLAR_IDENTIFIER:
        case MParser.TEXT_LITERAL:
        case MParser.INTEGER_LITERAL:
        case MParser.DECIMAL_LITERAL:
            localctx = new PythonStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1983; 
            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 = MParser.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 MParserListener ) {
        listener.enterPythonSelectorExpression(this);
	}
};

PythonSelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterPythonPrimaryExpression(this);
	}
};

PythonPrimaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPythonPrimaryExpression(this);
	}
};



MParser.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, MParser.RULE_python_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new PythonPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 1987; 
        localctx.exp = this.python_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1993;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,157,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, MParser.RULE_python_expression);
                this.state = 1989;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1990; 
                localctx.child = this.python_selector_expression(); 
            }
            this.state = 1995;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,157,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 = MParser.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 MParserListener ) {
        listener.enterPythonParenthesisExpression(this);
	}
};

PythonParenthesisExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterPythonIdentifierExpression(this);
	}
};

PythonIdentifierExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterPythonSelfExpression(this);
	}
};

PythonSelfExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterPythonLiteralExpression(this);
	}
};

PythonLiteralExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterPythonGlobalMethodExpression(this);
	}
};

PythonGlobalMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPythonGlobalMethodExpression(this);
	}
};



MParser.prototype.python_primary_expression = function() {

    var localctx = new Python_primary_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 338, MParser.RULE_python_primary_expression);
    try {
        this.state = 2001;
        var la_ = this._interp.adaptivePredict(this._input,158,this._ctx);
        switch(la_) {
        case 1:
            localctx = new PythonSelfExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1996; 
            localctx.exp = this.python_self_expression();
            break;

        case 2:
            localctx = new PythonParenthesisExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1997; 
            localctx.exp = this.python_parenthesis_expression();
            break;

        case 3:
            localctx = new PythonIdentifierExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1998; 
            localctx.exp = this.python_identifier_expression(0);
            break;

        case 4:
            localctx = new PythonLiteralExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1999; 
            localctx.exp = this.python_literal_expression();
            break;

        case 5:
            localctx = new PythonGlobalMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2000; 
            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 = MParser.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 MParserListener ) {
        listener.enterPython_self_expression(this);
	}
};

Python_self_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPython_self_expression(this);
	}
};




MParser.prototype.python_self_expression = function() {

    var localctx = new Python_self_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 340, MParser.RULE_python_self_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2003; 
        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 = MParser.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(MParser.DOT, 0);
};

PythonMethodExpressionContext.prototype.python_method_expression = function() {
    return this.getTypedRuleContext(Python_method_expressionContext,0);
};
PythonMethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPythonMethodExpression(this);
	}
};

PythonMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.LBRAK, 0);
};

PythonItemExpressionContext.prototype.RBRAK = function() {
    return this.getToken(MParser.RBRAK, 0);
};

PythonItemExpressionContext.prototype.python_expression = function() {
    return this.getTypedRuleContext(Python_expressionContext,0);
};
PythonItemExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPythonItemExpression(this);
	}
};

PythonItemExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPythonItemExpression(this);
	}
};



MParser.prototype.python_selector_expression = function() {

    var localctx = new Python_selector_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 342, MParser.RULE_python_selector_expression);
    try {
        this.state = 2011;
        switch(this._input.LA(1)) {
        case MParser.DOT:
            localctx = new PythonMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2005;
            this.match(MParser.DOT);
            this.state = 2006; 
            localctx.exp = this.python_method_expression();
            break;
        case MParser.LBRAK:
            localctx = new PythonItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2007;
            this.match(MParser.LBRAK);
            this.state = 2008; 
            localctx.exp = this.python_expression(0);
            this.state = 2009;
            this.match(MParser.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 = MParser.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(MParser.LPAR, 0);
};

Python_method_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterPython_method_expression(this);
	}
};

Python_method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPython_method_expression(this);
	}
};




MParser.prototype.python_method_expression = function() {

    var localctx = new Python_method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 344, MParser.RULE_python_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2013; 
        localctx.name = this.python_identifier();
        this.state = 2014;
        this.match(MParser.LPAR);
        this.state = 2016;
        _la = this._input.LA(1);
        if(_la===MParser.LPAR || ((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (MParser.BOOLEAN - 50)) | (1 << (MParser.CHARACTER - 50)) | (1 << (MParser.TEXT - 50)) | (1 << (MParser.INTEGER - 50)) | (1 << (MParser.DECIMAL - 50)) | (1 << (MParser.DATE - 50)) | (1 << (MParser.TIME - 50)) | (1 << (MParser.DATETIME - 50)) | (1 << (MParser.PERIOD - 50)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.TEST - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.WRITE - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 164)) & ~0x1f) == 0 && ((1 << (_la - 164)) & ((1 << (MParser.DOLLAR_IDENTIFIER - 164)) | (1 << (MParser.TEXT_LITERAL - 164)) | (1 << (MParser.INTEGER_LITERAL - 164)) | (1 << (MParser.DECIMAL_LITERAL - 164)))) !== 0)) {
            this.state = 2015; 
            localctx.args = this.python_argument_list();
        }

        this.state = 2018;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterPythonOrdinalOnlyArgumentList(this);
	}
};

PythonOrdinalOnlyArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterPythonNamedOnlyArgumentList(this);
	}
};

PythonNamedOnlyArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterPythonArgumentList(this);
	}
};

PythonArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPythonArgumentList(this);
	}
};



MParser.prototype.python_argument_list = function() {

    var localctx = new Python_argument_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 346, MParser.RULE_python_argument_list);
    try {
        this.state = 2026;
        var la_ = this._interp.adaptivePredict(this._input,161,this._ctx);
        switch(la_) {
        case 1:
            localctx = new PythonOrdinalOnlyArgumentListContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2020; 
            localctx.ordinal = this.python_ordinal_argument_list(0);
            break;

        case 2:
            localctx = new PythonNamedOnlyArgumentListContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2021; 
            localctx.named = this.python_named_argument_list(0);
            break;

        case 3:
            localctx = new PythonArgumentListContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2022; 
            localctx.ordinal = this.python_ordinal_argument_list(0);
            this.state = 2023;
            this.match(MParser.COMMA);
            this.state = 2024; 
            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 = MParser.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 MParserListener ) {
        listener.enterPythonOrdinalArgumentList(this);
	}
};

PythonOrdinalArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterPythonOrdinalArgumentListItem(this);
	}
};

PythonOrdinalArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPythonOrdinalArgumentListItem(this);
	}
};



MParser.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, MParser.RULE_python_ordinal_argument_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new PythonOrdinalArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2029; 
        localctx.item = this.python_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2036;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,162,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, MParser.RULE_python_ordinal_argument_list);
                this.state = 2031;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2032;
                this.match(MParser.COMMA);
                this.state = 2033; 
                localctx.item = this.python_expression(0); 
            }
            this.state = 2038;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,162,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 = MParser.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(MParser.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 MParserListener ) {
        listener.enterPythonNamedArgumentList(this);
	}
};

PythonNamedArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.COMMA, 0);
};

PythonNamedArgumentListItemContext.prototype.EQ = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterPythonNamedArgumentListItem(this);
	}
};

PythonNamedArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPythonNamedArgumentListItem(this);
	}
};



MParser.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, MParser.RULE_python_named_argument_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new PythonNamedArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2040; 
        localctx.name = this.python_identifier();
        this.state = 2041;
        this.match(MParser.EQ);
        this.state = 2042; 
        localctx.exp = this.python_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2052;
        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 PythonNamedArgumentListItemContext(this, new Python_named_argument_listContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, MParser.RULE_python_named_argument_list);
                this.state = 2044;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2045;
                this.match(MParser.COMMA);
                this.state = 2046; 
                localctx.name = this.python_identifier();
                this.state = 2047;
                this.match(MParser.EQ);
                this.state = 2048; 
                localctx.exp = this.python_expression(0); 
            }
            this.state = 2054;
            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 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 = MParser.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(MParser.LPAR, 0);
};

Python_parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterPython_parenthesis_expression(this);
	}
};

Python_parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPython_parenthesis_expression(this);
	}
};




MParser.prototype.python_parenthesis_expression = function() {

    var localctx = new Python_parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 352, MParser.RULE_python_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2055;
        this.match(MParser.LPAR);
        this.state = 2056; 
        localctx.exp = this.python_expression(0);
        this.state = 2057;
        this.match(MParser.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 = MParser.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(MParser.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 MParserListener ) {
        listener.enterPythonChildIdentifier(this);
	}
};

PythonChildIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DOLLAR_IDENTIFIER, 0);
};
PythonPromptoIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPythonPromptoIdentifier(this);
	}
};

PythonPromptoIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterPythonIdentifier(this);
	}
};

PythonIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPythonIdentifier(this);
	}
};



MParser.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, MParser.RULE_python_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2062;
        switch(this._input.LA(1)) {
        case MParser.DOLLAR_IDENTIFIER:
            localctx = new PythonPromptoIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 2060;
            this.match(MParser.DOLLAR_IDENTIFIER);
            break;
        case MParser.BOOLEAN:
        case MParser.CHARACTER:
        case MParser.TEXT:
        case MParser.INTEGER:
        case MParser.DECIMAL:
        case MParser.DATE:
        case MParser.TIME:
        case MParser.DATETIME:
        case MParser.PERIOD:
        case MParser.READ:
        case MParser.SELF:
        case MParser.TEST:
        case MParser.THIS:
        case MParser.WRITE:
        case MParser.SYMBOL_IDENTIFIER:
        case MParser.TYPE_IDENTIFIER:
        case MParser.VARIABLE_IDENTIFIER:
            localctx = new PythonIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2061; 
            localctx.name = this.python_identifier();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2069;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,165,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, MParser.RULE_python_identifier_expression);
                this.state = 2064;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2065;
                this.match(MParser.DOT);
                this.state = 2066; 
                localctx.name = this.python_identifier(); 
            }
            this.state = 2071;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,165,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 = MParser.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(MParser.INTEGER_LITERAL, 0);
};
PythonIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPythonIntegerLiteral(this);
	}
};

PythonIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.BOOLEAN_LITERAL, 0);
};
PythonBooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPythonBooleanLiteral(this);
	}
};

PythonBooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CHAR_LITERAL, 0);
};
PythonCharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPythonCharacterLiteral(this);
	}
};

PythonCharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.TEXT_LITERAL, 0);
};
PythonTextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPythonTextLiteral(this);
	}
};

PythonTextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DECIMAL_LITERAL, 0);
};
PythonDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPythonDecimalLiteral(this);
	}
};

PythonDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPythonDecimalLiteral(this);
	}
};



MParser.prototype.python_literal_expression = function() {

    var localctx = new Python_literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 356, MParser.RULE_python_literal_expression);
    try {
        this.state = 2077;
        switch(this._input.LA(1)) {
        case MParser.INTEGER_LITERAL:
            localctx = new PythonIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2072;
            localctx.t = this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new PythonDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2073;
            localctx.t = this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new PythonTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2074;
            localctx.t = this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new PythonBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2075;
            localctx.t = this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new PythonCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2076;
            localctx.t = this.match(MParser.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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Python_identifierContext.prototype.SYMBOL_IDENTIFIER = function() {
    return this.getToken(MParser.SYMBOL_IDENTIFIER, 0);
};

Python_identifierContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(MParser.TYPE_IDENTIFIER, 0);
};

Python_identifierContext.prototype.BOOLEAN = function() {
    return this.getToken(MParser.BOOLEAN, 0);
};

Python_identifierContext.prototype.CHARACTER = function() {
    return this.getToken(MParser.CHARACTER, 0);
};

Python_identifierContext.prototype.TEXT = function() {
    return this.getToken(MParser.TEXT, 0);
};

Python_identifierContext.prototype.INTEGER = function() {
    return this.getToken(MParser.INTEGER, 0);
};

Python_identifierContext.prototype.DECIMAL = function() {
    return this.getToken(MParser.DECIMAL, 0);
};

Python_identifierContext.prototype.DATE = function() {
    return this.getToken(MParser.DATE, 0);
};

Python_identifierContext.prototype.TIME = function() {
    return this.getToken(MParser.TIME, 0);
};

Python_identifierContext.prototype.DATETIME = function() {
    return this.getToken(MParser.DATETIME, 0);
};

Python_identifierContext.prototype.PERIOD = function() {
    return this.getToken(MParser.PERIOD, 0);
};

Python_identifierContext.prototype.READ = function() {
    return this.getToken(MParser.READ, 0);
};

Python_identifierContext.prototype.WRITE = function() {
    return this.getToken(MParser.WRITE, 0);
};

Python_identifierContext.prototype.TEST = function() {
    return this.getToken(MParser.TEST, 0);
};

Python_identifierContext.prototype.SELF = function() {
    return this.getToken(MParser.SELF, 0);
};

Python_identifierContext.prototype.THIS = function() {
    return this.getToken(MParser.THIS, 0);
};

Python_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterPython_identifier(this);
	}
};

Python_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitPython_identifier(this);
	}
};




MParser.prototype.python_identifier = function() {

    var localctx = new Python_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 358, MParser.RULE_python_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2079;
        _la = this._input.LA(1);
        if(!(((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (MParser.BOOLEAN - 50)) | (1 << (MParser.CHARACTER - 50)) | (1 << (MParser.TEXT - 50)) | (1 << (MParser.INTEGER - 50)) | (1 << (MParser.DECIMAL - 50)) | (1 << (MParser.DATE - 50)) | (1 << (MParser.TIME - 50)) | (1 << (MParser.DATETIME - 50)) | (1 << (MParser.PERIOD - 50)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.TEST - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.WRITE - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 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 = MParser.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(MParser.RETURN, 0);
};

JavaReturnStatementContext.prototype.SEMI = function() {
    return this.getToken(MParser.SEMI, 0);
};

JavaReturnStatementContext.prototype.java_expression = function() {
    return this.getTypedRuleContext(Java_expressionContext,0);
};
JavaReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaReturnStatement(this);
	}
};

JavaReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.SEMI, 0);
};

JavaStatementContext.prototype.java_expression = function() {
    return this.getTypedRuleContext(Java_expressionContext,0);
};
JavaStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaStatement(this);
	}
};

JavaStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavaStatement(this);
	}
};



MParser.prototype.java_statement = function() {

    var localctx = new Java_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 360, MParser.RULE_java_statement);
    try {
        this.state = 2088;
        switch(this._input.LA(1)) {
        case MParser.RETURN:
            localctx = new JavaReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2081;
            this.match(MParser.RETURN);
            this.state = 2082; 
            localctx.exp = this.java_expression(0);
            this.state = 2083;
            this.match(MParser.SEMI);
            break;
        case MParser.LPAR:
        case MParser.BOOLEAN:
        case MParser.CHARACTER:
        case MParser.TEXT:
        case MParser.INTEGER:
        case MParser.DECIMAL:
        case MParser.DATE:
        case MParser.TIME:
        case MParser.DATETIME:
        case MParser.PERIOD:
        case MParser.READ:
        case MParser.SELF:
        case MParser.TEST:
        case MParser.THIS:
        case MParser.WRITE:
        case MParser.BOOLEAN_LITERAL:
        case MParser.CHAR_LITERAL:
        case MParser.SYMBOL_IDENTIFIER:
        case MParser.TYPE_IDENTIFIER:
        case MParser.VARIABLE_IDENTIFIER:
        case MParser.NATIVE_IDENTIFIER:
        case MParser.DOLLAR_IDENTIFIER:
        case MParser.TEXT_LITERAL:
        case MParser.INTEGER_LITERAL:
        case MParser.DECIMAL_LITERAL:
            localctx = new JavaStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2085; 
            localctx.exp = this.java_expression(0);
            this.state = 2086;
            this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterJavaSelectorExpression(this);
	}
};

JavaSelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterJavaPrimaryExpression(this);
	}
};

JavaPrimaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavaPrimaryExpression(this);
	}
};



MParser.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, MParser.RULE_java_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2091; 
        localctx.exp = this.java_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2097;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,168,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, MParser.RULE_java_expression);
                this.state = 2093;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2094; 
                localctx.child = this.java_selector_expression(); 
            }
            this.state = 2099;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,168,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 = MParser.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 MParserListener ) {
        listener.enterJava_primary_expression(this);
	}
};

Java_primary_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJava_primary_expression(this);
	}
};




MParser.prototype.java_primary_expression = function() {

    var localctx = new Java_primary_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 364, MParser.RULE_java_primary_expression);
    try {
        this.state = 2105;
        var la_ = this._interp.adaptivePredict(this._input,169,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2100; 
            this.java_this_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2101; 
            this.java_new_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2102; 
            this.java_parenthesis_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2103; 
            this.java_identifier_expression(0);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2104; 
            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 = MParser.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 MParserListener ) {
        listener.enterJava_this_expression(this);
	}
};

Java_this_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJava_this_expression(this);
	}
};




MParser.prototype.java_this_expression = function() {

    var localctx = new Java_this_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 366, MParser.RULE_java_this_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2107; 
        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 = MParser.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 MParserListener ) {
        listener.enterJava_new_expression(this);
	}
};

Java_new_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJava_new_expression(this);
	}
};




MParser.prototype.java_new_expression = function() {

    var localctx = new Java_new_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 368, MParser.RULE_java_new_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2109; 
        this.new_token();
        this.state = 2110; 
        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 = MParser.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 MParserListener ) {
        listener.enterJavaItemExpression(this);
	}
};

JavaItemExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DOT, 0);
};

JavaMethodExpressionContext.prototype.java_method_expression = function() {
    return this.getTypedRuleContext(Java_method_expressionContext,0);
};
JavaMethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaMethodExpression(this);
	}
};

JavaMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavaMethodExpression(this);
	}
};



MParser.prototype.java_selector_expression = function() {

    var localctx = new Java_selector_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 370, MParser.RULE_java_selector_expression);
    try {
        this.state = 2115;
        switch(this._input.LA(1)) {
        case MParser.DOT:
            localctx = new JavaMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2112;
            this.match(MParser.DOT);
            this.state = 2113; 
            localctx.exp = this.java_method_expression();
            break;
        case MParser.LBRAK:
            localctx = new JavaItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2114; 
            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 = MParser.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(MParser.LPAR, 0);
};

Java_method_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterJava_method_expression(this);
	}
};

Java_method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJava_method_expression(this);
	}
};




MParser.prototype.java_method_expression = function() {

    var localctx = new Java_method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 372, MParser.RULE_java_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2117; 
        localctx.name = this.java_identifier();
        this.state = 2118;
        this.match(MParser.LPAR);
        this.state = 2120;
        _la = this._input.LA(1);
        if(_la===MParser.LPAR || ((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (MParser.BOOLEAN - 50)) | (1 << (MParser.CHARACTER - 50)) | (1 << (MParser.TEXT - 50)) | (1 << (MParser.INTEGER - 50)) | (1 << (MParser.DECIMAL - 50)) | (1 << (MParser.DATE - 50)) | (1 << (MParser.TIME - 50)) | (1 << (MParser.DATETIME - 50)) | (1 << (MParser.PERIOD - 50)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.TEST - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.WRITE - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)) | (1 << (MParser.NATIVE_IDENTIFIER - 132)))) !== 0) || ((((_la - 164)) & ~0x1f) == 0 && ((1 << (_la - 164)) & ((1 << (MParser.DOLLAR_IDENTIFIER - 164)) | (1 << (MParser.TEXT_LITERAL - 164)) | (1 << (MParser.INTEGER_LITERAL - 164)) | (1 << (MParser.DECIMAL_LITERAL - 164)))) !== 0)) {
            this.state = 2119; 
            localctx.args = this.java_arguments(0);
        }

        this.state = 2122;
        this.match(MParser.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 = MParser.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(MParser.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 MParserListener ) {
        listener.enterJavaArgumentListItem(this);
	}
};

JavaArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterJavaArgumentList(this);
	}
};

JavaArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavaArgumentList(this);
	}
};



MParser.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, MParser.RULE_java_arguments, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2125; 
        localctx.item = this.java_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2132;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,172,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                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, MParser.RULE_java_arguments);
                this.state = 2127;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2128;
                this.match(MParser.COMMA);
                this.state = 2129; 
                localctx.item = this.java_expression(0); 
            }
            this.state = 2134;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,172,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 = MParser.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(MParser.LBRAK, 0);
};

Java_item_expressionContext.prototype.RBRAK = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterJava_item_expression(this);
	}
};

Java_item_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJava_item_expression(this);
	}
};




MParser.prototype.java_item_expression = function() {

    var localctx = new Java_item_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 376, MParser.RULE_java_item_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2135;
        this.match(MParser.LBRAK);
        this.state = 2136; 
        localctx.exp = this.java_expression(0);
        this.state = 2137;
        this.match(MParser.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 = MParser.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(MParser.LPAR, 0);
};

Java_parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterJava_parenthesis_expression(this);
	}
};

Java_parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJava_parenthesis_expression(this);
	}
};




MParser.prototype.java_parenthesis_expression = function() {

    var localctx = new Java_parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 378, MParser.RULE_java_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2139;
        this.match(MParser.LPAR);
        this.state = 2140; 
        localctx.exp = this.java_expression(0);
        this.state = 2141;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterJavaIdentifier(this);
	}
};

JavaIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterJavaChildIdentifier(this);
	}
};

JavaChildIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavaChildIdentifier(this);
	}
};



MParser.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, MParser.RULE_java_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaIdentifierContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2144; 
        localctx.name = this.java_identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2151;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,173,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, MParser.RULE_java_identifier_expression);
                this.state = 2146;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2147;
                this.match(MParser.DOT);
                this.state = 2148; 
                localctx.name = this.java_identifier(); 
            }
            this.state = 2153;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,173,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 = MParser.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 MParserListener ) {
        listener.enterJavaClassIdentifier(this);
	}
};

JavaClassIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DOLLAR_IDENTIFIER, 0);
};
JavaChildClassIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaChildClassIdentifier(this);
	}
};

JavaChildClassIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavaChildClassIdentifier(this);
	}
};



MParser.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, MParser.RULE_java_class_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaClassIdentifierContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2155; 
        localctx.klass = this.java_identifier_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2161;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,174,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                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, MParser.RULE_java_class_identifier_expression);
                this.state = 2157;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2158;
                localctx.name = this.match(MParser.DOLLAR_IDENTIFIER); 
            }
            this.state = 2163;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,174,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 = MParser.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(MParser.BOOLEAN_LITERAL, 0);
};
JavaBooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaBooleanLiteral(this);
	}
};

JavaBooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CHAR_LITERAL, 0);
};
JavaCharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaCharacterLiteral(this);
	}
};

JavaCharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.INTEGER_LITERAL, 0);
};
JavaIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaIntegerLiteral(this);
	}
};

JavaIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.TEXT_LITERAL, 0);
};
JavaTextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaTextLiteral(this);
	}
};

JavaTextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DECIMAL_LITERAL, 0);
};
JavaDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJavaDecimalLiteral(this);
	}
};

JavaDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJavaDecimalLiteral(this);
	}
};



MParser.prototype.java_literal_expression = function() {

    var localctx = new Java_literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 384, MParser.RULE_java_literal_expression);
    try {
        this.state = 2169;
        switch(this._input.LA(1)) {
        case MParser.INTEGER_LITERAL:
            localctx = new JavaIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2164;
            localctx.t = this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new JavaDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2165;
            localctx.t = this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new JavaTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2166;
            localctx.t = this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new JavaBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2167;
            localctx.t = this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new JavaCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2168;
            localctx.t = this.match(MParser.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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Java_identifierContext.prototype.SYMBOL_IDENTIFIER = function() {
    return this.getToken(MParser.SYMBOL_IDENTIFIER, 0);
};

Java_identifierContext.prototype.NATIVE_IDENTIFIER = function() {
    return this.getToken(MParser.NATIVE_IDENTIFIER, 0);
};

Java_identifierContext.prototype.DOLLAR_IDENTIFIER = function() {
    return this.getToken(MParser.DOLLAR_IDENTIFIER, 0);
};

Java_identifierContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(MParser.TYPE_IDENTIFIER, 0);
};

Java_identifierContext.prototype.BOOLEAN = function() {
    return this.getToken(MParser.BOOLEAN, 0);
};

Java_identifierContext.prototype.CHARACTER = function() {
    return this.getToken(MParser.CHARACTER, 0);
};

Java_identifierContext.prototype.TEXT = function() {
    return this.getToken(MParser.TEXT, 0);
};

Java_identifierContext.prototype.INTEGER = function() {
    return this.getToken(MParser.INTEGER, 0);
};

Java_identifierContext.prototype.DECIMAL = function() {
    return this.getToken(MParser.DECIMAL, 0);
};

Java_identifierContext.prototype.DATE = function() {
    return this.getToken(MParser.DATE, 0);
};

Java_identifierContext.prototype.TIME = function() {
    return this.getToken(MParser.TIME, 0);
};

Java_identifierContext.prototype.DATETIME = function() {
    return this.getToken(MParser.DATETIME, 0);
};

Java_identifierContext.prototype.PERIOD = function() {
    return this.getToken(MParser.PERIOD, 0);
};

Java_identifierContext.prototype.READ = function() {
    return this.getToken(MParser.READ, 0);
};

Java_identifierContext.prototype.WRITE = function() {
    return this.getToken(MParser.WRITE, 0);
};

Java_identifierContext.prototype.TEST = function() {
    return this.getToken(MParser.TEST, 0);
};

Java_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterJava_identifier(this);
	}
};

Java_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitJava_identifier(this);
	}
};




MParser.prototype.java_identifier = function() {

    var localctx = new Java_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 386, MParser.RULE_java_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2171;
        _la = this._input.LA(1);
        if(!(((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (MParser.BOOLEAN - 50)) | (1 << (MParser.CHARACTER - 50)) | (1 << (MParser.TEXT - 50)) | (1 << (MParser.INTEGER - 50)) | (1 << (MParser.DECIMAL - 50)) | (1 << (MParser.DATE - 50)) | (1 << (MParser.TIME - 50)) | (1 << (MParser.DATETIME - 50)) | (1 << (MParser.PERIOD - 50)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.TEST - 132)) | (1 << (MParser.WRITE - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)) | (1 << (MParser.NATIVE_IDENTIFIER - 132)))) !== 0) || _la===MParser.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 = MParser.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(MParser.RETURN, 0);
};

CSharpReturnStatementContext.prototype.SEMI = function() {
    return this.getToken(MParser.SEMI, 0);
};

CSharpReturnStatementContext.prototype.csharp_expression = function() {
    return this.getTypedRuleContext(Csharp_expressionContext,0);
};
CSharpReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpReturnStatement(this);
	}
};

CSharpReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.SEMI, 0);
};

CSharpStatementContext.prototype.csharp_expression = function() {
    return this.getTypedRuleContext(Csharp_expressionContext,0);
};
CSharpStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpStatement(this);
	}
};

CSharpStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCSharpStatement(this);
	}
};



MParser.prototype.csharp_statement = function() {

    var localctx = new Csharp_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 388, MParser.RULE_csharp_statement);
    try {
        this.state = 2180;
        switch(this._input.LA(1)) {
        case MParser.RETURN:
            localctx = new CSharpReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2173;
            this.match(MParser.RETURN);
            this.state = 2174; 
            localctx.exp = this.csharp_expression(0);
            this.state = 2175;
            this.match(MParser.SEMI);
            break;
        case MParser.LPAR:
        case MParser.BOOLEAN:
        case MParser.CHARACTER:
        case MParser.TEXT:
        case MParser.INTEGER:
        case MParser.DECIMAL:
        case MParser.DATE:
        case MParser.TIME:
        case MParser.DATETIME:
        case MParser.PERIOD:
        case MParser.READ:
        case MParser.SELF:
        case MParser.TEST:
        case MParser.THIS:
        case MParser.WRITE:
        case MParser.BOOLEAN_LITERAL:
        case MParser.CHAR_LITERAL:
        case MParser.SYMBOL_IDENTIFIER:
        case MParser.TYPE_IDENTIFIER:
        case MParser.VARIABLE_IDENTIFIER:
        case MParser.DOLLAR_IDENTIFIER:
        case MParser.TEXT_LITERAL:
        case MParser.INTEGER_LITERAL:
        case MParser.DECIMAL_LITERAL:
            localctx = new CSharpStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2177; 
            localctx.exp = this.csharp_expression(0);
            this.state = 2178;
            this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterCSharpSelectorExpression(this);
	}
};

CSharpSelectorExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterCSharpPrimaryExpression(this);
	}
};

CSharpPrimaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCSharpPrimaryExpression(this);
	}
};



MParser.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, MParser.RULE_csharp_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new CSharpPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2183; 
        localctx.exp = this.csharp_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2189;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,177,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, MParser.RULE_csharp_expression);
                this.state = 2185;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2186; 
                localctx.child = this.csharp_selector_expression(); 
            }
            this.state = 2191;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,177,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 = MParser.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 MParserListener ) {
        listener.enterCsharp_primary_expression(this);
	}
};

Csharp_primary_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCsharp_primary_expression(this);
	}
};




MParser.prototype.csharp_primary_expression = function() {

    var localctx = new Csharp_primary_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 392, MParser.RULE_csharp_primary_expression);
    try {
        this.state = 2197;
        var la_ = this._interp.adaptivePredict(this._input,178,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2192; 
            this.csharp_this_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2193; 
            this.csharp_new_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2194; 
            this.csharp_parenthesis_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2195; 
            this.csharp_identifier_expression(0);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2196; 
            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 = MParser.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 MParserListener ) {
        listener.enterCsharp_this_expression(this);
	}
};

Csharp_this_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCsharp_this_expression(this);
	}
};




MParser.prototype.csharp_this_expression = function() {

    var localctx = new Csharp_this_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 394, MParser.RULE_csharp_this_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2199; 
        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 = MParser.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 MParserListener ) {
        listener.enterCsharp_new_expression(this);
	}
};

Csharp_new_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCsharp_new_expression(this);
	}
};




MParser.prototype.csharp_new_expression = function() {

    var localctx = new Csharp_new_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 396, MParser.RULE_csharp_new_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2201; 
        this.new_token();
        this.state = 2202; 
        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 = MParser.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(MParser.DOT, 0);
};

CSharpMethodExpressionContext.prototype.csharp_method_expression = function() {
    return this.getTypedRuleContext(Csharp_method_expressionContext,0);
};
CSharpMethodExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpMethodExpression(this);
	}
};

CSharpMethodExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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 MParserListener ) {
        listener.enterCSharpItemExpression(this);
	}
};

CSharpItemExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCSharpItemExpression(this);
	}
};



MParser.prototype.csharp_selector_expression = function() {

    var localctx = new Csharp_selector_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 398, MParser.RULE_csharp_selector_expression);
    try {
        this.state = 2207;
        switch(this._input.LA(1)) {
        case MParser.DOT:
            localctx = new CSharpMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2204;
            this.match(MParser.DOT);
            this.state = 2205; 
            localctx.exp = this.csharp_method_expression();
            break;
        case MParser.LBRAK:
            localctx = new CSharpItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2206; 
            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 = MParser.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(MParser.LPAR, 0);
};

Csharp_method_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterCsharp_method_expression(this);
	}
};

Csharp_method_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCsharp_method_expression(this);
	}
};




MParser.prototype.csharp_method_expression = function() {

    var localctx = new Csharp_method_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 400, MParser.RULE_csharp_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2209; 
        localctx.name = this.csharp_identifier();
        this.state = 2210;
        this.match(MParser.LPAR);
        this.state = 2212;
        _la = this._input.LA(1);
        if(_la===MParser.LPAR || ((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (MParser.BOOLEAN - 50)) | (1 << (MParser.CHARACTER - 50)) | (1 << (MParser.TEXT - 50)) | (1 << (MParser.INTEGER - 50)) | (1 << (MParser.DECIMAL - 50)) | (1 << (MParser.DATE - 50)) | (1 << (MParser.TIME - 50)) | (1 << (MParser.DATETIME - 50)) | (1 << (MParser.PERIOD - 50)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.SELF - 132)) | (1 << (MParser.TEST - 132)) | (1 << (MParser.THIS - 132)) | (1 << (MParser.WRITE - 132)) | (1 << (MParser.BOOLEAN_LITERAL - 132)) | (1 << (MParser.CHAR_LITERAL - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 0) || ((((_la - 164)) & ~0x1f) == 0 && ((1 << (_la - 164)) & ((1 << (MParser.DOLLAR_IDENTIFIER - 164)) | (1 << (MParser.TEXT_LITERAL - 164)) | (1 << (MParser.INTEGER_LITERAL - 164)) | (1 << (MParser.DECIMAL_LITERAL - 164)))) !== 0)) {
            this.state = 2211; 
            localctx.args = this.csharp_arguments(0);
        }

        this.state = 2214;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterCSharpArgumentList(this);
	}
};

CSharpArgumentListContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterCSharpArgumentListItem(this);
	}
};

CSharpArgumentListItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCSharpArgumentListItem(this);
	}
};



MParser.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, MParser.RULE_csharp_arguments, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new CSharpArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2217; 
        localctx.item = this.csharp_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2224;
        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 CSharpArgumentListItemContext(this, new Csharp_argumentsContext(this, _parentctx, _parentState));
                localctx.items = _prevctx;
                this.pushNewRecursionContext(localctx, _startState, MParser.RULE_csharp_arguments);
                this.state = 2219;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2220;
                this.match(MParser.COMMA);
                this.state = 2221; 
                localctx.item = this.csharp_expression(0); 
            }
            this.state = 2226;
            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 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 = MParser.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(MParser.LBRAK, 0);
};

Csharp_item_expressionContext.prototype.RBRAK = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterCsharp_item_expression(this);
	}
};

Csharp_item_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCsharp_item_expression(this);
	}
};




MParser.prototype.csharp_item_expression = function() {

    var localctx = new Csharp_item_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 404, MParser.RULE_csharp_item_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2227;
        this.match(MParser.LBRAK);
        this.state = 2228; 
        localctx.exp = this.csharp_expression(0);
        this.state = 2229;
        this.match(MParser.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 = MParser.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(MParser.LPAR, 0);
};

Csharp_parenthesis_expressionContext.prototype.RPAR = function() {
    return this.getToken(MParser.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 MParserListener ) {
        listener.enterCsharp_parenthesis_expression(this);
	}
};

Csharp_parenthesis_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCsharp_parenthesis_expression(this);
	}
};




MParser.prototype.csharp_parenthesis_expression = function() {

    var localctx = new Csharp_parenthesis_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 406, MParser.RULE_csharp_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2231;
        this.match(MParser.LPAR);
        this.state = 2232; 
        localctx.exp = this.csharp_expression(0);
        this.state = 2233;
        this.match(MParser.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 = MParser.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 MParserListener ) {
        listener.enterCSharpIdentifier(this);
	}
};

CSharpIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.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 MParserListener ) {
        listener.enterCSharpChildIdentifier(this);
	}
};

CSharpChildIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DOLLAR_IDENTIFIER, 0);
};
CSharpPromptoIdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpPromptoIdentifier(this);
	}
};

CSharpPromptoIdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCSharpPromptoIdentifier(this);
	}
};



MParser.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, MParser.RULE_csharp_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2238;
        switch(this._input.LA(1)) {
        case MParser.DOLLAR_IDENTIFIER:
            localctx = new CSharpPromptoIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 2236;
            this.match(MParser.DOLLAR_IDENTIFIER);
            break;
        case MParser.BOOLEAN:
        case MParser.CHARACTER:
        case MParser.TEXT:
        case MParser.INTEGER:
        case MParser.DECIMAL:
        case MParser.DATE:
        case MParser.TIME:
        case MParser.DATETIME:
        case MParser.PERIOD:
        case MParser.READ:
        case MParser.TEST:
        case MParser.WRITE:
        case MParser.SYMBOL_IDENTIFIER:
        case MParser.TYPE_IDENTIFIER:
        case MParser.VARIABLE_IDENTIFIER:
            localctx = new CSharpIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 2237; 
            localctx.name = this.csharp_identifier();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2245;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,183,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, MParser.RULE_csharp_identifier_expression);
                this.state = 2240;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2241;
                this.match(MParser.DOT);
                this.state = 2242; 
                localctx.name = this.csharp_identifier(); 
            }
            this.state = 2247;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,183,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 = MParser.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(MParser.BOOLEAN_LITERAL, 0);
};
CSharpBooleanLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpBooleanLiteral(this);
	}
};

CSharpBooleanLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.INTEGER_LITERAL, 0);
};
CSharpIntegerLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpIntegerLiteral(this);
	}
};

CSharpIntegerLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.DECIMAL_LITERAL, 0);
};
CSharpDecimalLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpDecimalLiteral(this);
	}
};

CSharpDecimalLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.CHAR_LITERAL, 0);
};
CSharpCharacterLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpCharacterLiteral(this);
	}
};

CSharpCharacterLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        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(MParser.TEXT_LITERAL, 0);
};
CSharpTextLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCSharpTextLiteral(this);
	}
};

CSharpTextLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCSharpTextLiteral(this);
	}
};



MParser.prototype.csharp_literal_expression = function() {

    var localctx = new Csharp_literal_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 410, MParser.RULE_csharp_literal_expression);
    try {
        this.state = 2253;
        switch(this._input.LA(1)) {
        case MParser.INTEGER_LITERAL:
            localctx = new CSharpIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2248;
            this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new CSharpDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2249;
            this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new CSharpTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2250;
            this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new CSharpBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2251;
            this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new CSharpCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2252;
            this.match(MParser.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 = MParser.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(MParser.VARIABLE_IDENTIFIER, 0);
};

Csharp_identifierContext.prototype.SYMBOL_IDENTIFIER = function() {
    return this.getToken(MParser.SYMBOL_IDENTIFIER, 0);
};

Csharp_identifierContext.prototype.TYPE_IDENTIFIER = function() {
    return this.getToken(MParser.TYPE_IDENTIFIER, 0);
};

Csharp_identifierContext.prototype.BOOLEAN = function() {
    return this.getToken(MParser.BOOLEAN, 0);
};

Csharp_identifierContext.prototype.CHARACTER = function() {
    return this.getToken(MParser.CHARACTER, 0);
};

Csharp_identifierContext.prototype.TEXT = function() {
    return this.getToken(MParser.TEXT, 0);
};

Csharp_identifierContext.prototype.INTEGER = function() {
    return this.getToken(MParser.INTEGER, 0);
};

Csharp_identifierContext.prototype.DECIMAL = function() {
    return this.getToken(MParser.DECIMAL, 0);
};

Csharp_identifierContext.prototype.DATE = function() {
    return this.getToken(MParser.DATE, 0);
};

Csharp_identifierContext.prototype.TIME = function() {
    return this.getToken(MParser.TIME, 0);
};

Csharp_identifierContext.prototype.DATETIME = function() {
    return this.getToken(MParser.DATETIME, 0);
};

Csharp_identifierContext.prototype.PERIOD = function() {
    return this.getToken(MParser.PERIOD, 0);
};

Csharp_identifierContext.prototype.READ = function() {
    return this.getToken(MParser.READ, 0);
};

Csharp_identifierContext.prototype.WRITE = function() {
    return this.getToken(MParser.WRITE, 0);
};

Csharp_identifierContext.prototype.TEST = function() {
    return this.getToken(MParser.TEST, 0);
};

Csharp_identifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.enterCsharp_identifier(this);
	}
};

Csharp_identifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof MParserListener ) {
        listener.exitCsharp_identifier(this);
	}
};




MParser.prototype.csharp_identifier = function() {

    var localctx = new Csharp_identifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 412, MParser.RULE_csharp_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2255;
        _la = this._input.LA(1);
        if(!(((((_la - 50)) & ~0x1f) == 0 && ((1 << (_la - 50)) & ((1 << (MParser.BOOLEAN - 50)) | (1 << (MParser.CHARACTER - 50)) | (1 << (MParser.TEXT - 50)) | (1 << (MParser.INTEGER - 50)) | (1 << (MParser.DECIMAL - 50)) | (1 << (MParser.DATE - 50)) | (1 << (MParser.TIME - 50)) | (1 << (MParser.DATETIME - 50)) | (1 << (MParser.PERIOD - 50)))) !== 0) || ((((_la - 132)) & ~0x1f) == 0 && ((1 << (_la - 132)) & ((1 << (MParser.READ - 132)) | (1 << (MParser.TEST - 132)) | (1 << (MParser.WRITE - 132)) | (1 << (MParser.SYMBOL_IDENTIFIER - 132)) | (1 << (MParser.TYPE_IDENTIFIER - 132)) | (1 << (MParser.VARIABLE_IDENTIFIER - 132)))) !== 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;
};


MParser.prototype.sempred = function(localctx, ruleIndex, predIndex) {
	switch(ruleIndex) {
	case 17:
			return this.native_category_binding_list_sempred(localctx, predIndex);
	case 29:
			return this.callable_parent_sempred(localctx, predIndex);
	case 39:
			return this.else_if_statement_list_sempred(localctx, predIndex);
	case 45:
			return this.expression_sempred(localctx, predIndex);
	case 47:
			return this.instance_expression_sempred(localctx, predIndex);
	case 49:
			return this.instance_selector_sempred(localctx, predIndex);
	case 53:
			return this.argument_assignment_list_sempred(localctx, predIndex);
	case 60:
			return this.child_instance_sempred(localctx, predIndex);
	case 80:
			return this.typedef_sempred(localctx, predIndex);
	case 100:
			return this.any_type_sempred(localctx, predIndex);
	case 137:
			return this.assignable_instance_sempred(localctx, predIndex);
	case 138:
			return this.is_expression_sempred(localctx, predIndex);
	case 144:
			return this.new_token_sempred(localctx, predIndex);
	case 145:
			return this.key_token_sempred(localctx, predIndex);
	case 146:
			return this.module_token_sempred(localctx, predIndex);
	case 147:
			return this.value_token_sempred(localctx, predIndex);
	case 148:
			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;
   }
};

MParser.prototype.native_category_binding_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 0:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.callable_parent_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 1:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.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;
	}
};

MParser.prototype.expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 3:
			return this.precpred(this._ctx, 30);
		case 4:
			return this.precpred(this._ctx, 29);
		case 5:
			return this.precpred(this._ctx, 28);
		case 6:
			return this.precpred(this._ctx, 27);
		case 7:
			return this.precpred(this._ctx, 26);
		case 8:
			return this.precpred(this._ctx, 25);
		case 9:
			return this.precpred(this._ctx, 24);
		case 10:
			return this.precpred(this._ctx, 23);
		case 11:
			return this.precpred(this._ctx, 22);
		case 12:
			return this.precpred(this._ctx, 19);
		case 13:
			return this.precpred(this._ctx, 18);
		case 14:
			return this.precpred(this._ctx, 17);
		case 15:
			return this.precpred(this._ctx, 16);
		case 16:
			return this.precpred(this._ctx, 15);
		case 17:
			return this.precpred(this._ctx, 14);
		case 18:
			return this.precpred(this._ctx, 12);
		case 19:
			return this.precpred(this._ctx, 11);
		case 20:
			return this.precpred(this._ctx, 10);
		case 21:
			return this.precpred(this._ctx, 9);
		case 22:
			return this.precpred(this._ctx, 8);
		case 23:
			return this.precpred(this._ctx, 7);
		case 24:
			return this.precpred(this._ctx, 6);
		case 25:
			return this.precpred(this._ctx, 5);
		case 26:
			return this.precpred(this._ctx, 1);
		case 27:
			return this.precpred(this._ctx, 34);
		case 28:
			return this.precpred(this._ctx, 21);
		case 29:
			return this.precpred(this._ctx, 20);
		case 30:
			return this.precpred(this._ctx, 13);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.instance_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 31:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.instance_selector_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 32:
			return this.wasNot(MParser.WS);
		case 33:
			return this.wasNot(MParser.WS);
		case 34:
			return this.wasNot(MParser.WS);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.argument_assignment_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 35:
			return this.willNotBe(this.equalToken());
		case 36:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.child_instance_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 37:
			return this.wasNot(MParser.WS);
		case 38:
			return this.wasNot(MParser.WS);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.typedef_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 39:
			return this.precpred(this._ctx, 5);
		case 40:
			return this.precpred(this._ctx, 4);
		case 41:
			return this.precpred(this._ctx, 3);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.any_type_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 42:
			return this.precpred(this._ctx, 2);
		case 43:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.assignable_instance_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 44:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.is_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 45:
			return this.willBeAOrAn();
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.new_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 46:
			return this.isText(localctx.i1,"new");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.key_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 47:
			return this.isText(localctx.i1,"key");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.module_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 48:
			return this.isText(localctx.i1,"module");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.value_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 49:
			return this.isText(localctx.i1,"value");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.symbols_token_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 50:
			return this.isText(localctx.i1,"symbols");
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.javascript_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 51:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.javascript_arguments_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 52:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.python_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 53:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.python_ordinal_argument_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 54:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.python_named_argument_list_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 55:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.python_identifier_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 56:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.java_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 57:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.java_arguments_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 58:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.java_identifier_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 59:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.java_class_identifier_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 60:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.csharp_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 61:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.csharp_arguments_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 62:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

MParser.prototype.csharp_identifier_expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 63:
			return this.precpred(this._ctx, 1);
		default:
			throw "No predicate with index:" + predIndex;
	}
};


exports.MParser = MParser;




© 2015 - 2025 Weber Informatics LLC | Privacy Policy