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

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 = 412;
        this.match(MParser.ENUM);
        this.state = 413; 
        localctx.name = this.type_identifier();
        this.state = 414;
        this.match(MParser.LPAR);
        this.state = 421;
        switch(this._input.LA(1)) {
        case MParser.TYPE_IDENTIFIER:
            this.state = 415; 
            localctx.derived = this.type_identifier();
            this.state = 418;
            _la = this._input.LA(1);
            if(_la===MParser.COMMA) {
                this.state = 416;
                this.match(MParser.COMMA);
                this.state = 417; 
                localctx.attrs = this.attribute_identifier_list();
            }

            break;
        case MParser.STORABLE:
        case MParser.VARIABLE_IDENTIFIER:
            this.state = 420; 
            localctx.attrs = this.attribute_identifier_list();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 423;
        this.match(MParser.RPAR);
        this.state = 424;
        this.match(MParser.COLON);
        this.state = 425; 
        this.indent();
        this.state = 426; 
        localctx.symbols = this.category_symbol_list();
        this.state = 427; 
        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 = 429;
        this.match(MParser.ENUM);
        this.state = 430; 
        localctx.name = this.type_identifier();
        this.state = 431;
        this.match(MParser.LPAR);
        this.state = 432; 
        localctx.typ = this.native_type();
        this.state = 433;
        this.match(MParser.RPAR);
        this.state = 434;
        this.match(MParser.COLON);
        this.state = 435; 
        this.indent();
        this.state = 436; 
        localctx.symbols = this.native_symbol_list();
        this.state = 437; 
        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 = 439; 
        localctx.name = this.symbol_identifier();
        this.state = 440;
        this.match(MParser.EQ);
        this.state = 441; 
        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 = 443; 
        localctx.name = this.symbol_identifier();
        this.state = 444;
        this.match(MParser.LPAR);
        this.state = 446;
        _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 = 445; 
            localctx.args = this.argument_assignment_list(0);
        }

        this.state = 448;
        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 = 451;
        _la = this._input.LA(1);
        if(_la===MParser.STORABLE) {
            this.state = 450;
            this.match(MParser.STORABLE);
        }

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

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

                }
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 477; 
        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 = 479;
        this.match(MParser.INDEX);
        this.state = 480;
        this.match(MParser.LPAR);
        this.state = 482;
        _la = this._input.LA(1);
        if(_la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 481; 
            localctx.indices = this.variable_identifier_list();
        }

        this.state = 484;
        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 = 487;
        _la = this._input.LA(1);
        if(_la===MParser.STORABLE) {
            this.state = 486;
            this.match(MParser.STORABLE);
        }

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

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

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

        }
        this.state = 500;
        this.match(MParser.RPAR);
        this.state = 501;
        this.match(MParser.COLON);
        this.state = 502; 
        this.indent();
        this.state = 505;
        switch(this._input.LA(1)) {
        case MParser.ABSTRACT:
        case MParser.DEF:
            this.state = 503; 
            localctx.methods = this.member_method_declaration_list();
            break;
        case MParser.PASS:
            this.state = 504;
            this.match(MParser.PASS);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 507; 
        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 = 509;
        this.match(MParser.SINGLETON);
        this.state = 510; 
        localctx.name = this.type_identifier();
        this.state = 511;
        this.match(MParser.LPAR);
        this.state = 512; 
        localctx.attrs = this.attribute_identifier_list();
        this.state = 513;
        this.match(MParser.RPAR);
        this.state = 514;
        this.match(MParser.COLON);
        this.state = 515; 
        this.indent();
        this.state = 518;
        switch(this._input.LA(1)) {
        case MParser.ABSTRACT:
        case MParser.DEF:
            this.state = 516; 
            localctx.methods = this.member_method_declaration_list();
            break;
        case MParser.PASS:
            this.state = 517;
            this.match(MParser.PASS);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 520; 
        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 = 522; 
        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 = 524;
        this.match(MParser.DEF);
        this.state = 525;
        this.match(MParser.OPERATOR);
        this.state = 526; 
        localctx.op = this.operator();
        this.state = 527;
        this.match(MParser.LPAR);
        this.state = 528; 
        localctx.arg = this.operator_argument();
        this.state = 529;
        this.match(MParser.RPAR);
        this.state = 532;
        _la = this._input.LA(1);
        if(_la===MParser.RARROW) {
            this.state = 530;
            this.match(MParser.RARROW);
            this.state = 531; 
            localctx.typ = this.typedef(0);
        }

        this.state = 534;
        this.match(MParser.COLON);
        this.state = 535; 
        this.indent();
        this.state = 536; 
        localctx.stmts = this.statement_list();
        this.state = 537; 
        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 = 539;
        this.match(MParser.DEF);
        this.state = 540; 
        localctx.name = this.variable_identifier();
        this.state = 541;
        this.match(MParser.SETTER);
        this.state = 542;
        this.match(MParser.LPAR);
        this.state = 543;
        this.match(MParser.RPAR);
        this.state = 544;
        this.match(MParser.COLON);
        this.state = 545; 
        this.indent();
        this.state = 546; 
        localctx.stmts = this.statement_list();
        this.state = 547; 
        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 = 549;
        this.match(MParser.DEF);
        this.state = 550; 
        localctx.name = this.variable_identifier();
        this.state = 552;
        _la = this._input.LA(1);
        if(_la===MParser.NATIVE) {
            this.state = 551;
            this.match(MParser.NATIVE);
        }

        this.state = 554;
        this.match(MParser.SETTER);
        this.state = 555;
        this.match(MParser.LPAR);
        this.state = 556;
        this.match(MParser.RPAR);
        this.state = 557;
        this.match(MParser.COLON);
        this.state = 558; 
        this.indent();
        this.state = 559; 
        localctx.stmts = this.native_statement_list();
        this.state = 560; 
        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 = 562;
        this.match(MParser.DEF);
        this.state = 563; 
        localctx.name = this.variable_identifier();
        this.state = 564;
        this.match(MParser.GETTER);
        this.state = 565;
        this.match(MParser.LPAR);
        this.state = 566;
        this.match(MParser.RPAR);
        this.state = 567;
        this.match(MParser.COLON);
        this.state = 568; 
        this.indent();
        this.state = 569; 
        localctx.stmts = this.statement_list();
        this.state = 570; 
        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 = 572;
        this.match(MParser.DEF);
        this.state = 573; 
        localctx.name = this.variable_identifier();
        this.state = 575;
        _la = this._input.LA(1);
        if(_la===MParser.NATIVE) {
            this.state = 574;
            this.match(MParser.NATIVE);
        }

        this.state = 577;
        this.match(MParser.GETTER);
        this.state = 578;
        this.match(MParser.LPAR);
        this.state = 579;
        this.match(MParser.RPAR);
        this.state = 580;
        this.match(MParser.COLON);
        this.state = 581; 
        this.indent();
        this.state = 582; 
        localctx.stmts = this.native_statement_list();
        this.state = 583; 
        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 = 586;
        _la = this._input.LA(1);
        if(_la===MParser.STORABLE) {
            this.state = 585;
            this.match(MParser.STORABLE);
        }

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

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

        }
        this.state = 604; 
        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 = 606;
        this.match(MParser.NATIVE);
        this.state = 607;
        this.match(MParser.RESOURCE);
        this.state = 608; 
        localctx.name = this.type_identifier();
        this.state = 609;
        this.match(MParser.LPAR);
        this.state = 611;
        _la = this._input.LA(1);
        if(_la===MParser.STORABLE || _la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 610; 
            localctx.attrs = this.attribute_identifier_list();
        }

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

        }
        this.state = 622; 
        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 = 624;
        this.match(MParser.DEF);
        this.state = 625;
        _la = this._input.LA(1);
        if(!(_la===MParser.CATEGORY || _la===MParser.CLASS)) {
        this._errHandler.recoverInline(this);
        }
        this.consume();
        this.state = 626;
        this.match(MParser.BINDINGS);
        this.state = 627;
        this.match(MParser.COLON);
        this.state = 628; 
        this.indent();
        this.state = 629; 
        localctx.items = this.native_category_binding_list(0);
        this.state = 630; 
        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 = 633; 
        localctx.item = this.native_category_binding();
        this._ctx.stop = this._input.LT(-1);
        this.state = 641;
        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 = 635;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 636; 
                this.lfp();
                this.state = 637; 
                localctx.item = this.native_category_binding(); 
            }
            this.state = 643;
            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 = 644;
        this.match(MParser.ABSTRACT);
        this.state = 645;
        this.match(MParser.DEF);
        this.state = 646; 
        localctx.name = this.method_identifier();
        this.state = 647;
        this.match(MParser.LPAR);
        this.state = 649;
        _la = this._input.LA(1);
        if(_la===MParser.CODE || _la===MParser.MUTABLE || _la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 648; 
            localctx.args = this.argument_list();
        }

        this.state = 651;
        this.match(MParser.RPAR);
        this.state = 654;
        _la = this._input.LA(1);
        if(_la===MParser.RARROW) {
            this.state = 652;
            this.match(MParser.RARROW);
            this.state = 653; 
            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 = 656;
        this.match(MParser.DEF);
        this.state = 657; 
        localctx.name = this.method_identifier();
        this.state = 658;
        this.match(MParser.LPAR);
        this.state = 660;
        _la = this._input.LA(1);
        if(_la===MParser.CODE || _la===MParser.MUTABLE || _la===MParser.VARIABLE_IDENTIFIER) {
            this.state = 659; 
            localctx.args = this.argument_list();
        }

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

        this.state = 667;
        this.match(MParser.COLON);
        this.state = 668; 
        this.indent();
        this.state = 669; 
        localctx.stmts = this.statement_list();
        this.state = 670; 
        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 = 672;
        this.match(MParser.DEF);
        this.state = 674;
        _la = this._input.LA(1);
        if(_la===MParser.NATIVE) {
            this.state = 673;
            this.match(MParser.NATIVE);
        }

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

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

        this.state = 686;
        this.match(MParser.COLON);
        this.state = 687; 
        this.indent();
        this.state = 688; 
        localctx.stmts = this.native_statement_list();
        this.state = 689; 
        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 = 691;
        this.match(MParser.DEF);
        this.state = 692;
        this.match(MParser.TEST);
        this.state = 693;
        localctx.name = this.match(MParser.TEXT_LITERAL);
        this.state = 694;
        this.match(MParser.LPAR);
        this.state = 695;
        this.match(MParser.RPAR);
        this.state = 696;
        this.match(MParser.COLON);
        this.state = 697; 
        this.indent();
        this.state = 698; 
        localctx.stmts = this.statement_list();
        this.state = 699; 
        this.dedent();
        this.state = 700; 
        this.lfp();
        this.state = 701;
        this.match(MParser.VERIFYING);
        this.state = 702;
        this.match(MParser.COLON);
        this.state = 708;
        switch(this._input.LA(1)) {
        case MParser.LF:
            this.state = 703; 
            this.indent();
            this.state = 704; 
            localctx.exps = this.assertion_list();
            this.state = 705; 
            this.dedent();
            break;
        case MParser.SYMBOL_IDENTIFIER:
            this.state = 707; 
            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 = 710; 
        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 = 712; 
        localctx.name = this.variable_identifier();
        this.state = 713;
        this.match(MParser.COLON);
        this.state = 714; 
        localctx.typ = this.category_or_any_type();
        this.state = 719;
        _la = this._input.LA(1);
        if(_la===MParser.LPAR) {
            this.state = 715;
            this.match(MParser.LPAR);
            this.state = 716; 
            localctx.attrs = this.attribute_identifier_list();
            this.state = 717;
            this.match(MParser.RPAR);
        }

        this.state = 723;
        _la = this._input.LA(1);
        if(_la===MParser.EQ) {
            this.state = 721;
            this.match(MParser.EQ);
            this.state = 722; 
            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 = 744;
        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 = 725; 
            localctx.stmt = this.method_call();
            break;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        case 19:
            localctx = new CommentStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 19);
            this.state = 743; 
            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 = 746;
        this.match(MParser.FLUSH);
        this.state = 747;
        this.match(MParser.LPAR);
        this.state = 748;
        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 = 770;
        var la_ = this._interp.adaptivePredict(this._input,33,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 750;
            this.match(MParser.DELETE);
            this.state = 751;
            this.match(MParser.LPAR);
            this.state = 752; 
            localctx.to_del = this.expression_list();
            this.state = 753;
            this.match(MParser.RPAR);
            break;

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

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 760;
            this.match(MParser.DELETE);
            this.state = 761;
            this.match(MParser.LPAR);
            this.state = 762; 
            localctx.to_del = this.expression_list();
            this.state = 763;
            this.match(MParser.RPAR);
            this.state = 764;
            this.match(MParser.AND);
            this.state = 765;
            this.match(MParser.STORE);
            this.state = 766;
            this.match(MParser.LPAR);
            this.state = 767; 
            localctx.to_add = this.expression_list();
            this.state = 768;
            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 = 772; 
        localctx.method = this.method_selector();
        this.state = 773;
        this.match(MParser.LPAR);
        this.state = 775;
        _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 = 774; 
            localctx.args = this.argument_assignment_list(0);
        }

        this.state = 777;
        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 = 784;
        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 = 779; 
            localctx.name = this.method_identifier();
            break;

        case 2:
            localctx = new MethodParentContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 780; 
            localctx.parent = this.callable_parent(0);
            this.state = 781;
            this.match(MParser.DOT);
            this.state = 782; 
            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 = 787; 
        localctx.name = this.identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 793;
        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 = 789;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 790; 
                localctx.select = this.callable_selector(); 
            }
            this.state = 795;
            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 = 802;
        switch(this._input.LA(1)) {
        case MParser.DOT:
            localctx = new CallableMemberSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 796;
            this.match(MParser.DOT);
            this.state = 797; 
            localctx.name = this.variable_identifier();
            break;
        case MParser.LBRAK:
            localctx = new CallableItemSelectorContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 798;
            this.match(MParser.LBRAK);
            this.state = 799; 
            localctx.exp = this.expression(0);
            this.state = 800;
            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 = 804;
        this.match(MParser.WITH);
        this.state = 805; 
        localctx.stmt = this.assign_variable_statement();
        this.state = 806;
        this.match(MParser.COLON);
        this.state = 807; 
        this.indent();
        this.state = 808; 
        localctx.stmts = this.statement_list();
        this.state = 809; 
        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 = 811;
        this.match(MParser.WITH);
        this.state = 812; 
        localctx.typ = this.type_identifier();
        this.state = 813;
        this.match(MParser.COLON);
        this.state = 814; 
        this.indent();
        this.state = 815; 
        localctx.stmts = this.statement_list();
        this.state = 816; 
        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 = 818;
        this.match(MParser.SWITCH);
        this.state = 819;
        this.match(MParser.ON);
        this.state = 820; 
        localctx.exp = this.expression(0);
        this.state = 821;
        this.match(MParser.COLON);
        this.state = 822; 
        this.indent();
        this.state = 823; 
        localctx.cases = this.switch_case_statement_list();
        this.state = 831;
        var la_ = this._interp.adaptivePredict(this._input,38,this._ctx);
        if(la_===1) {
            this.state = 824; 
            this.lfp();
            this.state = 825;
            this.match(MParser.OTHERWISE);
            this.state = 826;
            this.match(MParser.COLON);
            this.state = 827; 
            this.indent();
            this.state = 828; 
            localctx.stmts = this.statement_list();
            this.state = 829; 
            this.dedent();

        }
        this.state = 833; 
        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 = 850;
        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 = 835;
            this.match(MParser.WHEN);
            this.state = 836; 
            localctx.exp = this.atomic_literal();
            this.state = 837;
            this.match(MParser.COLON);
            this.state = 838; 
            this.indent();
            this.state = 839; 
            localctx.stmts = this.statement_list();
            this.state = 840; 
            this.dedent();
            break;

        case 2:
            localctx = new CollectionSwitchCaseContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 842;
            this.match(MParser.WHEN);
            this.state = 843;
            this.match(MParser.IN);
            this.state = 844; 
            localctx.exp = this.literal_collection();
            this.state = 845;
            this.match(MParser.COLON);
            this.state = 846; 
            this.indent();
            this.state = 847; 
            localctx.stmts = this.statement_list();
            this.state = 848; 
            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 = 852;
        this.match(MParser.FOR);
        this.state = 853; 
        localctx.name1 = this.variable_identifier();
        this.state = 856;
        _la = this._input.LA(1);
        if(_la===MParser.COMMA) {
            this.state = 854;
            this.match(MParser.COMMA);
            this.state = 855; 
            localctx.name2 = this.variable_identifier();
        }

        this.state = 858;
        this.match(MParser.IN);
        this.state = 859; 
        localctx.source = this.expression(0);
        this.state = 860;
        this.match(MParser.COLON);
        this.state = 861; 
        this.indent();
        this.state = 862; 
        localctx.stmts = this.statement_list();
        this.state = 863; 
        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 = 865;
        this.match(MParser.DO);
        this.state = 866;
        this.match(MParser.COLON);
        this.state = 867; 
        this.indent();
        this.state = 868; 
        localctx.stmts = this.statement_list();
        this.state = 869; 
        this.dedent();
        this.state = 870; 
        this.lfp();
        this.state = 871;
        this.match(MParser.WHILE);
        this.state = 872; 
        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 = 874;
        this.match(MParser.WHILE);
        this.state = 875; 
        localctx.exp = this.expression(0);
        this.state = 876;
        this.match(MParser.COLON);
        this.state = 877; 
        this.indent();
        this.state = 878; 
        localctx.stmts = this.statement_list();
        this.state = 879; 
        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 = 881;
        this.match(MParser.IF);
        this.state = 882; 
        localctx.exp = this.expression(0);
        this.state = 883;
        this.match(MParser.COLON);
        this.state = 884; 
        this.indent();
        this.state = 885; 
        localctx.stmts = this.statement_list();
        this.state = 886; 
        this.dedent();
        this.state = 890;
        var la_ = this._interp.adaptivePredict(this._input,41,this._ctx);
        if(la_===1) {
            this.state = 887; 
            this.lfp();
            this.state = 888; 
            localctx.elseIfs = this.else_if_statement_list(0);

        }
        this.state = 899;
        var la_ = this._interp.adaptivePredict(this._input,42,this._ctx);
        if(la_===1) {
            this.state = 892; 
            this.lfp();
            this.state = 893;
            this.match(MParser.ELSE);
            this.state = 894;
            this.match(MParser.COLON);
            this.state = 895; 
            this.indent();
            this.state = 896; 
            localctx.elseStmts = this.statement_list();
            this.state = 897; 
            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 = 902;
        this.match(MParser.ELSE);
        this.state = 903;
        this.match(MParser.IF);
        this.state = 904; 
        localctx.exp = this.expression(0);
        this.state = 905;
        this.match(MParser.COLON);
        this.state = 906; 
        this.indent();
        this.state = 907; 
        localctx.stmts = this.statement_list();
        this.state = 908; 
        this.dedent();
        this._ctx.stop = this._input.LT(-1);
        this.state = 922;
        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 = 910;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 911; 
                this.lfp();
                this.state = 912;
                this.match(MParser.ELSE);
                this.state = 913;
                this.match(MParser.IF);
                this.state = 914; 
                localctx.exp = this.expression(0);
                this.state = 915;
                this.match(MParser.COLON);
                this.state = 916; 
                this.indent();
                this.state = 917; 
                localctx.stmts = this.statement_list();
                this.state = 918; 
                this.dedent(); 
            }
            this.state = 924;
            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 = 925;
        this.match(MParser.RAISE);
        this.state = 926; 
        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 = 928;
        this.match(MParser.TRY);
        this.state = 929; 
        localctx.name = this.variable_identifier();
        this.state = 930;
        this.match(MParser.COLON);
        this.state = 931; 
        this.indent();
        this.state = 932; 
        localctx.stmts = this.statement_list();
        this.state = 933; 
        this.dedent();
        this.state = 934; 
        this.lfs();
        this.state = 936;
        var la_ = this._interp.adaptivePredict(this._input,44,this._ctx);
        if(la_===1) {
            this.state = 935; 
            localctx.handlers = this.catch_statement_list();

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

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

        this.state = 956; 
        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 = 977;
        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 = 958;
            this.match(MParser.EXCEPT);
            this.state = 959; 
            localctx.name = this.symbol_identifier();
            this.state = 960;
            this.match(MParser.COLON);
            this.state = 961; 
            this.indent();
            this.state = 962; 
            localctx.stmts = this.statement_list();
            this.state = 963; 
            this.dedent();
            this.state = 964; 
            this.lfs();
            break;

        case 2:
            localctx = new CatchCollectionStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 966;
            this.match(MParser.EXCEPT);
            this.state = 967;
            this.match(MParser.IN);
            this.state = 968;
            this.match(MParser.LBRAK);
            this.state = 969; 
            localctx.exp = this.symbol_list();
            this.state = 970;
            this.match(MParser.RBRAK);
            this.state = 971;
            this.match(MParser.COLON);
            this.state = 972; 
            this.indent();
            this.state = 973; 
            localctx.stmts = this.statement_list();
            this.state = 974; 
            this.dedent();
            this.state = 975; 
            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 = 979;
        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 = 981;
        this.match(MParser.RETURN);
        this.state = 983;
        _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 = 982; 
            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 = 1003;
        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 = 986;
            this.match(MParser.MINUS);
            this.state = 987; 
            localctx.exp = this.expression(32);
            break;

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

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

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

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

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

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

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1109;
        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 = 1107;
                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 = 1005;
                    if (!( this.precpred(this._ctx, 30))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 30)");
                    }
                    this.state = 1006; 
                    this.multiply();
                    this.state = 1007; 
                    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 = 1009;
                    if (!( this.precpred(this._ctx, 29))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 29)");
                    }
                    this.state = 1010; 
                    this.divide();
                    this.state = 1011; 
                    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 = 1013;
                    if (!( this.precpred(this._ctx, 28))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 28)");
                    }
                    this.state = 1014; 
                    this.modulo();
                    this.state = 1015; 
                    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 = 1017;
                    if (!( this.precpred(this._ctx, 27))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 27)");
                    }
                    this.state = 1018; 
                    this.idivide();
                    this.state = 1019; 
                    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 = 1021;
                    if (!( this.precpred(this._ctx, 26))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 26)");
                    }
                    this.state = 1022;
                    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 = 1023; 
                    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 = 1024;
                    if (!( this.precpred(this._ctx, 25))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 25)");
                    }
                    this.state = 1025;
                    this.match(MParser.LT);
                    this.state = 1026; 
                    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 = 1027;
                    if (!( this.precpred(this._ctx, 24))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 24)");
                    }
                    this.state = 1028;
                    this.match(MParser.LTE);
                    this.state = 1029; 
                    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 = 1030;
                    if (!( this.precpred(this._ctx, 23))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 23)");
                    }
                    this.state = 1031;
                    this.match(MParser.GT);
                    this.state = 1032; 
                    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 = 1033;
                    if (!( this.precpred(this._ctx, 22))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 22)");
                    }
                    this.state = 1034;
                    this.match(MParser.GTE);
                    this.state = 1035; 
                    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 = 1036;
                    if (!( this.precpred(this._ctx, 19))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 19)");
                    }
                    this.state = 1037;
                    this.match(MParser.EQ2);
                    this.state = 1038; 
                    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 = 1039;
                    if (!( this.precpred(this._ctx, 18))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 18)");
                    }
                    this.state = 1040;
                    this.match(MParser.XEQ);
                    this.state = 1041; 
                    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 = 1042;
                    if (!( this.precpred(this._ctx, 17))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 17)");
                    }
                    this.state = 1043;
                    this.match(MParser.TEQ);
                    this.state = 1044; 
                    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 = 1045;
                    if (!( this.precpred(this._ctx, 16))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 16)");
                    }
                    this.state = 1046;
                    this.match(MParser.OR);
                    this.state = 1047; 
                    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 = 1048;
                    if (!( this.precpred(this._ctx, 15))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 15)");
                    }
                    this.state = 1049;
                    this.match(MParser.AND);
                    this.state = 1050; 
                    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 = 1051;
                    if (!( this.precpred(this._ctx, 14))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 14)");
                    }
                    this.state = 1052;
                    this.match(MParser.IF);
                    this.state = 1053; 
                    localctx.test = this.expression(0);
                    this.state = 1054;
                    this.match(MParser.ELSE);
                    this.state = 1055; 
                    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 = 1057;
                    if (!( this.precpred(this._ctx, 12))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 12)");
                    }
                    this.state = 1058;
                    this.match(MParser.IN);
                    this.state = 1059; 
                    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 = 1060;
                    if (!( this.precpred(this._ctx, 11))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 11)");
                    }
                    this.state = 1061;
                    this.match(MParser.CONTAINS);
                    this.state = 1062; 
                    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 = 1063;
                    if (!( this.precpred(this._ctx, 10))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 10)");
                    }
                    this.state = 1064;
                    this.match(MParser.CONTAINS);
                    this.state = 1065;
                    this.match(MParser.ALL);
                    this.state = 1066; 
                    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 = 1067;
                    if (!( this.precpred(this._ctx, 9))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 9)");
                    }
                    this.state = 1068;
                    this.match(MParser.CONTAINS);
                    this.state = 1069;
                    this.match(MParser.ANY);
                    this.state = 1070; 
                    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 = 1071;
                    if (!( this.precpred(this._ctx, 8))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 8)");
                    }
                    this.state = 1072;
                    this.match(MParser.NOT);
                    this.state = 1073;
                    this.match(MParser.IN);
                    this.state = 1074; 
                    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 = 1075;
                    if (!( this.precpred(this._ctx, 7))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)");
                    }
                    this.state = 1076;
                    this.match(MParser.NOT);
                    this.state = 1077;
                    this.match(MParser.CONTAINS);
                    this.state = 1078; 
                    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 = 1079;
                    if (!( this.precpred(this._ctx, 6))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
                    }
                    this.state = 1080;
                    this.match(MParser.NOT);
                    this.state = 1081;
                    this.match(MParser.CONTAINS);
                    this.state = 1082;
                    this.match(MParser.ALL);
                    this.state = 1083; 
                    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 = 1084;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 1085;
                    this.match(MParser.NOT);
                    this.state = 1086;
                    this.match(MParser.CONTAINS);
                    this.state = 1087;
                    this.match(MParser.ANY);
                    this.state = 1088; 
                    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 = 1089;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 1090;
                    this.match(MParser.FOR);
                    this.state = 1091; 
                    localctx.name = this.variable_identifier();
                    this.state = 1092;
                    this.match(MParser.IN);
                    this.state = 1093; 
                    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 = 1095;
                    if (!( this.precpred(this._ctx, 34))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 34)");
                    }
                    this.state = 1096; 
                    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 = 1097;
                    if (!( this.precpred(this._ctx, 21))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 21)");
                    }
                    this.state = 1098;
                    this.match(MParser.IS);
                    this.state = 1099;
                    this.match(MParser.NOT);
                    this.state = 1100; 
                    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 = 1101;
                    if (!( this.precpred(this._ctx, 20))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 20)");
                    }
                    this.state = 1102;
                    this.match(MParser.IS);
                    this.state = 1103; 
                    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 = 1104;
                    if (!( this.precpred(this._ctx, 13))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 13)");
                    }
                    this.state = 1105;
                    this.match(MParser.AS);
                    this.state = 1106; 
                    localctx.right = this.category_or_any_type();
                    break;

                } 
            }
            this.state = 1111;
            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 = 1112; 
        localctx.name = this.type_identifier();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Instance_expressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = 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 = 1115; 
        localctx.parent = this.selectable_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1121;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,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 = 1117;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1118; 
                localctx.selector = this.instance_selector(); 
            }
            this.state = 1123;
            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 = 1132;
        var la_ = this._interp.adaptivePredict(this._input,53,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1124; 
            this.blob_expression();
            break;

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

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

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

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

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

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

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 1131; 
            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 = 1147;
        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 = 1134;
            if (!( this.wasNot(MParser.WS))) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.wasNot(MParser.WS)");
            }
            this.state = 1135;
            this.match(MParser.DOT);
            this.state = 1136; 
            localctx.name = this.variable_identifier();
            break;

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

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

        this.state = 1154;
        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 = 1156;
        this.match(MParser.DOCUMENT);
        this.state = 1157;
        this.match(MParser.LPAR);
        this.state = 1159;
        _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 = 1158; 
            this.expression(0);
        }

        this.state = 1161;
        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 = 1163; 
        localctx.typ = this.mutable_category_type();
        this.state = 1164;
        this.match(MParser.LPAR);
        this.state = 1166;
        _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 = 1165; 
            localctx.args = this.argument_assignment_list(0);
        }

        this.state = 1168;
        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 = 1175;
        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 = 1171; 
            localctx.exp = this.expression(0);
            this.state = 1172;
            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 = 1174; 
            localctx.item = this.argument_assignment();
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1182;
        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 = 1177;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1178;
                this.match(MParser.COMMA);
                this.state = 1179; 
                localctx.item = this.argument_assignment(); 
            }
            this.state = 1184;
            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 = 1185; 
        localctx.name = this.variable_identifier();
        this.state = 1186; 
        this.assign();
        this.state = 1187; 
        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 = 1189;
        this.match(MParser.WRITE);
        this.state = 1190; 
        localctx.what = this.expression(0);
        this.state = 1191;
        this.match(MParser.TO);
        this.state = 1192; 
        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 = 1194;
        this.match(MParser.FILTERED);
        this.state = 1195;
        this.match(MParser.WITH);
        this.state = 1196; 
        localctx.name = this.variable_identifier();
        this.state = 1197;
        this.match(MParser.WHERE);
        this.state = 1198; 
        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 = 1230;
        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 = 1200;
            this.match(MParser.FETCH);
            this.state = 1201;
            this.match(MParser.ONE);
            this.state = 1203;
            _la = this._input.LA(1);
            if(_la===MParser.MUTABLE || _la===MParser.TYPE_IDENTIFIER) {
                this.state = 1202; 
                localctx.typ = this.mutable_category_type();
            }

            this.state = 1205;
            this.match(MParser.WHERE);
            this.state = 1206; 
            localctx.predicate = this.expression(0);
            break;

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

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

            }
            this.state = 1228;
            var la_ = this._interp.adaptivePredict(this._input,64,this._ctx);
            if(la_===1) {
                this.state = 1225;
                this.match(MParser.ORDER);
                this.state = 1226;
                this.match(MParser.BY);
                this.state = 1227; 
                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 = 1232;
        this.match(MParser.SORTED);
        this.state = 1234;
        _la = this._input.LA(1);
        if(_la===MParser.DESC) {
            this.state = 1233;
            this.match(MParser.DESC);
        }

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

        this.state = 1245;
        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 = 1247; 
        localctx.inst = this.assignable_instance(0);
        this.state = 1248; 
        this.assign();
        this.state = 1249; 
        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 = 1259;
        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 = 1251;
            if (!( this.wasNot(MParser.WS))) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.wasNot(MParser.WS)");
            }
            this.state = 1252;
            this.match(MParser.DOT);
            this.state = 1253; 
            localctx.name = this.variable_identifier();
            break;

        case 2:
            localctx = new ItemInstanceContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1254;
            if (!( this.wasNot(MParser.WS))) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.wasNot(MParser.WS)");
            }
            this.state = 1255;
            this.match(MParser.LBRAK);
            this.state = 1256; 
            localctx.exp = this.expression(0);
            this.state = 1257;
            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 = 1261; 
        localctx.items = this.variable_identifier_list();
        this.state = 1262; 
        this.assign();
        this.state = 1263; 
        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 = 1268;
        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 = 1265;
                this.match(MParser.LF); 
            }
            this.state = 1270;
            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 = 1272; 
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        do {
            this.state = 1271;
            this.match(MParser.LF);
            this.state = 1274; 
            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 = 1277; 
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        do {
            this.state = 1276;
            this.match(MParser.LF);
            this.state = 1279; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        } while(_la===MParser.LF);
        this.state = 1281;
        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 = 1286;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.LF) {
            this.state = 1283;
            this.match(MParser.LF);
            this.state = 1288;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1289;
        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 = 1291;
        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 = 1294;
        _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 = 1293; 
            this.declarations();
        }

        this.state = 1296; 
        this.lfs();
        this.state = 1297;
        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 = 1299; 
        this.declaration();
        this.state = 1305;
        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 = 1300; 
                this.lfp();
                this.state = 1301; 
                this.declaration(); 
            }
            this.state = 1307;
            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 = 1313;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMENT) {
            this.state = 1308; 
            this.comment_statement();
            this.state = 1309; 
            this.lfp();
            this.state = 1315;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1321;
        var la_ = this._interp.adaptivePredict(this._input,76,this._ctx);
        switch(la_) {
        case 1:
            this.state = 1316; 
            this.attribute_declaration();
            break;

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

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

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

        case 5:
            this.state = 1320; 
            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 = 1323; 
        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 = 1327;
        var la_ = this._interp.adaptivePredict(this._input,77,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1325; 
            this.enum_category_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1326; 
            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 = 1329; 
        this.native_symbol();
        this.state = 1335;
        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 = 1330; 
                this.lfp();
                this.state = 1331; 
                this.native_symbol(); 
            }
            this.state = 1337;
            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 = 1338; 
        this.category_symbol();
        this.state = 1344;
        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 = 1339; 
                this.lfp();
                this.state = 1340; 
                this.category_symbol(); 
            }
            this.state = 1346;
            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 = 1347; 
        this.symbol_identifier();
        this.state = 1352;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1348;
            this.match(MParser.COMMA);
            this.state = 1349; 
            this.symbol_identifier();
            this.state = 1354;
            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 = 1365;
        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 = 1355;
            this.match(MParser.IN);
            this.state = 1356; 
            localctx.source = this.list_literal();
            break;

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

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

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

        case 5:
            localctx = new MatchingExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1363;
            this.match(MParser.MATCHING);
            this.state = 1364; 
            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 = 1368;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1367;
            this.match(MParser.MUTABLE);
        }

        this.state = 1370;
        this.match(MParser.LBRAK);
        this.state = 1372;
        _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 = 1371; 
            this.expression_list();
        }

        this.state = 1374;
        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 = 1377;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1376;
            this.match(MParser.MUTABLE);
        }

        this.state = 1379;
        this.match(MParser.LT);
        this.state = 1381;
        _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 = 1380; 
            this.expression_list();
        }

        this.state = 1383;
        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 = 1385; 
        this.expression(0);
        this.state = 1390;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1386;
            this.match(MParser.COMMA);
            this.state = 1387; 
            this.expression(0);
            this.state = 1392;
            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 = 1393;
        this.match(MParser.LBRAK);
        this.state = 1394; 
        localctx.low = this.expression(0);
        this.state = 1395;
        this.match(MParser.RANGE);
        this.state = 1396; 
        localctx.high = this.expression(0);
        this.state = 1397;
        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 = 1411;
        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 = 1400; 
            localctx.p = this.primary_type();
            break;
        case MParser.CURSOR:
            localctx = new CursorTypeContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1401;
            this.match(MParser.CURSOR);
            this.state = 1402;
            this.match(MParser.LT);
            this.state = 1403; 
            localctx.c = this.typedef(0);
            this.state = 1404;
            this.match(MParser.GT);
            break;
        case MParser.ITERATOR:
            localctx = new IteratorTypeContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1406;
            this.match(MParser.ITERATOR);
            this.state = 1407;
            this.match(MParser.LT);
            this.state = 1408; 
            localctx.i = this.typedef(0);
            this.state = 1409;
            this.match(MParser.GT);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 1423;
        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 = 1421;
                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 = 1413;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 1414;
                    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 = 1415;
                    if (!( this.precpred(this._ctx, 4))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
                    }
                    this.state = 1416;
                    this.match(MParser.LBRAK);
                    this.state = 1417;
                    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 = 1418;
                    if (!( this.precpred(this._ctx, 3))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                    }
                    this.state = 1419;
                    this.match(MParser.LCURL);
                    this.state = 1420;
                    this.match(MParser.RCURL);
                    break;

                } 
            }
            this.state = 1425;
            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 = 1428;
        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 = 1426; 
            localctx.n = this.native_type();
            break;
        case MParser.TYPE_IDENTIFIER:
            localctx = new CategoryTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1427; 
            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 = 1444;
        switch(this._input.LA(1)) {
        case MParser.BOOLEAN:
            localctx = new BooleanTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1430;
            this.match(MParser.BOOLEAN);
            break;
        case MParser.CHARACTER:
            localctx = new CharacterTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1431;
            this.match(MParser.CHARACTER);
            break;
        case MParser.TEXT:
            localctx = new TextTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1432;
            this.match(MParser.TEXT);
            break;
        case MParser.IMAGE:
            localctx = new ImageTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1433;
            this.match(MParser.IMAGE);
            break;
        case MParser.INTEGER:
            localctx = new IntegerTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1434;
            this.match(MParser.INTEGER);
            break;
        case MParser.DECIMAL:
            localctx = new DecimalTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 1435;
            this.match(MParser.DECIMAL);
            break;
        case MParser.DOCUMENT:
            localctx = new DocumentTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 1436;
            this.match(MParser.DOCUMENT);
            break;
        case MParser.DATE:
            localctx = new DateTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 1437;
            this.match(MParser.DATE);
            break;
        case MParser.DATETIME:
            localctx = new DateTimeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 1438;
            this.match(MParser.DATETIME);
            break;
        case MParser.TIME:
            localctx = new TimeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 1439;
            this.match(MParser.TIME);
            break;
        case MParser.PERIOD:
            localctx = new PeriodTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 1440;
            this.match(MParser.PERIOD);
            break;
        case MParser.CODE:
            localctx = new CodeTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 1441;
            this.match(MParser.CODE);
            break;
        case MParser.BLOB:
            localctx = new BlobTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 1442;
            this.match(MParser.BLOB);
            break;
        case MParser.UUID:
            localctx = new UUIDTypeContext(this, localctx);
            this.enterOuterAlt(localctx, 14);
            this.state = 1443;
            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 = 1446;
        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 = 1449;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1448;
            this.match(MParser.MUTABLE);
        }

        this.state = 1451; 
        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 = 1453;
        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 = 1458;
        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 = 1455; 
            localctx.decl = this.concrete_category_declaration();
            break;

        case 2:
            localctx = new NativeCategoryDeclarationContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1456; 
            localctx.decl = this.native_category_declaration();
            break;

        case 3:
            localctx = new SingletonCategoryDeclarationContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1457; 
            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 = 1460; 
        this.type_identifier();
        this.state = 1465;
        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 = 1461;
                this.match(MParser.COMMA);
                this.state = 1462; 
                this.type_identifier(); 
            }
            this.state = 1467;
            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 = 1470;
        switch(this._input.LA(1)) {
        case MParser.VARIABLE_IDENTIFIER:
            this.enterOuterAlt(localctx, 1);
            this.state = 1468; 
            this.variable_identifier();
            break;
        case MParser.TYPE_IDENTIFIER:
            this.enterOuterAlt(localctx, 2);
            this.state = 1469; 
            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 = 1475;
        switch(this._input.LA(1)) {
        case MParser.VARIABLE_IDENTIFIER:
            localctx = new VariableIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1472; 
            this.variable_identifier();
            break;
        case MParser.TYPE_IDENTIFIER:
            localctx = new TypeIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1473; 
            this.type_identifier();
            break;
        case MParser.SYMBOL_IDENTIFIER:
            localctx = new SymbolIdentifierContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1474; 
            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 = 1477;
        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 = 1479;
        _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 = 1481;
        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 = 1483;
        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 = 1485; 
        this.argument();
        this.state = 1490;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1486;
            this.match(MParser.COMMA);
            this.state = 1487; 
            this.argument();
            this.state = 1492;
            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 = 1498;
        switch(this._input.LA(1)) {
        case MParser.CODE:
            localctx = new CodeArgumentContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1493; 
            localctx.arg = this.code_argument();
            break;
        case MParser.MUTABLE:
        case MParser.VARIABLE_IDENTIFIER:
            localctx = new OperatorArgumentContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1495;
            _la = this._input.LA(1);
            if(_la===MParser.MUTABLE) {
                this.state = 1494;
                this.match(MParser.MUTABLE);
            }

            this.state = 1497; 
            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 = 1502;
        var la_ = this._interp.adaptivePredict(this._input,100,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1500; 
            this.named_argument();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1501; 
            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 = 1504; 
        this.variable_identifier();
        this.state = 1507;
        _la = this._input.LA(1);
        if(_la===MParser.EQ) {
            this.state = 1505;
            this.match(MParser.EQ);
            this.state = 1506; 
            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 = 1509; 
        this.code_type();
        this.state = 1510; 
        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 = 1514;
        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 = 1512; 
            this.typedef(0);
            break;
        case MParser.ANY:
            this.enterOuterAlt(localctx, 2);
            this.state = 1513; 
            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 = 1517;
        this.match(MParser.ANY);
        this._ctx.stop = this._input.LT(-1);
        this.state = 1527;
        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 = 1525;
                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 = 1519;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 1520;
                    this.match(MParser.LBRAK);
                    this.state = 1521;
                    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 = 1522;
                    if (!( this.precpred(this._ctx, 1))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                    }
                    this.state = 1523;
                    this.match(MParser.LCURL);
                    this.state = 1524;
                    this.match(MParser.RCURL);
                    break;

                } 
            }
            this.state = 1529;
            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 = 1530; 
        this.member_method_declaration();
        this.state = 1536;
        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 = 1531; 
                this.lfp();
                this.state = 1532; 
                this.member_method_declaration(); 
            }
            this.state = 1538;
            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 = 1544;
        var la_ = this._interp.adaptivePredict(this._input,106,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1539; 
            this.setter_method_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1540; 
            this.getter_method_declaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1541; 
            this.concrete_method_declaration();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1542; 
            this.abstract_method_declaration();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1543; 
            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 = 1546; 
        this.native_member_method_declaration();
        this.state = 1552;
        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 = 1547; 
                this.lfp();
                this.state = 1548; 
                this.native_member_method_declaration(); 
            }
            this.state = 1554;
            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 = 1558;
        var la_ = this._interp.adaptivePredict(this._input,108,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1555; 
            this.native_getter_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1556; 
            this.native_setter_declaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1557; 
            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 = 1570;
        switch(this._input.LA(1)) {
        case MParser.JAVA:
            localctx = new JavaCategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1560;
            this.match(MParser.JAVA);
            this.state = 1561; 
            localctx.binding = this.java_class_identifier_expression(0);
            break;
        case MParser.CSHARP:
            localctx = new CSharpCategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1562;
            this.match(MParser.CSHARP);
            this.state = 1563; 
            localctx.binding = this.csharp_identifier_expression(0);
            break;
        case MParser.PYTHON2:
            localctx = new Python2CategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1564;
            this.match(MParser.PYTHON2);
            this.state = 1565; 
            localctx.binding = this.python_category_binding();
            break;
        case MParser.PYTHON3:
            localctx = new Python3CategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1566;
            this.match(MParser.PYTHON3);
            this.state = 1567; 
            localctx.binding = this.python_category_binding();
            break;
        case MParser.JAVASCRIPT:
            localctx = new JavaScriptCategoryBindingContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1568;
            this.match(MParser.JAVASCRIPT);
            this.state = 1569; 
            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 = 1572; 
        this.identifier();
        this.state = 1574;
        var la_ = this._interp.adaptivePredict(this._input,110,this._ctx);
        if(la_===1) {
            this.state = 1573; 
            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 = 1576;
        this.match(MParser.FROM);
        this.state = 1577; 
        this.module_token();
        this.state = 1578;
        this.match(MParser.COLON);
        this.state = 1579; 
        this.identifier();
        this.state = 1584;
        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 = 1580;
                this.match(MParser.DOT);
                this.state = 1581; 
                this.identifier(); 
            }
            this.state = 1586;
            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 = 1587; 
        this.identifier();
        this.state = 1589;
        var la_ = this._interp.adaptivePredict(this._input,112,this._ctx);
        if(la_===1) {
            this.state = 1588; 
            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 = 1591;
        this.match(MParser.FROM);
        this.state = 1592; 
        this.module_token();
        this.state = 1593;
        this.match(MParser.COLON);
        this.state = 1595;
        _la = this._input.LA(1);
        if(_la===MParser.SLASH) {
            this.state = 1594;
            this.match(MParser.SLASH);
        }

        this.state = 1597; 
        this.javascript_identifier();
        this.state = 1602;
        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 = 1598;
                this.match(MParser.SLASH);
                this.state = 1599; 
                this.javascript_identifier(); 
            }
            this.state = 1604;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,114,this._ctx);
        }

        this.state = 1607;
        var la_ = this._interp.adaptivePredict(this._input,115,this._ctx);
        if(la_===1) {
            this.state = 1605;
            this.match(MParser.DOT);
            this.state = 1606; 
            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 = 1609; 
        this.variable_identifier();
        this.state = 1614;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1610;
            this.match(MParser.COMMA);
            this.state = 1611; 
            this.variable_identifier();
            this.state = 1616;
            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 = 1617; 
        this.attribute_identifier();
        this.state = 1622;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1618;
            this.match(MParser.COMMA);
            this.state = 1619; 
            this.attribute_identifier();
            this.state = 1624;
            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 = 1629;
        var la_ = this._interp.adaptivePredict(this._input,118,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1625; 
            this.abstract_method_declaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1626; 
            this.concrete_method_declaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1627; 
            this.native_method_declaration();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1628; 
            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 = 1631;
        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 = 1633; 
        this.native_statement();
        this.state = 1639;
        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 = 1634; 
                this.lfp();
                this.state = 1635; 
                this.native_statement(); 
            }
            this.state = 1641;
            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 = 1652;
        switch(this._input.LA(1)) {
        case MParser.JAVA:
            localctx = new JavaNativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1642;
            this.match(MParser.JAVA);
            this.state = 1643; 
            this.java_statement();
            break;
        case MParser.CSHARP:
            localctx = new CSharpNativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1644;
            this.match(MParser.CSHARP);
            this.state = 1645; 
            this.csharp_statement();
            break;
        case MParser.PYTHON2:
            localctx = new Python2NativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1646;
            this.match(MParser.PYTHON2);
            this.state = 1647; 
            this.python_native_statement();
            break;
        case MParser.PYTHON3:
            localctx = new Python3NativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1648;
            this.match(MParser.PYTHON3);
            this.state = 1649; 
            this.python_native_statement();
            break;
        case MParser.JAVASCRIPT:
            localctx = new JavaScriptNativeStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1650;
            this.match(MParser.JAVASCRIPT);
            this.state = 1651; 
            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 = 1654; 
        this.python_statement();
        this.state = 1656;
        _la = this._input.LA(1);
        if(_la===MParser.SEMI) {
            this.state = 1655;
            this.match(MParser.SEMI);
        }

        this.state = 1659;
        _la = this._input.LA(1);
        if(_la===MParser.FROM) {
            this.state = 1658; 
            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 = 1661; 
        this.javascript_statement();
        this.state = 1663;
        _la = this._input.LA(1);
        if(_la===MParser.SEMI) {
            this.state = 1662;
            this.match(MParser.SEMI);
        }

        this.state = 1666;
        _la = this._input.LA(1);
        if(_la===MParser.FROM) {
            this.state = 1665; 
            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 = 1668; 
        this.statement();
        this.state = 1674;
        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 = 1669; 
                this.lfp();
                this.state = 1670; 
                this.statement(); 
            }
            this.state = 1676;
            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 = 1677; 
        this.assertion();
        this.state = 1683;
        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 = 1678; 
                this.lfp();
                this.state = 1679; 
                this.assertion(); 
            }
            this.state = 1685;
            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 = 1686; 
        this.switch_case_statement();
        this.state = 1692;
        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 = 1687; 
                this.lfp();
                this.state = 1688; 
                this.switch_case_statement(); 
            }
            this.state = 1694;
            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 = 1695; 
        this.catch_statement();
        this.state = 1701;
        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 = 1696; 
                this.lfp();
                this.state = 1697; 
                this.catch_statement(); 
            }
            this.state = 1703;
            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 = 1718;
        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 = 1704;
            this.match(MParser.LBRAK);
            this.state = 1705; 
            localctx.low = this.atomic_literal();
            this.state = 1706;
            this.match(MParser.RANGE);
            this.state = 1707; 
            localctx.high = this.atomic_literal();
            this.state = 1708;
            this.match(MParser.RBRAK);
            break;

        case 2:
            localctx = new LiteralListLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1710;
            this.match(MParser.LBRAK);
            this.state = 1711; 
            this.literal_list_literal();
            this.state = 1712;
            this.match(MParser.RBRAK);
            break;

        case 3:
            localctx = new LiteralSetLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1714;
            this.match(MParser.LT);
            this.state = 1715; 
            this.literal_list_literal();
            this.state = 1716;
            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 = 1734;
        switch(this._input.LA(1)) {
        case MParser.MIN_INTEGER:
            localctx = new MinIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1720;
            localctx.t = this.match(MParser.MIN_INTEGER);
            break;
        case MParser.MAX_INTEGER:
            localctx = new MaxIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1721;
            localctx.t = this.match(MParser.MAX_INTEGER);
            break;
        case MParser.INTEGER_LITERAL:
            localctx = new IntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1722;
            localctx.t = this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.HEXA_LITERAL:
            localctx = new HexadecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1723;
            localctx.t = this.match(MParser.HEXA_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new CharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1724;
            localctx.t = this.match(MParser.CHAR_LITERAL);
            break;
        case MParser.DATE_LITERAL:
            localctx = new DateLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 1725;
            localctx.t = this.match(MParser.DATE_LITERAL);
            break;
        case MParser.TIME_LITERAL:
            localctx = new TimeLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 1726;
            localctx.t = this.match(MParser.TIME_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new TextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 1727;
            localctx.t = this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new DecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 1728;
            localctx.t = this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.DATETIME_LITERAL:
            localctx = new DateTimeLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 1729;
            localctx.t = this.match(MParser.DATETIME_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new BooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 1730;
            localctx.t = this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.PERIOD_LITERAL:
            localctx = new PeriodLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 1731;
            localctx.t = this.match(MParser.PERIOD_LITERAL);
            break;
        case MParser.UUID_LITERAL:
            localctx = new UUIDLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 1732;
            localctx.t = this.match(MParser.UUID_LITERAL);
            break;
        case MParser.NONE:
            localctx = new NullLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 14);
            this.state = 1733; 
            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 = 1736; 
        this.atomic_literal();
        this.state = 1741;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1737;
            this.match(MParser.COMMA);
            this.state = 1738; 
            this.atomic_literal();
            this.state = 1743;
            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 = 1748;
        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 = 1744; 
            localctx.exp = this.parenthesis_expression();
            break;

        case 2:
            localctx = new LiteralExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1745; 
            localctx.exp = this.literal_expression();
            break;

        case 3:
            localctx = new IdentifierExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1746; 
            localctx.exp = this.identifier();
            break;

        case 4:
            localctx = new ThisExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1747; 
            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 = 1750;
        _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 = 1752;
        this.match(MParser.LPAR);
        this.state = 1753; 
        this.expression(0);
        this.state = 1754;
        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 = 1758;
        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 = 1756; 
            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 = 1757; 
            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 = 1765;
        var la_ = this._interp.adaptivePredict(this._input,134,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1760; 
            this.range_literal();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1761; 
            this.list_literal();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1762; 
            this.set_literal();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1763; 
            this.dict_literal();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1764; 
            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 = 1768;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1767;
            this.match(MParser.MUTABLE);
        }

        this.state = 1770;
        this.match(MParser.LPAR);
        this.state = 1772;
        _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 = 1771; 
            this.expression_tuple();
        }

        this.state = 1774;
        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 = 1777;
        _la = this._input.LA(1);
        if(_la===MParser.MUTABLE) {
            this.state = 1776;
            this.match(MParser.MUTABLE);
        }

        this.state = 1779;
        this.match(MParser.LCURL);
        this.state = 1781;
        _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 = 1780; 
            this.dict_entry_list();
        }

        this.state = 1783;
        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 = 1785; 
        this.expression(0);
        this.state = 1786;
        this.match(MParser.COMMA);
        this.state = 1795;
        _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 = 1787; 
            this.expression(0);
            this.state = 1792;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===MParser.COMMA) {
                this.state = 1788;
                this.match(MParser.COMMA);
                this.state = 1789; 
                this.expression(0);
                this.state = 1794;
                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 = 1797; 
        this.dict_entry();
        this.state = 1802;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===MParser.COMMA) {
            this.state = 1798;
            this.match(MParser.COMMA);
            this.state = 1799; 
            this.dict_entry();
            this.state = 1804;
            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 = 1805; 
        localctx.key = this.expression(0);
        this.state = 1806;
        this.match(MParser.COLON);
        this.state = 1807; 
        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 = 1818;
        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 = 1809; 
            localctx.first = this.expression(0);
            this.state = 1810;
            this.match(MParser.COLON);
            this.state = 1811; 
            localctx.last = this.expression(0);
            break;

        case 2:
            localctx = new SliceFirstOnlyContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1813; 
            localctx.first = this.expression(0);
            this.state = 1814;
            this.match(MParser.COLON);
            break;

        case 3:
            localctx = new SliceLastOnlyContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1816;
            this.match(MParser.COLON);
            this.state = 1817; 
            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 = 1820; 
        this.variable_identifier();
        this.state = 1821; 
        this.assign();
        this.state = 1822; 
        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 = 1825; 
        this.variable_identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1831;
        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 = 1827;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1828; 
                this.child_instance(); 
            }
            this.state = 1833;
            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 = 1838;
        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 = 1834;
            if (!( this.willBeAOrAn())) {
                throw new antlr4.error.FailedPredicateException(this, "$parser.willBeAOrAn()");
            }
            this.state = 1835;
            this.match(MParser.VARIABLE_IDENTIFIER);
            this.state = 1836; 
            this.category_or_any_type();
            break;

        case 2:
            localctx = new IsOtherExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1837; 
            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 = 1840;
        this.match(MParser.READ);
        this.state = 1841;
        this.match(MParser.ALL);
        this.state = 1842;
        this.match(MParser.FROM);
        this.state = 1843; 
        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 = 1845;
        this.match(MParser.READ);
        this.state = 1846;
        this.match(MParser.ONE);
        this.state = 1847;
        this.match(MParser.FROM);
        this.state = 1848; 
        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 = 1850; 
        this.order_by();
        this.state = 1855;
        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 = 1851;
                this.match(MParser.COMMA);
                this.state = 1852; 
                this.order_by(); 
            }
            this.state = 1857;
            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 = 1858; 
        this.variable_identifier();
        this.state = 1863;
        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 = 1859;
                this.match(MParser.DOT);
                this.state = 1860; 
                this.variable_identifier(); 
            }
            this.state = 1865;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,146,this._ctx);
        }

        this.state = 1867;
        var la_ = this._interp.adaptivePredict(this._input,147,this._ctx);
        if(la_===1) {
            this.state = 1866;
            _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 = 1875;
        switch(this._input.LA(1)) {
        case MParser.PLUS:
            localctx = new OperatorPlusContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1869;
            this.match(MParser.PLUS);
            break;
        case MParser.MINUS:
            localctx = new OperatorMinusContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1870;
            this.match(MParser.MINUS);
            break;
        case MParser.STAR:
            localctx = new OperatorMultiplyContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1871; 
            this.multiply();
            break;
        case MParser.SLASH:
            localctx = new OperatorDivideContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1872; 
            this.divide();
            break;
        case MParser.BSLASH:
            localctx = new OperatorIDivideContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1873; 
            this.idivide();
            break;
        case MParser.PERCENT:
        case MParser.MODULO:
            localctx = new OperatorModuloContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 1874; 
            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 = 1877;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1878;
        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 = 1880;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1881;
        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 = 1883;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1884;
        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 = 1886;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1887;
        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 = 1889;
        localctx.i1 = this.match(MParser.VARIABLE_IDENTIFIER);
        this.state = 1890;
        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 = 1892;
        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 = 1894;
        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 = 1896;
        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 = 1898;
        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 = 1900;
        _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 = 1909;
        switch(this._input.LA(1)) {
        case MParser.RETURN:
            localctx = new JavascriptReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1902;
            this.match(MParser.RETURN);
            this.state = 1903; 
            localctx.exp = this.javascript_expression(0);
            this.state = 1904;
            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 = 1906; 
            localctx.exp = this.javascript_expression(0);
            this.state = 1907;
            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 = 1912; 
        localctx.exp = this.javascript_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1918;
        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 = 1914;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1915; 
                localctx.child = this.javascript_selector_expression(); 
            }
            this.state = 1920;
            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 = 1928;
        var la_ = this._interp.adaptivePredict(this._input,151,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1921; 
            this.javascript_this_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1922; 
            this.javascript_new_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1923; 
            this.javascript_parenthesis_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1924; 
            this.javascript_identifier_expression();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1925; 
            this.javascript_literal_expression();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1926; 
            this.javascript_method_expression();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 1927; 
            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 = 1930; 
        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 = 1932; 
        this.new_token();
        this.state = 1933; 
        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 = 1940;
        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 = 1935;
            this.match(MParser.DOT);
            this.state = 1936; 
            localctx.method = this.javascript_method_expression();
            break;

        case 2:
            localctx = new JavaScriptMemberExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1937;
            this.match(MParser.DOT);
            this.state = 1938; 
            localctx.name = this.javascript_identifier();
            break;

        case 3:
            localctx = new JavaScriptItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1939; 
            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 = 1942; 
        localctx.name = this.javascript_identifier();
        this.state = 1943;
        this.match(MParser.LPAR);
        this.state = 1945;
        _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 = 1944; 
            localctx.args = this.javascript_arguments(0);
        }

        this.state = 1947;
        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 = 1950; 
        localctx.item = this.javascript_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 1957;
        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 = 1952;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1953;
                this.match(MParser.COMMA);
                this.state = 1954; 
                localctx.item = this.javascript_expression(0); 
            }
            this.state = 1959;
            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 = 1960;
        this.match(MParser.LBRAK);
        this.state = 1961; 
        localctx.exp = this.javascript_expression(0);
        this.state = 1962;
        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 = 1964;
        this.match(MParser.LPAR);
        this.state = 1965; 
        localctx.exp = this.javascript_expression(0);
        this.state = 1966;
        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 = 1968; 
        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 = 1975;
        switch(this._input.LA(1)) {
        case MParser.INTEGER_LITERAL:
            localctx = new JavascriptIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1970;
            localctx.t = this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new JavascriptDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1971;
            localctx.t = this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new JavascriptTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1972;
            localctx.t = this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new JavascriptBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1973;
            localctx.t = this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new JavascriptCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 1974;
            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 = 1977;
        _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 = 1982;
        switch(this._input.LA(1)) {
        case MParser.RETURN:
            localctx = new PythonReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1979;
            this.match(MParser.RETURN);
            this.state = 1980; 
            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 = 1981; 
            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 = 1985; 
        localctx.exp = this.python_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 1991;
        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 = 1987;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 1988; 
                localctx.child = this.python_selector_expression(); 
            }
            this.state = 1993;
            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 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 = 1998;
        var la_ = this._interp.adaptivePredict(this._input,158,this._ctx);
        switch(la_) {
        case 1:
            localctx = new PythonParenthesisExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 1994; 
            localctx.exp = this.python_parenthesis_expression();
            break;

        case 2:
            localctx = new PythonIdentifierExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 1995; 
            localctx.exp = this.python_identifier_expression(0);
            break;

        case 3:
            localctx = new PythonLiteralExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 1996; 
            localctx.exp = this.python_literal_expression();
            break;

        case 4:
            localctx = new PythonGlobalMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 1997; 
            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_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, 340, MParser.RULE_python_selector_expression);
    try {
        this.state = 2006;
        switch(this._input.LA(1)) {
        case MParser.DOT:
            localctx = new PythonMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2000;
            this.match(MParser.DOT);
            this.state = 2001; 
            localctx.exp = this.python_method_expression();
            break;
        case MParser.LBRAK:
            localctx = new PythonItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2002;
            this.match(MParser.LBRAK);
            this.state = 2003; 
            localctx.exp = this.python_expression(0);
            this.state = 2004;
            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, 342, MParser.RULE_python_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2008; 
        localctx.name = this.python_identifier();
        this.state = 2009;
        this.match(MParser.LPAR);
        this.state = 2011;
        _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 = 2010; 
            localctx.args = this.python_argument_list();
        }

        this.state = 2013;
        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, 344, MParser.RULE_python_argument_list);
    try {
        this.state = 2021;
        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 = 2015; 
            localctx.ordinal = this.python_ordinal_argument_list(0);
            break;

        case 2:
            localctx = new PythonNamedOnlyArgumentListContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2016; 
            localctx.named = this.python_named_argument_list(0);
            break;

        case 3:
            localctx = new PythonArgumentListContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2017; 
            localctx.ordinal = this.python_ordinal_argument_list(0);
            this.state = 2018;
            this.match(MParser.COMMA);
            this.state = 2019; 
            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 = 346;
    this.enterRecursionRule(localctx, 346, MParser.RULE_python_ordinal_argument_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new PythonOrdinalArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2024; 
        localctx.item = this.python_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2031;
        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 = 2026;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2027;
                this.match(MParser.COMMA);
                this.state = 2028; 
                localctx.item = this.python_expression(0); 
            }
            this.state = 2033;
            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 = 348;
    this.enterRecursionRule(localctx, 348, MParser.RULE_python_named_argument_list, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new PythonNamedArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2035; 
        localctx.name = this.python_identifier();
        this.state = 2036;
        this.match(MParser.EQ);
        this.state = 2037; 
        localctx.exp = this.python_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2047;
        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 = 2039;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2040;
                this.match(MParser.COMMA);
                this.state = 2041; 
                localctx.name = this.python_identifier();
                this.state = 2042;
                this.match(MParser.EQ);
                this.state = 2043; 
                localctx.exp = this.python_expression(0); 
            }
            this.state = 2049;
            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, 350, MParser.RULE_python_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2050;
        this.match(MParser.LPAR);
        this.state = 2051; 
        localctx.exp = this.python_expression(0);
        this.state = 2052;
        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 = 352;
    this.enterRecursionRule(localctx, 352, MParser.RULE_python_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2057;
        switch(this._input.LA(1)) {
        case MParser.DOLLAR_IDENTIFIER:
            localctx = new PythonPromptoIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 2055;
            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 = 2056; 
            localctx.name = this.python_identifier();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2064;
        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 = 2059;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2060;
                this.match(MParser.DOT);
                this.state = 2061; 
                localctx.name = this.python_identifier(); 
            }
            this.state = 2066;
            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, 354, MParser.RULE_python_literal_expression);
    try {
        this.state = 2072;
        switch(this._input.LA(1)) {
        case MParser.INTEGER_LITERAL:
            localctx = new PythonIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2067;
            localctx.t = this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new PythonDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2068;
            localctx.t = this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new PythonTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2069;
            localctx.t = this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new PythonBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2070;
            localctx.t = this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new PythonCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2071;
            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, 356, MParser.RULE_python_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2074;
        _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, 358, MParser.RULE_java_statement);
    try {
        this.state = 2083;
        switch(this._input.LA(1)) {
        case MParser.RETURN:
            localctx = new JavaReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2076;
            this.match(MParser.RETURN);
            this.state = 2077; 
            localctx.exp = this.java_expression(0);
            this.state = 2078;
            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 = 2080; 
            localctx.exp = this.java_expression(0);
            this.state = 2081;
            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 = 360;
    this.enterRecursionRule(localctx, 360, MParser.RULE_java_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2086; 
        localctx.exp = this.java_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2092;
        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 = 2088;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2089; 
                localctx.child = this.java_selector_expression(); 
            }
            this.state = 2094;
            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, 362, MParser.RULE_java_primary_expression);
    try {
        this.state = 2100;
        var la_ = this._interp.adaptivePredict(this._input,169,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2095; 
            this.java_this_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2096; 
            this.java_new_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2097; 
            this.java_parenthesis_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2098; 
            this.java_identifier_expression(0);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2099; 
            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, 364, MParser.RULE_java_this_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2102; 
        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, 366, MParser.RULE_java_new_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2104; 
        this.new_token();
        this.state = 2105; 
        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, 368, MParser.RULE_java_selector_expression);
    try {
        this.state = 2110;
        switch(this._input.LA(1)) {
        case MParser.DOT:
            localctx = new JavaMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2107;
            this.match(MParser.DOT);
            this.state = 2108; 
            localctx.exp = this.java_method_expression();
            break;
        case MParser.LBRAK:
            localctx = new JavaItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2109; 
            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, 370, MParser.RULE_java_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2112; 
        localctx.name = this.java_identifier();
        this.state = 2113;
        this.match(MParser.LPAR);
        this.state = 2115;
        _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 = 2114; 
            localctx.args = this.java_arguments(0);
        }

        this.state = 2117;
        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 = 372;
    this.enterRecursionRule(localctx, 372, MParser.RULE_java_arguments, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2120; 
        localctx.item = this.java_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2127;
        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 = 2122;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2123;
                this.match(MParser.COMMA);
                this.state = 2124; 
                localctx.item = this.java_expression(0); 
            }
            this.state = 2129;
            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, 374, MParser.RULE_java_item_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2130;
        this.match(MParser.LBRAK);
        this.state = 2131; 
        localctx.exp = this.java_expression(0);
        this.state = 2132;
        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, 376, MParser.RULE_java_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2134;
        this.match(MParser.LPAR);
        this.state = 2135; 
        localctx.exp = this.java_expression(0);
        this.state = 2136;
        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 = 378;
    this.enterRecursionRule(localctx, 378, MParser.RULE_java_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaIdentifierContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2139; 
        localctx.name = this.java_identifier();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2146;
        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 = 2141;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2142;
                this.match(MParser.DOT);
                this.state = 2143; 
                localctx.name = this.java_identifier(); 
            }
            this.state = 2148;
            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 = 380;
    this.enterRecursionRule(localctx, 380, MParser.RULE_java_class_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new JavaClassIdentifierContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2150; 
        localctx.klass = this.java_identifier_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2156;
        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 = 2152;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2153;
                localctx.name = this.match(MParser.DOLLAR_IDENTIFIER); 
            }
            this.state = 2158;
            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, 382, MParser.RULE_java_literal_expression);
    try {
        this.state = 2164;
        switch(this._input.LA(1)) {
        case MParser.INTEGER_LITERAL:
            localctx = new JavaIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2159;
            localctx.t = this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new JavaDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2160;
            localctx.t = this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new JavaTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2161;
            localctx.t = this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new JavaBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2162;
            localctx.t = this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new JavaCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2163;
            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, 384, MParser.RULE_java_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2166;
        _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, 386, MParser.RULE_csharp_statement);
    try {
        this.state = 2175;
        switch(this._input.LA(1)) {
        case MParser.RETURN:
            localctx = new CSharpReturnStatementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2168;
            this.match(MParser.RETURN);
            this.state = 2169; 
            localctx.exp = this.csharp_expression(0);
            this.state = 2170;
            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 = 2172; 
            localctx.exp = this.csharp_expression(0);
            this.state = 2173;
            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 = 388;
    this.enterRecursionRule(localctx, 388, MParser.RULE_csharp_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new CSharpPrimaryExpressionContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2178; 
        localctx.exp = this.csharp_primary_expression();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2184;
        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 = 2180;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2181; 
                localctx.child = this.csharp_selector_expression(); 
            }
            this.state = 2186;
            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, 390, MParser.RULE_csharp_primary_expression);
    try {
        this.state = 2192;
        var la_ = this._interp.adaptivePredict(this._input,178,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2187; 
            this.csharp_this_expression();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2188; 
            this.csharp_new_expression();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2189; 
            this.csharp_parenthesis_expression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2190; 
            this.csharp_identifier_expression(0);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2191; 
            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, 392, MParser.RULE_csharp_this_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2194; 
        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, 394, MParser.RULE_csharp_new_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2196; 
        this.new_token();
        this.state = 2197; 
        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, 396, MParser.RULE_csharp_selector_expression);
    try {
        this.state = 2202;
        switch(this._input.LA(1)) {
        case MParser.DOT:
            localctx = new CSharpMethodExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2199;
            this.match(MParser.DOT);
            this.state = 2200; 
            localctx.exp = this.csharp_method_expression();
            break;
        case MParser.LBRAK:
            localctx = new CSharpItemExpressionContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2201; 
            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, 398, MParser.RULE_csharp_method_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2204; 
        localctx.name = this.csharp_identifier();
        this.state = 2205;
        this.match(MParser.LPAR);
        this.state = 2207;
        _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 = 2206; 
            localctx.args = this.csharp_arguments(0);
        }

        this.state = 2209;
        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 = 400;
    this.enterRecursionRule(localctx, 400, MParser.RULE_csharp_arguments, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new CSharpArgumentListContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2212; 
        localctx.item = this.csharp_expression(0);
        this._ctx.stop = this._input.LT(-1);
        this.state = 2219;
        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 = 2214;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2215;
                this.match(MParser.COMMA);
                this.state = 2216; 
                localctx.item = this.csharp_expression(0); 
            }
            this.state = 2221;
            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, 402, MParser.RULE_csharp_item_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2222;
        this.match(MParser.LBRAK);
        this.state = 2223; 
        localctx.exp = this.csharp_expression(0);
        this.state = 2224;
        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, 404, MParser.RULE_csharp_parenthesis_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2226;
        this.match(MParser.LPAR);
        this.state = 2227; 
        localctx.exp = this.csharp_expression(0);
        this.state = 2228;
        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 = 406;
    this.enterRecursionRule(localctx, 406, MParser.RULE_csharp_identifier_expression, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2233;
        switch(this._input.LA(1)) {
        case MParser.DOLLAR_IDENTIFIER:
            localctx = new CSharpPromptoIdentifierContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 2231;
            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 = 2232; 
            localctx.name = this.csharp_identifier();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2240;
        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 = 2235;
                if (!( this.precpred(this._ctx, 1))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
                }
                this.state = 2236;
                this.match(MParser.DOT);
                this.state = 2237; 
                localctx.name = this.csharp_identifier(); 
            }
            this.state = 2242;
            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, 408, MParser.RULE_csharp_literal_expression);
    try {
        this.state = 2248;
        switch(this._input.LA(1)) {
        case MParser.INTEGER_LITERAL:
            localctx = new CSharpIntegerLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2243;
            this.match(MParser.INTEGER_LITERAL);
            break;
        case MParser.DECIMAL_LITERAL:
            localctx = new CSharpDecimalLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2244;
            this.match(MParser.DECIMAL_LITERAL);
            break;
        case MParser.TEXT_LITERAL:
            localctx = new CSharpTextLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2245;
            this.match(MParser.TEXT_LITERAL);
            break;
        case MParser.BOOLEAN_LITERAL:
            localctx = new CSharpBooleanLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2246;
            this.match(MParser.BOOLEAN_LITERAL);
            break;
        case MParser.CHAR_LITERAL:
            localctx = new CSharpCharacterLiteralContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2247;
            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, 410, MParser.RULE_csharp_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2250;
        _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 173:
			return this.python_ordinal_argument_list_sempred(localctx, predIndex);
	case 174:
			return this.python_named_argument_list_sempred(localctx, predIndex);
	case 176:
			return this.python_identifier_expression_sempred(localctx, predIndex);
	case 180:
			return this.java_expression_sempred(localctx, predIndex);
	case 186:
			return this.java_arguments_sempred(localctx, predIndex);
	case 189:
			return this.java_identifier_expression_sempred(localctx, predIndex);
	case 190:
			return this.java_class_identifier_expression_sempred(localctx, predIndex);
	case 194:
			return this.csharp_expression_sempred(localctx, predIndex);
	case 200:
			return this.csharp_arguments_sempred(localctx, predIndex);
	case 203:
			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