text: // Generated from CPP14Parser.g4 by ANTLR 4.9.2
  // jshint ignore: start
  import antlr4 from './antlr4';
  import CPP14ParserListener from './CPP14ParserListener.js';
  
  const serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786",
      "\u5964\u0003\u0093\u0842\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004",
      "\u0004\t\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t",
      "\u0007\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004",
      "\f\t\f\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010",
      "\t\u0010\u0004\u0011\t\u0011\u0004\u0012\t\u0012\u0004\u0013\t\u0013",
      "\u0004\u0014\t\u0014\u0004\u0015\t\u0015\u0004\u0016\t\u0016\u0004\u0017",
      "\t\u0017\u0004\u0018\t\u0018\u0004\u0019\t\u0019\u0004\u001a\t\u001a",
      "\u0004\u001b\t\u001b\u0004\u001c\t\u001c\u0004\u001d\t\u001d\u0004\u001e",
      "\t\u001e\u0004\u001f\t\u001f\u0004 \t \u0004!\t!\u0004\"\t\"\u0004#",
      "\t#\u0004$\t$\u0004%\t%\u0004&\t&\u0004\'\t\'\u0004(\t(\u0004)\t)\u0004",
      "*\t*\u0004+\t+\u0004,\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u0004",
      "1\t1\u00042\t2\u00043\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u0004",
      "8\t8\u00049\t9\u0004:\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004",
      "?\t?\u0004@\t@\u0004A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004",
      "F\tF\u0004G\tG\u0004H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004",
      "M\tM\u0004N\tN\u0004O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004",
      "T\tT\u0004U\tU\u0004V\tV\u0004W\tW\u0004X\tX\u0004Y\tY\u0004Z\tZ\u0004",
      "[\t[\u0004\\\t\\\u0004]\t]\u0004^\t^\u0004_\t_\u0004`\t`\u0004a\ta\u0004",
      "b\tb\u0004c\tc\u0004d\td\u0004e\te\u0004f\tf\u0004g\tg\u0004h\th\u0004",
      "i\ti\u0004j\tj\u0004k\tk\u0004l\tl\u0004m\tm\u0004n\tn\u0004o\to\u0004",
      "p\tp\u0004q\tq\u0004r\tr\u0004s\ts\u0004t\tt\u0004u\tu\u0004v\tv\u0004",
      "w\tw\u0004x\tx\u0004y\ty\u0004z\tz\u0004{\t{\u0004|\t|\u0004}\t}\u0004",
      "~\t~\u0004\u007f\t\u007f\u0004\u0080\t\u0080\u0004\u0081\t\u0081\u0004",
      "\u0082\t\u0082\u0004\u0083\t\u0083\u0004\u0084\t\u0084\u0004\u0085\t",
      "\u0085\u0004\u0086\t\u0086\u0004\u0087\t\u0087\u0004\u0088\t\u0088\u0004",
      "\u0089\t\u0089\u0004\u008a\t\u008a\u0004\u008b\t\u008b\u0004\u008c\t",
      "\u008c\u0004\u008d\t\u008d\u0004\u008e\t\u008e\u0004\u008f\t\u008f\u0004",
      "\u0090\t\u0090\u0004\u0091\t\u0091\u0004\u0092\t\u0092\u0004\u0093\t",
      "\u0093\u0004\u0094\t\u0094\u0004\u0095\t\u0095\u0004\u0096\t\u0096\u0004",
      "\u0097\t\u0097\u0004\u0098\t\u0098\u0004\u0099\t\u0099\u0004\u009a\t",
      "\u009a\u0004\u009b\t\u009b\u0004\u009c\t\u009c\u0004\u009d\t\u009d\u0004",
      "\u009e\t\u009e\u0004\u009f\t\u009f\u0004\u00a0\t\u00a0\u0004\u00a1\t",
      "\u00a1\u0004\u00a2\t\u00a2\u0004\u00a3\t\u00a3\u0004\u00a4\t\u00a4\u0004",
      "\u00a5\t\u00a5\u0004\u00a6\t\u00a6\u0004\u00a7\t\u00a7\u0004\u00a8\t",
      "\u00a8\u0004\u00a9\t\u00a9\u0004\u00aa\t\u00aa\u0004\u00ab\t\u00ab\u0004",
      "\u00ac\t\u00ac\u0004\u00ad\t\u00ad\u0004\u00ae\t\u00ae\u0004\u00af\t",
      "\u00af\u0004\u00b0\t\u00b0\u0004\u00b1\t\u00b1\u0004\u00b2\t\u00b2\u0004",
      "\u00b3\t\u00b3\u0004\u00b4\t\u00b4\u0004\u00b5\t\u00b5\u0004\u00b6\t",
      "\u00b6\u0004\u00b7\t\u00b7\u0004\u00b8\t\u00b8\u0004\u00b9\t\u00b9\u0004",
      "\u00ba\t\u00ba\u0004\u00bb\t\u00bb\u0004\u00bc\t\u00bc\u0004\u00bd\t",
      "\u00bd\u0004\u00be\t\u00be\u0004\u00bf\t\u00bf\u0004\u00c0\t\u00c0\u0003",
      "\u0002\u0005\u0002\u0182\n\u0002\u0003\u0002\u0003\u0002\u0003\u0003",
      "\u0006\u0003\u0187\n\u0003\r\u0003\u000e\u0003\u0188\u0003\u0003\u0003",
      "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0005",
      "\u0003\u0192\n\u0003\u0003\u0004\u0003\u0004\u0005\u0004\u0196\n\u0004",
      "\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005\u0003\u0005",
      "\u0003\u0005\u0005\u0005\u019f\n\u0005\u0003\u0005\u0005\u0005\u01a2",
      "\n\u0005\u0003\u0006\u0003\u0006\u0005\u0006\u01a6\n\u0006\u0003\u0006",
      "\u0003\u0006\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0005\u0007",
      "\u01ae\n\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003",
      "\u0007\u0005\u0007\u01b5\n\u0007\u0003\u0007\u0005\u0007\u01b8\n\u0007",
      "\u0003\u0007\u0007\u0007\u01bb\n\u0007\f\u0007\u000e\u0007\u01be\u000b",
      "\u0007\u0003\b\u0003\b\u0005\b\u01c2\n\b\u0003\b\u0003\b\u0003\t\u0003",
      "\t\u0005\t\u01c8\n\t\u0003\t\u0003\t\u0003\n\u0003\n\u0003\n\u0003\n",
      "\u0005\n\u01d0\n\n\u0005\n\u01d2\n\n\u0003\u000b\u0003\u000b\u0003\f",
      "\u0003\f\u0003\f\u0007\f\u01d9\n\f\f\f\u000e\f\u01dc\u000b\f\u0003\f",
      "\u0005\f\u01df\n\f\u0003\r\u0003\r\u0005\r\u01e3\n\r\u0003\u000e\u0005",
      "\u000e\u01e6\n\u000e\u0003\u000e\u0003\u000e\u0005\u000e\u01ea\n\u000e",
      "\u0003\u000f\u0005\u000f\u01ed\n\u000f\u0003\u000f\u0003\u000f\u0003",
      "\u000f\u0003\u0010\u0003\u0010\u0005\u0010\u01f4\n\u0010\u0003\u0010",
      "\u0003\u0010\u0005\u0010\u01f8\n\u0010\u0003\u0010\u0005\u0010\u01fb",
      "\n\u0010\u0003\u0010\u0005\u0010\u01fe\n\u0010\u0003\u0010\u0005\u0010",
      "\u0201\n\u0010\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0005",
      "\u0011\u0207\n\u0011\u0003\u0011\u0003\u0011\u0005\u0011\u020b\n\u0011",
      "\u0003\u0011\u0003\u0011\u0005\u0011\u020f\n\u0011\u0003\u0011\u0003",
      "\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003",
      "\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0005\u0011\u021d",
      "\n\u0011\u0003\u0011\u0003\u0011\u0005\u0011\u0221\n\u0011\u0003\u0011",
      "\u0003\u0011\u0003\u0011\u0003\u0011\u0005\u0011\u0227\n\u0011\u0003",
      "\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0005\u0011\u022e",
      "\n\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011\u0005\u0011",
      "\u0234\n\u0011\u0003\u0011\u0003\u0011\u0005\u0011\u0238\n\u0011\u0003",
      "\u0011\u0003\u0011\u0007\u0011\u023c\n\u0011\f\u0011\u000e\u0011\u023f",
      "\u000b\u0011\u0003\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0014",
      "\u0005\u0014\u0246\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0005",
      "\u0014\u024b\n\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014",
      "\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014",
      "\u0003\u0014\u0005\u0014\u0258\n\u0014\u0003\u0015\u0003\u0015\u0003",
      "\u0015\u0003\u0015\u0003\u0015\u0005\u0015\u025f\n\u0015\u0003\u0015",
      "\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015",
      "\u0003\u0015\u0003\u0015\u0003\u0015\u0005\u0015\u026b\n\u0015\u0003",
      "\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0003",
      "\u0015\u0003\u0015\u0005\u0015\u0275\n\u0015\u0003\u0016\u0003\u0016",
      "\u0003\u0017\u0005\u0017\u027a\n\u0017\u0003\u0017\u0003\u0017\u0005",
      "\u0017\u027e\n\u0017\u0003\u0017\u0003\u0017\u0003\u0017\u0003\u0017",
      "\u0003\u0017\u0005\u0017\u0285\n\u0017\u0003\u0017\u0005\u0017\u0288",
      "\n\u0017\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0019",
      "\u0003\u0019\u0005\u0019\u0290\n\u0019\u0003\u001a\u0003\u001a\u0005",
      "\u001a\u0294\n\u001a\u0003\u001a\u0005\u001a\u0297\n\u001a\u0003\u001b",
      "\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0005\u001b\u029e\n",
      "\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0003\u001b\u0005",
      "\u001b\u02a5\n\u001b\u0007\u001b\u02a7\n\u001b\f\u001b\u000e\u001b\u02aa",
      "\u000b\u001b\u0003\u001c\u0003\u001c\u0005\u001c\u02ae\n\u001c\u0003",
      "\u001c\u0003\u001c\u0005\u001c\u02b2\n\u001c\u0003\u001d\u0005\u001d",
      "\u02b5\n\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0005\u001d\u02ba",
      "\n\u001d\u0003\u001d\u0003\u001d\u0003\u001e\u0003\u001e\u0003\u001e",
      "\u0003\u001e\u0003\u001e\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f",
      "\u0003\u001f\u0003\u001f\u0005\u001f\u02c9\n\u001f\u0003 \u0003 \u0003",
      " \u0007 \u02ce\n \f \u000e \u02d1\u000b \u0003!\u0003!\u0003!\u0007",
      "!\u02d6\n!\f!\u000e!\u02d9\u000b!\u0003\"\u0003\"\u0003\"\u0007\"\u02de",
      "\n\"\f\"\u000e\"\u02e1\u000b\"\u0003#\u0003#\u0003#\u0003#\u0007#\u02e7",
      "\n#\f#\u000e#\u02ea\u000b#\u0003$\u0003$\u0003$\u0003$\u0005$\u02f0",
      "\n$\u0003%\u0003%\u0003%\u0007%\u02f5\n%\f%\u000e%\u02f8\u000b%\u0003",
      "&\u0003&\u0003&\u0007&\u02fd\n&\f&\u000e&\u0300\u000b&\u0003\'\u0003",
      "\'\u0003\'\u0007\'\u0305\n\'\f\'\u000e\'\u0308\u000b\'\u0003(\u0003",
      "(\u0003(\u0007(\u030d\n(\f(\u000e(\u0310\u000b(\u0003)\u0003)\u0003",
      ")\u0007)\u0315\n)\f)\u000e)\u0318\u000b)\u0003*\u0003*\u0003*\u0007",
      "*\u031d\n*\f*\u000e*\u0320\u000b*\u0003+\u0003+\u0003+\u0007+\u0325",
      "\n+\f+\u000e+\u0328\u000b+\u0003,\u0003,\u0003,\u0003,\u0003,\u0003",
      ",\u0005,\u0330\n,\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0005-\u0338",
      "\n-\u0003.\u0003.\u0003/\u0003/\u0003/\u0007/\u033f\n/\f/\u000e/\u0342",
      "\u000b/\u00030\u00030\u00031\u00031\u00051\u0348\n1\u00031\u00031\u0003",
      "1\u00031\u00031\u00031\u00051\u0350\n1\u00031\u00051\u0353\n1\u0003",
      "2\u00052\u0356\n2\u00032\u00032\u00032\u00032\u00052\u035c\n2\u0003",
      "2\u00032\u00032\u00033\u00053\u0362\n3\u00033\u00033\u00034\u00034\u0005",
      "4\u0368\n4\u00034\u00034\u00035\u00065\u036d\n5\r5\u000e5\u036e\u0003",
      "6\u00036\u00036\u00036\u00036\u00036\u00036\u00056\u0378\n6\u00036\u0003",
      "6\u00036\u00036\u00036\u00036\u00056\u0380\n6\u00037\u00037\u00057\u0384",
      "\n7\u00037\u00037\u00037\u00037\u00037\u00057\u038b\n7\u00057\u038d",
      "\n7\u00038\u00038\u00038\u00038\u00038\u00038\u00038\u00038\u00038\u0003",
      "8\u00038\u00038\u00038\u00038\u00038\u00038\u00038\u00038\u00058\u03a1",
      "\n8\u00038\u00038\u00058\u03a5\n8\u00038\u00038\u00038\u00038\u0005",
      "8\u03ab\n8\u00038\u00038\u00038\u00058\u03b0\n8\u00039\u00039\u0005",
      "9\u03b4\n9\u0003:\u0005:\u03b7\n:\u0003:\u0003:\u0003:\u0003;\u0003",
      ";\u0005;\u03be\n;\u0003<\u0003<\u0003<\u0003<\u0003<\u0005<\u03c5\n",
      "<\u0003<\u0003<\u0005<\u03c9\n<\u0003<\u0003<\u0003=\u0003=\u0003>\u0006",
      ">\u03d0\n>\r>\u000e>\u03d1\u0003?\u0003?\u0003?\u0003?\u0003?\u0003",
      "?\u0003?\u0003?\u0003?\u0005?\u03dd\n?\u0003@\u0003@\u0003@\u0003@\u0003",
      "@\u0003@\u0003@\u0003@\u0005@\u03e7\n@\u0003A\u0003A\u0003A\u0005A\u03ec",
      "\nA\u0003A\u0003A\u0003A\u0003A\u0003B\u0005B\u03f3\nB\u0003B\u0005",
      "B\u03f6\nB\u0003B\u0003B\u0003B\u0005B\u03fb\nB\u0003B\u0003B\u0003",
      "B\u0005B\u0400\nB\u0003C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003",
      "C\u0003D\u0003D\u0003E\u0003E\u0003E\u0003F\u0003F\u0003F\u0003F\u0003",
      "F\u0003F\u0005F\u0415\nF\u0003G\u0006G\u0418\nG\rG\u000eG\u0419\u0003",
      "G\u0005G\u041d\nG\u0003H\u0003H\u0003I\u0003I\u0003J\u0003J\u0003K\u0003",
      "K\u0003K\u0005K\u0428\nK\u0003L\u0003L\u0003L\u0003L\u0005L\u042e\n",
      "L\u0003M\u0006M\u0431\nM\rM\u000eM\u0432\u0003M\u0005M\u0436\nM\u0003",
      "N\u0006N\u0439\nN\rN\u000eN\u043a\u0003N\u0005N\u043e\nN\u0003O\u0003",
      "O\u0003P\u0003P\u0003Q\u0005Q\u0445\nQ\u0003Q\u0003Q\u0003Q\u0003Q\u0003",
      "Q\u0003Q\u0003Q\u0005Q\u044e\nQ\u0003Q\u0006Q\u0451\nQ\rQ\u000eQ\u0452",
      "\u0003Q\u0005Q\u0456\nQ\u0003Q\u0003Q\u0005Q\u045a\nQ\u0003Q\u0003Q",
      "\u0005Q\u045e\nQ\u0003Q\u0003Q\u0005Q\u0462\nQ\u0003Q\u0003Q\u0003Q",
      "\u0005Q\u0467\nQ\u0003Q\u0007Q\u046a\nQ\fQ\u000eQ\u046d\u000bQ\u0003",
      "Q\u0003Q\u0003Q\u0005Q\u0472\nQ\u0003Q\u0003Q\u0003Q\u0003Q\u0005Q\u0478",
      "\nQ\u0003R\u0003R\u0003R\u0003R\u0005R\u047e\nR\u0003S\u0003S\u0003",
      "S\u0003S\u0005S\u0484\nS\u0003S\u0003S\u0003T\u0003T\u0005T\u048a\n",
      "T\u0003T\u0005T\u048d\nT\u0003T\u0003T\u0003T\u0003T\u0005T\u0493\n",
      "T\u0003T\u0003T\u0005T\u0497\nT\u0003T\u0003T\u0005T\u049b\nT\u0003",
      "T\u0005T\u049e\nT\u0003U\u0003U\u0003V\u0003V\u0003V\u0003V\u0005V\u04a6",
      "\nV\u0005V\u04a8\nV\u0003V\u0003V\u0003W\u0003W\u0005W\u04ae\nW\u0003",
      "W\u0005W\u04b1\nW\u0003W\u0005W\u04b4\nW\u0003W\u0005W\u04b7\nW\u0003",
      "X\u0003X\u0005X\u04bb\nX\u0003X\u0003X\u0005X\u04bf\nX\u0003X\u0003",
      "X\u0003Y\u0003Y\u0005Y\u04c5\nY\u0003Z\u0003Z\u0003Z\u0003[\u0003[\u0003",
      "[\u0007[\u04cd\n[\f[\u000e[\u04d0\u000b[\u0003\\\u0003\\\u0003\\\u0005",
      "\\\u04d5\n\\\u0003]\u0003]\u0003^\u0003^\u0005^\u04db\n^\u0003_\u0003",
      "_\u0003`\u0005`\u04e0\n`\u0003`\u0003`\u0003`\u0005`\u04e5\n`\u0003",
      "`\u0003`\u0005`\u04e9\n`\u0003`\u0003`\u0003a\u0003a\u0003b\u0003b\u0003",
      "b\u0003b\u0003b\u0003b\u0003c\u0005c\u04f6\nc\u0003c\u0003c\u0003d\u0003",
      "d\u0005d\u04fc\nd\u0003d\u0003d\u0005d\u0500\nd\u0003d\u0003d\u0003",
      "d\u0003e\u0005e\u0506\ne\u0003e\u0003e\u0003e\u0005e\u050b\ne\u0003",
      "e\u0003e\u0003e\u0003f\u0003f\u0003f\u0003f\u0003f\u0003f\u0003g\u0003",
      "g\u0003g\u0003g\u0005g\u051a\ng\u0003g\u0003g\u0005g\u051e\ng\u0003",
      "h\u0006h\u0521\nh\rh\u000eh\u0522\u0003i\u0003i\u0003i\u0005i\u0528",
      "\ni\u0003i\u0003i\u0003i\u0005i\u052d\ni\u0003j\u0003j\u0003j\u0003",
      "j\u0005j\u0533\nj\u0003j\u0005j\u0536\nj\u0003j\u0003j\u0003k\u0003",
      "k\u0003k\u0007k\u053d\nk\fk\u000ek\u0540\u000bk\u0003k\u0005k\u0543",
      "\nk\u0003l\u0003l\u0003l\u0005l\u0548\nl\u0003l\u0003l\u0005l\u054c",
      "\nl\u0003m\u0003m\u0003n\u0003n\u0005n\u0552\nn\u0003n\u0003n\u0003",
      "o\u0006o\u0557\no\ro\u000eo\u0558\u0003p\u0003p\u0003p\u0003p\u0003",
      "p\u0003p\u0003p\u0003p\u0003p\u0003p\u0003p\u0003p\u0003p\u0006p\u0568",
      "\np\rp\u000ep\u0569\u0005p\u056c\np\u0003q\u0003q\u0003q\u0007q\u0571",
      "\nq\fq\u000eq\u0574\u000bq\u0003r\u0003r\u0005r\u0578\nr\u0003s\u0003",
      "s\u0003s\u0003s\u0003s\u0005s\u057f\ns\u0003t\u0003t\u0005t\u0583\n",
      "t\u0007t\u0585\nt\ft\u000et\u0588\u000bt\u0003t\u0003t\u0003u\u0003",
      "u\u0003u\u0005u\u058f\nu\u0003u\u0003u\u0003u\u0003u\u0005u\u0595\n",
      "u\u0003u\u0003u\u0003u\u0003u\u0005u\u059b\nu\u0003u\u0003u\u0005u\u059f",
      "\nu\u0005u\u05a1\nu\u0007u\u05a3\nu\fu\u000eu\u05a6\u000bu\u0003v\u0003",
      "v\u0005v\u05aa\nv\u0003v\u0003v\u0005v\u05ae\nv\u0003v\u0005v\u05b1",
      "\nv\u0003v\u0005v\u05b4\nv\u0003v\u0005v\u05b7\nv\u0003w\u0003w\u0003",
      "w\u0005w\u05bc\nw\u0003x\u0003x\u0005x\u05c0\nx\u0003x\u0005x\u05c3",
      "\nx\u0003x\u0003x\u0005x\u05c7\nx\u0003x\u0005x\u05ca\nx\u0005x\u05cc",
      "\nx\u0003y\u0006y\u05cf\ny\ry\u000ey\u05d0\u0003z\u0003z\u0003{\u0003",
      "{\u0003|\u0005|\u05d8\n|\u0003|\u0003|\u0003}\u0003}\u0005}\u05de\n",
      "}\u0003~\u0003~\u0005~\u05e2\n~\u0003~\u0003~\u0003~\u0003~\u0005~\u05e8",
      "\n~\u0003\u007f\u0003\u007f\u0006\u007f\u05ec\n\u007f\r\u007f\u000e",
      "\u007f\u05ed\u0003\u007f\u0005\u007f\u05f1\n\u007f\u0005\u007f\u05f3",
      "\n\u007f\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0080\u0005\u0080",
      "\u05f9\n\u0080\u0003\u0080\u0003\u0080\u0005\u0080\u05fd\n\u0080\u0003",
      "\u0080\u0003\u0080\u0003\u0080\u0003\u0080\u0005\u0080\u0603\n\u0080",
      "\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0080\u0003\u0080\u0005\u0080",
      "\u060a\n\u0080\u0003\u0080\u0003\u0080\u0005\u0080\u060e\n\u0080\u0005",
      "\u0080\u0610\n\u0080\u0007\u0080\u0612\n\u0080\f\u0080\u000e\u0080\u0615",
      "\u000b\u0080\u0003\u0081\u0007\u0081\u0618\n\u0081\f\u0081\u000e\u0081",
      "\u061b\u000b\u0081\u0003\u0081\u0003\u0081\u0003\u0082\u0003\u0082\u0003",
      "\u0082\u0003\u0082\u0003\u0082\u0003\u0082\u0003\u0082\u0005\u0082\u0626",
      "\n\u0082\u0003\u0082\u0003\u0082\u0005\u0082\u062a\n\u0082\u0005\u0082",
      "\u062c\n\u0082\u0007\u0082\u062e\n\u0082\f\u0082\u000e\u0082\u0631\u000b",
      "\u0082\u0003\u0083\u0003\u0083\u0005\u0083\u0635\n\u0083\u0003\u0083",
      "\u0005\u0083\u0638\n\u0083\u0003\u0084\u0003\u0084\u0003\u0084\u0007",
      "\u0084\u063d\n\u0084\f\u0084\u000e\u0084\u0640\u000b\u0084\u0003\u0085",
      "\u0005\u0085\u0643\n\u0085\u0003\u0085\u0003\u0085\u0003\u0085\u0005",
      "\u0085\u0648\n\u0085\u0005\u0085\u064a\n\u0085\u0003\u0085\u0003\u0085",
      "\u0005\u0085\u064e\n\u0085\u0003\u0086\u0005\u0086\u0651\n\u0086\u0003",
      "\u0086\u0005\u0086\u0654\n\u0086\u0003\u0086\u0003\u0086\u0005\u0086",
      "\u0658\n\u0086\u0003\u0086\u0003\u0086\u0003\u0087\u0005\u0087\u065d",
      "\n\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0003\u0087",
      "\u0005\u0087\u0664\n\u0087\u0003\u0088\u0003\u0088\u0003\u0088\u0003",
      "\u0088\u0003\u0088\u0005\u0088\u066b\n\u0088\u0003\u0089\u0003\u0089",
      "\u0003\u0089\u0005\u0089\u0670\n\u0089\u0003\u008a\u0003\u008a\u0005",
      "\u008a\u0674\n\u008a\u0003\u008b\u0003\u008b\u0005\u008b\u0678\n\u008b",
      "\u0003\u008b\u0003\u008b\u0003\u008b\u0005\u008b\u067d\n\u008b\u0007",
      "\u008b\u067f\n\u008b\f\u008b\u000e\u008b\u0682\u000b\u008b\u0003\u008c",
      "\u0003\u008c\u0003\u008c\u0005\u008c\u0687\n\u008c\u0005\u008c\u0689",
      "\n\u008c\u0003\u008c\u0003\u008c\u0003\u008d\u0003\u008d\u0005\u008d",
      "\u068f\n\u008d\u0003\u008e\u0003\u008e\u0003\u008e\u0005\u008e\u0694",
      "\n\u008e\u0003\u008e\u0003\u008e\u0003\u008f\u0003\u008f\u0005\u008f",
      "\u069a\n\u008f\u0003\u008f\u0003\u008f\u0005\u008f\u069e\n\u008f\u0005",
      "\u008f\u06a0\n\u008f\u0003\u008f\u0005\u008f\u06a3\n\u008f\u0003\u008f",
      "\u0003\u008f\u0005\u008f\u06a7\n\u008f\u0003\u008f\u0003\u008f\u0005",
      "\u008f\u06ab\n\u008f\u0005\u008f\u06ad\n\u008f\u0005\u008f\u06af\n\u008f",
      "\u0003\u0090\u0005\u0090\u06b2\n\u0090\u0003\u0090\u0003\u0090\u0003",
      "\u0091\u0003\u0091\u0003\u0092\u0003\u0092\u0003\u0093\u0003\u0093\u0003",
      "\u0093\u0003\u0093\u0006\u0093\u06be\n\u0093\r\u0093\u000e\u0093\u06bf",
      "\u0003\u0094\u0005\u0094\u06c3\n\u0094\u0003\u0094\u0005\u0094\u06c6",
      "\n\u0094\u0003\u0094\u0005\u0094\u06c9\n\u0094\u0003\u0094\u0003\u0094",
      "\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0005\u0094",
      "\u06d2\n\u0094\u0003\u0095\u0003\u0095\u0003\u0095\u0007\u0095\u06d7",
      "\n\u0095\f\u0095\u000e\u0095\u06da\u000b\u0095\u0003\u0096\u0003\u0096",
      "\u0005\u0096\u06de\n\u0096\u0003\u0096\u0005\u0096\u06e1\n\u0096\u0003",
      "\u0096\u0005\u0096\u06e4\n\u0096\u0005\u0096\u06e6\n\u0096\u0003\u0096",
      "\u0005\u0096\u06e9\n\u0096\u0003\u0096\u0005\u0096\u06ec\n\u0096\u0003",
      "\u0096\u0003\u0096\u0005\u0096\u06f0\n\u0096\u0003\u0097\u0006\u0097",
      "\u06f3\n\u0097\r\u0097\u000e\u0097\u06f4\u0003\u0098\u0003\u0098\u0003",
      "\u0099\u0003\u0099\u0003\u0099\u0003\u0099\u0003\u009a\u0003\u009a\u0003",
      "\u009a\u0003\u009b\u0003\u009b\u0005\u009b\u0702\n\u009b\u0003\u009b",
      "\u0003\u009b\u0003\u009b\u0005\u009b\u0707\n\u009b\u0007\u009b\u0709",
      "\n\u009b\f\u009b\u000e\u009b\u070c\u000b\u009b\u0003\u009c\u0005\u009c",
      "\u070f\n\u009c\u0003\u009c\u0003\u009c\u0003\u009c\u0005\u009c\u0714",
      "\n\u009c\u0003\u009c\u0003\u009c\u0003\u009c\u0005\u009c\u0719\n\u009c",
      "\u0003\u009c\u0003\u009c\u0005\u009c\u071d\n\u009c\u0003\u009d\u0005",
      "\u009d\u0720\n\u009d\u0003\u009d\u0003\u009d\u0005\u009d\u0724\n\u009d",
      "\u0003\u009e\u0003\u009e\u0003\u009f\u0003\u009f\u0003\u00a0\u0003\u00a0",
      "\u0003\u00a0\u0003\u00a1\u0003\u00a1\u0005\u00a1\u072f\n\u00a1\u0003",
      "\u00a2\u0003\u00a2\u0005\u00a2\u0733\n\u00a2\u0003\u00a3\u0003\u00a3",
      "\u0003\u00a3\u0003\u00a4\u0003\u00a4\u0005\u00a4\u073a\n\u00a4\u0003",
      "\u00a4\u0003\u00a4\u0003\u00a4\u0005\u00a4\u073f\n\u00a4\u0007\u00a4",
      "\u0741\n\u00a4\f\u00a4\u000e\u00a4\u0744\u000b\u00a4\u0003\u00a5\u0003",
      "\u00a5\u0003\u00a5\u0005\u00a5\u0749\n\u00a5\u0003\u00a5\u0003\u00a5",
      "\u0005\u00a5\u074d\n\u00a5\u0003\u00a6\u0003\u00a6\u0005\u00a6\u0751",
      "\n\u00a6\u0003\u00a7\u0003\u00a7\u0003\u00a7\u0003\u00a8\u0003\u00a8",
      "\u0003\u00a8\u0003\u00a8\u0005\u00a8\u075a\n\u00a8\u0003\u00a9\u0003",
      "\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00a9\u0003\u00aa\u0003",
      "\u00aa\u0003\u00aa\u0007\u00aa\u0765\n\u00aa\f\u00aa\u000e\u00aa\u0768",
      "\u000b\u00aa\u0003\u00ab\u0003\u00ab\u0005\u00ab\u076c\n\u00ab\u0003",
      "\u00ac\u0003\u00ac\u0003\u00ac\u0003\u00ac\u0003\u00ac\u0005\u00ac\u0773",
      "\n\u00ac\u0003\u00ac\u0003\u00ac\u0005\u00ac\u0777\n\u00ac\u0003\u00ac",
      "\u0005\u00ac\u077a\n\u00ac\u0003\u00ac\u0005\u00ac\u077d\n\u00ac\u0003",
      "\u00ac\u0005\u00ac\u0780\n\u00ac\u0003\u00ac\u0003\u00ac\u0005\u00ac",
      "\u0784\n\u00ac\u0003\u00ad\u0003\u00ad\u0003\u00ad\u0005\u00ad\u0789",
      "\n\u00ad\u0003\u00ad\u0003\u00ad\u0003\u00ae\u0003\u00ae\u0003\u00ae",
      "\u0005\u00ae\u0790\n\u00ae\u0003\u00ae\u0003\u00ae\u0005\u00ae\u0794",
      "\n\u00ae\u0003\u00ae\u0003\u00ae\u0005\u00ae\u0798\n\u00ae\u0003\u00af",
      "\u0003\u00af\u0003\u00b0\u0003\u00b0\u0005\u00b0\u079e\n\u00b0\u0003",
      "\u00b0\u0003\u00b0\u0003\u00b0\u0005\u00b0\u07a3\n\u00b0\u0007\u00b0",
      "\u07a5\n\u00b0\f\u00b0\u000e\u00b0\u07a8\u000b\u00b0\u0003\u00b1\u0003",
      "\u00b1\u0003\u00b1\u0005\u00b1\u07ad\n\u00b1\u0003\u00b2\u0003\u00b2",
      "\u0003\u00b2\u0003\u00b2\u0005\u00b2\u07b3\n\u00b2\u0003\u00b2\u0005",
      "\u00b2\u07b6\n\u00b2\u0003\u00b3\u0005\u00b3\u07b9\n\u00b3\u0003\u00b3",
      "\u0003\u00b3\u0003\u00b3\u0003\u00b4\u0003\u00b4\u0003\u00b4\u0003\u00b4",
      "\u0003\u00b4\u0003\u00b5\u0003\u00b5\u0003\u00b5\u0003\u00b5\u0003\u00b6",
      "\u0003\u00b6\u0005\u00b6\u07c9\n\u00b6\u0003\u00b6\u0003\u00b6\u0003",
      "\u00b6\u0003\u00b7\u0006\u00b7\u07cf\n\u00b7\r\u00b7\u000e\u00b7\u07d0",
      "\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8\u0003\u00b8",
      "\u0003\u00b9\u0005\u00b9\u07da\n\u00b9\u0003\u00b9\u0003\u00b9\u0003",
      "\u00b9\u0005\u00b9\u07df\n\u00b9\u0003\u00b9\u0005\u00b9\u07e2\n\u00b9",
      "\u0003\u00ba\u0003\u00ba\u0005\u00ba\u07e6\n\u00ba\u0003\u00bb\u0003",
      "\u00bb\u0005\u00bb\u07ea\n\u00bb\u0003\u00bc\u0003\u00bc\u0003\u00bc",
      "\u0005\u00bc\u07ef\n\u00bc\u0003\u00bc\u0003\u00bc\u0003\u00bd\u0003",
      "\u00bd\u0005\u00bd\u07f5\n\u00bd\u0003\u00bd\u0003\u00bd\u0003\u00bd",
      "\u0005\u00bd\u07fa\n\u00bd\u0007\u00bd\u07fc\n\u00bd\f\u00bd\u000e\u00bd",
      "\u07ff\u000b\u00bd\u0003\u00be\u0003\u00be\u0003\u00be\u0003\u00be\u0003",
      "\u00be\u0003\u00be\u0005\u00be\u0807\n\u00be\u0003\u00bf\u0003\u00bf",
      "\u0003\u00bf\u0005\u00bf\u080c\n\u00bf\u0003\u00bf\u0003\u00bf\u0003",
      "\u00bf\u0005\u00bf\u0811\n\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf",
      "\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf",
      "\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf",
      "\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf",
      "\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf",
      "\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf",
      "\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf",
      "\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0003\u00bf\u0005\u00bf\u083e\n",
      "\u00bf\u0003\u00c0\u0003\u00c0\u0003\u00c0\u0003\u0419\b\f 4\u00e8\u00fe",
      "\u0102\u00c1\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014\u0016\u0018",
      "\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|",
      "~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092\u0094",
      "\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa\u00ac",
      "\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2\u00c4",
      "\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da\u00dc",
      "\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2\u00f4",
      "\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108\u010a\u010c",
      "\u010e\u0110\u0112\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\u0002\u0019\u0004",
      "\u0002ccgg\u0006\u0002\u001a\u001a!!<<CC\u0004\u0002~~\u0083\u0083\u0003",
      "\u0002z{\u0004\u0002]_cf\u0004\u0002}}\u0084\u0084\u0003\u0002_a\u0003",
      "\u0002]^\u0004\u0002hivw\u0003\u0002tu\u0004\u0002ggjs\u0007\u0002&",
      "&11;;AAHH\u0005\u0002$$..RR\u0004\u000200>>\u0004\u0002??PP\u0004\u0002",
      "\u0017\u0017DD\u0003\u0002W\\\u0004\u0002ccxx\u0004\u0002\u0018\u0018",
      "TT\u0003\u0002\u001d\u001e\u0004\u0002((77\u0003\u00028:\u0003\u0002",
      "\u0003\t\u0002\u092d\u0002\u0181\u0003\u0002\u0002\u0002\u0004\u0191",
      "\u0003\u0002\u0002\u0002\u0006\u0195\u0003\u0002\u0002\u0002\b\u01a1",
      "\u0003\u0002\u0002\u0002\n\u01a3\u0003\u0002\u0002\u0002\f\u01a9\u0003",
      "\u0002\u0002\u0002\u000e\u01bf\u0003\u0002\u0002\u0002\u0010\u01c5\u0003",
      "\u0002\u0002\u0002\u0012\u01d1\u0003\u0002\u0002\u0002\u0014\u01d3\u0003",
      "\u0002\u0002\u0002\u0016\u01d5\u0003\u0002\u0002\u0002\u0018\u01e2\u0003",
      "\u0002\u0002\u0002\u001a\u01e9\u0003\u0002\u0002\u0002\u001c\u01ec\u0003",
      "\u0002\u0002\u0002\u001e\u01f1\u0003\u0002\u0002\u0002 \u0220\u0003",
      "\u0002\u0002\u0002\"\u0240\u0003\u0002\u0002\u0002$\u0242\u0003\u0002",
      "\u0002\u0002&\u0257\u0003\u0002\u0002\u0002(\u0274\u0003\u0002\u0002",
      "\u0002*\u0276\u0003\u0002\u0002\u0002,\u0279\u0003\u0002\u0002\u0002",
      ".\u0289\u0003\u0002\u0002\u00020\u028d\u0003\u0002\u0002\u00022\u0296",
      "\u0003\u0002\u0002\u00024\u0298\u0003\u0002\u0002\u00026\u02b1\u0003",
      "\u0002\u0002\u00028\u02b4\u0003\u0002\u0002\u0002:\u02bd\u0003\u0002",
      "\u0002\u0002<\u02c8\u0003\u0002\u0002\u0002>\u02ca\u0003\u0002\u0002",
      "\u0002@\u02d2\u0003\u0002\u0002\u0002B\u02da\u0003\u0002\u0002\u0002",
      "D\u02e2\u0003\u0002\u0002\u0002F\u02ef\u0003\u0002\u0002\u0002H\u02f1",
      "\u0003\u0002\u0002\u0002J\u02f9\u0003\u0002\u0002\u0002L\u0301\u0003",
      "\u0002\u0002\u0002N\u0309\u0003\u0002\u0002\u0002P\u0311\u0003\u0002",
      "\u0002\u0002R\u0319\u0003\u0002\u0002\u0002T\u0321\u0003\u0002\u0002",
      "\u0002V\u0329\u0003\u0002\u0002\u0002X\u0337\u0003\u0002\u0002\u0002",
      "Z\u0339\u0003\u0002\u0002\u0002\\\u033b\u0003\u0002\u0002\u0002^\u0343",
      "\u0003\u0002\u0002\u0002`\u0352\u0003\u0002\u0002\u0002b\u0355\u0003",
      "\u0002\u0002\u0002d\u0361\u0003\u0002\u0002\u0002f\u0365\u0003\u0002",
      "\u0002\u0002h\u036c\u0003\u0002\u0002\u0002j\u037f\u0003\u0002\u0002",
      "\u0002l\u038c\u0003\u0002\u0002\u0002n\u03af\u0003\u0002\u0002\u0002",
      "p\u03b3\u0003\u0002\u0002\u0002r\u03b6\u0003\u0002\u0002\u0002t\u03bd",
      "\u0003\u0002\u0002\u0002v\u03c8\u0003\u0002\u0002\u0002x\u03cc\u0003",
      "\u0002\u0002\u0002z\u03cf\u0003\u0002\u0002\u0002|\u03dc\u0003\u0002",
      "\u0002\u0002~\u03e6\u0003\u0002\u0002\u0002\u0080\u03e8\u0003\u0002",
      "\u0002\u0002\u0082\u03ff\u0003\u0002\u0002\u0002\u0084\u0401\u0003\u0002",
      "\u0002\u0002\u0086\u0409\u0003\u0002\u0002\u0002\u0088\u040b\u0003\u0002",
      "\u0002\u0002\u008a\u0414\u0003\u0002\u0002\u0002\u008c\u0417\u0003\u0002",
      "\u0002\u0002\u008e\u041e\u0003\u0002\u0002\u0002\u0090\u0420\u0003\u0002",
      "\u0002\u0002\u0092\u0422\u0003\u0002\u0002\u0002\u0094\u0427\u0003\u0002",
      "\u0002\u0002\u0096\u042d\u0003\u0002\u0002\u0002\u0098\u0430\u0003\u0002",
      "\u0002\u0002\u009a\u0438\u0003\u0002\u0002\u0002\u009c\u043f\u0003\u0002",
      "\u0002\u0002\u009e\u0441\u0003\u0002\u0002\u0002\u00a0\u0477\u0003\u0002",
      "\u0002\u0002\u00a2\u047d\u0003\u0002\u0002\u0002\u00a4\u047f\u0003\u0002",
      "\u0002\u0002\u00a6\u049d\u0003\u0002\u0002\u0002\u00a8\u049f\u0003\u0002",
      "\u0002\u0002\u00aa\u04a1\u0003\u0002\u0002\u0002\u00ac\u04ab\u0003\u0002",
      "\u0002\u0002\u00ae\u04b8\u0003\u0002\u0002\u0002\u00b0\u04c2\u0003\u0002",
      "\u0002\u0002\u00b2\u04c6\u0003\u0002\u0002\u0002\u00b4\u04c9\u0003\u0002",
      "\u0002\u0002\u00b6\u04d1\u0003\u0002\u0002\u0002\u00b8\u04d6\u0003\u0002",
      "\u0002\u0002\u00ba\u04da\u0003\u0002\u0002\u0002\u00bc\u04dc\u0003\u0002",
      "\u0002\u0002\u00be\u04df\u0003\u0002\u0002\u0002\u00c0\u04ec\u0003\u0002",
      "\u0002\u0002\u00c2\u04ee\u0003\u0002\u0002\u0002\u00c4\u04f5\u0003\u0002",
      "\u0002\u0002\u00c6\u04f9\u0003\u0002\u0002\u0002\u00c8\u0505\u0003\u0002",
      "\u0002\u0002\u00ca\u050f\u0003\u0002\u0002\u0002\u00cc\u0515\u0003\u0002",
      "\u0002\u0002\u00ce\u0520\u0003\u0002\u0002\u0002\u00d0\u052c\u0003\u0002",
      "\u0002\u0002\u00d2\u052e\u0003\u0002\u0002\u0002\u00d4\u0539\u0003\u0002",
      "\u0002\u0002\u00d6\u0547\u0003\u0002\u0002\u0002\u00d8\u054d\u0003\u0002",
      "\u0002\u0002\u00da\u054f\u0003\u0002\u0002\u0002\u00dc\u0556\u0003\u0002",
      "\u0002\u0002\u00de\u056b\u0003\u0002\u0002\u0002\u00e0\u056d\u0003\u0002",
      "\u0002\u0002\u00e2\u0575\u0003\u0002\u0002\u0002\u00e4\u057e\u0003\u0002",
      "\u0002\u0002\u00e6\u0586\u0003\u0002\u0002\u0002\u00e8\u0594\u0003\u0002",
      "\u0002\u0002\u00ea\u05a7\u0003\u0002\u0002\u0002\u00ec\u05b8\u0003\u0002",
      "\u0002\u0002\u00ee\u05cb\u0003\u0002\u0002\u0002\u00f0\u05ce\u0003\u0002",
      "\u0002\u0002\u00f2\u05d2\u0003\u0002\u0002\u0002\u00f4\u05d4\u0003\u0002",
      "\u0002\u0002\u00f6\u05d7\u0003\u0002\u0002\u0002\u00f8\u05db\u0003\u0002",
      "\u0002\u0002\u00fa\u05e7\u0003\u0002\u0002\u0002\u00fc\u05f2\u0003\u0002",
      "\u0002\u0002\u00fe\u0602\u0003\u0002\u0002\u0002\u0100\u0619\u0003\u0002",
      "\u0002\u0002\u0102\u061e\u0003\u0002\u0002\u0002\u0104\u0632\u0003\u0002",
      "\u0002\u0002\u0106\u0639\u0003\u0002\u0002\u0002\u0108\u0642\u0003\u0002",
      "\u0002\u0002\u010a\u0650\u0003\u0002\u0002\u0002\u010c\u0663\u0003\u0002",
      "\u0002\u0002\u010e\u066a\u0003\u0002\u0002\u0002\u0110\u066f\u0003\u0002",
      "\u0002\u0002\u0112\u0673\u0003\u0002\u0002\u0002\u0114\u0675\u0003\u0002",
      "\u0002\u0002\u0116\u0683\u0003\u0002\u0002\u0002\u0118\u068e\u0003\u0002",
      "\u0002\u0002\u011a\u0690\u0003\u0002\u0002\u0002\u011c\u06ae\u0003\u0002",
      "\u0002\u0002\u011e\u06b1\u0003\u0002\u0002\u0002\u0120\u06b5\u0003\u0002",
      "\u0002\u0002\u0122\u06b7\u0003\u0002\u0002\u0002\u0124\u06bd\u0003\u0002",
      "\u0002\u0002\u0126\u06d1\u0003\u0002\u0002\u0002\u0128\u06d3\u0003\u0002",
      "\u0002\u0002\u012a\u06ef\u0003\u0002\u0002\u0002\u012c\u06f2\u0003\u0002",
      "\u0002\u0002\u012e\u06f6\u0003\u0002\u0002\u0002\u0130\u06f8\u0003\u0002",
      "\u0002\u0002\u0132\u06fc\u0003\u0002\u0002\u0002\u0134\u06ff\u0003\u0002",
      "\u0002\u0002\u0136\u070e\u0003\u0002\u0002\u0002\u0138\u0723\u0003\u0002",
      "\u0002\u0002\u013a\u0725\u0003\u0002\u0002\u0002\u013c\u0727\u0003\u0002",
      "\u0002\u0002\u013e\u0729\u0003\u0002\u0002\u0002\u0140\u072c\u0003\u0002",
      "\u0002\u0002\u0142\u0730\u0003\u0002\u0002\u0002\u0144\u0734\u0003\u0002",
      "\u0002\u0002\u0146\u0737\u0003\u0002\u0002\u0002\u0148\u0745\u0003\u0002",
      "\u0002\u0002\u014a\u0750\u0003\u0002\u0002\u0002\u014c\u0752\u0003\u0002",
      "\u0002\u0002\u014e\u0755\u0003\u0002\u0002\u0002\u0150\u075b\u0003\u0002",
      "\u0002\u0002\u0152\u0761\u0003\u0002\u0002\u0002\u0154\u076b\u0003\u0002",
      "\u0002\u0002\u0156\u0776\u0003\u0002\u0002\u0002\u0158\u0785\u0003\u0002",
      "\u0002\u0002\u015a\u0797\u0003\u0002\u0002\u0002\u015c\u0799\u0003\u0002",
      "\u0002\u0002\u015e\u079b\u0003\u0002\u0002\u0002\u0160\u07ac\u0003\u0002",
      "\u0002\u0002\u0162\u07ae\u0003\u0002\u0002\u0002\u0164\u07b8\u0003\u0002",
      "\u0002\u0002\u0166\u07bd\u0003\u0002\u0002\u0002\u0168\u07c2\u0003\u0002",
      "\u0002\u0002\u016a\u07c6\u0003\u0002\u0002\u0002\u016c\u07ce\u0003\u0002",
      "\u0002\u0002\u016e\u07d2\u0003\u0002\u0002\u0002\u0170\u07e1\u0003\u0002",
      "\u0002\u0002\u0172\u07e3\u0003\u0002\u0002\u0002\u0174\u07e9\u0003\u0002",
      "\u0002\u0002\u0176\u07eb\u0003\u0002\u0002\u0002\u0178\u07f2\u0003\u0002",
      "\u0002\u0002\u017a\u0806\u0003\u0002\u0002\u0002\u017c\u083d\u0003\u0002",
      "\u0002\u0002\u017e\u083f\u0003\u0002\u0002\u0002\u0180\u0182\u0005z",
      ">\u0002\u0181\u0180\u0003\u0002\u0002\u0002\u0181\u0182\u0003\u0002",
      "\u0002\u0002\u0182\u0183\u0003\u0002\u0002\u0002\u0183\u0184\u0007\u0002",
      "\u0002\u0003\u0184\u0003\u0003\u0002\u0002\u0002\u0185\u0187\u0005\u017e",
      "\u00c0\u0002\u0186\u0185\u0003\u0002\u0002\u0002\u0187\u0188\u0003\u0002",
      "\u0002\u0002\u0188\u0186\u0003\u0002\u0002\u0002\u0188\u0189\u0003\u0002",
      "\u0002\u0002\u0189\u0192\u0003\u0002\u0002\u0002\u018a\u0192\u0007G",
      "\u0002\u0002\u018b\u018c\u0007W\u0002\u0002\u018c\u018d\u0005\\/\u0002",
      "\u018d\u018e\u0007X\u0002\u0002\u018e\u0192\u0003\u0002\u0002\u0002",
      "\u018f\u0192\u0005\u0006\u0004\u0002\u0190\u0192\u0005\u000e\b\u0002",
      "\u0191\u0186\u0003\u0002\u0002\u0002\u0191\u018a\u0003\u0002\u0002\u0002",
      "\u0191\u018b\u0003\u0002\u0002\u0002\u0191\u018f\u0003\u0002\u0002\u0002",
      "\u0191\u0190\u0003\u0002\u0002\u0002\u0192\u0005\u0003\u0002\u0002\u0002",
      "\u0193\u0196\u0005\b\u0005\u0002\u0194\u0196\u0005\n\u0006\u0002\u0195",
      "\u0193\u0003\u0002\u0002\u0002\u0195\u0194\u0003\u0002\u0002\u0002\u0196",
      "\u0007\u0003\u0002\u0002\u0002\u0197\u01a2\u0007\u0086\u0002\u0002\u0198",
      "\u01a2\u0005\u014c\u00a7\u0002\u0199\u01a2\u0005\u013e\u00a0\u0002\u019a",
      "\u01a2\u0005\u014e\u00a8\u0002\u019b\u019e\u0007e\u0002\u0002\u019c",
      "\u019f\u0005\u0118\u008d\u0002\u019d\u019f\u0005\u00a4S\u0002\u019e",
      "\u019c\u0003\u0002\u0002\u0002\u019e\u019d\u0003\u0002\u0002\u0002\u019f",
      "\u01a2\u0003\u0002\u0002\u0002\u01a0\u01a2\u0005\u015a\u00ae\u0002\u01a1",
      "\u0197\u0003\u0002\u0002\u0002\u01a1\u0198\u0003\u0002\u0002\u0002\u01a1",
      "\u0199\u0003\u0002\u0002\u0002\u01a1\u019a\u0003\u0002\u0002\u0002\u01a1",
      "\u019b\u0003\u0002\u0002\u0002\u01a1\u01a0\u0003\u0002\u0002\u0002\u01a2",
      "\t\u0003\u0002\u0002\u0002\u01a3\u01a5\u0005\f\u0007\u0002\u01a4\u01a6",
      "\u0007F\u0002\u0002\u01a5\u01a4\u0003\u0002\u0002\u0002\u01a5\u01a6",
      "\u0003\u0002\u0002\u0002\u01a6\u01a7\u0003\u0002\u0002\u0002\u01a7\u01a8",
      "\u0005\b\u0005\u0002\u01a8\u000b\u0003\u0002\u0002\u0002\u01a9\u01ad",
      "\b\u0007\u0001\u0002\u01aa\u01ae\u0005\u00a2R\u0002\u01ab\u01ae\u0005",
      "\u00ba^\u0002\u01ac\u01ae\u0005\u00a4S\u0002\u01ad\u01aa\u0003\u0002",
      "\u0002\u0002\u01ad\u01ab\u0003\u0002\u0002\u0002\u01ad\u01ac\u0003\u0002",
      "\u0002\u0002\u01ad\u01ae\u0003\u0002\u0002\u0002\u01ae\u01af\u0003\u0002",
      "\u0002\u0002\u01af\u01b0\u0007\u0081\u0002\u0002\u01b0\u01bc\u0003\u0002",
      "\u0002\u0002\u01b1\u01b7\f\u0003\u0002\u0002\u01b2\u01b8\u0007\u0086",
      "\u0002\u0002\u01b3\u01b5\u0007F\u0002\u0002\u01b4\u01b3\u0003\u0002",
      "\u0002\u0002\u01b4\u01b5\u0003\u0002\u0002\u0002\u01b5\u01b6\u0003\u0002",
      "\u0002\u0002\u01b6\u01b8\u0005\u0158\u00ad\u0002\u01b7\u01b2\u0003\u0002",
      "\u0002\u0002\u01b7\u01b4\u0003\u0002\u0002\u0002\u01b8\u01b9\u0003\u0002",
      "\u0002\u0002\u01b9\u01bb\u0007\u0081\u0002\u0002\u01ba\u01b1\u0003\u0002",
      "\u0002\u0002\u01bb\u01be\u0003\u0002\u0002\u0002\u01bc\u01ba\u0003\u0002",
      "\u0002\u0002\u01bc\u01bd\u0003\u0002\u0002\u0002\u01bd\r\u0003\u0002",
      "\u0002\u0002\u01be\u01bc\u0003\u0002\u0002\u0002\u01bf\u01c1\u0005\u0010",
      "\t\u0002\u01c0\u01c2\u0005\u001e\u0010\u0002\u01c1\u01c0\u0003\u0002",
      "\u0002\u0002\u01c1\u01c2\u0003\u0002\u0002\u0002\u01c2\u01c3\u0003\u0002",
      "\u0002\u0002\u01c3\u01c4\u0005f4\u0002\u01c4\u000f\u0003\u0002\u0002",
      "\u0002\u01c5\u01c7\u0007Y\u0002\u0002\u01c6\u01c8\u0005\u0012\n\u0002",
      "\u01c7\u01c6\u0003\u0002\u0002\u0002\u01c7\u01c8\u0003\u0002\u0002\u0002",
      "\u01c8\u01c9\u0003\u0002\u0002\u0002\u01c9\u01ca\u0007Z\u0002\u0002",
      "\u01ca\u0011\u0003\u0002\u0002\u0002\u01cb\u01d2\u0005\u0016\f\u0002",
      "\u01cc\u01cf\u0005\u0014\u000b\u0002\u01cd\u01ce\u0007|\u0002\u0002",
      "\u01ce\u01d0\u0005\u0016\f\u0002\u01cf\u01cd\u0003\u0002\u0002\u0002",
      "\u01cf\u01d0\u0003\u0002\u0002\u0002\u01d0\u01d2\u0003\u0002\u0002\u0002",
      "\u01d1\u01cb\u0003\u0002\u0002\u0002\u01d1\u01cc\u0003\u0002\u0002\u0002",
      "\u01d2\u0013\u0003\u0002\u0002\u0002\u01d3\u01d4\t\u0002\u0002\u0002",
      "\u01d4\u0015\u0003\u0002\u0002\u0002\u01d5\u01da\u0005\u0018\r\u0002",
      "\u01d6\u01d7\u0007|\u0002\u0002\u01d7\u01d9\u0005\u0018\r\u0002\u01d8",
      "\u01d6\u0003\u0002\u0002\u0002\u01d9\u01dc\u0003\u0002\u0002\u0002\u01da",
      "\u01d8\u0003\u0002\u0002\u0002\u01da\u01db\u0003\u0002\u0002\u0002\u01db",
      "\u01de\u0003\u0002\u0002\u0002\u01dc\u01da\u0003\u0002\u0002\u0002\u01dd",
      "\u01df\u0007\u0085\u0002\u0002\u01de\u01dd\u0003\u0002\u0002\u0002\u01de",
      "\u01df\u0003\u0002\u0002\u0002\u01df\u0017\u0003\u0002\u0002\u0002\u01e0",
      "\u01e3\u0005\u001a\u000e\u0002\u01e1\u01e3\u0005\u001c\u000f\u0002\u01e2",
      "\u01e0\u0003\u0002\u0002\u0002\u01e2\u01e1\u0003\u0002\u0002\u0002\u01e3",
      "\u0019\u0003\u0002\u0002\u0002\u01e4\u01e6\u0007c\u0002\u0002\u01e5",
      "\u01e4\u0003\u0002\u0002\u0002\u01e5\u01e6\u0003\u0002\u0002\u0002\u01e6",
      "\u01e7\u0003\u0002\u0002\u0002\u01e7\u01ea\u0007\u0086\u0002\u0002\u01e8",
      "\u01ea\u0007G\u0002\u0002\u01e9\u01e5\u0003\u0002\u0002\u0002\u01e9",
      "\u01e8\u0003\u0002\u0002\u0002\u01ea\u001b\u0003\u0002\u0002\u0002\u01eb",
      "\u01ed\u0007c\u0002\u0002\u01ec\u01eb\u0003\u0002\u0002\u0002\u01ec",
      "\u01ed\u0003\u0002\u0002\u0002\u01ed\u01ee\u0003\u0002\u0002\u0002\u01ee",
      "\u01ef\u0007\u0086\u0002\u0002\u01ef\u01f0\u0005\u010e\u0088\u0002\u01f0",
      "\u001d\u0003\u0002\u0002\u0002\u01f1\u01f3\u0007W\u0002\u0002\u01f2",
      "\u01f4\u0005\u0104\u0083\u0002\u01f3\u01f2\u0003\u0002\u0002\u0002\u01f3",
      "\u01f4\u0003\u0002\u0002\u0002\u01f4\u01f5\u0003\u0002\u0002\u0002\u01f5",
      "\u01f7\u0007X\u0002\u0002\u01f6\u01f8\u00071\u0002\u0002\u01f7\u01f6",
      "\u0003\u0002\u0002\u0002\u01f7\u01f8\u0003\u0002\u0002\u0002\u01f8\u01fa",
      "\u0003\u0002\u0002\u0002\u01f9\u01fb\u0005\u0174\u00bb\u0002\u01fa\u01f9",
      "\u0003\u0002\u0002\u0002\u01fa\u01fb\u0003\u0002\u0002\u0002\u01fb\u01fd",
      "\u0003\u0002\u0002\u0002\u01fc\u01fe\u0005\u00ceh\u0002\u01fd\u01fc",
      "\u0003\u0002\u0002\u0002\u01fd\u01fe\u0003\u0002\u0002\u0002\u01fe\u0200",
      "\u0003\u0002\u0002\u0002\u01ff\u0201\u0005\u00ecw\u0002\u0200\u01ff",
      "\u0003\u0002\u0002\u0002\u0200\u0201\u0003\u0002\u0002\u0002\u0201\u001f",
      "\u0003\u0002\u0002\u0002\u0202\u0203\b\u0011\u0001\u0002\u0203\u0221",
      "\u0005\u0004\u0003\u0002\u0204\u0207\u0005\u00a0Q\u0002\u0205\u0207",
      "\u0005\u0162\u00b2\u0002\u0206\u0204\u0003\u0002\u0002\u0002\u0206\u0205",
      "\u0003\u0002\u0002\u0002\u0207\u020e\u0003\u0002\u0002\u0002\u0208\u020a",
      "\u0007W\u0002\u0002\u0209\u020b\u0005$\u0013\u0002\u020a\u0209\u0003",
      "\u0002\u0002\u0002\u020a\u020b\u0003\u0002\u0002\u0002\u020b\u020c\u0003",
      "\u0002\u0002\u0002\u020c\u020f\u0007X\u0002\u0002\u020d\u020f\u0005",
      "\u0116\u008c\u0002\u020e\u0208\u0003\u0002\u0002\u0002\u020e\u020d\u0003",
      "\u0002\u0002\u0002\u020f\u0221\u0003\u0002\u0002\u0002\u0210\u0211\t",
      "\u0003\u0002\u0002\u0211\u0212\u0007h\u0002\u0002\u0212\u0213\u0005",
      "\u00f8}\u0002\u0213\u0214\u0007i\u0002\u0002\u0214\u0215\u0007W\u0002",
      "\u0002\u0215\u0216\u0005\\/\u0002\u0216\u0217\u0007X\u0002\u0002\u0217",
      "\u0221\u0003\u0002\u0002\u0002\u0218\u0219\u0005\"\u0012\u0002\u0219",
      "\u021c\u0007W\u0002\u0002\u021a\u021d\u0005\\/\u0002\u021b\u021d\u0005",
      "\u00f8}\u0002\u021c\u021a\u0003\u0002\u0002\u0002\u021c\u021b\u0003",
      "\u0002\u0002\u0002\u021d\u021e\u0003\u0002\u0002\u0002\u021e\u021f\u0007",
      "X\u0002\u0002\u021f\u0221\u0003\u0002\u0002\u0002\u0220\u0202\u0003",
      "\u0002\u0002\u0002\u0220\u0206\u0003\u0002\u0002\u0002\u0220\u0210\u0003",
      "\u0002\u0002\u0002\u0220\u0218\u0003\u0002\u0002\u0002\u0221\u023d\u0003",
      "\u0002\u0002\u0002\u0222\u0223\f\t\u0002\u0002\u0223\u0226\u0007Y\u0002",
      "\u0002\u0224\u0227\u0005\\/\u0002\u0225\u0227\u0005\u0116\u008c\u0002",
      "\u0226\u0224\u0003\u0002\u0002\u0002\u0226\u0225\u0003\u0002\u0002\u0002",
      "\u0227\u0228\u0003\u0002\u0002\u0002\u0228\u0229\u0007Z\u0002\u0002",
      "\u0229\u023c\u0003\u0002\u0002\u0002\u022a\u022b\f\b\u0002\u0002\u022b",
      "\u022d\u0007W\u0002\u0002\u022c\u022e\u0005$\u0013\u0002\u022d\u022c",
      "\u0003\u0002\u0002\u0002\u022d\u022e\u0003\u0002\u0002\u0002\u022e\u022f",
      "\u0003\u0002\u0002\u0002\u022f\u023c\u0007X\u0002\u0002\u0230\u0231",
      "\f\u0006\u0002\u0002\u0231\u0237\t\u0004\u0002\u0002\u0232\u0234\u0007",
      "F\u0002\u0002\u0233\u0232\u0003\u0002\u0002\u0002\u0233\u0234\u0003",
      "\u0002\u0002\u0002\u0234\u0235\u0003\u0002\u0002\u0002\u0235\u0238\u0005",
      "\u0006\u0004\u0002\u0236\u0238\u0005&\u0014\u0002\u0237\u0233\u0003",
      "\u0002\u0002\u0002\u0237\u0236\u0003\u0002\u0002\u0002\u0238\u023c\u0003",
      "\u0002\u0002\u0002\u0239\u023a\f\u0005\u0002\u0002\u023a\u023c\t\u0005",
      "\u0002\u0002\u023b\u0222\u0003\u0002\u0002\u0002\u023b\u022a\u0003\u0002",
      "\u0002\u0002\u023b\u0230\u0003\u0002\u0002\u0002\u023b\u0239\u0003\u0002",
      "\u0002\u0002\u023c\u023f\u0003\u0002\u0002\u0002\u023d\u023b\u0003\u0002",
      "\u0002\u0002\u023d\u023e\u0003\u0002\u0002\u0002\u023e!\u0003\u0002",
      "\u0002\u0002\u023f\u023d\u0003\u0002\u0002\u0002\u0240\u0241\u0007M",
      "\u0002\u0002\u0241#\u0003\u0002\u0002\u0002\u0242\u0243\u0005\u0114",
      "\u008b\u0002\u0243%\u0003\u0002\u0002\u0002\u0244\u0246\u0005\f\u0007",
      "\u0002\u0245\u0244\u0003\u0002\u0002\u0002\u0245\u0246\u0003\u0002\u0002",
      "\u0002\u0246\u024a\u0003\u0002\u0002\u0002\u0247\u0248\u0005\u00a2R",
      "\u0002\u0248\u0249\u0007\u0081\u0002\u0002\u0249\u024b\u0003\u0002\u0002",
      "\u0002\u024a\u0247\u0003\u0002\u0002\u0002\u024a\u024b\u0003\u0002\u0002",
      "\u0002\u024b\u024c\u0003\u0002\u0002\u0002\u024c\u024d\u0007e\u0002",
      "\u0002\u024d\u0258\u0005\u00a2R\u0002\u024e\u024f\u0005\f\u0007\u0002",
      "\u024f\u0250\u0007F\u0002\u0002\u0250\u0251\u0005\u0158\u00ad\u0002",
      "\u0251\u0252\u0007\u0081\u0002\u0002\u0252\u0253\u0007e\u0002\u0002",
      "\u0253\u0254\u0005\u00a2R\u0002\u0254\u0258\u0003\u0002\u0002\u0002",
      "\u0255\u0256\u0007e\u0002\u0002\u0256\u0258\u0005\u00a4S\u0002\u0257",
      "\u0245\u0003\u0002\u0002\u0002\u0257\u024e\u0003\u0002\u0002\u0002\u0257",
      "\u0255\u0003\u0002\u0002\u0002\u0258\'\u0003\u0002\u0002\u0002\u0259",
      "\u0275\u0005 \u0011\u0002\u025a\u025f\u0007z\u0002\u0002\u025b\u025f",
      "\u0007{\u0002\u0002\u025c\u025f\u0005*\u0016\u0002\u025d\u025f\u0007",
      "@\u0002\u0002\u025e\u025a\u0003\u0002\u0002\u0002\u025e\u025b\u0003",
      "\u0002\u0002\u0002\u025e\u025c\u0003\u0002\u0002\u0002\u025e\u025d\u0003",
      "\u0002\u0002\u0002\u025f\u0260\u0003\u0002\u0002\u0002\u0260\u0275\u0005",
      "(\u0015\u0002\u0261\u026a\u0007@\u0002\u0002\u0262\u0263\u0007W\u0002",
      "\u0002\u0263\u0264\u0005\u00f8}\u0002\u0264\u0265\u0007X\u0002\u0002",
      "\u0265\u026b\u0003\u0002\u0002\u0002\u0266\u0267\u0007\u0085\u0002\u0002",
      "\u0267\u0268\u0007W\u0002\u0002\u0268\u0269\u0007\u0086\u0002\u0002",
      "\u0269\u026b\u0007X\u0002\u0002\u026a\u0262\u0003\u0002\u0002\u0002",
      "\u026a\u0266\u0003\u0002\u0002\u0002\u026b\u0275\u0003\u0002\u0002\u0002",
      "\u026c\u026d\u0007\r\u0002\u0002\u026d\u026e\u0007W\u0002\u0002\u026e",
      "\u026f\u0005\u00f8}\u0002\u026f\u0270\u0007X\u0002\u0002\u0270\u0275",
      "\u0003\u0002\u0002\u0002\u0271\u0275\u0005:\u001e\u0002\u0272\u0275",
      "\u0005,\u0017\u0002\u0273\u0275\u00058\u001d\u0002\u0274\u0259\u0003",
      "\u0002\u0002\u0002\u0274\u025e\u0003\u0002\u0002\u0002\u0274\u0261\u0003",
      "\u0002\u0002\u0002\u0274\u026c\u0003\u0002\u0002\u0002\u0274\u0271\u0003",
      "\u0002\u0002\u0002\u0274\u0272\u0003\u0002\u0002\u0002\u0274\u0273\u0003",
      "\u0002\u0002\u0002\u0275)\u0003\u0002\u0002\u0002\u0276\u0277\t\u0006",
      "\u0002\u0002\u0277+\u0003\u0002\u0002\u0002\u0278\u027a\u0007\u0081",
      "\u0002\u0002\u0279\u0278\u0003\u0002\u0002\u0002\u0279\u027a\u0003\u0002",
      "\u0002\u0002\u027a\u027b\u0003\u0002\u0002\u0002\u027b\u027d\u00073",
      "\u0002\u0002\u027c\u027e\u0005.\u0018\u0002\u027d\u027c\u0003\u0002",
      "\u0002\u0002\u027d\u027e\u0003\u0002\u0002\u0002\u027e\u0284\u0003\u0002",
      "\u0002\u0002\u027f\u0285\u00050\u0019\u0002\u0280\u0281\u0007W\u0002",
      "\u0002\u0281\u0282\u0005\u00f8}\u0002\u0282\u0283\u0007X\u0002\u0002",
      "\u0283\u0285\u0003\u0002\u0002\u0002\u0284\u027f\u0003\u0002\u0002\u0002",
      "\u0284\u0280\u0003\u0002\u0002\u0002\u0285\u0287\u0003\u0002\u0002\u0002",
      "\u0286\u0288\u00056\u001c\u0002\u0287\u0286\u0003\u0002\u0002\u0002",
      "\u0287\u0288\u0003\u0002\u0002\u0002\u0288-\u0003\u0002\u0002\u0002",
      "\u0289\u028a\u0007W\u0002\u0002\u028a\u028b\u0005$\u0013\u0002\u028b",
      "\u028c\u0007X\u0002\u0002\u028c/\u0003\u0002\u0002\u0002\u028d\u028f",
      "\u0005\u0098M\u0002\u028e\u0290\u00052\u001a\u0002\u028f\u028e\u0003",
      "\u0002\u0002\u0002\u028f\u0290\u0003\u0002\u0002\u0002\u02901\u0003",
      "\u0002\u0002\u0002\u0291\u0293\u0005\u00eex\u0002\u0292\u0294\u0005",
      "2\u001a\u0002\u0293\u0292\u0003\u0002\u0002\u0002\u0293\u0294\u0003",
      "\u0002\u0002\u0002\u0294\u0297\u0003\u0002\u0002\u0002\u0295\u0297\u0005",
      "4\u001b\u0002\u0296\u0291\u0003\u0002\u0002\u0002\u0296\u0295\u0003",
      "\u0002\u0002\u0002\u02973\u0003\u0002\u0002\u0002\u0298\u0299\b\u001b",
      "\u0001\u0002\u0299\u029a\u0007Y\u0002\u0002\u029a\u029b\u0005\\/\u0002",
      "\u029b\u029d\u0007Z\u0002\u0002\u029c\u029e\u0005\u00ceh\u0002\u029d",
      "\u029c\u0003\u0002\u0002\u0002\u029d\u029e\u0003\u0002\u0002\u0002\u029e",
      "\u02a8\u0003\u0002\u0002\u0002\u029f\u02a0\f\u0003\u0002\u0002\u02a0",
      "\u02a1\u0007Y\u0002\u0002\u02a1\u02a2\u0005^0\u0002\u02a2\u02a4\u0007",
      "Z\u0002\u0002\u02a3\u02a5\u0005\u00ceh\u0002\u02a4\u02a3\u0003\u0002",
      "\u0002\u0002\u02a4\u02a5\u0003\u0002\u0002\u0002\u02a5\u02a7\u0003\u0002",
      "\u0002\u0002\u02a6\u029f\u0003\u0002\u0002\u0002\u02a7\u02aa\u0003\u0002",
      "\u0002\u0002\u02a8\u02a6\u0003\u0002\u0002\u0002\u02a8\u02a9\u0003\u0002",
      "\u0002\u0002\u02a95\u0003\u0002\u0002\u0002\u02aa\u02a8\u0003\u0002",
      "\u0002\u0002\u02ab\u02ad\u0007W\u0002\u0002\u02ac\u02ae\u0005$\u0013",
      "\u0002\u02ad\u02ac\u0003\u0002\u0002\u0002\u02ad\u02ae\u0003\u0002\u0002",
      "\u0002\u02ae\u02af\u0003\u0002\u0002\u0002\u02af\u02b2\u0007X\u0002",
      "\u0002\u02b0\u02b2\u0005\u0116\u008c\u0002\u02b1\u02ab\u0003\u0002\u0002",
      "\u0002\u02b1\u02b0\u0003\u0002\u0002\u0002\u02b27\u0003\u0002\u0002",
      "\u0002\u02b3\u02b5\u0007\u0081\u0002\u0002\u02b4\u02b3\u0003\u0002\u0002",
      "\u0002\u02b4\u02b5\u0003\u0002\u0002\u0002\u02b5\u02b6\u0003\u0002\u0002",
      "\u0002\u02b6\u02b9\u0007\u001e\u0002\u0002\u02b7\u02b8\u0007Y\u0002",
      "\u0002\u02b8\u02ba\u0007Z\u0002\u0002\u02b9\u02b7\u0003\u0002\u0002",
      "\u0002\u02b9\u02ba\u0003\u0002\u0002\u0002\u02ba\u02bb\u0003\u0002\u0002",
      "\u0002\u02bb\u02bc\u0005<\u001f\u0002\u02bc9\u0003\u0002\u0002\u0002",
      "\u02bd\u02be\u00074\u0002\u0002\u02be\u02bf\u0007W\u0002\u0002\u02bf",
      "\u02c0\u0005\\/\u0002\u02c0\u02c1\u0007X\u0002\u0002\u02c1;\u0003\u0002",
      "\u0002\u0002\u02c2\u02c9\u0005(\u0015\u0002\u02c3\u02c4\u0007W\u0002",
      "\u0002\u02c4\u02c5\u0005\u00f8}\u0002\u02c5\u02c6\u0007X\u0002\u0002",
      "\u02c6\u02c7\u0005<\u001f\u0002\u02c7\u02c9\u0003\u0002\u0002\u0002",
      "\u02c8\u02c2\u0003\u0002\u0002\u0002\u02c8\u02c3\u0003\u0002\u0002\u0002",
      "\u02c9=\u0003\u0002\u0002\u0002\u02ca\u02cf\u0005<\u001f\u0002\u02cb",
      "\u02cc\t\u0007\u0002\u0002\u02cc\u02ce\u0005<\u001f\u0002\u02cd\u02cb",
      "\u0003\u0002\u0002\u0002\u02ce\u02d1\u0003\u0002\u0002\u0002\u02cf\u02cd",
      "\u0003\u0002\u0002\u0002\u02cf\u02d0\u0003\u0002\u0002\u0002\u02d0?",
      "\u0003\u0002\u0002\u0002\u02d1\u02cf\u0003\u0002\u0002\u0002\u02d2\u02d7",
      "\u0005> \u0002\u02d3\u02d4\t\b\u0002\u0002\u02d4\u02d6\u0005> \u0002",
      "\u02d5\u02d3\u0003\u0002\u0002\u0002\u02d6\u02d9\u0003\u0002\u0002\u0002",
      "\u02d7\u02d5\u0003\u0002\u0002\u0002\u02d7\u02d8\u0003\u0002\u0002\u0002",
      "\u02d8A\u0003\u0002\u0002\u0002\u02d9\u02d7\u0003\u0002\u0002\u0002",
      "\u02da\u02df\u0005@!\u0002\u02db\u02dc\t\t\u0002\u0002\u02dc\u02de\u0005",
      "@!\u0002\u02dd\u02db\u0003\u0002\u0002\u0002\u02de\u02e1\u0003\u0002",
      "\u0002\u0002\u02df\u02dd\u0003\u0002\u0002\u0002\u02df\u02e0\u0003\u0002",
      "\u0002\u0002\u02e0C\u0003\u0002\u0002\u0002\u02e1\u02df\u0003\u0002",
      "\u0002\u0002\u02e2\u02e8\u0005B\"\u0002\u02e3\u02e4\u0005F$\u0002\u02e4",
      "\u02e5\u0005B\"\u0002\u02e5\u02e7\u0003\u0002\u0002\u0002\u02e6\u02e3",
      "\u0003\u0002\u0002\u0002\u02e7\u02ea\u0003\u0002\u0002\u0002\u02e8\u02e6",
      "\u0003\u0002\u0002\u0002\u02e8\u02e9\u0003\u0002\u0002\u0002\u02e9E",
      "\u0003\u0002\u0002\u0002\u02ea\u02e8\u0003\u0002\u0002\u0002\u02eb\u02ec",
      "\u0007i\u0002\u0002\u02ec\u02f0\u0007i\u0002\u0002\u02ed\u02ee\u0007",
      "h\u0002\u0002\u02ee\u02f0\u0007h\u0002\u0002\u02ef\u02eb\u0003\u0002",
      "\u0002\u0002\u02ef\u02ed\u0003\u0002\u0002\u0002\u02f0G\u0003\u0002",
      "\u0002\u0002\u02f1\u02f6\u0005D#\u0002\u02f2\u02f3\t\n\u0002\u0002\u02f3",
      "\u02f5\u0005D#\u0002\u02f4\u02f2\u0003\u0002\u0002\u0002\u02f5\u02f8",
      "\u0003\u0002\u0002\u0002\u02f6\u02f4\u0003\u0002\u0002\u0002\u02f6\u02f7",
      "\u0003\u0002\u0002\u0002\u02f7I\u0003\u0002\u0002\u0002\u02f8\u02f6",
      "\u0003\u0002\u0002\u0002\u02f9\u02fe\u0005H%\u0002\u02fa\u02fb\t\u000b",
      "\u0002\u0002\u02fb\u02fd\u0005H%\u0002\u02fc\u02fa\u0003\u0002\u0002",
      "\u0002\u02fd\u0300\u0003\u0002\u0002\u0002\u02fe\u02fc\u0003\u0002\u0002",
      "\u0002\u02fe\u02ff\u0003\u0002\u0002\u0002\u02ffK\u0003\u0002\u0002",
      "\u0002\u0300\u02fe\u0003\u0002\u0002\u0002\u0301\u0306\u0005J&\u0002",
      "\u0302\u0303\u0007c\u0002\u0002\u0303\u0305\u0005J&\u0002\u0304\u0302",
      "\u0003\u0002\u0002\u0002\u0305\u0308\u0003\u0002\u0002\u0002\u0306\u0304",
      "\u0003\u0002\u0002\u0002\u0306\u0307\u0003\u0002\u0002\u0002\u0307M",
      "\u0003\u0002\u0002\u0002\u0308\u0306\u0003\u0002\u0002\u0002\u0309\u030e",
      "\u0005L\'\u0002\u030a\u030b\u0007b\u0002\u0002\u030b\u030d\u0005L\'",
      "\u0002\u030c\u030a\u0003\u0002\u0002\u0002\u030d\u0310\u0003\u0002\u0002",
      "\u0002\u030e\u030c\u0003\u0002\u0002\u0002\u030e\u030f\u0003\u0002\u0002",
      "\u0002\u030fO\u0003\u0002\u0002\u0002\u0310\u030e\u0003\u0002\u0002",
      "\u0002\u0311\u0316\u0005N(\u0002\u0312\u0313\u0007d\u0002\u0002\u0313",
      "\u0315\u0005N(\u0002\u0314\u0312\u0003\u0002\u0002\u0002\u0315\u0318",
      "\u0003\u0002\u0002\u0002\u0316\u0314\u0003\u0002\u0002\u0002\u0316\u0317",
      "\u0003\u0002\u0002\u0002\u0317Q\u0003\u0002\u0002\u0002\u0318\u0316",
      "\u0003\u0002\u0002\u0002\u0319\u031e\u0005P)\u0002\u031a\u031b\u0007",
      "x\u0002\u0002\u031b\u031d\u0005P)\u0002\u031c\u031a\u0003\u0002\u0002",
      "\u0002\u031d\u0320\u0003\u0002\u0002\u0002\u031e\u031c\u0003\u0002\u0002",
      "\u0002\u031e\u031f\u0003\u0002\u0002\u0002\u031fS\u0003\u0002\u0002",
      "\u0002\u0320\u031e\u0003\u0002\u0002\u0002\u0321\u0326\u0005R*\u0002",
      "\u0322\u0323\u0007y\u0002\u0002\u0323\u0325\u0005R*\u0002\u0324\u0322",
      "\u0003\u0002\u0002\u0002\u0325\u0328\u0003\u0002\u0002\u0002\u0326\u0324",
      "\u0003\u0002\u0002\u0002\u0326\u0327\u0003\u0002\u0002\u0002\u0327U",
      "\u0003\u0002\u0002\u0002\u0328\u0326\u0003\u0002\u0002\u0002\u0329\u032f",
      "\u0005T+\u0002\u032a\u032b\u0007\u007f\u0002\u0002\u032b\u032c\u0005",
      "\\/\u0002\u032c\u032d\u0007\u0080\u0002\u0002\u032d\u032e\u0005X-\u0002",
      "\u032e\u0330\u0003\u0002\u0002\u0002\u032f\u032a\u0003\u0002\u0002\u0002",
      "\u032f\u0330\u0003\u0002\u0002\u0002\u0330W\u0003\u0002\u0002\u0002",
      "\u0331\u0338\u0005V,\u0002\u0332\u0333\u0005T+\u0002\u0333\u0334\u0005",
      "Z.\u0002\u0334\u0335\u0005\u0112\u008a\u0002\u0335\u0338\u0003\u0002",
      "\u0002\u0002\u0336\u0338\u0005\u0172\u00ba\u0002\u0337\u0331\u0003\u0002",
      "\u0002\u0002\u0337\u0332\u0003\u0002\u0002\u0002\u0337\u0336\u0003\u0002",
      "\u0002\u0002\u0338Y\u0003\u0002\u0002\u0002\u0339\u033a\t\f\u0002\u0002",
      "\u033a[\u0003\u0002\u0002\u0002\u033b\u0340\u0005X-\u0002\u033c\u033d",
      "\u0007|\u0002\u0002\u033d\u033f\u0005X-\u0002\u033e\u033c\u0003\u0002",
      "\u0002\u0002\u033f\u0342\u0003\u0002\u0002\u0002\u0340\u033e\u0003\u0002",
      "\u0002\u0002\u0340\u0341\u0003\u0002\u0002\u0002\u0341]\u0003\u0002",
      "\u0002\u0002\u0342\u0340\u0003\u0002\u0002\u0002\u0343\u0344\u0005V",
      ",\u0002\u0344_\u0003\u0002\u0002\u0002\u0345\u0353\u0005b2\u0002\u0346",
      "\u0348\u0005\u00ceh\u0002\u0347\u0346\u0003\u0002\u0002\u0002\u0347",
      "\u0348\u0003\u0002\u0002\u0002\u0348\u034f\u0003\u0002\u0002\u0002\u0349",
      "\u0350\u0005d3\u0002\u034a\u0350\u0005f4\u0002\u034b\u0350\u0005j6\u0002",
      "\u034c\u0350\u0005n8\u0002\u034d\u0350\u0005v<\u0002\u034e\u0350\u0005",
      "\u0168\u00b5\u0002\u034f\u0349\u0003\u0002\u0002\u0002\u034f\u034a\u0003",
      "\u0002\u0002\u0002\u034f\u034b\u0003\u0002\u0002\u0002\u034f\u034c\u0003",
      "\u0002\u0002\u0002\u034f\u034d\u0003\u0002\u0002\u0002\u034f\u034e\u0003",
      "\u0002\u0002\u0002\u0350\u0353\u0003\u0002\u0002\u0002\u0351\u0353\u0005",
      "x=\u0002\u0352\u0345\u0003\u0002\u0002\u0002\u0352\u0347\u0003\u0002",
      "\u0002\u0002\u0352\u0351\u0003\u0002\u0002\u0002\u0353a\u0003\u0002",
      "\u0002\u0002\u0354\u0356\u0005\u00ceh\u0002\u0355\u0354\u0003\u0002",
      "\u0002\u0002\u0355\u0356\u0003\u0002\u0002\u0002\u0356\u035b\u0003\u0002",
      "\u0002\u0002\u0357\u035c\u0007\u0086\u0002\u0002\u0358\u0359\u0007\u0012",
      "\u0002\u0002\u0359\u035c\u0005^0\u0002\u035a\u035c\u0007\u001d\u0002",
      "\u0002\u035b\u0357\u0003\u0002\u0002\u0002\u035b\u0358\u0003\u0002\u0002",
      "\u0002\u035b\u035a\u0003\u0002\u0002\u0002\u035c\u035d\u0003\u0002\u0002",
      "\u0002\u035d\u035e\u0007\u0080\u0002\u0002\u035e\u035f\u0005`1\u0002",
      "\u035fc\u0003\u0002\u0002\u0002\u0360\u0362\u0005\\/\u0002\u0361\u0360",
      "\u0003\u0002\u0002\u0002\u0361\u0362\u0003\u0002\u0002\u0002\u0362\u0363",
      "\u0003\u0002\u0002\u0002\u0363\u0364\u0007\u0082\u0002\u0002\u0364e",
      "\u0003\u0002\u0002\u0002\u0365\u0367\u0007[\u0002\u0002\u0366\u0368",
      "\u0005h5\u0002\u0367\u0366\u0003\u0002\u0002\u0002\u0367\u0368\u0003",
      "\u0002\u0002\u0002\u0368\u0369\u0003\u0002\u0002\u0002\u0369\u036a\u0007",
      "\\\u0002\u0002\u036ag\u0003\u0002\u0002\u0002\u036b\u036d\u0005`1\u0002",
      "\u036c\u036b\u0003\u0002\u0002\u0002\u036d\u036e\u0003\u0002\u0002\u0002",
      "\u036e\u036c\u0003\u0002\u0002\u0002\u036e\u036f\u0003\u0002\u0002\u0002",
      "\u036fi\u0003\u0002\u0002\u0002\u0370\u0371\u0007-\u0002\u0002\u0371",
      "\u0372\u0007W\u0002\u0002\u0372\u0373\u0005l7\u0002\u0373\u0374\u0007",
      "X\u0002\u0002\u0374\u0377\u0005`1\u0002\u0375\u0376\u0007\"\u0002\u0002",
      "\u0376\u0378\u0005`1\u0002\u0377\u0375\u0003\u0002\u0002\u0002\u0377",
      "\u0378\u0003\u0002\u0002\u0002\u0378\u0380\u0003\u0002\u0002\u0002\u0379",
      "\u037a\u0007E\u0002\u0002\u037a\u037b\u0007W\u0002\u0002\u037b\u037c",
      "\u0005l7\u0002\u037c\u037d\u0007X\u0002\u0002\u037d\u037e\u0005`1\u0002",
      "\u037e\u0380\u0003\u0002\u0002\u0002\u037f\u0370\u0003\u0002\u0002\u0002",
      "\u037f\u0379\u0003\u0002\u0002\u0002\u0380k\u0003\u0002\u0002\u0002",
      "\u0381\u038d\u0005\\/\u0002\u0382\u0384\u0005\u00ceh\u0002\u0383\u0382",
      "\u0003\u0002\u0002\u0002\u0383\u0384\u0003\u0002\u0002\u0002\u0384\u0385",
      "\u0003\u0002\u0002\u0002\u0385\u0386\u0005\u008cG\u0002\u0386\u038a",
      "\u0005\u00e4s\u0002\u0387\u0388\u0007g\u0002\u0002\u0388\u038b\u0005",
      "\u0112\u008a\u0002\u0389\u038b\u0005\u0116\u008c\u0002\u038a\u0387\u0003",
      "\u0002\u0002\u0002\u038a\u0389\u0003\u0002\u0002\u0002\u038b\u038d\u0003",
      "\u0002\u0002\u0002\u038c\u0381\u0003\u0002\u0002\u0002\u038c\u0383\u0003",
      "\u0002\u0002\u0002\u038dm\u0003\u0002\u0002\u0002\u038e\u038f\u0007",
      "V\u0002\u0002\u038f\u0390\u0007W\u0002\u0002\u0390\u0391\u0005l7\u0002",
      "\u0391\u0392\u0007X\u0002\u0002\u0392\u0393\u0005`1\u0002\u0393\u03b0",
      "\u0003\u0002\u0002\u0002\u0394\u0395\u0007\u001f\u0002\u0002\u0395\u0396",
      "\u0005`1\u0002\u0396\u0397\u0007V\u0002\u0002\u0397\u0398\u0007W\u0002",
      "\u0002\u0398\u0399\u0005\\/\u0002\u0399\u039a\u0007X\u0002\u0002\u039a",
      "\u039b\u0007\u0082\u0002\u0002\u039b\u03b0\u0003\u0002\u0002\u0002\u039c",
      "\u039d\u0007*\u0002\u0002\u039d\u03aa\u0007W\u0002\u0002\u039e\u03a0",
      "\u0005p9\u0002\u039f\u03a1\u0005l7\u0002\u03a0\u039f\u0003\u0002\u0002",
      "\u0002\u03a0\u03a1\u0003\u0002\u0002\u0002\u03a1\u03a2\u0003\u0002\u0002",
      "\u0002\u03a2\u03a4\u0007\u0082\u0002\u0002\u03a3\u03a5\u0005\\/\u0002",
      "\u03a4\u03a3\u0003\u0002\u0002\u0002\u03a4\u03a5\u0003\u0002\u0002\u0002",
      "\u03a5\u03ab\u0003\u0002\u0002\u0002\u03a6\u03a7\u0005r:\u0002\u03a7",
      "\u03a8\u0007\u0080\u0002\u0002\u03a8\u03a9\u0005t;\u0002\u03a9\u03ab",
      "\u0003\u0002\u0002\u0002\u03aa\u039e\u0003\u0002\u0002\u0002\u03aa\u03a6",
      "\u0003\u0002\u0002\u0002\u03ab\u03ac\u0003\u0002\u0002\u0002\u03ac\u03ad",
      "\u0007X\u0002\u0002\u03ad\u03ae\u0005`1\u0002\u03ae\u03b0\u0003\u0002",
      "\u0002\u0002\u03af\u038e\u0003\u0002\u0002\u0002\u03af\u0394\u0003\u0002",
      "\u0002\u0002\u03af\u039c\u0003\u0002\u0002\u0002\u03b0o\u0003\u0002",
      "\u0002\u0002\u03b1\u03b4\u0005d3\u0002\u03b2\u03b4\u0005\u0082B\u0002",
      "\u03b3\u03b1\u0003\u0002\u0002\u0002\u03b3\u03b2\u0003\u0002\u0002\u0002",
      "\u03b4q\u0003\u0002\u0002\u0002\u03b5\u03b7\u0005\u00ceh\u0002\u03b6",
      "\u03b5\u0003\u0002\u0002\u0002\u03b6\u03b7\u0003\u0002\u0002\u0002\u03b7",
      "\u03b8\u0003\u0002\u0002\u0002\u03b8\u03b9\u0005\u008cG\u0002\u03b9",
      "\u03ba\u0005\u00e4s\u0002\u03bas\u0003\u0002\u0002\u0002\u03bb\u03be",
      "\u0005\\/\u0002\u03bc\u03be\u0005\u0116\u008c\u0002\u03bd\u03bb\u0003",
      "\u0002\u0002\u0002\u03bd\u03bc\u0003\u0002\u0002\u0002\u03beu\u0003",
      "\u0002\u0002\u0002\u03bf\u03c9\u0007\u0011\u0002\u0002\u03c0\u03c9\u0007",
      "\u001b\u0002\u0002\u03c1\u03c4\u0007=\u0002\u0002\u03c2\u03c5\u0005",
      "\\/\u0002\u03c3\u03c5\u0005\u0116\u008c\u0002\u03c4\u03c2\u0003\u0002",
      "\u0002\u0002\u03c4\u03c3\u0003\u0002\u0002\u0002\u03c4\u03c5\u0003\u0002",
      "\u0002\u0002\u03c5\u03c9\u0003\u0002\u0002\u0002\u03c6\u03c7\u0007,",
      "\u0002\u0002\u03c7\u03c9\u0007\u0086\u0002\u0002\u03c8\u03bf\u0003\u0002",
      "\u0002\u0002\u03c8\u03c0\u0003\u0002\u0002\u0002\u03c8\u03c1\u0003\u0002",
      "\u0002\u0002\u03c8\u03c6\u0003\u0002\u0002\u0002\u03c9\u03ca\u0003\u0002",
      "\u0002\u0002\u03ca\u03cb\u0007\u0082\u0002\u0002\u03cbw\u0003\u0002",
      "\u0002\u0002\u03cc\u03cd\u0005~@\u0002\u03cdy\u0003\u0002\u0002\u0002",
      "\u03ce\u03d0\u0005|?\u0002\u03cf\u03ce\u0003\u0002\u0002\u0002\u03d0",
      "\u03d1\u0003\u0002\u0002\u0002\u03d1\u03cf\u0003\u0002\u0002\u0002\u03d1",
      "\u03d2\u0003\u0002\u0002\u0002\u03d2{\u0003\u0002\u0002\u0002\u03d3",
      "\u03dd\u0005~@\u0002\u03d4\u03dd\u0005\u010a\u0086\u0002\u03d5\u03dd",
      "\u0005\u0150\u00a9\u0002\u03d6\u03dd\u0005\u0164\u00b3\u0002\u03d7\u03dd",
      "\u0005\u0166\u00b4\u0002\u03d8\u03dd\u0005\u00ccg\u0002\u03d9\u03dd",
      "\u0005\u00be`\u0002\u03da\u03dd\u0005\u0086D\u0002\u03db\u03dd\u0005",
      "\u0088E\u0002\u03dc\u03d3\u0003\u0002\u0002\u0002\u03dc\u03d4\u0003",
      "\u0002\u0002\u0002\u03dc\u03d5\u0003\u0002\u0002\u0002\u03dc\u03d6\u0003",
      "\u0002\u0002\u0002\u03dc\u03d7\u0003\u0002\u0002\u0002\u03dc\u03d8\u0003",
      "\u0002\u0002\u0002\u03dc\u03d9\u0003\u0002\u0002\u0002\u03dc\u03da\u0003",
      "\u0002\u0002\u0002\u03dc\u03db\u0003\u0002\u0002\u0002\u03dd}\u0003",
      "\u0002\u0002\u0002\u03de\u03e7\u0005\u0082B\u0002\u03df\u03e7\u0005",
      "\u00caf\u0002\u03e0\u03e7\u0005\u00c2b\u0002\u03e1\u03e7\u0005\u00c6",
      "d\u0002\u03e2\u03e7\u0005\u00c8e\u0002\u03e3\u03e7\u0005\u0084C\u0002",
      "\u03e4\u03e7\u0005\u0080A\u0002\u03e5\u03e7\u0005\u00aeX\u0002\u03e6",
      "\u03de\u0003\u0002\u0002\u0002\u03e6\u03df\u0003\u0002\u0002\u0002\u03e6",
      "\u03e0\u0003\u0002\u0002\u0002\u03e6\u03e1\u0003\u0002\u0002\u0002\u03e6",
      "\u03e2\u0003\u0002\u0002\u0002\u03e6\u03e3\u0003\u0002\u0002\u0002\u03e6",
      "\u03e4\u0003\u0002\u0002\u0002\u03e6\u03e5\u0003\u0002\u0002\u0002\u03e7",
      "\u007f\u0003\u0002\u0002\u0002\u03e8\u03e9\u0007Q\u0002\u0002\u03e9",
      "\u03eb\u0007\u0086\u0002\u0002\u03ea\u03ec\u0005\u00ceh\u0002\u03eb",
      "\u03ea\u0003\u0002\u0002\u0002\u03eb\u03ec\u0003\u0002\u0002\u0002\u03ec",
      "\u03ed\u0003\u0002\u0002\u0002\u03ed\u03ee\u0007g\u0002\u0002\u03ee",
      "\u03ef\u0005\u00f8}\u0002\u03ef\u03f0\u0007\u0082\u0002\u0002\u03f0",
      "\u0081\u0003\u0002\u0002\u0002\u03f1\u03f3\u0005\u008cG\u0002\u03f2",
      "\u03f1\u0003\u0002\u0002\u0002\u03f2\u03f3\u0003\u0002\u0002\u0002\u03f3",
      "\u03f5\u0003\u0002\u0002\u0002\u03f4\u03f6\u0005\u00e0q\u0002\u03f5",
      "\u03f4\u0003\u0002\u0002\u0002\u03f5\u03f6\u0003\u0002\u0002\u0002\u03f6",
      "\u03f7\u0003\u0002\u0002\u0002\u03f7\u0400\u0007\u0082\u0002\u0002\u03f8",
      "\u03fa\u0005\u00ceh\u0002\u03f9\u03fb\u0005\u008cG\u0002\u03fa\u03f9",
      "\u0003\u0002\u0002\u0002\u03fa\u03fb\u0003\u0002\u0002\u0002\u03fb\u03fc",
      "\u0003\u0002\u0002\u0002\u03fc\u03fd\u0005\u00e0q\u0002\u03fd\u03fe",
      "\u0007\u0082\u0002\u0002\u03fe\u0400\u0003\u0002\u0002\u0002\u03ff\u03f2",
      "\u0003\u0002\u0002\u0002\u03ff\u03f8\u0003\u0002\u0002\u0002\u0400\u0083",
      "\u0003\u0002\u0002\u0002\u0401\u0402\u0007B\u0002\u0002\u0402\u0403",
      "\u0007W\u0002\u0002\u0403\u0404\u0005^0\u0002\u0404\u0405\u0007|\u0002",
      "\u0002\u0405\u0406\u0007\u0006\u0002\u0002\u0406\u0407\u0007X\u0002",
      "\u0002\u0407\u0408\u0007\u0082\u0002\u0002\u0408\u0085\u0003\u0002\u0002",
      "\u0002\u0409\u040a\u0007\u0082\u0002\u0002\u040a\u0087\u0003\u0002\u0002",
      "\u0002\u040b\u040c\u0005\u00ceh\u0002\u040c\u040d\u0007\u0082\u0002",
      "\u0002\u040d\u0089\u0003\u0002\u0002\u0002\u040e\u0415\u0005\u008eH",
      "\u0002\u040f\u0415\u0005\u0094K\u0002\u0410\u0415\u0005\u0090I\u0002",
      "\u0411\u0415\u0007+\u0002\u0002\u0412\u0415\u0007L\u0002\u0002\u0413",
      "\u0415\u0007\u0019\u0002\u0002\u0414\u040e\u0003\u0002\u0002\u0002\u0414",
      "\u040f\u0003\u0002\u0002\u0002\u0414\u0410\u0003\u0002\u0002\u0002\u0414",
      "\u0411\u0003\u0002\u0002\u0002\u0414\u0412\u0003\u0002\u0002\u0002\u0414",
      "\u0413\u0003\u0002\u0002\u0002\u0415\u008b\u0003\u0002\u0002\u0002\u0416",
      "\u0418\u0005\u008aF\u0002\u0417\u0416\u0003\u0002\u0002\u0002\u0418",
      "\u0419\u0003\u0002\u0002\u0002\u0419\u041a\u0003\u0002\u0002\u0002\u0419",
      "\u0417\u0003\u0002\u0002\u0002\u041a\u041c\u0003\u0002\u0002\u0002\u041b",
      "\u041d\u0005\u00ceh\u0002\u041c\u041b\u0003\u0002\u0002\u0002\u041c",
      "\u041d\u0003\u0002\u0002\u0002\u041d\u008d\u0003\u0002\u0002\u0002\u041e",
      "\u041f\t\r\u0002\u0002\u041f\u008f\u0003\u0002\u0002\u0002\u0420\u0421",
      "\t\u000e\u0002\u0002\u0421\u0091\u0003\u0002\u0002\u0002\u0422\u0423",
      "\u0007\u0086\u0002\u0002\u0423\u0093\u0003\u0002\u0002\u0002\u0424\u0428",
      "\u0005\u0096L\u0002\u0425\u0428\u0005\u011a\u008e\u0002\u0426\u0428",
      "\u0005\u00aaV\u0002\u0427\u0424\u0003\u0002\u0002\u0002\u0427\u0425",
      "\u0003\u0002\u0002\u0002\u0427\u0426\u0003\u0002\u0002\u0002\u0428\u0095",
      "\u0003\u0002\u0002\u0002\u0429\u042e\u0005\u00a0Q\u0002\u042a\u042e",
      "\u0005\u00a6T\u0002\u042b\u042e\u0005\u0162\u00b2\u0002\u042c\u042e",
      "\u0005\u00f2z\u0002\u042d\u0429\u0003\u0002\u0002\u0002\u042d\u042a",
      "\u0003\u0002\u0002\u0002\u042d\u042b\u0003\u0002\u0002\u0002\u042d\u042c",
      "\u0003\u0002\u0002\u0002\u042e\u0097\u0003\u0002\u0002\u0002\u042f\u0431",
      "\u0005\u0094K\u0002\u0430\u042f\u0003\u0002\u0002\u0002\u0431\u0432",
      "\u0003\u0002\u0002\u0002\u0432\u0430\u0003\u0002\u0002\u0002\u0432\u0433",
      "\u0003\u0002\u0002\u0002\u0433\u0435\u0003\u0002\u0002\u0002\u0434\u0436",
      "\u0005\u00ceh\u0002\u0435\u0434\u0003\u0002\u0002\u0002\u0435\u0436",
      "\u0003\u0002\u0002\u0002\u0436\u0099\u0003\u0002\u0002\u0002\u0437\u0439",
      "\u0005\u0096L\u0002\u0438\u0437\u0003\u0002\u0002\u0002\u0439\u043a",
      "\u0003\u0002\u0002\u0002\u043a\u0438\u0003\u0002\u0002\u0002\u043a\u043b",
      "\u0003\u0002\u0002\u0002\u043b\u043d\u0003\u0002\u0002\u0002\u043c\u043e",
      "\u0005\u00ceh\u0002\u043d\u043c\u0003\u0002\u0002\u0002\u043d\u043e",
      "\u0003\u0002\u0002\u0002\u043e\u009b\u0003\u0002\u0002\u0002\u043f\u0440",
      "\t\u000f\u0002\u0002\u0440\u009d\u0003\u0002\u0002\u0002\u0441\u0442",
      "\t\u0010\u0002\u0002\u0442\u009f\u0003\u0002\u0002\u0002\u0443\u0445",
      "\u0005\f\u0007\u0002\u0444\u0443\u0003\u0002\u0002\u0002\u0444\u0445",
      "\u0003\u0002\u0002\u0002\u0445\u0446\u0003\u0002\u0002\u0002\u0446\u0478",
      "\u0005\u00a2R\u0002\u0447\u0448\u0005\f\u0007\u0002\u0448\u0449\u0007",
      "F\u0002\u0002\u0449\u044a\u0005\u0158\u00ad\u0002\u044a\u0478\u0003",
      "\u0002\u0002\u0002\u044b\u0478\u0005\u009eP\u0002\u044c\u044e\u0005",
      "\u009eP\u0002\u044d\u044c\u0003\u0002\u0002\u0002\u044d\u044e\u0003",
      "\u0002\u0002\u0002\u044e\u0450\u0003\u0002\u0002\u0002\u044f\u0451\u0005",
      "\u009cO\u0002\u0450\u044f\u0003\u0002\u0002\u0002\u0451\u0452\u0003",
      "\u0002\u0002\u0002\u0452\u0450\u0003\u0002\u0002\u0002\u0452\u0453\u0003",
      "\u0002\u0002\u0002\u0453\u0478\u0003\u0002\u0002\u0002\u0454\u0456\u0005",
      "\u009eP\u0002\u0455\u0454\u0003\u0002\u0002\u0002\u0455\u0456\u0003",
      "\u0002\u0002\u0002\u0456\u0457\u0003\u0002\u0002\u0002\u0457\u0478\u0007",
      "\u0014\u0002\u0002\u0458\u045a\u0005\u009eP\u0002\u0459\u0458\u0003",
      "\u0002\u0002\u0002\u0459\u045a\u0003\u0002\u0002\u0002\u045a\u045b\u0003",
      "\u0002\u0002\u0002\u045b\u0478\u0007\u0015\u0002\u0002\u045c\u045e\u0005",
      "\u009eP\u0002\u045d\u045c\u0003\u0002\u0002\u0002\u045d\u045e\u0003",
      "\u0002\u0002\u0002\u045e\u045f\u0003\u0002\u0002\u0002\u045f\u0478\u0007",
      "\u0016\u0002\u0002\u0460\u0462\u0005\u009eP\u0002\u0461\u0460\u0003",
      "\u0002\u0002\u0002\u0461\u0462\u0003\u0002\u0002\u0002\u0462\u0463\u0003",
      "\u0002\u0002\u0002\u0463\u0478\u0007U\u0002\u0002\u0464\u0478\u0007",
      "\u0010\u0002\u0002\u0465\u0467\u0005\u009eP\u0002\u0466\u0465\u0003",
      "\u0002\u0002\u0002\u0466\u0467\u0003\u0002\u0002\u0002\u0467\u046b\u0003",
      "\u0002\u0002\u0002\u0468\u046a\u0005\u009cO\u0002\u0469\u0468\u0003",
      "\u0002\u0002\u0002\u046a\u046d\u0003\u0002\u0002\u0002\u046b\u0469\u0003",
      "\u0002\u0002\u0002\u046b\u046c\u0003\u0002\u0002\u0002\u046c\u046e\u0003",
      "\u0002\u0002\u0002\u046d\u046b\u0003\u0002\u0002\u0002\u046e\u0478\u0007",
      "/\u0002\u0002\u046f\u0478\u0007)\u0002\u0002\u0470\u0472\u0005\u009c",
      "O\u0002\u0471\u0470\u0003\u0002\u0002\u0002\u0471\u0472\u0003\u0002",
      "\u0002\u0002\u0472\u0473\u0003\u0002\u0002\u0002\u0473\u0478\u0007 ",
      "\u0002\u0002\u0474\u0478\u0007S\u0002\u0002\u0475\u0478\u0007\u000f",
      "\u0002\u0002\u0476\u0478\u0005\u00a4S\u0002\u0477\u0444\u0003\u0002",
      "\u0002\u0002\u0477\u0447\u0003\u0002\u0002\u0002\u0477\u044b\u0003\u0002",
      "\u0002\u0002\u0477\u044d\u0003\u0002\u0002\u0002\u0477\u0455\u0003\u0002",
      "\u0002\u0002\u0477\u0459\u0003\u0002\u0002\u0002\u0477\u045d\u0003\u0002",
      "\u0002\u0002\u0477\u0461\u0003\u0002\u0002\u0002\u0477\u0464\u0003\u0002",
      "\u0002\u0002\u0477\u0466\u0003\u0002\u0002\u0002\u0477\u046f\u0003\u0002",
      "\u0002\u0002\u0477\u0471\u0003\u0002\u0002\u0002\u0477\u0474\u0003\u0002",
      "\u0002\u0002\u0477\u0475\u0003\u0002\u0002\u0002\u0477\u0476\u0003\u0002",
      "\u0002\u0002\u0478\u00a1\u0003\u0002\u0002\u0002\u0479\u047e\u0005\u0118",
      "\u008d\u0002\u047a\u047e\u0005\u00a8U\u0002\u047b\u047e\u0005\u0092",
      "J\u0002\u047c\u047e\u0005\u0158\u00ad\u0002\u047d\u0479\u0003\u0002",
      "\u0002\u0002\u047d\u047a\u0003\u0002\u0002\u0002\u047d\u047b\u0003\u0002",
      "\u0002\u0002\u047d\u047c\u0003\u0002\u0002\u0002\u047e\u00a3\u0003\u0002",
      "\u0002\u0002\u047f\u0480\u0007\u001c\u0002\u0002\u0480\u0483\u0007W",
      "\u0002\u0002\u0481\u0484\u0005\\/\u0002\u0482\u0484\u0007\u000f\u0002",
      "\u0002\u0483\u0481\u0003\u0002\u0002\u0002\u0483\u0482\u0003\u0002\u0002",
      "\u0002\u0484\u0485\u0003\u0002\u0002\u0002\u0485\u0486\u0007X\u0002",
      "\u0002\u0486\u00a5\u0003\u0002\u0002\u0002\u0487\u0496\u0005\u0122\u0092",
      "\u0002\u0488\u048a\u0005\u00ceh\u0002\u0489\u0488\u0003\u0002\u0002",
      "\u0002\u0489\u048a\u0003\u0002\u0002\u0002\u048a\u048c\u0003\u0002\u0002",
      "\u0002\u048b\u048d\u0005\f\u0007\u0002\u048c\u048b\u0003\u0002\u0002",
      "\u0002\u048c\u048d\u0003\u0002\u0002\u0002\u048d\u048e\u0003\u0002\u0002",
      "\u0002\u048e\u0497\u0007\u0086\u0002\u0002\u048f\u0497\u0005\u0158\u00ad",
      "\u0002\u0490\u0492\u0005\f\u0007\u0002\u0491\u0493\u0007F\u0002\u0002",
      "\u0492\u0491\u0003\u0002\u0002\u0002\u0492\u0493\u0003\u0002\u0002\u0002",
      "\u0493\u0494\u0003\u0002\u0002\u0002\u0494\u0495\u0005\u0158\u00ad\u0002",
      "\u0495\u0497\u0003\u0002\u0002\u0002\u0496\u0489\u0003\u0002\u0002\u0002",
      "\u0496\u048f\u0003\u0002\u0002\u0002\u0496\u0490\u0003\u0002\u0002\u0002",
      "\u0497\u049e\u0003\u0002\u0002\u0002\u0498\u049a\u0007#\u0002\u0002",
      "\u0499\u049b\u0005\f\u0007\u0002\u049a\u0499\u0003\u0002\u0002\u0002",
      "\u049a\u049b\u0003\u0002\u0002\u0002\u049b\u049c\u0003\u0002\u0002\u0002",
      "\u049c\u049e\u0007\u0086\u0002\u0002\u049d\u0487\u0003\u0002\u0002\u0002",
      "\u049d\u0498\u0003\u0002\u0002\u0002\u049e\u00a7\u0003\u0002\u0002\u0002",
      "\u049f\u04a0\u0007\u0086\u0002\u0002\u04a0\u00a9\u0003\u0002\u0002\u0002",
      "\u04a1\u04a2\u0005\u00acW\u0002\u04a2\u04a7\u0007[\u0002\u0002\u04a3",
      "\u04a5\u0005\u00b4[\u0002\u04a4\u04a6\u0007|\u0002\u0002\u04a5\u04a4",
      "\u0003\u0002\u0002\u0002\u04a5\u04a6\u0003\u0002\u0002\u0002\u04a6\u04a8",
      "\u0003\u0002\u0002\u0002\u04a7\u04a3\u0003\u0002\u0002\u0002\u04a7\u04a8",
      "\u0003\u0002\u0002\u0002\u04a8\u04a9\u0003\u0002\u0002\u0002\u04a9\u04aa",
      "\u0007\\\u0002\u0002\u04aa\u00ab\u0003\u0002\u0002\u0002\u04ab\u04ad",
      "\u0005\u00b0Y\u0002\u04ac\u04ae\u0005\u00ceh\u0002\u04ad\u04ac\u0003",
      "\u0002\u0002\u0002\u04ad\u04ae\u0003\u0002\u0002\u0002\u04ae\u04b3\u0003",
      "\u0002\u0002\u0002\u04af\u04b1\u0005\f\u0007\u0002\u04b0\u04af\u0003",
      "\u0002\u0002\u0002\u04b0\u04b1\u0003\u0002\u0002\u0002\u04b1\u04b2\u0003",
      "\u0002\u0002\u0002\u04b2\u04b4\u0007\u0086\u0002\u0002\u04b3\u04b0\u0003",
      "\u0002\u0002\u0002\u04b3\u04b4\u0003\u0002\u0002\u0002\u04b4\u04b6\u0003",
      "\u0002\u0002\u0002\u04b5\u04b7\u0005\u00b2Z\u0002\u04b6\u04b5\u0003",
      "\u0002\u0002\u0002\u04b6\u04b7\u0003\u0002\u0002\u0002\u04b7\u00ad\u0003",
      "\u0002\u0002\u0002\u04b8\u04ba\u0005\u00b0Y\u0002\u04b9\u04bb\u0005",
      "\u00ceh\u0002\u04ba\u04b9\u0003\u0002\u0002\u0002\u04ba\u04bb\u0003",
      "\u0002\u0002\u0002\u04bb\u04bc\u0003\u0002\u0002\u0002\u04bc\u04be\u0007",
      "\u0086\u0002\u0002\u04bd\u04bf\u0005\u00b2Z\u0002\u04be\u04bd\u0003",
      "\u0002\u0002\u0002\u04be\u04bf\u0003\u0002\u0002\u0002\u04bf\u04c0\u0003",
      "\u0002\u0002\u0002\u04c0\u04c1\u0007\u0082\u0002\u0002\u04c1\u00af\u0003",
      "\u0002\u0002\u0002\u04c2\u04c4\u0007#\u0002\u0002\u04c3\u04c5\t\u0011",
      "\u0002\u0002\u04c4\u04c3\u0003\u0002\u0002\u0002\u04c4\u04c5\u0003\u0002",
      "\u0002\u0002\u04c5\u00b1\u0003\u0002\u0002\u0002\u04c6\u04c7\u0007\u0080",
      "\u0002\u0002\u04c7\u04c8\u0005\u0098M\u0002\u04c8\u00b3\u0003\u0002",
      "\u0002\u0002\u04c9\u04ce\u0005\u00b6\\\u0002\u04ca\u04cb\u0007|\u0002",
      "\u0002\u04cb\u04cd\u0005\u00b6\\\u0002\u04cc\u04ca\u0003\u0002\u0002",
      "\u0002\u04cd\u04d0\u0003\u0002\u0002\u0002\u04ce\u04cc\u0003\u0002\u0002",
      "\u0002\u04ce\u04cf\u0003\u0002\u0002\u0002\u04cf\u00b5\u0003\u0002\u0002",
      "\u0002\u04d0\u04ce\u0003\u0002\u0002\u0002\u04d1\u04d4\u0005\u00b8]",
      "\u0002\u04d2\u04d3\u0007g\u0002\u0002\u04d3\u04d5\u0005^0\u0002\u04d4",
      "\u04d2\u0003\u0002\u0002\u0002\u04d4\u04d5\u0003\u0002\u0002\u0002\u04d5",
      "\u00b7\u0003\u0002\u0002\u0002\u04d6\u04d7\u0007\u0086\u0002\u0002\u04d7",
      "\u00b9\u0003\u0002\u0002\u0002\u04d8\u04db\u0005\u00bc_\u0002\u04d9",
      "\u04db\u0005\u00c0a\u0002\u04da\u04d8\u0003\u0002\u0002\u0002\u04da",
      "\u04d9\u0003\u0002\u0002\u0002\u04db\u00bb\u0003\u0002\u0002\u0002\u04dc",
      "\u04dd\u0007\u0086\u0002\u0002\u04dd\u00bd\u0003\u0002\u0002\u0002\u04de",
      "\u04e0\u0007.\u0002\u0002\u04df\u04de\u0003\u0002\u0002\u0002\u04df",
      "\u04e0\u0003\u0002\u0002\u0002\u04e0\u04e1\u0003\u0002\u0002\u0002\u04e1",
      "\u04e4\u00072\u0002\u0002\u04e2\u04e5\u0007\u0086\u0002\u0002\u04e3",
      "\u04e5\u0005\u00bc_\u0002\u04e4\u04e2\u0003\u0002\u0002\u0002\u04e4",
      "\u04e3\u0003\u0002\u0002\u0002\u04e4\u04e5\u0003\u0002\u0002\u0002\u04e5",
      "\u04e6\u0003\u0002\u0002\u0002\u04e6\u04e8\u0007[\u0002\u0002\u04e7",
      "\u04e9\u0005z>\u0002\u04e8\u04e7\u0003\u0002\u0002\u0002\u04e8\u04e9",
      "\u0003\u0002\u0002\u0002\u04e9\u04ea\u0003\u0002\u0002\u0002\u04ea\u04eb",
      "\u0007\\\u0002\u0002\u04eb\u00bf\u0003\u0002\u0002\u0002\u04ec\u04ed",
      "\u0007\u0086\u0002\u0002\u04ed\u00c1\u0003\u0002\u0002\u0002\u04ee\u04ef",
      "\u00072\u0002\u0002\u04ef\u04f0\u0007\u0086\u0002\u0002\u04f0\u04f1",
      "\u0007g\u0002\u0002\u04f1\u04f2\u0005\u00c4c\u0002\u04f2\u04f3\u0007",
      "\u0082\u0002\u0002\u04f3\u00c3\u0003\u0002\u0002\u0002\u04f4\u04f6\u0005",
      "\f\u0007\u0002\u04f5\u04f4\u0003\u0002\u0002\u0002\u04f5\u04f6\u0003",
      "\u0002\u0002\u0002\u04f6\u04f7\u0003\u0002\u0002\u0002\u04f7\u04f8\u0005",
      "\u00ba^\u0002\u04f8\u00c5\u0003\u0002\u0002\u0002\u04f9\u04ff\u0007",
      "Q\u0002\u0002\u04fa\u04fc\u0007N\u0002\u0002\u04fb\u04fa\u0003\u0002",
      "\u0002\u0002\u04fb\u04fc\u0003\u0002\u0002\u0002\u04fc\u04fd\u0003\u0002",
      "\u0002\u0002\u04fd\u0500\u0005\f\u0007\u0002\u04fe\u0500\u0007\u0081",
      "\u0002\u0002\u04ff\u04fb\u0003\u0002\u0002\u0002\u04ff\u04fe\u0003\u0002",
      "\u0002\u0002\u0500\u0501\u0003\u0002\u0002\u0002\u0501\u0502\u0005\b",
      "\u0005\u0002\u0502\u0503\u0007\u0082\u0002\u0002\u0503\u00c7\u0003\u0002",
      "\u0002\u0002\u0504\u0506\u0005\u00ceh\u0002\u0505\u0504\u0003\u0002",
      "\u0002\u0002\u0505\u0506\u0003\u0002\u0002\u0002\u0506\u0507\u0003\u0002",
      "\u0002\u0002\u0507\u0508\u0007Q\u0002\u0002\u0508\u050a\u00072\u0002",
      "\u0002\u0509\u050b\u0005\f\u0007\u0002\u050a\u0509\u0003\u0002\u0002",
      "\u0002\u050a\u050b\u0003\u0002\u0002\u0002\u050b\u050c\u0003\u0002\u0002",
      "\u0002\u050c\u050d\u0005\u00ba^\u0002\u050d\u050e\u0007\u0082\u0002",
      "\u0002\u050e\u00c9\u0003\u0002\u0002\u0002\u050f\u0510\u0007\u000e\u0002",
      "\u0002\u0510\u0511\u0007W\u0002\u0002\u0511\u0512\u0007\u0006\u0002",
      "\u0002\u0512\u0513\u0007X\u0002\u0002\u0513\u0514\u0007\u0082\u0002",
      "\u0002\u0514\u00cb\u0003\u0002\u0002\u0002\u0515\u0516\u0007&\u0002",
      "\u0002\u0516\u051d\u0007\u0006\u0002\u0002\u0517\u0519\u0007[\u0002",
      "\u0002\u0518\u051a\u0005z>\u0002\u0519\u0518\u0003\u0002\u0002\u0002",
      "\u0519\u051a\u0003\u0002\u0002\u0002\u051a\u051b\u0003\u0002\u0002\u0002",
      "\u051b\u051e\u0007\\\u0002\u0002\u051c\u051e\u0005|?\u0002\u051d\u0517",
      "\u0003\u0002\u0002\u0002\u051d\u051c\u0003\u0002\u0002\u0002\u051e\u00cd",
      "\u0003\u0002\u0002\u0002\u051f\u0521\u0005\u00d0i\u0002\u0520\u051f",
      "\u0003\u0002\u0002\u0002\u0521\u0522\u0003\u0002\u0002\u0002\u0522\u0520",
      "\u0003\u0002\u0002\u0002\u0522\u0523\u0003\u0002\u0002\u0002\u0523\u00cf",
      "\u0003\u0002\u0002\u0002\u0524\u0525\u0007Y\u0002\u0002\u0525\u0527",
      "\u0007Y\u0002\u0002\u0526\u0528\u0005\u00d4k\u0002\u0527\u0526\u0003",
      "\u0002\u0002\u0002\u0527\u0528\u0003\u0002\u0002\u0002\u0528\u0529\u0003",
      "\u0002\u0002\u0002\u0529\u052a\u0007Z\u0002\u0002\u052a\u052d\u0007",
      "Z\u0002\u0002\u052b\u052d\u0005\u00d2j\u0002\u052c\u0524\u0003\u0002",
      "\u0002\u0002\u052c\u052b\u0003\u0002\u0002\u0002\u052d\u00d1\u0003\u0002",
      "\u0002\u0002\u052e\u052f\u0007\f\u0002\u0002\u052f\u0532\u0007W\u0002",
      "\u0002\u0530\u0533\u0005\u00f8}\u0002\u0531\u0533\u0005^0\u0002\u0532",
      "\u0530\u0003\u0002\u0002\u0002\u0532\u0531\u0003\u0002\u0002\u0002\u0533",
      "\u0535\u0003\u0002\u0002\u0002\u0534\u0536\u0007\u0085\u0002\u0002\u0535",
      "\u0534\u0003\u0002\u0002\u0002\u0535\u0536\u0003\u0002\u0002\u0002\u0536",
      "\u0537\u0003\u0002\u0002\u0002\u0537\u0538\u0007X\u0002\u0002\u0538",
      "\u00d3\u0003\u0002\u0002\u0002\u0539\u053e\u0005\u00d6l\u0002\u053a",
      "\u053b\u0007|\u0002\u0002\u053b\u053d\u0005\u00d6l\u0002\u053c\u053a",
      "\u0003\u0002\u0002\u0002\u053d\u0540\u0003\u0002\u0002\u0002\u053e\u053c",
      "\u0003\u0002\u0002\u0002\u053e\u053f\u0003\u0002\u0002\u0002\u053f\u0542",
      "\u0003\u0002\u0002\u0002\u0540\u053e\u0003\u0002\u0002\u0002\u0541\u0543",
      "\u0007\u0085\u0002\u0002\u0542\u0541\u0003\u0002\u0002\u0002\u0542\u0543",
      "\u0003\u0002\u0002\u0002\u0543\u00d5\u0003\u0002\u0002\u0002\u0544\u0545",
      "\u0005\u00d8m\u0002\u0545\u0546\u0007\u0081\u0002\u0002\u0546\u0548",
      "\u0003\u0002\u0002\u0002\u0547\u0544\u0003\u0002\u0002\u0002\u0547\u0548",
      "\u0003\u0002\u0002\u0002\u0548\u0549\u0003\u0002\u0002\u0002\u0549\u054b",
      "\u0007\u0086\u0002\u0002\u054a\u054c\u0005\u00dan\u0002\u054b\u054a",
      "\u0003\u0002\u0002\u0002\u054b\u054c\u0003\u0002\u0002\u0002\u054c\u00d7",
      "\u0003\u0002\u0002\u0002\u054d\u054e\u0007\u0086\u0002\u0002\u054e\u00d9",
      "\u0003\u0002\u0002\u0002\u054f\u0551\u0007W\u0002\u0002\u0550\u0552",
      "\u0005\u00dco\u0002\u0551\u0550\u0003\u0002\u0002\u0002\u0551\u0552",
      "\u0003\u0002\u0002\u0002\u0552\u0553\u0003\u0002\u0002\u0002\u0553\u0554",
      "\u0007X\u0002\u0002\u0554\u00db\u0003\u0002\u0002\u0002\u0555\u0557",
      "\u0005\u00dep\u0002\u0556\u0555\u0003\u0002\u0002\u0002\u0557\u0558",
      "\u0003\u0002\u0002\u0002\u0558\u0556\u0003\u0002\u0002\u0002\u0558\u0559",
      "\u0003\u0002\u0002\u0002\u0559\u00dd\u0003\u0002\u0002\u0002\u055a\u055b",
      "\u0007W\u0002\u0002\u055b\u055c\u0005\u00dco\u0002\u055c\u055d\u0007",
      "X\u0002\u0002\u055d\u056c\u0003\u0002\u0002\u0002\u055e\u055f\u0007",
      "Y\u0002\u0002\u055f\u0560\u0005\u00dco\u0002\u0560\u0561\u0007Z\u0002",
      "\u0002\u0561\u056c\u0003\u0002\u0002\u0002\u0562\u0563\u0007[\u0002",
      "\u0002\u0563\u0564\u0005\u00dco\u0002\u0564\u0565\u0007\\\u0002\u0002",
      "\u0565\u056c\u0003\u0002\u0002\u0002\u0566\u0568\n\u0012\u0002\u0002",
      "\u0567\u0566\u0003\u0002\u0002\u0002\u0568\u0569\u0003\u0002\u0002\u0002",
      "\u0569\u0567\u0003\u0002\u0002\u0002\u0569\u056a\u0003\u0002\u0002\u0002",
      "\u056a\u056c\u0003\u0002\u0002\u0002\u056b\u055a\u0003\u0002\u0002\u0002",
      "\u056b\u055e\u0003\u0002\u0002\u0002\u056b\u0562\u0003\u0002\u0002\u0002",
      "\u056b\u0567\u0003\u0002\u0002\u0002\u056c\u00df\u0003\u0002\u0002\u0002",
      "\u056d\u0572\u0005\u00e2r\u0002\u056e\u056f\u0007|\u0002\u0002\u056f",
      "\u0571\u0005\u00e2r\u0002\u0570\u056e\u0003\u0002\u0002\u0002\u0571",
      "\u0574\u0003\u0002\u0002\u0002\u0572\u0570\u0003\u0002\u0002\u0002\u0572",
      "\u0573\u0003\u0002\u0002\u0002\u0573\u00e1\u0003\u0002\u0002\u0002\u0574",
      "\u0572\u0003\u0002\u0002\u0002\u0575\u0577\u0005\u00e4s\u0002\u0576",
      "\u0578\u0005\u010e\u0088\u0002\u0577\u0576\u0003\u0002\u0002\u0002\u0577",
      "\u0578\u0003\u0002\u0002\u0002\u0578\u00e3\u0003\u0002\u0002\u0002\u0579",
      "\u057f\u0005\u00e6t\u0002\u057a\u057b\u0005\u00e8u\u0002\u057b\u057c",
      "\u0005\u00eav\u0002\u057c\u057d\u0005\u00ecw\u0002\u057d\u057f\u0003",
      "\u0002\u0002\u0002\u057e\u0579\u0003\u0002\u0002\u0002\u057e\u057a\u0003",
      "\u0002\u0002\u0002\u057f\u00e5\u0003\u0002\u0002\u0002\u0580\u0582\u0005",
      "\u00eex\u0002\u0581\u0583\u0007\u0018\u0002\u0002\u0582\u0581\u0003",
      "\u0002\u0002\u0002\u0582\u0583\u0003\u0002\u0002\u0002\u0583\u0585\u0003",
      "\u0002\u0002\u0002\u0584\u0580\u0003\u0002\u0002\u0002\u0585\u0588\u0003",
      "\u0002\u0002\u0002\u0586\u0584\u0003\u0002\u0002\u0002\u0586\u0587\u0003",
      "\u0002\u0002\u0002\u0587\u0589\u0003\u0002\u0002\u0002\u0588\u0586\u0003",
      "\u0002\u0002\u0002\u0589\u058a\u0005\u00e8u\u0002\u058a\u00e7\u0003",
      "\u0002\u0002\u0002\u058b\u058c\bu\u0001\u0002\u058c\u058e\u0005\u00f6",
      "|\u0002\u058d\u058f\u0005\u00ceh\u0002\u058e\u058d\u0003\u0002\u0002",
      "\u0002\u058e\u058f\u0003\u0002\u0002\u0002\u058f\u0595\u0003\u0002\u0002",
      "\u0002\u0590\u0591\u0007W\u0002\u0002\u0591\u0592\u0005\u00e6t\u0002",
      "\u0592\u0593\u0007X\u0002\u0002\u0593\u0595\u0003\u0002\u0002\u0002",
      "\u0594\u058b\u0003\u0002\u0002\u0002\u0594\u0590\u0003\u0002\u0002\u0002",
      "\u0595\u05a4\u0003\u0002\u0002\u0002\u0596\u05a0\f\u0004\u0002\u0002",
      "\u0597\u05a1\u0005\u00eav\u0002\u0598\u059a\u0007Y\u0002\u0002\u0599",
      "\u059b\u0005^0\u0002\u059a\u0599\u0003\u0002\u0002\u0002\u059a\u059b",
      "\u0003\u0002\u0002\u0002\u059b\u059c\u0003\u0002\u0002\u0002\u059c\u059e",
      "\u0007Z\u0002\u0002\u059d\u059f\u0005\u00ceh\u0002\u059e\u059d\u0003",
      "\u0002\u0002\u0002\u059e\u059f\u0003\u0002\u0002\u0002\u059f\u05a1\u0003",
      "\u0002\u0002\u0002\u05a0\u0597\u0003\u0002\u0002\u0002\u05a0\u0598\u0003",
      "\u0002\u0002\u0002\u05a1\u05a3\u0003\u0002\u0002\u0002\u05a2\u0596\u0003",
      "\u0002\u0002\u0002\u05a3\u05a6\u0003\u0002\u0002\u0002\u05a4\u05a2\u0003",
      "\u0002\u0002\u0002\u05a4\u05a5\u0003\u0002\u0002\u0002\u05a5\u00e9\u0003",
      "\u0002\u0002\u0002\u05a6\u05a4\u0003\u0002\u0002\u0002\u05a7\u05a9\u0007",
      "W\u0002\u0002\u05a8\u05aa\u0005\u0104\u0083\u0002\u05a9\u05a8\u0003",
      "\u0002\u0002\u0002\u05a9\u05aa\u0003\u0002\u0002\u0002\u05aa\u05ab\u0003",
      "\u0002\u0002\u0002\u05ab\u05ad\u0007X\u0002\u0002\u05ac\u05ae\u0005",
      "\u00f0y\u0002\u05ad\u05ac\u0003\u0002\u0002\u0002\u05ad\u05ae\u0003",
      "\u0002\u0002\u0002\u05ae\u05b0\u0003\u0002\u0002\u0002\u05af\u05b1\u0005",
      "\u00f4{\u0002\u05b0\u05af\u0003\u0002\u0002\u0002\u05b0\u05b1\u0003",
      "\u0002\u0002\u0002\u05b1\u05b3\u0003\u0002\u0002\u0002\u05b2\u05b4\u0005",
      "\u0174\u00bb\u0002\u05b3\u05b2\u0003\u0002\u0002\u0002\u05b3\u05b4\u0003",
      "\u0002\u0002\u0002\u05b4\u05b6\u0003\u0002\u0002\u0002\u05b5\u05b7\u0005",
      "\u00ceh\u0002\u05b6\u05b5\u0003\u0002\u0002\u0002\u05b6\u05b7\u0003",
      "\u0002\u0002\u0002\u05b7\u00eb\u0003\u0002\u0002\u0002\u05b8\u05b9\u0007",
      "~\u0002\u0002\u05b9\u05bb\u0005\u009aN\u0002\u05ba\u05bc\u0005\u00fa",
      "~\u0002\u05bb\u05ba\u0003\u0002\u0002\u0002\u05bb\u05bc\u0003\u0002",
      "\u0002\u0002\u05bc\u00ed\u0003\u0002\u0002\u0002\u05bd\u05bf\t\u0013",
      "\u0002\u0002\u05be\u05c0\u0005\u00ceh\u0002\u05bf\u05be\u0003\u0002",
      "\u0002\u0002\u05bf\u05c0\u0003\u0002\u0002\u0002\u05c0\u05cc\u0003\u0002",
      "\u0002\u0002\u05c1\u05c3\u0005\f\u0007\u0002\u05c2\u05c1\u0003\u0002",
      "\u0002\u0002\u05c2\u05c3\u0003\u0002\u0002\u0002\u05c3\u05c4\u0003\u0002",
      "\u0002\u0002\u05c4\u05c6\u0007_\u0002\u0002\u05c5\u05c7\u0005\u00ce",
      "h\u0002\u05c6\u05c5\u0003\u0002\u0002\u0002\u05c6\u05c7\u0003\u0002",
      "\u0002\u0002\u05c7\u05c9\u0003\u0002\u0002\u0002\u05c8\u05ca\u0005\u00f0",
      "y\u0002\u05c9\u05c8\u0003\u0002\u0002\u0002\u05c9\u05ca\u0003\u0002",
      "\u0002\u0002\u05ca\u05cc\u0003\u0002\u0002\u0002\u05cb\u05bd\u0003\u0002",
      "\u0002\u0002\u05cb\u05c2\u0003\u0002\u0002\u0002\u05cc\u00ef\u0003\u0002",
      "\u0002\u0002\u05cd\u05cf\u0005\u00f2z\u0002\u05ce\u05cd\u0003\u0002",
      "\u0002\u0002\u05cf\u05d0\u0003\u0002\u0002\u0002\u05d0\u05ce\u0003\u0002",
      "\u0002\u0002\u05d0\u05d1\u0003\u0002\u0002\u0002\u05d1\u00f1\u0003\u0002",
      "\u0002\u0002\u05d2\u05d3\t\u0014\u0002\u0002\u05d3\u00f3\u0003\u0002",
      "\u0002\u0002\u05d4\u05d5\t\u0013\u0002\u0002\u05d5\u00f5\u0003\u0002",
      "\u0002\u0002\u05d6\u05d8\u0007\u0085\u0002\u0002\u05d7\u05d6\u0003\u0002",
      "\u0002\u0002\u05d7\u05d8\u0003\u0002\u0002\u0002\u05d8\u05d9\u0003\u0002",
      "\u0002\u0002\u05d9\u05da\u0005\u0006\u0004\u0002\u05da\u00f7\u0003\u0002",
      "\u0002\u0002\u05db\u05dd\u0005\u0098M\u0002\u05dc\u05de\u0005\u00fa",
      "~\u0002\u05dd\u05dc\u0003\u0002\u0002\u0002\u05dd\u05de\u0003\u0002",
      "\u0002\u0002\u05de\u00f9\u0003\u0002\u0002\u0002\u05df\u05e8\u0005\u00fc",
      "\u007f\u0002\u05e0\u05e2\u0005\u00fe\u0080\u0002\u05e1\u05e0\u0003\u0002",
      "\u0002\u0002\u05e1\u05e2\u0003\u0002\u0002\u0002\u05e2\u05e3\u0003\u0002",
      "\u0002\u0002\u05e3\u05e4\u0005\u00eav\u0002\u05e4\u05e5\u0005\u00ec",
      "w\u0002\u05e5\u05e8\u0003\u0002\u0002\u0002\u05e6\u05e8\u0005\u0100",
      "\u0081\u0002\u05e7\u05df\u0003\u0002\u0002\u0002\u05e7\u05e1\u0003\u0002",
      "\u0002\u0002\u05e7\u05e6\u0003\u0002\u0002\u0002\u05e8\u00fb\u0003\u0002",
      "\u0002\u0002\u05e9\u05f3\u0005\u00fe\u0080\u0002\u05ea\u05ec\u0005\u00ee",
      "x\u0002\u05eb\u05ea\u0003\u0002\u0002\u0002\u05ec\u05ed\u0003\u0002",
      "\u0002\u0002\u05ed\u05eb\u0003\u0002\u0002\u0002\u05ed\u05ee\u0003\u0002",
      "\u0002\u0002\u05ee\u05f0\u0003\u0002\u0002\u0002\u05ef\u05f1\u0005\u00fe",
      "\u0080\u0002\u05f0\u05ef\u0003\u0002\u0002\u0002\u05f0\u05f1\u0003\u0002",
      "\u0002\u0002\u05f1\u05f3\u0003\u0002\u0002\u0002\u05f2\u05e9\u0003\u0002",
      "\u0002\u0002\u05f2\u05eb\u0003\u0002\u0002\u0002\u05f3\u00fd\u0003\u0002",
      "\u0002\u0002\u05f4\u05f5\b\u0080\u0001\u0002\u05f5\u0603\u0005\u00ea",
      "v\u0002\u05f6\u05f8\u0007Y\u0002\u0002\u05f7\u05f9\u0005^0\u0002\u05f8",
      "\u05f7\u0003\u0002\u0002\u0002\u05f8\u05f9\u0003\u0002\u0002\u0002\u05f9",
      "\u05fa\u0003\u0002\u0002\u0002\u05fa\u05fc\u0007Z\u0002\u0002\u05fb",
      "\u05fd\u0005\u00ceh\u0002\u05fc\u05fb\u0003\u0002\u0002\u0002\u05fc",
      "\u05fd\u0003\u0002\u0002\u0002\u05fd\u0603\u0003\u0002\u0002\u0002\u05fe",
      "\u05ff\u0007W\u0002\u0002\u05ff\u0600\u0005\u00fc\u007f\u0002\u0600",
      "\u0601\u0007X\u0002\u0002\u0601\u0603\u0003\u0002\u0002\u0002\u0602",
      "\u05f4\u0003\u0002\u0002\u0002\u0602\u05f6\u0003\u0002\u0002\u0002\u0602",
      "\u05fe\u0003\u0002\u0002\u0002\u0603\u0613\u0003\u0002\u0002\u0002\u0604",
      "\u060f\f\u0006\u0002\u0002\u0605\u0610\u0005\u00eav\u0002\u0606\u0607",
      "\u0005\u00fe\u0080\u0002\u0607\u0609\u0007Y\u0002\u0002\u0608\u060a",
      "\u0005^0\u0002\u0609\u0608\u0003\u0002\u0002\u0002\u0609\u060a\u0003",
      "\u0002\u0002\u0002\u060a\u060b\u0003\u0002\u0002\u0002\u060b\u060d\u0007",
      "Z\u0002\u0002\u060c\u060e\u0005\u00ceh\u0002\u060d\u060c\u0003\u0002",
      "\u0002\u0002\u060d\u060e\u0003\u0002\u0002\u0002\u060e\u0610\u0003\u0002",
      "\u0002\u0002\u060f\u0605\u0003\u0002\u0002\u0002\u060f\u0606\u0003\u0002",
      "\u0002\u0002\u0610\u0612\u0003\u0002\u0002\u0002\u0611\u0604\u0003\u0002",
      "\u0002\u0002\u0612\u0615\u0003\u0002\u0002\u0002\u0613\u0611\u0003\u0002",
      "\u0002\u0002\u0613\u0614\u0003\u0002\u0002\u0002\u0614\u00ff\u0003\u0002",
      "\u0002\u0002\u0615\u0613\u0003\u0002\u0002\u0002\u0616\u0618\u0005\u00ee",
      "x\u0002\u0617\u0616\u0003\u0002\u0002\u0002\u0618\u061b\u0003\u0002",
      "\u0002\u0002\u0619\u0617\u0003\u0002\u0002\u0002\u0619\u061a\u0003\u0002",
      "\u0002\u0002\u061a\u061c\u0003\u0002\u0002\u0002\u061b\u0619\u0003\u0002",
      "\u0002\u0002\u061c\u061d\u0005\u0102\u0082\u0002\u061d\u0101\u0003\u0002",
      "\u0002\u0002\u061e\u061f\b\u0082\u0001\u0002\u061f\u0620\u0007\u0085",
      "\u0002\u0002\u0620\u062f\u0003\u0002\u0002\u0002\u0621\u062b\f\u0004",
      "\u0002\u0002\u0622\u062c\u0005\u00eav\u0002\u0623\u0625\u0007Y\u0002",
      "\u0002\u0624\u0626\u0005^0\u0002\u0625\u0624\u0003\u0002\u0002\u0002",
      "\u0625\u0626\u0003\u0002\u0002\u0002\u0626\u0627\u0003\u0002\u0002\u0002",
      "\u0627\u0629\u0007Z\u0002\u0002\u0628\u062a\u0005\u00ceh\u0002\u0629",
      "\u0628\u0003\u0002\u0002\u0002\u0629\u062a\u0003\u0002\u0002\u0002\u062a",
      "\u062c\u0003\u0002\u0002\u0002\u062b\u0622\u0003\u0002\u0002\u0002\u062b",
      "\u0623\u0003\u0002\u0002\u0002\u062c\u062e\u0003\u0002\u0002\u0002\u062d",
      "\u0621\u0003\u0002\u0002\u0002\u062e\u0631\u0003\u0002\u0002\u0002\u062f",
      "\u062d\u0003\u0002\u0002\u0002\u062f\u0630\u0003\u0002\u0002\u0002\u0630",
      "\u0103\u0003\u0002\u0002\u0002\u0631\u062f\u0003\u0002\u0002\u0002\u0632",
      "\u0637\u0005\u0106\u0084\u0002\u0633\u0635\u0007|\u0002\u0002\u0634",
      "\u0633\u0003\u0002\u0002\u0002\u0634\u0635\u0003\u0002\u0002\u0002\u0635",
      "\u0636\u0003\u0002\u0002\u0002\u0636\u0638\u0007\u0085\u0002\u0002\u0637",
      "\u0634\u0003\u0002\u0002\u0002\u0637\u0638\u0003\u0002\u0002\u0002\u0638",
      "\u0105\u0003\u0002\u0002\u0002\u0639\u063e\u0005\u0108\u0085\u0002\u063a",
      "\u063b\u0007|\u0002\u0002\u063b\u063d\u0005\u0108\u0085\u0002\u063c",
      "\u063a\u0003\u0002\u0002\u0002\u063d\u0640\u0003\u0002\u0002\u0002\u063e",
      "\u063c\u0003\u0002\u0002\u0002\u063e\u063f\u0003\u0002\u0002\u0002\u063f",
      "\u0107\u0003\u0002\u0002\u0002\u0640\u063e\u0003\u0002\u0002\u0002\u0641",
      "\u0643\u0005\u00ceh\u0002\u0642\u0641\u0003\u0002\u0002\u0002\u0642",
      "\u0643\u0003\u0002\u0002\u0002\u0643\u0644\u0003\u0002\u0002\u0002\u0644",
      "\u0649\u0005\u008cG\u0002\u0645\u064a\u0005\u00e4s\u0002\u0646\u0648",
      "\u0005\u00fa~\u0002\u0647\u0646\u0003\u0002\u0002\u0002\u0647\u0648",
      "\u0003\u0002\u0002\u0002\u0648\u064a\u0003\u0002\u0002\u0002\u0649\u0645",
      "\u0003\u0002\u0002\u0002\u0649\u0647\u0003\u0002\u0002\u0002\u064a\u064d",
      "\u0003\u0002\u0002\u0002\u064b\u064c\u0007g\u0002\u0002\u064c\u064e",
      "\u0005\u0112\u008a\u0002\u064d\u064b\u0003\u0002\u0002\u0002\u064d\u064e",
      "\u0003\u0002\u0002\u0002\u064e\u0109\u0003\u0002\u0002\u0002\u064f\u0651",
      "\u0005\u00ceh\u0002\u0650\u064f\u0003\u0002\u0002\u0002\u0650\u0651",
      "\u0003\u0002\u0002\u0002\u0651\u0653\u0003\u0002\u0002\u0002\u0652\u0654",
      "\u0005\u008cG\u0002\u0653\u0652\u0003\u0002\u0002\u0002\u0653\u0654",
      "\u0003\u0002\u0002\u0002\u0654\u0655\u0003\u0002\u0002\u0002\u0655\u0657",
      "\u0005\u00e4s\u0002\u0656\u0658\u0005\u012c\u0097\u0002\u0657\u0656",
      "\u0003\u0002\u0002\u0002\u0657\u0658\u0003\u0002\u0002\u0002\u0658\u0659",
      "\u0003\u0002\u0002\u0002\u0659\u065a\u0005\u010c\u0087\u0002\u065a\u010b",
      "\u0003\u0002\u0002\u0002\u065b\u065d\u0005\u0144\u00a3\u0002\u065c\u065b",
      "\u0003\u0002\u0002\u0002\u065c\u065d\u0003\u0002\u0002\u0002\u065d\u065e",
      "\u0003\u0002\u0002\u0002\u065e\u0664\u0005f4\u0002\u065f\u0664\u0005",
      "\u016a\u00b6\u0002\u0660\u0661\u0007g\u0002\u0002\u0661\u0662\t\u0015",
      "\u0002\u0002\u0662\u0664\u0007\u0082\u0002\u0002\u0663\u065c\u0003\u0002",
      "\u0002\u0002\u0663\u065f\u0003\u0002\u0002\u0002\u0663\u0660\u0003\u0002",
      "\u0002\u0002\u0664\u010d\u0003\u0002\u0002\u0002\u0665\u066b\u0005\u0110",
      "\u0089\u0002\u0666\u0667\u0007W\u0002\u0002\u0667\u0668\u0005$\u0013",
      "\u0002\u0668\u0669\u0007X\u0002\u0002\u0669\u066b\u0003\u0002\u0002",
      "\u0002\u066a\u0665\u0003\u0002\u0002\u0002\u066a\u0666\u0003\u0002\u0002",
      "\u0002\u066b\u010f\u0003\u0002\u0002\u0002\u066c\u066d\u0007g\u0002",
      "\u0002\u066d\u0670\u0005\u0112\u008a\u0002\u066e\u0670\u0005\u0116\u008c",
      "\u0002\u066f\u066c\u0003\u0002\u0002\u0002\u066f\u066e\u0003\u0002\u0002",
      "\u0002\u0670\u0111\u0003\u0002\u0002\u0002\u0671\u0674\u0005X-\u0002",
      "\u0672\u0674\u0005\u0116\u008c\u0002\u0673\u0671\u0003\u0002\u0002\u0002",
      "\u0673\u0672\u0003\u0002\u0002\u0002\u0674\u0113\u0003\u0002\u0002\u0002",
      "\u0675\u0677\u0005\u0112\u008a\u0002\u0676\u0678\u0007\u0085\u0002\u0002",
      "\u0677\u0676\u0003\u0002\u0002\u0002\u0677\u0678\u0003\u0002\u0002\u0002",
      "\u0678\u0680\u0003\u0002\u0002\u0002\u0679\u067a\u0007|\u0002\u0002",
      "\u067a\u067c\u0005\u0112\u008a\u0002\u067b\u067d\u0007\u0085\u0002\u0002",
      "\u067c\u067b\u0003\u0002\u0002\u0002\u067c\u067d\u0003\u0002\u0002\u0002",
      "\u067d\u067f\u0003\u0002\u0002\u0002\u067e\u0679\u0003\u0002\u0002\u0002",
      "\u067f\u0682\u0003\u0002\u0002\u0002\u0680\u067e\u0003\u0002\u0002\u0002",
      "\u0680\u0681\u0003\u0002\u0002\u0002\u0681\u0115\u0003\u0002\u0002\u0002",
      "\u0682\u0680\u0003\u0002\u0002\u0002\u0683\u0688\u0007[\u0002\u0002",
      "\u0684\u0686\u0005\u0114\u008b\u0002\u0685\u0687\u0007|\u0002\u0002",
      "\u0686\u0685\u0003\u0002\u0002\u0002\u0686\u0687\u0003\u0002\u0002\u0002",
      "\u0687\u0689\u0003\u0002\u0002\u0002\u0688\u0684\u0003\u0002\u0002\u0002",
      "\u0688\u0689\u0003\u0002\u0002\u0002\u0689\u068a\u0003\u0002\u0002\u0002",
      "\u068a\u068b\u0007\\\u0002\u0002\u068b\u0117\u0003\u0002\u0002\u0002",
      "\u068c\u068f\u0007\u0086\u0002\u0002\u068d\u068f\u0005\u0158\u00ad\u0002",
      "\u068e\u068c\u0003\u0002\u0002\u0002\u068e\u068d\u0003\u0002\u0002\u0002",
      "\u068f\u0119\u0003\u0002\u0002\u0002\u0690\u0691\u0005\u011c\u008f\u0002",
      "\u0691\u0693\u0007[\u0002\u0002\u0692\u0694\u0005\u0124\u0093\u0002",
      "\u0693\u0692\u0003\u0002\u0002\u0002\u0693\u0694\u0003\u0002\u0002\u0002",
      "\u0694\u0695\u0003\u0002\u0002\u0002\u0695\u0696\u0007\\\u0002\u0002",
      "\u0696\u011b\u0003\u0002\u0002\u0002\u0697\u0699\u0005\u0122\u0092\u0002",
      "\u0698\u069a\u0005\u00ceh\u0002\u0699\u0698\u0003\u0002\u0002\u0002",
      "\u0699\u069a\u0003\u0002\u0002\u0002\u069a\u069f\u0003\u0002\u0002\u0002",
      "\u069b\u069d\u0005\u011e\u0090\u0002\u069c\u069e\u0005\u0120\u0091\u0002",
      "\u069d\u069c\u0003\u0002\u0002\u0002\u069d\u069e\u0003\u0002\u0002\u0002",
      "\u069e\u06a0\u0003\u0002\u0002\u0002\u069f\u069b\u0003\u0002\u0002\u0002",
      "\u069f\u06a0\u0003\u0002\u0002\u0002\u06a0\u06a2\u0003\u0002\u0002\u0002",
      "\u06a1\u06a3\u0005\u0132\u009a\u0002\u06a2\u06a1\u0003\u0002\u0002\u0002",
      "\u06a2\u06a3\u0003\u0002\u0002\u0002\u06a3\u06af\u0003\u0002\u0002\u0002",
      "\u06a4\u06a6\u0007O\u0002\u0002\u06a5\u06a7\u0005\u00ceh\u0002\u06a6",
      "\u06a5\u0003\u0002\u0002\u0002\u06a6\u06a7\u0003\u0002\u0002\u0002\u06a7",
      "\u06ac\u0003\u0002\u0002\u0002\u06a8\u06aa\u0005\u011e\u0090\u0002\u06a9",
      "\u06ab\u0005\u0120\u0091\u0002\u06aa\u06a9\u0003\u0002\u0002\u0002\u06aa",
      "\u06ab\u0003\u0002\u0002\u0002\u06ab\u06ad\u0003\u0002\u0002\u0002\u06ac",
      "\u06a8\u0003\u0002\u0002\u0002\u06ac\u06ad\u0003\u0002\u0002\u0002\u06ad",
      "\u06af\u0003\u0002\u0002\u0002\u06ae\u0697\u0003\u0002\u0002\u0002\u06ae",
      "\u06a4\u0003\u0002\u0002\u0002\u06af\u011d\u0003\u0002\u0002\u0002\u06b0",
      "\u06b2\u0005\f\u0007\u0002\u06b1\u06b0\u0003\u0002\u0002\u0002\u06b1",
      "\u06b2\u0003\u0002\u0002\u0002\u06b2\u06b3\u0003\u0002\u0002\u0002\u06b3",
      "\u06b4\u0005\u0118\u008d\u0002\u06b4\u011f\u0003\u0002\u0002\u0002\u06b5",
      "\u06b6\u0007(\u0002\u0002\u06b6\u0121\u0003\u0002\u0002\u0002\u06b7",
      "\u06b8\t\u0011\u0002\u0002\u06b8\u0123\u0003\u0002\u0002\u0002\u06b9",
      "\u06be\u0005\u0126\u0094\u0002\u06ba\u06bb\u0005\u013c\u009f\u0002\u06bb",
      "\u06bc\u0007\u0080\u0002\u0002\u06bc\u06be\u0003\u0002\u0002\u0002\u06bd",
      "\u06b9\u0003\u0002\u0002\u0002\u06bd\u06ba\u0003\u0002\u0002\u0002\u06be",
      "\u06bf\u0003\u0002\u0002\u0002\u06bf\u06bd\u0003\u0002\u0002\u0002\u06bf",
      "\u06c0\u0003\u0002\u0002\u0002\u06c0\u0125\u0003\u0002\u0002\u0002\u06c1",
      "\u06c3\u0005\u00ceh\u0002\u06c2\u06c1\u0003\u0002\u0002\u0002\u06c2",
      "\u06c3\u0003\u0002\u0002\u0002\u06c3\u06c5\u0003\u0002\u0002\u0002\u06c4",
      "\u06c6\u0005\u008cG\u0002\u06c5\u06c4\u0003\u0002\u0002\u0002\u06c5",
      "\u06c6\u0003\u0002\u0002\u0002\u06c6\u06c8\u0003\u0002\u0002\u0002\u06c7",
      "\u06c9\u0005\u0128\u0095\u0002\u06c8\u06c7\u0003\u0002\u0002\u0002\u06c8",
      "\u06c9\u0003\u0002\u0002\u0002\u06c9\u06ca\u0003\u0002\u0002\u0002\u06ca",
      "\u06d2\u0007\u0082\u0002\u0002\u06cb\u06d2\u0005\u010a\u0086\u0002\u06cc",
      "\u06d2\u0005\u00c6d\u0002\u06cd\u06d2\u0005\u0084C\u0002\u06ce\u06d2",
      "\u0005\u0150\u00a9\u0002\u06cf\u06d2\u0005\u0080A\u0002\u06d0\u06d2",
      "\u0005\u0086D\u0002\u06d1\u06c2\u0003\u0002\u0002\u0002\u06d1\u06cb",
      "\u0003\u0002\u0002\u0002\u06d1\u06cc\u0003\u0002\u0002\u0002\u06d1\u06cd",
      "\u0003\u0002\u0002\u0002\u06d1\u06ce\u0003\u0002\u0002\u0002\u06d1\u06cf",
      "\u0003\u0002\u0002\u0002\u06d1\u06d0\u0003\u0002\u0002\u0002\u06d2\u0127",
      "\u0003\u0002\u0002\u0002\u06d3\u06d8\u0005\u012a\u0096\u0002\u06d4\u06d5",
      "\u0007|\u0002\u0002\u06d5\u06d7\u0005\u012a\u0096\u0002\u06d6\u06d4",
      "\u0003\u0002\u0002\u0002\u06d7\u06da\u0003\u0002\u0002\u0002\u06d8\u06d6",
      "\u0003\u0002\u0002\u0002\u06d8\u06d9\u0003\u0002\u0002\u0002\u06d9\u0129",
      "\u0003\u0002\u0002\u0002\u06da\u06d8\u0003\u0002\u0002\u0002\u06db\u06e5",
      "\u0005\u00e4s\u0002\u06dc\u06de\u0005\u012c\u0097\u0002\u06dd\u06dc",
      "\u0003\u0002\u0002\u0002\u06dd\u06de\u0003\u0002\u0002\u0002\u06de\u06e0",
      "\u0003\u0002\u0002\u0002\u06df\u06e1\u0005\u0130\u0099\u0002\u06e0\u06df",
      "\u0003\u0002\u0002\u0002\u06e0\u06e1\u0003\u0002\u0002\u0002\u06e1\u06e6",
      "\u0003\u0002\u0002\u0002\u06e2\u06e4\u0005\u0110\u0089\u0002\u06e3\u06e2",
      "\u0003\u0002\u0002\u0002\u06e3\u06e4\u0003\u0002\u0002\u0002\u06e4\u06e6",
      "\u0003\u0002\u0002\u0002\u06e5\u06dd\u0003\u0002\u0002\u0002\u06e5\u06e3",
      "\u0003\u0002\u0002\u0002\u06e6\u06f0\u0003\u0002\u0002\u0002\u06e7\u06e9",
      "\u0007\u0086\u0002\u0002\u06e8\u06e7\u0003\u0002\u0002\u0002\u06e8\u06e9",
      "\u0003\u0002\u0002\u0002\u06e9\u06eb\u0003\u0002\u0002\u0002\u06ea\u06ec",
      "\u0005\u00ceh\u0002\u06eb\u06ea\u0003\u0002\u0002\u0002\u06eb\u06ec",
      "\u0003\u0002\u0002\u0002\u06ec\u06ed\u0003\u0002\u0002\u0002\u06ed\u06ee",
      "\u0007\u0080\u0002\u0002\u06ee\u06f0\u0005^0\u0002\u06ef\u06db\u0003",
      "\u0002\u0002\u0002\u06ef\u06e8\u0003\u0002\u0002\u0002\u06f0\u012b\u0003",
      "\u0002\u0002\u0002\u06f1\u06f3\u0005\u012e\u0098\u0002\u06f2\u06f1\u0003",
      "\u0002\u0002\u0002\u06f3\u06f4\u0003\u0002\u0002\u0002\u06f4\u06f2\u0003",
      "\u0002\u0002\u0002\u06f4\u06f5\u0003\u0002\u0002\u0002\u06f5\u012d\u0003",
      "\u0002\u0002\u0002\u06f6\u06f7\t\u0016\u0002\u0002\u06f7\u012f\u0003",
      "\u0002\u0002\u0002\u06f8\u06f9\u0007g\u0002\u0002\u06f9\u06fa\u0007",
      "\u0088\u0002\u0002\u06fa\u06fb\b\u0099\u0001\u0002\u06fb\u0131\u0003",
      "\u0002\u0002\u0002\u06fc\u06fd\u0007\u0080\u0002\u0002\u06fd\u06fe\u0005",
      "\u0134\u009b\u0002\u06fe\u0133\u0003\u0002\u0002\u0002\u06ff\u0701\u0005",
      "\u0136\u009c\u0002\u0700\u0702\u0007\u0085\u0002\u0002\u0701\u0700\u0003",
      "\u0002\u0002\u0002\u0701\u0702\u0003\u0002\u0002\u0002\u0702\u070a\u0003",
      "\u0002\u0002\u0002\u0703\u0704\u0007|\u0002\u0002\u0704\u0706\u0005",
      "\u0136\u009c\u0002\u0705\u0707\u0007\u0085\u0002\u0002\u0706\u0705\u0003",
      "\u0002\u0002\u0002\u0706\u0707\u0003\u0002\u0002\u0002\u0707\u0709\u0003",
      "\u0002\u0002\u0002\u0708\u0703\u0003\u0002\u0002\u0002\u0709\u070c\u0003",
      "\u0002\u0002\u0002\u070a\u0708\u0003\u0002\u0002\u0002\u070a\u070b\u0003",
      "\u0002\u0002\u0002\u070b\u0135\u0003\u0002\u0002\u0002\u070c\u070a\u0003",
      "\u0002\u0002\u0002\u070d\u070f\u0005\u00ceh\u0002\u070e\u070d\u0003",
      "\u0002\u0002\u0002\u070e\u070f\u0003\u0002\u0002\u0002\u070f\u071c\u0003",
      "\u0002\u0002\u0002\u0710\u071d\u0005\u013a\u009e\u0002\u0711\u0713\u0007",
      "R\u0002\u0002\u0712\u0714\u0005\u013c\u009f\u0002\u0713\u0712\u0003",
      "\u0002\u0002\u0002\u0713\u0714\u0003\u0002\u0002\u0002\u0714\u0715\u0003",
      "\u0002\u0002\u0002\u0715\u071d\u0005\u013a\u009e\u0002\u0716\u0718\u0005",
      "\u013c\u009f\u0002\u0717\u0719\u0007R\u0002\u0002\u0718\u0717\u0003",
      "\u0002\u0002\u0002\u0718\u0719\u0003\u0002\u0002\u0002\u0719\u071a\u0003",
      "\u0002\u0002\u0002\u071a\u071b\u0005\u013a\u009e\u0002\u071b\u071d\u0003",
      "\u0002\u0002\u0002\u071c\u0710\u0003\u0002\u0002\u0002\u071c\u0711\u0003",
      "\u0002\u0002\u0002\u071c\u0716\u0003\u0002\u0002\u0002\u071d\u0137\u0003",
      "\u0002\u0002\u0002\u071e\u0720\u0005\f\u0007\u0002\u071f\u071e\u0003",
      "\u0002\u0002\u0002\u071f\u0720\u0003\u0002\u0002\u0002\u0720\u0721\u0003",
      "\u0002\u0002\u0002\u0721\u0724\u0005\u0118\u008d\u0002\u0722\u0724\u0005",
      "\u00a4S\u0002\u0723\u071f\u0003\u0002\u0002\u0002\u0723\u0722\u0003",
      "\u0002\u0002\u0002\u0724\u0139\u0003\u0002\u0002\u0002\u0725\u0726\u0005",
      "\u0138\u009d\u0002\u0726\u013b\u0003\u0002\u0002\u0002\u0727\u0728\t",
      "\u0017\u0002\u0002\u0728\u013d\u0003\u0002\u0002\u0002\u0729\u072a\u0007",
      "6\u0002\u0002\u072a\u072b\u0005\u0140\u00a1\u0002\u072b\u013f\u0003",
      "\u0002\u0002\u0002\u072c\u072e\u0005\u0098M\u0002\u072d\u072f\u0005",
      "\u0142\u00a2\u0002\u072e\u072d\u0003\u0002\u0002\u0002\u072e\u072f\u0003",
      "\u0002\u0002\u0002\u072f\u0141\u0003\u0002\u0002\u0002\u0730\u0732\u0005",
      "\u00eex\u0002\u0731\u0733\u0005\u0142\u00a2\u0002\u0732\u0731\u0003",
      "\u0002\u0002\u0002\u0732\u0733\u0003\u0002\u0002\u0002\u0733\u0143\u0003",
      "\u0002\u0002\u0002\u0734\u0735\u0007\u0080\u0002\u0002\u0735\u0736\u0005",
      "\u0146\u00a4\u0002\u0736\u0145\u0003\u0002\u0002\u0002\u0737\u0739\u0005",
      "\u0148\u00a5\u0002\u0738\u073a\u0007\u0085\u0002\u0002\u0739\u0738\u0003",
      "\u0002\u0002\u0002\u0739\u073a\u0003\u0002\u0002\u0002\u073a\u0742\u0003",
      "\u0002\u0002\u0002\u073b\u073c\u0007|\u0002\u0002\u073c\u073e\u0005",
      "\u0148\u00a5\u0002\u073d\u073f\u0007\u0085\u0002\u0002\u073e\u073d\u0003",
      "\u0002\u0002\u0002\u073e\u073f\u0003\u0002\u0002\u0002\u073f\u0741\u0003",
      "\u0002\u0002\u0002\u0740\u073b\u0003\u0002\u0002\u0002\u0741\u0744\u0003",
      "\u0002\u0002\u0002\u0742\u0740\u0003\u0002\u0002\u0002\u0742\u0743\u0003",
      "\u0002\u0002\u0002\u0743\u0147\u0003\u0002\u0002\u0002\u0744\u0742\u0003",
      "\u0002\u0002\u0002\u0745\u074c\u0005\u014a\u00a6\u0002\u0746\u0748\u0007",
      "W\u0002\u0002\u0747\u0749\u0005$\u0013\u0002\u0748\u0747\u0003\u0002",
      "\u0002\u0002\u0748\u0749\u0003\u0002\u0002\u0002\u0749\u074a\u0003\u0002",
      "\u0002\u0002\u074a\u074d\u0007X\u0002\u0002\u074b\u074d\u0005\u0116",
      "\u008c\u0002\u074c\u0746\u0003\u0002\u0002\u0002\u074c\u074b\u0003\u0002",
      "\u0002\u0002\u074d\u0149\u0003\u0002\u0002\u0002\u074e\u0751\u0005\u0138",
      "\u009d\u0002\u074f\u0751\u0007\u0086\u0002\u0002\u0750\u074e\u0003\u0002",
      "\u0002\u0002\u0750\u074f\u0003\u0002\u0002\u0002\u0751\u014b\u0003\u0002",
      "\u0002\u0002\u0752\u0753\u00076\u0002\u0002\u0753\u0754\u0005\u017c",
      "\u00bf\u0002\u0754\u014d\u0003\u0002\u0002\u0002\u0755\u0759\u00076",
      "\u0002\u0002\u0756\u0757\u0007\u0006\u0002\u0002\u0757\u075a\u0007\u0086",
      "\u0002\u0002\u0758\u075a\u0007\u008e\u0002\u0002\u0759\u0756\u0003\u0002",
      "\u0002\u0002\u0759\u0758\u0003\u0002\u0002\u0002\u075a\u014f\u0003\u0002",
      "\u0002\u0002\u075b\u075c\u0007F\u0002\u0002\u075c\u075d\u0007h\u0002",
      "\u0002\u075d\u075e\u0005\u0152\u00aa\u0002\u075e\u075f\u0007i\u0002",
      "\u0002\u075f\u0760\u0005|?\u0002\u0760\u0151\u0003\u0002\u0002\u0002",
      "\u0761\u0766\u0005\u0154\u00ab\u0002\u0762\u0763\u0007|\u0002\u0002",
      "\u0763\u0765\u0005\u0154\u00ab\u0002\u0764\u0762\u0003\u0002\u0002\u0002",
      "\u0765\u0768\u0003\u0002\u0002\u0002\u0766\u0764\u0003\u0002\u0002\u0002",
      "\u0766\u0767\u0003\u0002\u0002\u0002\u0767\u0153\u0003\u0002\u0002\u0002",
      "\u0768\u0766\u0003\u0002\u0002\u0002\u0769\u076c\u0005\u0156\u00ac\u0002",
      "\u076a\u076c\u0005\u0108\u0085\u0002\u076b\u0769\u0003\u0002\u0002\u0002",
      "\u076b\u076a\u0003\u0002\u0002\u0002\u076c\u0155\u0003\u0002\u0002\u0002",
      "\u076d\u076e\u0007F\u0002\u0002\u076e\u076f\u0007h\u0002\u0002\u076f",
      "\u0770\u0005\u0152\u00aa\u0002\u0770\u0771\u0007i\u0002\u0002\u0771",
      "\u0773\u0003\u0002\u0002\u0002\u0772\u076d\u0003\u0002\u0002\u0002\u0772",
      "\u0773\u0003\u0002\u0002\u0002\u0773\u0774\u0003\u0002\u0002\u0002\u0774",
      "\u0777\u0007\u0017\u0002\u0002\u0775\u0777\u0007N\u0002\u0002\u0776",
      "\u0772\u0003\u0002\u0002\u0002\u0776\u0775\u0003\u0002\u0002\u0002\u0777",
      "\u0783\u0003\u0002\u0002\u0002\u0778\u077a\u0007\u0085\u0002\u0002\u0779",
      "\u0778\u0003\u0002\u0002\u0002\u0779\u077a\u0003\u0002\u0002\u0002\u077a",
      "\u077c\u0003\u0002\u0002\u0002\u077b\u077d\u0007\u0086\u0002\u0002\u077c",
      "\u077b\u0003\u0002\u0002\u0002\u077c\u077d\u0003\u0002\u0002\u0002\u077d",
      "\u0784\u0003\u0002\u0002\u0002\u077e\u0780\u0007\u0086\u0002\u0002\u077f",
      "\u077e\u0003\u0002\u0002\u0002\u077f\u0780\u0003\u0002\u0002\u0002\u0780",
      "\u0781\u0003\u0002\u0002\u0002\u0781\u0782\u0007g\u0002\u0002\u0782",
      "\u0784\u0005\u00f8}\u0002\u0783\u0779\u0003\u0002\u0002\u0002\u0783",
      "\u077f\u0003\u0002\u0002\u0002\u0784\u0157\u0003\u0002\u0002\u0002\u0785",
      "\u0786\u0005\u015c\u00af\u0002\u0786\u0788\u0007h\u0002\u0002\u0787",
      "\u0789\u0005\u015e\u00b0\u0002\u0788\u0787\u0003\u0002\u0002\u0002\u0788",
      "\u0789\u0003\u0002\u0002\u0002\u0789\u078a\u0003\u0002\u0002\u0002\u078a",
      "\u078b\u0007i\u0002\u0002\u078b\u0159\u0003\u0002\u0002\u0002\u078c",
      "\u0798\u0005\u0158\u00ad\u0002\u078d\u0790\u0005\u014c\u00a7\u0002\u078e",
      "\u0790\u0005\u014e\u00a8\u0002\u078f\u078d\u0003\u0002\u0002\u0002\u078f",
      "\u078e\u0003\u0002\u0002\u0002\u0790\u0791\u0003\u0002\u0002\u0002\u0791",
      "\u0793\u0007h\u0002\u0002\u0792\u0794\u0005\u015e\u00b0\u0002\u0793",
      "\u0792\u0003\u0002\u0002\u0002\u0793\u0794\u0003\u0002\u0002\u0002\u0794",
      "\u0795\u0003\u0002\u0002\u0002\u0795\u0796\u0007i\u0002\u0002\u0796",
      "\u0798\u0003\u0002\u0002\u0002\u0797\u078c\u0003\u0002\u0002\u0002\u0797",
      "\u078f\u0003\u0002\u0002\u0002\u0798\u015b\u0003\u0002\u0002\u0002\u0799",
      "\u079a\u0007\u0086\u0002\u0002\u079a\u015d\u0003\u0002\u0002\u0002\u079b",
      "\u079d\u0005\u0160\u00b1\u0002\u079c\u079e\u0007\u0085\u0002\u0002\u079d",
      "\u079c\u0003\u0002\u0002\u0002\u079d\u079e\u0003\u0002\u0002\u0002\u079e",
      "\u07a6\u0003\u0002\u0002\u0002\u079f\u07a0\u0007|\u0002\u0002\u07a0",
      "\u07a2\u0005\u0160\u00b1\u0002\u07a1\u07a3\u0007\u0085\u0002\u0002\u07a2",
      "\u07a1\u0003\u0002\u0002\u0002\u07a2\u07a3\u0003\u0002\u0002\u0002\u07a3",
      "\u07a5\u0003\u0002\u0002\u0002\u07a4\u079f\u0003\u0002\u0002\u0002\u07a5",
      "\u07a8\u0003\u0002\u0002\u0002\u07a6\u07a4\u0003\u0002\u0002\u0002\u07a6",
      "\u07a7\u0003\u0002\u0002\u0002\u07a7\u015f\u0003\u0002\u0002\u0002\u07a8",
      "\u07a6\u0003\u0002\u0002\u0002\u07a9\u07ad\u0005\u00f8}\u0002\u07aa",
      "\u07ad\u0005^0\u0002\u07ab\u07ad\u0005\u0006\u0004\u0002\u07ac\u07a9",
      "\u0003\u0002\u0002\u0002\u07ac\u07aa\u0003\u0002\u0002\u0002\u07ac\u07ab",
      "\u0003\u0002\u0002\u0002\u07ad\u0161\u0003\u0002\u0002\u0002\u07ae\u07af",
      "\u0007N\u0002\u0002\u07af\u07b5\u0005\f\u0007\u0002\u07b0\u07b6\u0007",
      "\u0086\u0002\u0002\u07b1\u07b3\u0007F\u0002\u0002\u07b2\u07b1\u0003",
      "\u0002\u0002\u0002\u07b2\u07b3\u0003\u0002\u0002\u0002\u07b3\u07b4\u0003",
      "\u0002\u0002\u0002\u07b4\u07b6\u0005\u0158\u00ad\u0002\u07b5\u07b0\u0003",
      "\u0002\u0002\u0002\u07b5\u07b2\u0003\u0002\u0002\u0002\u07b6\u0163\u0003",
      "\u0002\u0002\u0002\u07b7\u07b9\u0007&\u0002\u0002\u07b8\u07b7\u0003",
      "\u0002\u0002\u0002\u07b8\u07b9\u0003\u0002\u0002\u0002\u07b9\u07ba\u0003",
      "\u0002\u0002\u0002\u07ba\u07bb\u0007F\u0002\u0002\u07bb\u07bc\u0005",
      "|?\u0002\u07bc\u0165\u0003\u0002\u0002\u0002\u07bd\u07be\u0007F\u0002",
      "\u0002\u07be\u07bf\u0007h\u0002\u0002\u07bf\u07c0\u0007i\u0002\u0002",
      "\u07c0\u07c1\u0005|?\u0002\u07c1\u0167\u0003\u0002\u0002\u0002\u07c2",
      "\u07c3\u0007K\u0002\u0002\u07c3\u07c4\u0005f4\u0002\u07c4\u07c5\u0005",
      "\u016c\u00b7\u0002\u07c5\u0169\u0003\u0002\u0002\u0002\u07c6\u07c8\u0007",
      "K\u0002\u0002\u07c7\u07c9\u0005\u0144\u00a3\u0002\u07c8\u07c7\u0003",
      "\u0002\u0002\u0002\u07c8\u07c9\u0003\u0002\u0002\u0002\u07c9\u07ca\u0003",
      "\u0002\u0002\u0002\u07ca\u07cb\u0005f4\u0002\u07cb\u07cc\u0005\u016c",
      "\u00b7\u0002\u07cc\u016b\u0003\u0002\u0002\u0002\u07cd\u07cf\u0005\u016e",
      "\u00b8\u0002\u07ce\u07cd\u0003\u0002\u0002\u0002\u07cf\u07d0\u0003\u0002",
      "\u0002\u0002\u07d0\u07ce\u0003\u0002\u0002\u0002\u07d0\u07d1\u0003\u0002",
      "\u0002\u0002\u07d1\u016d\u0003\u0002\u0002\u0002\u07d2\u07d3\u0007\u0013",
      "\u0002\u0002\u07d3\u07d4\u0007W\u0002\u0002\u07d4\u07d5\u0005\u0170",
      "\u00b9\u0002\u07d5\u07d6\u0007X\u0002\u0002\u07d6\u07d7\u0005f4\u0002",
      "\u07d7\u016f\u0003\u0002\u0002\u0002\u07d8\u07da\u0005\u00ceh\u0002",
      "\u07d9\u07d8\u0003\u0002\u0002\u0002\u07d9\u07da\u0003\u0002\u0002\u0002",
      "\u07da\u07db\u0003\u0002\u0002\u0002\u07db\u07de\u0005\u0098M\u0002",
      "\u07dc\u07df\u0005\u00e4s\u0002\u07dd\u07df\u0005\u00fa~\u0002\u07de",
      "\u07dc\u0003\u0002\u0002\u0002\u07de\u07dd\u0003\u0002\u0002\u0002\u07de",
      "\u07df\u0003\u0002\u0002\u0002\u07df\u07e2\u0003\u0002\u0002\u0002\u07e0",
      "\u07e2\u0007\u0085\u0002\u0002\u07e1\u07d9\u0003\u0002\u0002\u0002\u07e1",
      "\u07e0\u0003\u0002\u0002\u0002\u07e2\u0171\u0003\u0002\u0002\u0002\u07e3",
      "\u07e5\u0007I\u0002\u0002\u07e4\u07e6\u0005X-\u0002\u07e5\u07e4\u0003",
      "\u0002\u0002\u0002\u07e5\u07e6\u0003\u0002\u0002\u0002\u07e6\u0173\u0003",
      "\u0002\u0002\u0002\u07e7\u07ea\u0005\u0176\u00bc\u0002\u07e8\u07ea\u0005",
      "\u017a\u00be\u0002\u07e9\u07e7\u0003\u0002\u0002\u0002\u07e9\u07e8\u0003",
      "\u0002\u0002\u0002\u07ea\u0175\u0003\u0002\u0002\u0002\u07eb\u07ec\u0007",
      "I\u0002\u0002\u07ec\u07ee\u0007W\u0002\u0002\u07ed\u07ef\u0005\u0178",
      "\u00bd\u0002\u07ee\u07ed\u0003\u0002\u0002\u0002\u07ee\u07ef\u0003\u0002",
      "\u0002\u0002\u07ef\u07f0\u0003\u0002\u0002\u0002\u07f0\u07f1\u0007X",
      "\u0002\u0002\u07f1\u0177\u0003\u0002\u0002\u0002\u07f2\u07f4\u0005\u00f8",
      "}\u0002\u07f3\u07f5\u0007\u0085\u0002\u0002\u07f4\u07f3\u0003\u0002",
      "\u0002\u0002\u07f4\u07f5\u0003\u0002\u0002\u0002\u07f5\u07fd\u0003\u0002",
      "\u0002\u0002\u07f6\u07f7\u0007|\u0002\u0002\u07f7\u07f9\u0005\u00f8",
      "}\u0002\u07f8\u07fa\u0007\u0085\u0002\u0002\u07f9\u07f8\u0003\u0002",
      "\u0002\u0002\u07f9\u07fa\u0003\u0002\u0002\u0002\u07fa\u07fc\u0003\u0002",
      "\u0002\u0002\u07fb\u07f6\u0003\u0002\u0002\u0002\u07fc\u07ff\u0003\u0002",
      "\u0002\u0002\u07fd\u07fb\u0003\u0002\u0002\u0002\u07fd\u07fe\u0003\u0002",
      "\u0002\u0002\u07fe\u0179\u0003\u0002\u0002\u0002\u07ff\u07fd\u0003\u0002",
      "\u0002\u0002\u0800\u0801\u00074\u0002\u0002\u0801\u0802\u0007W\u0002",
      "\u0002\u0802\u0803\u0005^0\u0002\u0803\u0804\u0007X\u0002\u0002\u0804",
      "\u0807\u0003\u0002\u0002\u0002\u0805\u0807\u00074\u0002\u0002\u0806",
      "\u0800\u0003\u0002\u0002\u0002\u0806\u0805\u0003\u0002\u0002\u0002\u0807",
      "\u017b\u0003\u0002\u0002\u0002\u0808\u080b\u00073\u0002\u0002\u0809",
      "\u080a\u0007Y\u0002\u0002\u080a\u080c\u0007Z\u0002\u0002\u080b\u0809",
      "\u0003\u0002\u0002\u0002\u080b\u080c\u0003\u0002\u0002\u0002\u080c\u083e",
      "\u0003\u0002\u0002\u0002\u080d\u0810\u0007\u001e\u0002\u0002\u080e\u080f",
      "\u0007Y\u0002\u0002\u080f\u0811\u0007Z\u0002\u0002\u0810\u080e\u0003",
      "\u0002\u0002\u0002\u0810\u0811\u0003\u0002\u0002\u0002\u0811\u083e\u0003",
      "\u0002\u0002\u0002\u0812\u083e\u0007]\u0002\u0002\u0813\u083e\u0007",
      "^\u0002\u0002\u0814\u083e\u0007_\u0002\u0002\u0815\u083e\u0007`\u0002",
      "\u0002\u0816\u083e\u0007a\u0002\u0002\u0817\u083e\u0007b\u0002\u0002",
      "\u0818\u083e\u0007c\u0002\u0002\u0819\u083e\u0007d\u0002\u0002\u081a",
      "\u083e\u0007e\u0002\u0002\u081b\u083e\u0007f\u0002\u0002\u081c\u083e",
      "\u0007g\u0002\u0002\u081d\u083e\u0007i\u0002\u0002\u081e\u083e\u0007",
      "h\u0002\u0002\u081f\u083e\u0007w\u0002\u0002\u0820\u083e\u0007j\u0002",
      "\u0002\u0821\u083e\u0007k\u0002\u0002\u0822\u083e\u0007l\u0002\u0002",
      "\u0823\u083e\u0007g\u0002\u0002\u0824\u083e\u0007n\u0002\u0002\u0825",
      "\u083e\u0007o\u0002\u0002\u0826\u083e\u0007p\u0002\u0002\u0827\u083e",
      "\u0007q\u0002\u0002\u0828\u0829\u0007h\u0002\u0002\u0829\u083e\u0007",
      "h\u0002\u0002\u082a\u082b\u0007i\u0002\u0002\u082b\u083e\u0007i\u0002",
      "\u0002\u082c\u083e\u0007s\u0002\u0002\u082d\u083e\u0007r\u0002\u0002",
      "\u082e\u083e\u0007t\u0002\u0002\u082f\u083e\u0007u\u0002\u0002\u0830",
      "\u083e\u0007v\u0002\u0002\u0831\u083e\u0007w\u0002\u0002\u0832\u083e",
      "\u0007x\u0002\u0002\u0833\u083e\u0007y\u0002\u0002\u0834\u083e\u0007",
      "z\u0002\u0002\u0835\u083e\u0007{\u0002\u0002\u0836\u083e\u0007|\u0002",
      "\u0002\u0837\u083e\u0007}\u0002\u0002\u0838\u083e\u0007~\u0002\u0002",
      "\u0839\u083a\u0007W\u0002\u0002\u083a\u083e\u0007X\u0002\u0002\u083b",
      "\u083c\u0007Y\u0002\u0002\u083c\u083e\u0007Z\u0002\u0002\u083d\u0808",
      "\u0003\u0002\u0002\u0002\u083d\u080d\u0003\u0002\u0002\u0002\u083d\u0812",
      "\u0003\u0002\u0002\u0002\u083d\u0813\u0003\u0002\u0002\u0002\u083d\u0814",
      "\u0003\u0002\u0002\u0002\u083d\u0815\u0003\u0002\u0002\u0002\u083d\u0816",
      "\u0003\u0002\u0002\u0002\u083d\u0817\u0003\u0002\u0002\u0002\u083d\u0818",
      "\u0003\u0002\u0002\u0002\u083d\u0819\u0003\u0002\u0002\u0002\u083d\u081a",
      "\u0003\u0002\u0002\u0002\u083d\u081b\u0003\u0002\u0002\u0002\u083d\u081c",
      "\u0003\u0002\u0002\u0002\u083d\u081d\u0003\u0002\u0002\u0002\u083d\u081e",
      "\u0003\u0002\u0002\u0002\u083d\u081f\u0003\u0002\u0002\u0002\u083d\u0820",
      "\u0003\u0002\u0002\u0002\u083d\u0821\u0003\u0002\u0002\u0002\u083d\u0822",
      "\u0003\u0002\u0002\u0002\u083d\u0823\u0003\u0002\u0002\u0002\u083d\u0824",
      "\u0003\u0002\u0002\u0002\u083d\u0825\u0003\u0002\u0002\u0002\u083d\u0826",
      "\u0003\u0002\u0002\u0002\u083d\u0827\u0003\u0002\u0002\u0002\u083d\u0828",
      "\u0003\u0002\u0002\u0002\u083d\u082a\u0003\u0002\u0002\u0002\u083d\u082c",
      "\u0003\u0002\u0002\u0002\u083d\u082d\u0003\u0002\u0002\u0002\u083d\u082e",
      "\u0003\u0002\u0002\u0002\u083d\u082f\u0003\u0002\u0002\u0002\u083d\u0830",
      "\u0003\u0002\u0002\u0002\u083d\u0831\u0003\u0002\u0002\u0002\u083d\u0832",
      "\u0003\u0002\u0002\u0002\u083d\u0833\u0003\u0002\u0002\u0002\u083d\u0834",
      "\u0003\u0002\u0002\u0002\u083d\u0835\u0003\u0002\u0002\u0002\u083d\u0836",
      "\u0003\u0002\u0002\u0002\u083d\u0837\u0003\u0002\u0002\u0002\u083d\u0838",
      "\u0003\u0002\u0002\u0002\u083d\u0839\u0003\u0002\u0002\u0002\u083d\u083b",
      "\u0003\u0002\u0002\u0002\u083e\u017d\u0003\u0002\u0002\u0002\u083f\u0840",
      "\t\u0018\u0002\u0002\u0840\u017f\u0003\u0002\u0002\u0002\u0134\u0181",
      "\u0188\u0191\u0195\u019e\u01a1\u01a5\u01ad\u01b4\u01b7\u01bc\u01c1\u01c7",
      "\u01cf\u01d1\u01da\u01de\u01e2\u01e5\u01e9\u01ec\u01f3\u01f7\u01fa\u01fd",
      "\u0200\u0206\u020a\u020e\u021c\u0220\u0226\u022d\u0233\u0237\u023b\u023d",
      "\u0245\u024a\u0257\u025e\u026a\u0274\u0279\u027d\u0284\u0287\u028f\u0293",
      "\u0296\u029d\u02a4\u02a8\u02ad\u02b1\u02b4\u02b9\u02c8\u02cf\u02d7\u02df",
      "\u02e8\u02ef\u02f6\u02fe\u0306\u030e\u0316\u031e\u0326\u032f\u0337\u0340",
      "\u0347\u034f\u0352\u0355\u035b\u0361\u0367\u036e\u0377\u037f\u0383\u038a",
      "\u038c\u03a0\u03a4\u03aa\u03af\u03b3\u03b6\u03bd\u03c4\u03c8\u03d1\u03dc",
      "\u03e6\u03eb\u03f2\u03f5\u03fa\u03ff\u0414\u0419\u041c\u0427\u042d\u0432",
      "\u0435\u043a\u043d\u0444\u044d\u0452\u0455\u0459\u045d\u0461\u0466\u046b",
      "\u0471\u0477\u047d\u0483\u0489\u048c\u0492\u0496\u049a\u049d\u04a5\u04a7",
      "\u04ad\u04b0\u04b3\u04b6\u04ba\u04be\u04c4\u04ce\u04d4\u04da\u04df\u04e4",
      "\u04e8\u04f5\u04fb\u04ff\u0505\u050a\u0519\u051d\u0522\u0527\u052c\u0532",
      "\u0535\u053e\u0542\u0547\u054b\u0551\u0558\u0569\u056b\u0572\u0577\u057e",
      "\u0582\u0586\u058e\u0594\u059a\u059e\u05a0\u05a4\u05a9\u05ad\u05b0\u05b3",
      "\u05b6\u05bb\u05bf\u05c2\u05c6\u05c9\u05cb\u05d0\u05d7\u05dd\u05e1\u05e7",
      "\u05ed\u05f0\u05f2\u05f8\u05fc\u0602\u0609\u060d\u060f\u0613\u0619\u0625",
      "\u0629\u062b\u062f\u0634\u0637\u063e\u0642\u0647\u0649\u064d\u0650\u0653",
      "\u0657\u065c\u0663\u066a\u066f\u0673\u0677\u067c\u0680\u0686\u0688\u068e",
      "\u0693\u0699\u069d\u069f\u06a2\u06a6\u06aa\u06ac\u06ae\u06b1\u06bd\u06bf",
      "\u06c2\u06c5\u06c8\u06d1\u06d8\u06dd\u06e0\u06e3\u06e5\u06e8\u06eb\u06ef",
      "\u06f4\u0701\u0706\u070a\u070e\u0713\u0718\u071c\u071f\u0723\u072e\u0732",
      "\u0739\u073e\u0742\u0748\u074c\u0750\u0759\u0766\u076b\u0772\u0776\u0779",
      "\u077c\u077f\u0783\u0788\u078f\u0793\u0797\u079d\u07a2\u07a6\u07ac\u07b2",
      "\u07b5\u07b8\u07c8\u07d0\u07d9\u07de\u07e1\u07e5\u07e9\u07ee\u07f4\u07f9",
      "\u07fd\u0806\u080b\u0810\u083d"].join("");
  
  
  const atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);
  
  const decisionsToDFA = atn.decisionToState.map( (ds, index) => new antlr4.dfa.DFA(ds, index) );
  
  const sharedContextCache = new antlr4.PredictionContextCache();
  
  export default class CPP14Parser extends antlr4.Parser {
  
      static grammarFileName = "CPP14Parser.g4";
      static literalNames = [ null, null, null, null, null, null, null, null, 
                              null, null, "'alignas'", "'alignof'", "'asm'", 
                              "'auto'", "'bool'", "'break'", "'case'", "'catch'", 
                              "'char'", "'char16_t'", "'char32_t'", "'class'", 
                              "'const'", "'constexpr'", "'const_cast'", "'continue'", 
                              "'decltype'", "'default'", "'delete'", "'do'", 
                              "'double'", "'dynamic_cast'", "'else'", "'enum'", 
                              "'explicit'", "'export'", "'extern'", "'false'", 
                              "'final'", "'float'", "'for'", "'friend'", "'goto'", 
                              "'if'", "'inline'", "'int'", "'long'", "'mutable'", 
                              "'namespace'", "'new'", "'noexcept'", "'nullptr'", 
                              "'operator'", "'override'", "'private'", "'protected'", 
                              "'public'", "'register'", "'reinterpret_cast'", 
                              "'return'", "'short'", "'signed'", "'sizeof'", 
                              "'static'", "'static_assert'", "'static_cast'", 
                              "'struct'", "'switch'", "'template'", "'this'", 
                              "'thread_local'", "'throw'", "'true'", "'try'", 
                              "'typedef'", "'typeid'", "'typename'", "'union'", 
                              "'unsigned'", "'using'", "'virtual'", "'void'", 
                              "'volatile'", "'wchar_t'", "'while'", "'('", 
                              "')'", "'['", "']'", "'{'", "'}'", "'+'", "'-'", 
                              "'*'", "'/'", "'%'", "'^'", "'&'", "'|'", "'~'", 
                              null, "'='", "'<'", "'>'", "'+='", "'-='", "'*='", 
                              "'/='", "'%='", "'^='", "'&='", "'|='", "'<<='", 
                              "'>>='", "'=='", "'!='", "'<='", "'>='", null, 
                              null, "'++'", "'--'", "','", "'->*'", "'->'", 
                              "'?'", "':'", "'::'", "';'", "'.'", "'.*'", 
                              "'...'" ];
      static symbolicNames = [ null, "IntegerLiteral", "CharacterLiteral", 
                               "FloatingLiteral", "StringLiteral", "BooleanLiteral", 
                               "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro", 
                               "Directive", "Alignas", "Alignof", "Asm", "Auto", 
                               "Bool", "Break", "Case", "Catch", "Char", "Char16", 
                               "Char32", "Class", "Const", "Constexpr", "Const_cast", 
                               "Continue", "Decltype", "Default", "Delete", 
                               "Do", "Double", "Dynamic_cast", "Else", "Enum", 
                               "Explicit", "Export", "Extern", "False_", "Final", 
                               "Float", "For", "Friend", "Goto", "If", "Inline", 
                               "Int", "Long", "Mutable", "Namespace", "New", 
                               "Noexcept", "Nullptr", "Operator", "Override", 
                               "Private", "Protected", "Public", "Register", 
                               "Reinterpret_cast", "Return", "Short", "Signed", 
                               "Sizeof", "Static", "Static_assert", "Static_cast", 
                               "Struct", "Switch", "Template", "This", "Thread_local", 
                               "Throw", "True_", "Try", "Typedef", "Typeid_", 
                               "Typename_", "Union", "Unsigned", "Using", 
                               "Virtual", "Void", "Volatile", "Wchar", "While", 
                               "LeftParen", "RightParen", "LeftBracket", "RightBracket", 
                               "LeftBrace", "RightBrace", "Plus", "Minus", 
                               "Star", "Div", "Mod", "Caret", "And", "Or", 
                               "Tilde", "Not", "Assign", "Less", "Greater", 
                               "PlusAssign", "MinusAssign", "StarAssign", 
                               "DivAssign", "ModAssign", "XorAssign", "AndAssign", 
                               "OrAssign", "LeftShiftAssign", "RightShiftAssign", 
                               "Equal", "NotEqual", "LessEqual", "GreaterEqual", 
                               "AndAnd", "OrOr", "PlusPlus", "MinusMinus", 
                               "Comma", "ArrowStar", "Arrow", "Question", 
                               "Colon", "Doublecolon", "Semi", "Dot", "DotStar", 
                               "Ellipsis", "Identifier", "DecimalLiteral", 
                               "OctalLiteral", "HexadecimalLiteral", "BinaryLiteral", 
                               "Integersuffix", "UserDefinedIntegerLiteral", 
                               "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", 
                               "UserDefinedCharacterLiteral", "Whitespace", 
                               "Newline", "BlockComment", "LineComment" ];
      static ruleNames = [ "translationUnit", "primaryExpression", "idExpression", 
                           "unqualifiedId", "qualifiedId", "nestedNameSpecifier", 
                           "lambdaExpression", "lambdaIntroducer", "lambdaCapture", 
                           "captureDefault", "captureList", "capture", "simpleCapture", 
                           "initcapture", "lambdaDeclarator", "postfixExpression", 
                           "typeIdOfTheTypeId", "expressionList", "pseudoDestructorName", 
                           "unaryExpression", "unaryOperator", "newExpression", 
                           "newPlacement", "newTypeId", "newDeclarator", "noPointerNewDeclarator", 
                           "newInitializer", "deleteExpression", "noExceptExpression", 
                           "castExpression", "pointerMemberExpression", "multiplicativeExpression", 
                           "additiveExpression", "shiftExpression", "shiftOperator", 
                           "relationalExpression", "equalityExpression", "andExpression", 
                           "exclusiveOrExpression", "inclusiveOrExpression", 
                           "logicalAndExpression", "logicalOrExpression", 
                           "conditionalExpression", "assignmentExpression", 
                           "assignmentOperator", "expression", "constantExpression", 
                           "statement", "labeledStatement", "expressionStatement", 
                           "compoundStatement", "statementSeq", "selectionStatement", 
                           "condition", "iterationStatement", "forInitStatement", 
                           "forRangeDeclaration", "forRangeInitializer", "jumpStatement", 
                           "declarationStatement", "declarationseq", "declaration", 
                           "blockDeclaration", "aliasDeclaration", "simpleDeclaration", 
                           "staticAssertDeclaration", "emptyDeclaration", 
                           "attributeDeclaration", "declSpecifier", "declSpecifierSeq", 
                           "storageClassSpecifier", "functionSpecifier", "typedefName", 
                           "typeSpecifier", "trailingTypeSpecifier", "typeSpecifierSeq", 
                           "trailingTypeSpecifierSeq", "simpleTypeLengthModifier", 
                           "simpleTypeSignednessModifier", "simpleTypeSpecifier", 
                           "theTypeName", "decltypeSpecifier", "elaboratedTypeSpecifier", 
                           "enumName", "enumSpecifier", "enumHead", "opaqueEnumDeclaration", 
                           "enumkey", "enumbase", "enumeratorList", "enumeratorDefinition", 
                           "enumerator", "namespaceName", "originalNamespaceName", 
                           "namespaceDefinition", "namespaceAlias", "namespaceAliasDefinition", 
                           "qualifiednamespacespecifier", "usingDeclaration", 
                           "usingDirective", "asmDefinition", "linkageSpecification", 
                           "attributeSpecifierSeq", "attributeSpecifier", 
                           "alignmentspecifier", "attributeList", "attribute", 
                           "attributeNamespace", "attributeArgumentClause", 
                           "balancedTokenSeq", "balancedtoken", "initDeclaratorList", 
                           "initDeclarator", "declarator", "pointerDeclarator", 
                           "noPointerDeclarator", "parametersAndQualifiers", 
                           "trailingReturnType", "pointerOperator", "cvqualifierseq", 
                           "cvQualifier", "refqualifier", "declaratorid", 
                           "theTypeId", "abstractDeclarator", "pointerAbstractDeclarator", 
                           "noPointerAbstractDeclarator", "abstractPackDeclarator", 
                           "noPointerAbstractPackDeclarator", "parameterDeclarationClause", 
                           "parameterDeclarationList", "parameterDeclaration", 
                           "functionDefinition", "functionBody", "initializer", 
                           "braceOrEqualInitializer", "initializerClause", 
                           "initializerList", "bracedInitList", "className", 
                           "classSpecifier", "classHead", "classHeadName", 
                           "classVirtSpecifier", "classKey", "memberSpecification", 
                           "memberdeclaration", "memberDeclaratorList", "memberDeclarator", 
                           "virtualSpecifierSeq", "virtualSpecifier", "pureSpecifier", 
                           "baseClause", "baseSpecifierList", "baseSpecifier", 
                           "classOrDeclType", "baseTypeSpecifier", "accessSpecifier", 
                           "conversionFunctionId", "conversionTypeId", "conversionDeclarator", 
                           "constructorInitializer", "memInitializerList", 
                           "memInitializer", "meminitializerid", "operatorFunctionId", 
                           "literalOperatorId", "templateDeclaration", "templateparameterList", 
                           "templateParameter", "typeParameter", "simpleTemplateId", 
                           "templateId", "templateName", "templateArgumentList", 
                           "templateArgument", "typeNameSpecifier", "explicitInstantiation", 
                           "explicitSpecialization", "tryBlock", "functionTryBlock", 
                           "handlerSeq", "handler", "exceptionDeclaration", 
                           "throwExpression", "exceptionSpecification", "dynamicExceptionSpecification", 
                           "typeIdList", "noeExceptSpecification", "theOperator", 
                           "literal" ];
  
      constructor(input) {
          super(input);
          this._interp = new antlr4.atn.ParserATNSimulator(this, atn, decisionsToDFA, sharedContextCache);
          this.ruleNames = CPP14Parser.ruleNames;
          this.literalNames = CPP14Parser.literalNames;
          this.symbolicNames = CPP14Parser.symbolicNames;
      }
  
      get atn() {
          return atn;
      }
  
      sempred(localctx, ruleIndex, predIndex) {
      	switch(ruleIndex) {
      	case 5:
      	    		return this.nestedNameSpecifier_sempred(localctx, predIndex);
      	case 15:
      	    		return this.postfixExpression_sempred(localctx, predIndex);
      	case 25:
      	    		return this.noPointerNewDeclarator_sempred(localctx, predIndex);
      	case 115:
      	    		return this.noPointerDeclarator_sempred(localctx, predIndex);
      	case 126:
      	    		return this.noPointerAbstractDeclarator_sempred(localctx, predIndex);
      	case 128:
      	    		return this.noPointerAbstractPackDeclarator_sempred(localctx, predIndex);
          default:
              throw "No predicate with index:" + ruleIndex;
         }
      }
  
      nestedNameSpecifier_sempred(localctx, predIndex) {
      	switch(predIndex) {
      		case 0:
      			return this.precpred(this._ctx, 1);
      		default:
      			throw "No predicate with index:" + predIndex;
      	}
      };
  
      postfixExpression_sempred(localctx, predIndex) {
      	switch(predIndex) {
      		case 1:
      			return this.precpred(this._ctx, 7);
      		case 2:
      			return this.precpred(this._ctx, 6);
      		case 3:
      			return this.precpred(this._ctx, 4);
      		case 4:
      			return this.precpred(this._ctx, 3);
      		default:
      			throw "No predicate with index:" + predIndex;
      	}
      };
  
      noPointerNewDeclarator_sempred(localctx, predIndex) {
      	switch(predIndex) {
      		case 5:
      			return this.precpred(this._ctx, 1);
      		default:
      			throw "No predicate with index:" + predIndex;
      	}
      };
  
      noPointerDeclarator_sempred(localctx, predIndex) {
      	switch(predIndex) {
      		case 6:
      			return this.precpred(this._ctx, 2);
      		default:
      			throw "No predicate with index:" + predIndex;
      	}
      };
  
      noPointerAbstractDeclarator_sempred(localctx, predIndex) {
      	switch(predIndex) {
      		case 7:
      			return this.precpred(this._ctx, 4);
      		default:
      			throw "No predicate with index:" + predIndex;
      	}
      };
  
      noPointerAbstractPackDeclarator_sempred(localctx, predIndex) {
      	switch(predIndex) {
      		case 8:
      			return this.precpred(this._ctx, 2);
      		default:
      			throw "No predicate with index:" + predIndex;
      	}
      };
  
  
  
  
  	translationUnit() {
  	    let localctx = new TranslationUnitContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 0, CPP14Parser.RULE_translationUnit);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 383;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(((((_la - 10)) & ~0x1f) == 0 && ((1 << (_la - 10)) & ((1 << (CPP14Parser.Alignas - 10)) | (1 << (CPP14Parser.Asm - 10)) | (1 << (CPP14Parser.Auto - 10)) | (1 << (CPP14Parser.Bool - 10)) | (1 << (CPP14Parser.Char - 10)) | (1 << (CPP14Parser.Char16 - 10)) | (1 << (CPP14Parser.Char32 - 10)) | (1 << (CPP14Parser.Class - 10)) | (1 << (CPP14Parser.Const - 10)) | (1 << (CPP14Parser.Constexpr - 10)) | (1 << (CPP14Parser.Decltype - 10)) | (1 << (CPP14Parser.Double - 10)) | (1 << (CPP14Parser.Enum - 10)) | (1 << (CPP14Parser.Explicit - 10)) | (1 << (CPP14Parser.Extern - 10)) | (1 << (CPP14Parser.Float - 10)) | (1 << (CPP14Parser.Friend - 10)))) !== 0) || ((((_la - 44)) & ~0x1f) == 0 && ((1 << (_la - 44)) & ((1 << (CPP14Parser.Inline - 44)) | (1 << (CPP14Parser.Int - 44)) | (1 << (CPP14Parser.Long - 44)) | (1 << (CPP14Parser.Mutable - 44)) | (1 << (CPP14Parser.Namespace - 44)) | (1 << (CPP14Parser.Operator - 44)) | (1 << (CPP14Parser.Register - 44)) | (1 << (CPP14Parser.Short - 44)) | (1 << (CPP14Parser.Signed - 44)) | (1 << (CPP14Parser.Static - 44)) | (1 << (CPP14Parser.Static_assert - 44)) | (1 << (CPP14Parser.Struct - 44)) | (1 << (CPP14Parser.Template - 44)) | (1 << (CPP14Parser.Thread_local - 44)) | (1 << (CPP14Parser.Typedef - 44)))) !== 0) || ((((_la - 76)) & ~0x1f) == 0 && ((1 << (_la - 76)) & ((1 << (CPP14Parser.Typename_ - 76)) | (1 << (CPP14Parser.Union - 76)) | (1 << (CPP14Parser.Unsigned - 76)) | (1 << (CPP14Parser.Using - 76)) | (1 << (CPP14Parser.Virtual - 76)) | (1 << (CPP14Parser.Void - 76)) | (1 << (CPP14Parser.Volatile - 76)) | (1 << (CPP14Parser.Wchar - 76)) | (1 << (CPP14Parser.LeftParen - 76)) | (1 << (CPP14Parser.LeftBracket - 76)) | (1 << (CPP14Parser.Star - 76)) | (1 << (CPP14Parser.And - 76)) | (1 << (CPP14Parser.Tilde - 76)))) !== 0) || ((((_la - 118)) & ~0x1f) == 0 && ((1 << (_la - 118)) & ((1 << (CPP14Parser.AndAnd - 118)) | (1 << (CPP14Parser.Doublecolon - 118)) | (1 << (CPP14Parser.Semi - 118)) | (1 << (CPP14Parser.Ellipsis - 118)) | (1 << (CPP14Parser.Identifier - 118)))) !== 0)) {
  	            this.state = 382;
  	            this.declarationseq();
  	        }
  
  	        this.state = 385;
  	        this.match(CPP14Parser.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;
  	}
  
  
  
  	primaryExpression() {
  	    let localctx = new PrimaryExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 2, CPP14Parser.RULE_primaryExpression);
  	    try {
  	        this.state = 399;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.IntegerLiteral:
  	        case CPP14Parser.CharacterLiteral:
  	        case CPP14Parser.FloatingLiteral:
  	        case CPP14Parser.StringLiteral:
  	        case CPP14Parser.BooleanLiteral:
  	        case CPP14Parser.PointerLiteral:
  	        case CPP14Parser.UserDefinedLiteral:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 388; 
  	            this._errHandler.sync(this);
  	            var _alt = 1;
  	            do {
  	            	switch (_alt) {
  	            	case 1:
  	            		this.state = 387;
  	            		this.literal();
  	            		break;
  	            	default:
  	            		throw new antlr4.error.NoViableAltException(this);
  	            	}
  	            	this.state = 390; 
  	            	this._errHandler.sync(this);
  	            	_alt = this._interp.adaptivePredict(this._input,1, this._ctx);
  	            } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
  	            break;
  	        case CPP14Parser.This:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 392;
  	            this.match(CPP14Parser.This);
  	            break;
  	        case CPP14Parser.LeftParen:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 393;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 394;
  	            this.expression();
  	            this.state = 395;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Operator:
  	        case CPP14Parser.Tilde:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 397;
  	            this.idExpression();
  	            break;
  	        case CPP14Parser.LeftBracket:
  	            this.enterOuterAlt(localctx, 5);
  	            this.state = 398;
  	            this.lambdaExpression();
  	            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;
  	}
  
  
  
  	idExpression() {
  	    let localctx = new IdExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 4, CPP14Parser.RULE_idExpression);
  	    try {
  	        this.state = 403;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,3,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 401;
  	            this.unqualifiedId();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 402;
  	            this.qualifiedId();
  	            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;
  	}
  
  
  
  	unqualifiedId() {
  	    let localctx = new UnqualifiedIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 6, CPP14Parser.RULE_unqualifiedId);
  	    try {
  	        this.state = 415;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,5,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 405;
  	            this.match(CPP14Parser.Identifier);
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 406;
  	            this.operatorFunctionId();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 407;
  	            this.conversionFunctionId();
  	            break;
  
  	        case 4:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 408;
  	            this.literalOperatorId();
  	            break;
  
  	        case 5:
  	            this.enterOuterAlt(localctx, 5);
  	            this.state = 409;
  	            this.match(CPP14Parser.Tilde);
  	            this.state = 412;
  	            this._errHandler.sync(this);
  	            switch(this._input.LA(1)) {
  	            case CPP14Parser.Identifier:
  	                this.state = 410;
  	                this.className();
  	                break;
  	            case CPP14Parser.Decltype:
  	                this.state = 411;
  	                this.decltypeSpecifier();
  	                break;
  	            default:
  	                throw new antlr4.error.NoViableAltException(this);
  	            }
  	            break;
  
  	        case 6:
  	            this.enterOuterAlt(localctx, 6);
  	            this.state = 414;
  	            this.templateId();
  	            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;
  	}
  
  
  
  	qualifiedId() {
  	    let localctx = new QualifiedIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 8, CPP14Parser.RULE_qualifiedId);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 417;
  	        this.nestedNameSpecifier(0);
  	        this.state = 419;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Template) {
  	            this.state = 418;
  	            this.match(CPP14Parser.Template);
  	        }
  
  	        this.state = 421;
  	        this.unqualifiedId();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  	nestedNameSpecifier(_p) {
  		if(_p===undefined) {
  		    _p = 0;
  		}
  	    const _parentctx = this._ctx;
  	    const _parentState = this.state;
  	    let localctx = new NestedNameSpecifierContext(this, this._ctx, _parentState);
  	    let _prevctx = localctx;
  	    const _startState = 10;
  	    this.enterRecursionRule(localctx, 10, CPP14Parser.RULE_nestedNameSpecifier, _p);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 427;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,7,this._ctx);
  	        if(la_===1) {
  	            this.state = 424;
  	            this.theTypeName();
  
  	        } else if(la_===2) {
  	            this.state = 425;
  	            this.namespaceName();
  
  	        } else if(la_===3) {
  	            this.state = 426;
  	            this.decltypeSpecifier();
  
  	        }
  	        this.state = 429;
  	        this.match(CPP14Parser.Doublecolon);
  	        this._ctx.stop = this._input.LT(-1);
  	        this.state = 442;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,10,this._ctx)
  	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
  	            if(_alt===1) {
  	                if(this._parseListeners!==null) {
  	                    this.triggerExitRuleEvent();
  	                }
  	                _prevctx = localctx;
  	                localctx = new NestedNameSpecifierContext(this, _parentctx, _parentState);
  	                this.pushNewRecursionContext(localctx, _startState, CPP14Parser.RULE_nestedNameSpecifier);
  	                this.state = 431;
  	                if (!( this.precpred(this._ctx, 1))) {
  	                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
  	                }
  	                this.state = 437;
  	                this._errHandler.sync(this);
  	                var la_ = this._interp.adaptivePredict(this._input,9,this._ctx);
  	                switch(la_) {
  	                case 1:
  	                    this.state = 432;
  	                    this.match(CPP14Parser.Identifier);
  	                    break;
  
  	                case 2:
  	                    this.state = 434;
  	                    this._errHandler.sync(this);
  	                    _la = this._input.LA(1);
  	                    if(_la===CPP14Parser.Template) {
  	                        this.state = 433;
  	                        this.match(CPP14Parser.Template);
  	                    }
  
  	                    this.state = 436;
  	                    this.simpleTemplateId();
  	                    break;
  
  	                }
  	                this.state = 439;
  	                this.match(CPP14Parser.Doublecolon); 
  	            }
  	            this.state = 444;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,10,this._ctx);
  	        }
  
  	    } catch( error) {
  	        if(error instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = error;
  		        this._errHandler.reportError(this, error);
  		        this._errHandler.recover(this, error);
  		    } else {
  		    	throw error;
  		    }
  	    } finally {
  	        this.unrollRecursionContexts(_parentctx)
  	    }
  	    return localctx;
  	}
  
  
  
  	lambdaExpression() {
  	    let localctx = new LambdaExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 12, CPP14Parser.RULE_lambdaExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 445;
  	        this.lambdaIntroducer();
  	        this.state = 447;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.LeftParen) {
  	            this.state = 446;
  	            this.lambdaDeclarator();
  	        }
  
  	        this.state = 449;
  	        this.compoundStatement();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	lambdaIntroducer() {
  	    let localctx = new LambdaIntroducerContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 14, CPP14Parser.RULE_lambdaIntroducer);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 451;
  	        this.match(CPP14Parser.LeftBracket);
  	        this.state = 453;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.This || _la===CPP14Parser.And || _la===CPP14Parser.Assign || _la===CPP14Parser.Identifier) {
  	            this.state = 452;
  	            this.lambdaCapture();
  	        }
  
  	        this.state = 455;
  	        this.match(CPP14Parser.RightBracket);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	lambdaCapture() {
  	    let localctx = new LambdaCaptureContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 16, CPP14Parser.RULE_lambdaCapture);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 463;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,14,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 457;
  	            this.captureList();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 458;
  	            this.captureDefault();
  	            this.state = 461;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Comma) {
  	                this.state = 459;
  	                this.match(CPP14Parser.Comma);
  	                this.state = 460;
  	                this.captureList();
  	            }
  
  	            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;
  	}
  
  
  
  	captureDefault() {
  	    let localctx = new CaptureDefaultContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 18, CPP14Parser.RULE_captureDefault);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 465;
  	        _la = this._input.LA(1);
  	        if(!(_la===CPP14Parser.And || _la===CPP14Parser.Assign)) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	captureList() {
  	    let localctx = new CaptureListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 20, CPP14Parser.RULE_captureList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 467;
  	        this.capture();
  	        this.state = 472;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 468;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 469;
  	            this.capture();
  	            this.state = 474;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        }
  	        this.state = 476;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Ellipsis) {
  	            this.state = 475;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	capture() {
  	    let localctx = new CaptureContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 22, CPP14Parser.RULE_capture);
  	    try {
  	        this.state = 480;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,17,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 478;
  	            this.simpleCapture();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 479;
  	            this.initcapture();
  	            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;
  	}
  
  
  
  	simpleCapture() {
  	    let localctx = new SimpleCaptureContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 24, CPP14Parser.RULE_simpleCapture);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 487;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.And:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 483;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.And) {
  	                this.state = 482;
  	                this.match(CPP14Parser.And);
  	            }
  
  	            this.state = 485;
  	            this.match(CPP14Parser.Identifier);
  	            break;
  	        case CPP14Parser.This:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 486;
  	            this.match(CPP14Parser.This);
  	            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;
  	}
  
  
  
  	initcapture() {
  	    let localctx = new InitcaptureContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 26, CPP14Parser.RULE_initcapture);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 490;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.And) {
  	            this.state = 489;
  	            this.match(CPP14Parser.And);
  	        }
  
  	        this.state = 492;
  	        this.match(CPP14Parser.Identifier);
  	        this.state = 493;
  	        this.initializer();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	lambdaDeclarator() {
  	    let localctx = new LambdaDeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 28, CPP14Parser.RULE_lambdaDeclarator);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 495;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 497;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.Alignas) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Constexpr) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Double))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (CPP14Parser.Enum - 33)) | (1 << (CPP14Parser.Explicit - 33)) | (1 << (CPP14Parser.Extern - 33)) | (1 << (CPP14Parser.Float - 33)) | (1 << (CPP14Parser.Friend - 33)) | (1 << (CPP14Parser.Inline - 33)) | (1 << (CPP14Parser.Int - 33)) | (1 << (CPP14Parser.Long - 33)) | (1 << (CPP14Parser.Mutable - 33)) | (1 << (CPP14Parser.Register - 33)) | (1 << (CPP14Parser.Short - 33)) | (1 << (CPP14Parser.Signed - 33)) | (1 << (CPP14Parser.Static - 33)))) !== 0) || ((((_la - 66)) & ~0x1f) == 0 && ((1 << (_la - 66)) & ((1 << (CPP14Parser.Struct - 66)) | (1 << (CPP14Parser.Thread_local - 66)) | (1 << (CPP14Parser.Typedef - 66)) | (1 << (CPP14Parser.Typename_ - 66)) | (1 << (CPP14Parser.Union - 66)) | (1 << (CPP14Parser.Unsigned - 66)) | (1 << (CPP14Parser.Virtual - 66)) | (1 << (CPP14Parser.Void - 66)) | (1 << (CPP14Parser.Volatile - 66)) | (1 << (CPP14Parser.Wchar - 66)) | (1 << (CPP14Parser.LeftBracket - 66)))) !== 0) || _la===CPP14Parser.Doublecolon || _la===CPP14Parser.Identifier) {
  	            this.state = 496;
  	            this.parameterDeclarationClause();
  	        }
  
  	        this.state = 499;
  	        this.match(CPP14Parser.RightParen);
  	        this.state = 501;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Mutable) {
  	            this.state = 500;
  	            this.match(CPP14Parser.Mutable);
  	        }
  
  	        this.state = 504;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Noexcept || _la===CPP14Parser.Throw) {
  	            this.state = 503;
  	            this.exceptionSpecification();
  	        }
  
  	        this.state = 507;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 506;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 510;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Arrow) {
  	            this.state = 509;
  	            this.trailingReturnType();
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  	postfixExpression(_p) {
  		if(_p===undefined) {
  		    _p = 0;
  		}
  	    const _parentctx = this._ctx;
  	    const _parentState = this.state;
  	    let localctx = new PostfixExpressionContext(this, this._ctx, _parentState);
  	    let _prevctx = localctx;
  	    const _startState = 30;
  	    this.enterRecursionRule(localctx, 30, CPP14Parser.RULE_postfixExpression, _p);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 542;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,30,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.state = 513;
  	            this.primaryExpression();
  	            break;
  
  	        case 2:
  	            this.state = 516;
  	            this._errHandler.sync(this);
  	            switch(this._input.LA(1)) {
  	            case CPP14Parser.Auto:
  	            case CPP14Parser.Bool:
  	            case CPP14Parser.Char:
  	            case CPP14Parser.Char16:
  	            case CPP14Parser.Char32:
  	            case CPP14Parser.Decltype:
  	            case CPP14Parser.Double:
  	            case CPP14Parser.Float:
  	            case CPP14Parser.Int:
  	            case CPP14Parser.Long:
  	            case CPP14Parser.Short:
  	            case CPP14Parser.Signed:
  	            case CPP14Parser.Unsigned:
  	            case CPP14Parser.Void:
  	            case CPP14Parser.Wchar:
  	            case CPP14Parser.Doublecolon:
  	            case CPP14Parser.Identifier:
  	                this.state = 514;
  	                this.simpleTypeSpecifier();
  	                break;
  	            case CPP14Parser.Typename_:
  	                this.state = 515;
  	                this.typeNameSpecifier();
  	                break;
  	            default:
  	                throw new antlr4.error.NoViableAltException(this);
  	            }
  	            this.state = 524;
  	            this._errHandler.sync(this);
  	            switch(this._input.LA(1)) {
  	            case CPP14Parser.LeftParen:
  	                this.state = 518;
  	                this.match(CPP14Parser.LeftParen);
  	                this.state = 520;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CPP14Parser.Throw - 71)) | (1 << (CPP14Parser.Typeid_ - 71)) | (1 << (CPP14Parser.Typename_ - 71)) | (1 << (CPP14Parser.Unsigned - 71)) | (1 << (CPP14Parser.Void - 71)) | (1 << (CPP14Parser.Wchar - 71)) | (1 << (CPP14Parser.LeftParen - 71)) | (1 << (CPP14Parser.LeftBracket - 71)) | (1 << (CPP14Parser.LeftBrace - 71)) | (1 << (CPP14Parser.Plus - 71)) | (1 << (CPP14Parser.Minus - 71)) | (1 << (CPP14Parser.Star - 71)) | (1 << (CPP14Parser.And - 71)) | (1 << (CPP14Parser.Or - 71)) | (1 << (CPP14Parser.Tilde - 71)) | (1 << (CPP14Parser.Not - 71)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	                    this.state = 519;
  	                    this.expressionList();
  	                }
  
  	                this.state = 522;
  	                this.match(CPP14Parser.RightParen);
  	                break;
  	            case CPP14Parser.LeftBrace:
  	                this.state = 523;
  	                this.bracedInitList();
  	                break;
  	            default:
  	                throw new antlr4.error.NoViableAltException(this);
  	            }
  	            break;
  
  	        case 3:
  	            this.state = 526;
  	            _la = this._input.LA(1);
  	            if(!(_la===CPP14Parser.Const_cast || _la===CPP14Parser.Dynamic_cast || _la===CPP14Parser.Reinterpret_cast || _la===CPP14Parser.Static_cast)) {
  	            this._errHandler.recoverInline(this);
  	            }
  	            else {
  	            	this._errHandler.reportMatch(this);
  	                this.consume();
  	            }
  	            this.state = 527;
  	            this.match(CPP14Parser.Less);
  	            this.state = 528;
  	            this.theTypeId();
  	            this.state = 529;
  	            this.match(CPP14Parser.Greater);
  	            this.state = 530;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 531;
  	            this.expression();
  	            this.state = 532;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  
  	        case 4:
  	            this.state = 534;
  	            this.typeIdOfTheTypeId();
  	            this.state = 535;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 538;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,29,this._ctx);
  	            switch(la_) {
  	            case 1:
  	                this.state = 536;
  	                this.expression();
  	                break;
  
  	            case 2:
  	                this.state = 537;
  	                this.theTypeId();
  	                break;
  
  	            }
  	            this.state = 540;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  
  	        }
  	        this._ctx.stop = this._input.LT(-1);
  	        this.state = 571;
  	        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;
  	                this.state = 569;
  	                this._errHandler.sync(this);
  	                var la_ = this._interp.adaptivePredict(this._input,35,this._ctx);
  	                switch(la_) {
  	                case 1:
  	                    localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
  	                    this.pushNewRecursionContext(localctx, _startState, CPP14Parser.RULE_postfixExpression);
  	                    this.state = 544;
  	                    if (!( this.precpred(this._ctx, 7))) {
  	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)");
  	                    }
  	                    this.state = 545;
  	                    this.match(CPP14Parser.LeftBracket);
  	                    this.state = 548;
  	                    this._errHandler.sync(this);
  	                    switch(this._input.LA(1)) {
  	                    case CPP14Parser.IntegerLiteral:
  	                    case CPP14Parser.CharacterLiteral:
  	                    case CPP14Parser.FloatingLiteral:
  	                    case CPP14Parser.StringLiteral:
  	                    case CPP14Parser.BooleanLiteral:
  	                    case CPP14Parser.PointerLiteral:
  	                    case CPP14Parser.UserDefinedLiteral:
  	                    case CPP14Parser.Alignof:
  	                    case CPP14Parser.Auto:
  	                    case CPP14Parser.Bool:
  	                    case CPP14Parser.Char:
  	                    case CPP14Parser.Char16:
  	                    case CPP14Parser.Char32:
  	                    case CPP14Parser.Const_cast:
  	                    case CPP14Parser.Decltype:
  	                    case CPP14Parser.Delete:
  	                    case CPP14Parser.Double:
  	                    case CPP14Parser.Dynamic_cast:
  	                    case CPP14Parser.Float:
  	                    case CPP14Parser.Int:
  	                    case CPP14Parser.Long:
  	                    case CPP14Parser.New:
  	                    case CPP14Parser.Noexcept:
  	                    case CPP14Parser.Operator:
  	                    case CPP14Parser.Reinterpret_cast:
  	                    case CPP14Parser.Short:
  	                    case CPP14Parser.Signed:
  	                    case CPP14Parser.Sizeof:
  	                    case CPP14Parser.Static_cast:
  	                    case CPP14Parser.This:
  	                    case CPP14Parser.Throw:
  	                    case CPP14Parser.Typeid_:
  	                    case CPP14Parser.Typename_:
  	                    case CPP14Parser.Unsigned:
  	                    case CPP14Parser.Void:
  	                    case CPP14Parser.Wchar:
  	                    case CPP14Parser.LeftParen:
  	                    case CPP14Parser.LeftBracket:
  	                    case CPP14Parser.Plus:
  	                    case CPP14Parser.Minus:
  	                    case CPP14Parser.Star:
  	                    case CPP14Parser.And:
  	                    case CPP14Parser.Or:
  	                    case CPP14Parser.Tilde:
  	                    case CPP14Parser.Not:
  	                    case CPP14Parser.PlusPlus:
  	                    case CPP14Parser.MinusMinus:
  	                    case CPP14Parser.Doublecolon:
  	                    case CPP14Parser.Identifier:
  	                        this.state = 546;
  	                        this.expression();
  	                        break;
  	                    case CPP14Parser.LeftBrace:
  	                        this.state = 547;
  	                        this.bracedInitList();
  	                        break;
  	                    default:
  	                        throw new antlr4.error.NoViableAltException(this);
  	                    }
  	                    this.state = 550;
  	                    this.match(CPP14Parser.RightBracket);
  	                    break;
  
  	                case 2:
  	                    localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
  	                    this.pushNewRecursionContext(localctx, _startState, CPP14Parser.RULE_postfixExpression);
  	                    this.state = 552;
  	                    if (!( this.precpred(this._ctx, 6))) {
  	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
  	                    }
  	                    this.state = 553;
  	                    this.match(CPP14Parser.LeftParen);
  	                    this.state = 555;
  	                    this._errHandler.sync(this);
  	                    _la = this._input.LA(1);
  	                    if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CPP14Parser.Throw - 71)) | (1 << (CPP14Parser.Typeid_ - 71)) | (1 << (CPP14Parser.Typename_ - 71)) | (1 << (CPP14Parser.Unsigned - 71)) | (1 << (CPP14Parser.Void - 71)) | (1 << (CPP14Parser.Wchar - 71)) | (1 << (CPP14Parser.LeftParen - 71)) | (1 << (CPP14Parser.LeftBracket - 71)) | (1 << (CPP14Parser.LeftBrace - 71)) | (1 << (CPP14Parser.Plus - 71)) | (1 << (CPP14Parser.Minus - 71)) | (1 << (CPP14Parser.Star - 71)) | (1 << (CPP14Parser.And - 71)) | (1 << (CPP14Parser.Or - 71)) | (1 << (CPP14Parser.Tilde - 71)) | (1 << (CPP14Parser.Not - 71)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	                        this.state = 554;
  	                        this.expressionList();
  	                    }
  
  	                    this.state = 557;
  	                    this.match(CPP14Parser.RightParen);
  	                    break;
  
  	                case 3:
  	                    localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
  	                    this.pushNewRecursionContext(localctx, _startState, CPP14Parser.RULE_postfixExpression);
  	                    this.state = 558;
  	                    if (!( this.precpred(this._ctx, 4))) {
  	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
  	                    }
  	                    this.state = 559;
  	                    _la = this._input.LA(1);
  	                    if(!(_la===CPP14Parser.Arrow || _la===CPP14Parser.Dot)) {
  	                    this._errHandler.recoverInline(this);
  	                    }
  	                    else {
  	                    	this._errHandler.reportMatch(this);
  	                        this.consume();
  	                    }
  	                    this.state = 565;
  	                    this._errHandler.sync(this);
  	                    var la_ = this._interp.adaptivePredict(this._input,34,this._ctx);
  	                    switch(la_) {
  	                    case 1:
  	                        this.state = 561;
  	                        this._errHandler.sync(this);
  	                        _la = this._input.LA(1);
  	                        if(_la===CPP14Parser.Template) {
  	                            this.state = 560;
  	                            this.match(CPP14Parser.Template);
  	                        }
  
  	                        this.state = 563;
  	                        this.idExpression();
  	                        break;
  
  	                    case 2:
  	                        this.state = 564;
  	                        this.pseudoDestructorName();
  	                        break;
  
  	                    }
  	                    break;
  
  	                case 4:
  	                    localctx = new PostfixExpressionContext(this, _parentctx, _parentState);
  	                    this.pushNewRecursionContext(localctx, _startState, CPP14Parser.RULE_postfixExpression);
  	                    this.state = 567;
  	                    if (!( this.precpred(this._ctx, 3))) {
  	                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
  	                    }
  	                    this.state = 568;
  	                    _la = this._input.LA(1);
  	                    if(!(_la===CPP14Parser.PlusPlus || _la===CPP14Parser.MinusMinus)) {
  	                    this._errHandler.recoverInline(this);
  	                    }
  	                    else {
  	                    	this._errHandler.reportMatch(this);
  	                        this.consume();
  	                    }
  	                    break;
  
  	                } 
  	            }
  	            this.state = 573;
  	            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;
  	}
  
  
  
  	typeIdOfTheTypeId() {
  	    let localctx = new TypeIdOfTheTypeIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 32, CPP14Parser.RULE_typeIdOfTheTypeId);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 574;
  	        this.match(CPP14Parser.Typeid_);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	expressionList() {
  	    let localctx = new ExpressionListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 34, CPP14Parser.RULE_expressionList);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 576;
  	        this.initializerList();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	pseudoDestructorName() {
  	    let localctx = new PseudoDestructorNameContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 36, CPP14Parser.RULE_pseudoDestructorName);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 597;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,39,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 579;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,37,this._ctx);
  	            if(la_===1) {
  	                this.state = 578;
  	                this.nestedNameSpecifier(0);
  
  	            }
  	            this.state = 584;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Identifier) {
  	                this.state = 581;
  	                this.theTypeName();
  	                this.state = 582;
  	                this.match(CPP14Parser.Doublecolon);
  	            }
  
  	            this.state = 586;
  	            this.match(CPP14Parser.Tilde);
  	            this.state = 587;
  	            this.theTypeName();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 588;
  	            this.nestedNameSpecifier(0);
  	            this.state = 589;
  	            this.match(CPP14Parser.Template);
  	            this.state = 590;
  	            this.simpleTemplateId();
  	            this.state = 591;
  	            this.match(CPP14Parser.Doublecolon);
  	            this.state = 592;
  	            this.match(CPP14Parser.Tilde);
  	            this.state = 593;
  	            this.theTypeName();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 595;
  	            this.match(CPP14Parser.Tilde);
  	            this.state = 596;
  	            this.decltypeSpecifier();
  	            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;
  	}
  
  
  
  	unaryExpression() {
  	    let localctx = new UnaryExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 38, CPP14Parser.RULE_unaryExpression);
  	    try {
  	        this.state = 626;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,42,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 599;
  	            this.postfixExpression(0);
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 604;
  	            this._errHandler.sync(this);
  	            switch(this._input.LA(1)) {
  	            case CPP14Parser.PlusPlus:
  	                this.state = 600;
  	                this.match(CPP14Parser.PlusPlus);
  	                break;
  	            case CPP14Parser.MinusMinus:
  	                this.state = 601;
  	                this.match(CPP14Parser.MinusMinus);
  	                break;
  	            case CPP14Parser.Plus:
  	            case CPP14Parser.Minus:
  	            case CPP14Parser.Star:
  	            case CPP14Parser.And:
  	            case CPP14Parser.Or:
  	            case CPP14Parser.Tilde:
  	            case CPP14Parser.Not:
  	                this.state = 602;
  	                this.unaryOperator();
  	                break;
  	            case CPP14Parser.Sizeof:
  	                this.state = 603;
  	                this.match(CPP14Parser.Sizeof);
  	                break;
  	            default:
  	                throw new antlr4.error.NoViableAltException(this);
  	            }
  	            this.state = 606;
  	            this.unaryExpression();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 607;
  	            this.match(CPP14Parser.Sizeof);
  	            this.state = 616;
  	            this._errHandler.sync(this);
  	            switch(this._input.LA(1)) {
  	            case CPP14Parser.LeftParen:
  	                this.state = 608;
  	                this.match(CPP14Parser.LeftParen);
  	                this.state = 609;
  	                this.theTypeId();
  	                this.state = 610;
  	                this.match(CPP14Parser.RightParen);
  	                break;
  	            case CPP14Parser.Ellipsis:
  	                this.state = 612;
  	                this.match(CPP14Parser.Ellipsis);
  	                this.state = 613;
  	                this.match(CPP14Parser.LeftParen);
  	                this.state = 614;
  	                this.match(CPP14Parser.Identifier);
  	                this.state = 615;
  	                this.match(CPP14Parser.RightParen);
  	                break;
  	            default:
  	                throw new antlr4.error.NoViableAltException(this);
  	            }
  	            break;
  
  	        case 4:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 618;
  	            this.match(CPP14Parser.Alignof);
  	            this.state = 619;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 620;
  	            this.theTypeId();
  	            this.state = 621;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  
  	        case 5:
  	            this.enterOuterAlt(localctx, 5);
  	            this.state = 623;
  	            this.noExceptExpression();
  	            break;
  
  	        case 6:
  	            this.enterOuterAlt(localctx, 6);
  	            this.state = 624;
  	            this.newExpression();
  	            break;
  
  	        case 7:
  	            this.enterOuterAlt(localctx, 7);
  	            this.state = 625;
  	            this.deleteExpression();
  	            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;
  	}
  
  
  
  	unaryOperator() {
  	    let localctx = new UnaryOperatorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 40, CPP14Parser.RULE_unaryOperator);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 628;
  	        _la = this._input.LA(1);
  	        if(!(((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (CPP14Parser.Plus - 91)) | (1 << (CPP14Parser.Minus - 91)) | (1 << (CPP14Parser.Star - 91)) | (1 << (CPP14Parser.And - 91)) | (1 << (CPP14Parser.Or - 91)) | (1 << (CPP14Parser.Tilde - 91)) | (1 << (CPP14Parser.Not - 91)))) !== 0))) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	newExpression() {
  	    let localctx = new NewExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 42, CPP14Parser.RULE_newExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 631;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Doublecolon) {
  	            this.state = 630;
  	            this.match(CPP14Parser.Doublecolon);
  	        }
  
  	        this.state = 633;
  	        this.match(CPP14Parser.New);
  	        this.state = 635;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,44,this._ctx);
  	        if(la_===1) {
  	            this.state = 634;
  	            this.newPlacement();
  
  	        }
  	        this.state = 642;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Auto:
  	        case CPP14Parser.Bool:
  	        case CPP14Parser.Char:
  	        case CPP14Parser.Char16:
  	        case CPP14Parser.Char32:
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Const:
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Double:
  	        case CPP14Parser.Enum:
  	        case CPP14Parser.Float:
  	        case CPP14Parser.Int:
  	        case CPP14Parser.Long:
  	        case CPP14Parser.Short:
  	        case CPP14Parser.Signed:
  	        case CPP14Parser.Struct:
  	        case CPP14Parser.Typename_:
  	        case CPP14Parser.Union:
  	        case CPP14Parser.Unsigned:
  	        case CPP14Parser.Void:
  	        case CPP14Parser.Volatile:
  	        case CPP14Parser.Wchar:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.state = 637;
  	            this.newTypeId();
  	            break;
  	        case CPP14Parser.LeftParen:
  	            this.state = 638;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 639;
  	            this.theTypeId();
  	            this.state = 640;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  	        default:
  	            throw new antlr4.error.NoViableAltException(this);
  	        }
  	        this.state = 645;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.LeftParen || _la===CPP14Parser.LeftBrace) {
  	            this.state = 644;
  	            this.newInitializer();
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	newPlacement() {
  	    let localctx = new NewPlacementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 44, CPP14Parser.RULE_newPlacement);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 647;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 648;
  	        this.expressionList();
  	        this.state = 649;
  	        this.match(CPP14Parser.RightParen);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	newTypeId() {
  	    let localctx = new NewTypeIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 46, CPP14Parser.RULE_newTypeId);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 651;
  	        this.typeSpecifierSeq();
  	        this.state = 653;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,47,this._ctx);
  	        if(la_===1) {
  	            this.state = 652;
  	            this.newDeclarator();
  
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	newDeclarator() {
  	    let localctx = new NewDeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 48, CPP14Parser.RULE_newDeclarator);
  	    try {
  	        this.state = 660;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Star:
  	        case CPP14Parser.And:
  	        case CPP14Parser.AndAnd:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 655;
  	            this.pointerOperator();
  	            this.state = 657;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,48,this._ctx);
  	            if(la_===1) {
  	                this.state = 656;
  	                this.newDeclarator();
  
  	            }
  	            break;
  	        case CPP14Parser.LeftBracket:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 659;
  	            this.noPointerNewDeclarator(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;
  	}
  
  
  	noPointerNewDeclarator(_p) {
  		if(_p===undefined) {
  		    _p = 0;
  		}
  	    const _parentctx = this._ctx;
  	    const _parentState = this.state;
  	    let localctx = new NoPointerNewDeclaratorContext(this, this._ctx, _parentState);
  	    let _prevctx = localctx;
  	    const _startState = 50;
  	    this.enterRecursionRule(localctx, 50, CPP14Parser.RULE_noPointerNewDeclarator, _p);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 663;
  	        this.match(CPP14Parser.LeftBracket);
  	        this.state = 664;
  	        this.expression();
  	        this.state = 665;
  	        this.match(CPP14Parser.RightBracket);
  	        this.state = 667;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,50,this._ctx);
  	        if(la_===1) {
  	            this.state = 666;
  	            this.attributeSpecifierSeq();
  
  	        }
  	        this._ctx.stop = this._input.LT(-1);
  	        this.state = 678;
  	        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 NoPointerNewDeclaratorContext(this, _parentctx, _parentState);
  	                this.pushNewRecursionContext(localctx, _startState, CPP14Parser.RULE_noPointerNewDeclarator);
  	                this.state = 669;
  	                if (!( this.precpred(this._ctx, 1))) {
  	                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 1)");
  	                }
  	                this.state = 670;
  	                this.match(CPP14Parser.LeftBracket);
  	                this.state = 671;
  	                this.constantExpression();
  	                this.state = 672;
  	                this.match(CPP14Parser.RightBracket);
  	                this.state = 674;
  	                this._errHandler.sync(this);
  	                var la_ = this._interp.adaptivePredict(this._input,51,this._ctx);
  	                if(la_===1) {
  	                    this.state = 673;
  	                    this.attributeSpecifierSeq();
  
  	                } 
  	            }
  	            this.state = 680;
  	            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;
  	}
  
  
  
  	newInitializer() {
  	    let localctx = new NewInitializerContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 52, CPP14Parser.RULE_newInitializer);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 687;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.LeftParen:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 681;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 683;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CPP14Parser.Throw - 71)) | (1 << (CPP14Parser.Typeid_ - 71)) | (1 << (CPP14Parser.Typename_ - 71)) | (1 << (CPP14Parser.Unsigned - 71)) | (1 << (CPP14Parser.Void - 71)) | (1 << (CPP14Parser.Wchar - 71)) | (1 << (CPP14Parser.LeftParen - 71)) | (1 << (CPP14Parser.LeftBracket - 71)) | (1 << (CPP14Parser.LeftBrace - 71)) | (1 << (CPP14Parser.Plus - 71)) | (1 << (CPP14Parser.Minus - 71)) | (1 << (CPP14Parser.Star - 71)) | (1 << (CPP14Parser.And - 71)) | (1 << (CPP14Parser.Or - 71)) | (1 << (CPP14Parser.Tilde - 71)) | (1 << (CPP14Parser.Not - 71)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	                this.state = 682;
  	                this.expressionList();
  	            }
  
  	            this.state = 685;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  	        case CPP14Parser.LeftBrace:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 686;
  	            this.bracedInitList();
  	            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;
  	}
  
  
  
  	deleteExpression() {
  	    let localctx = new DeleteExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 54, CPP14Parser.RULE_deleteExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 690;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Doublecolon) {
  	            this.state = 689;
  	            this.match(CPP14Parser.Doublecolon);
  	        }
  
  	        this.state = 692;
  	        this.match(CPP14Parser.Delete);
  	        this.state = 695;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,56,this._ctx);
  	        if(la_===1) {
  	            this.state = 693;
  	            this.match(CPP14Parser.LeftBracket);
  	            this.state = 694;
  	            this.match(CPP14Parser.RightBracket);
  
  	        }
  	        this.state = 697;
  	        this.castExpression();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	noExceptExpression() {
  	    let localctx = new NoExceptExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 56, CPP14Parser.RULE_noExceptExpression);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 699;
  	        this.match(CPP14Parser.Noexcept);
  	        this.state = 700;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 701;
  	        this.expression();
  	        this.state = 702;
  	        this.match(CPP14Parser.RightParen);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	castExpression() {
  	    let localctx = new CastExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 58, CPP14Parser.RULE_castExpression);
  	    try {
  	        this.state = 710;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,57,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 704;
  	            this.unaryExpression();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 705;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 706;
  	            this.theTypeId();
  	            this.state = 707;
  	            this.match(CPP14Parser.RightParen);
  	            this.state = 708;
  	            this.castExpression();
  	            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;
  	}
  
  
  
  	pointerMemberExpression() {
  	    let localctx = new PointerMemberExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 60, CPP14Parser.RULE_pointerMemberExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 712;
  	        this.castExpression();
  	        this.state = 717;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.ArrowStar || _la===CPP14Parser.DotStar) {
  	            this.state = 713;
  	            _la = this._input.LA(1);
  	            if(!(_la===CPP14Parser.ArrowStar || _la===CPP14Parser.DotStar)) {
  	            this._errHandler.recoverInline(this);
  	            }
  	            else {
  	            	this._errHandler.reportMatch(this);
  	                this.consume();
  	            }
  	            this.state = 714;
  	            this.castExpression();
  	            this.state = 719;
  	            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;
  	}
  
  
  
  	multiplicativeExpression() {
  	    let localctx = new MultiplicativeExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 62, CPP14Parser.RULE_multiplicativeExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 720;
  	        this.pointerMemberExpression();
  	        this.state = 725;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (CPP14Parser.Star - 93)) | (1 << (CPP14Parser.Div - 93)) | (1 << (CPP14Parser.Mod - 93)))) !== 0)) {
  	            this.state = 721;
  	            _la = this._input.LA(1);
  	            if(!(((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (CPP14Parser.Star - 93)) | (1 << (CPP14Parser.Div - 93)) | (1 << (CPP14Parser.Mod - 93)))) !== 0))) {
  	            this._errHandler.recoverInline(this);
  	            }
  	            else {
  	            	this._errHandler.reportMatch(this);
  	                this.consume();
  	            }
  	            this.state = 722;
  	            this.pointerMemberExpression();
  	            this.state = 727;
  	            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;
  	}
  
  
  
  	additiveExpression() {
  	    let localctx = new AdditiveExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 64, CPP14Parser.RULE_additiveExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 728;
  	        this.multiplicativeExpression();
  	        this.state = 733;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Plus || _la===CPP14Parser.Minus) {
  	            this.state = 729;
  	            _la = this._input.LA(1);
  	            if(!(_la===CPP14Parser.Plus || _la===CPP14Parser.Minus)) {
  	            this._errHandler.recoverInline(this);
  	            }
  	            else {
  	            	this._errHandler.reportMatch(this);
  	                this.consume();
  	            }
  	            this.state = 730;
  	            this.multiplicativeExpression();
  	            this.state = 735;
  	            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;
  	}
  
  
  
  	shiftExpression() {
  	    let localctx = new ShiftExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 66, CPP14Parser.RULE_shiftExpression);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 736;
  	        this.additiveExpression();
  	        this.state = 742;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,61,this._ctx)
  	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
  	            if(_alt===1) {
  	                this.state = 737;
  	                this.shiftOperator();
  	                this.state = 738;
  	                this.additiveExpression(); 
  	            }
  	            this.state = 744;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,61,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;
  	}
  
  
  
  	shiftOperator() {
  	    let localctx = new ShiftOperatorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 68, CPP14Parser.RULE_shiftOperator);
  	    try {
  	        this.state = 749;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Greater:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 745;
  	            this.match(CPP14Parser.Greater);
  	            this.state = 746;
  	            this.match(CPP14Parser.Greater);
  	            break;
  	        case CPP14Parser.Less:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 747;
  	            this.match(CPP14Parser.Less);
  	            this.state = 748;
  	            this.match(CPP14Parser.Less);
  	            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;
  	}
  
  
  
  	relationalExpression() {
  	    let localctx = new RelationalExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 70, CPP14Parser.RULE_relationalExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 751;
  	        this.shiftExpression();
  	        this.state = 756;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,63,this._ctx)
  	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
  	            if(_alt===1) {
  	                this.state = 752;
  	                _la = this._input.LA(1);
  	                if(!(((((_la - 102)) & ~0x1f) == 0 && ((1 << (_la - 102)) & ((1 << (CPP14Parser.Less - 102)) | (1 << (CPP14Parser.Greater - 102)) | (1 << (CPP14Parser.LessEqual - 102)) | (1 << (CPP14Parser.GreaterEqual - 102)))) !== 0))) {
  	                this._errHandler.recoverInline(this);
  	                }
  	                else {
  	                	this._errHandler.reportMatch(this);
  	                    this.consume();
  	                }
  	                this.state = 753;
  	                this.shiftExpression(); 
  	            }
  	            this.state = 758;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,63,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;
  	}
  
  
  
  	equalityExpression() {
  	    let localctx = new EqualityExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 72, CPP14Parser.RULE_equalityExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 759;
  	        this.relationalExpression();
  	        this.state = 764;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Equal || _la===CPP14Parser.NotEqual) {
  	            this.state = 760;
  	            _la = this._input.LA(1);
  	            if(!(_la===CPP14Parser.Equal || _la===CPP14Parser.NotEqual)) {
  	            this._errHandler.recoverInline(this);
  	            }
  	            else {
  	            	this._errHandler.reportMatch(this);
  	                this.consume();
  	            }
  	            this.state = 761;
  	            this.relationalExpression();
  	            this.state = 766;
  	            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;
  	}
  
  
  
  	andExpression() {
  	    let localctx = new AndExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 74, CPP14Parser.RULE_andExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 767;
  	        this.equalityExpression();
  	        this.state = 772;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.And) {
  	            this.state = 768;
  	            this.match(CPP14Parser.And);
  	            this.state = 769;
  	            this.equalityExpression();
  	            this.state = 774;
  	            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;
  	}
  
  
  
  	exclusiveOrExpression() {
  	    let localctx = new ExclusiveOrExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 76, CPP14Parser.RULE_exclusiveOrExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 775;
  	        this.andExpression();
  	        this.state = 780;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Caret) {
  	            this.state = 776;
  	            this.match(CPP14Parser.Caret);
  	            this.state = 777;
  	            this.andExpression();
  	            this.state = 782;
  	            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;
  	}
  
  
  
  	inclusiveOrExpression() {
  	    let localctx = new InclusiveOrExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 78, CPP14Parser.RULE_inclusiveOrExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 783;
  	        this.exclusiveOrExpression();
  	        this.state = 788;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Or) {
  	            this.state = 784;
  	            this.match(CPP14Parser.Or);
  	            this.state = 785;
  	            this.exclusiveOrExpression();
  	            this.state = 790;
  	            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;
  	}
  
  
  
  	logicalAndExpression() {
  	    let localctx = new LogicalAndExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 80, CPP14Parser.RULE_logicalAndExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 791;
  	        this.inclusiveOrExpression();
  	        this.state = 796;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.AndAnd) {
  	            this.state = 792;
  	            this.match(CPP14Parser.AndAnd);
  	            this.state = 793;
  	            this.inclusiveOrExpression();
  	            this.state = 798;
  	            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;
  	}
  
  
  
  	logicalOrExpression() {
  	    let localctx = new LogicalOrExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 82, CPP14Parser.RULE_logicalOrExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 799;
  	        this.logicalAndExpression();
  	        this.state = 804;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.OrOr) {
  	            this.state = 800;
  	            this.match(CPP14Parser.OrOr);
  	            this.state = 801;
  	            this.logicalAndExpression();
  	            this.state = 806;
  	            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;
  	}
  
  
  
  	conditionalExpression() {
  	    let localctx = new ConditionalExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 84, CPP14Parser.RULE_conditionalExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 807;
  	        this.logicalOrExpression();
  	        this.state = 813;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Question) {
  	            this.state = 808;
  	            this.match(CPP14Parser.Question);
  	            this.state = 809;
  	            this.expression();
  	            this.state = 810;
  	            this.match(CPP14Parser.Colon);
  	            this.state = 811;
  	            this.assignmentExpression();
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	assignmentExpression() {
  	    let localctx = new AssignmentExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 86, CPP14Parser.RULE_assignmentExpression);
  	    try {
  	        this.state = 821;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,71,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 815;
  	            this.conditionalExpression();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 816;
  	            this.logicalOrExpression();
  	            this.state = 817;
  	            this.assignmentOperator();
  	            this.state = 818;
  	            this.initializerClause();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 820;
  	            this.throwExpression();
  	            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;
  	}
  
  
  
  	assignmentOperator() {
  	    let localctx = new AssignmentOperatorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 88, CPP14Parser.RULE_assignmentOperator);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 823;
  	        _la = this._input.LA(1);
  	        if(!(((((_la - 101)) & ~0x1f) == 0 && ((1 << (_la - 101)) & ((1 << (CPP14Parser.Assign - 101)) | (1 << (CPP14Parser.PlusAssign - 101)) | (1 << (CPP14Parser.MinusAssign - 101)) | (1 << (CPP14Parser.StarAssign - 101)) | (1 << (CPP14Parser.DivAssign - 101)) | (1 << (CPP14Parser.ModAssign - 101)) | (1 << (CPP14Parser.XorAssign - 101)) | (1 << (CPP14Parser.AndAssign - 101)) | (1 << (CPP14Parser.OrAssign - 101)) | (1 << (CPP14Parser.LeftShiftAssign - 101)) | (1 << (CPP14Parser.RightShiftAssign - 101)))) !== 0))) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	expression() {
  	    let localctx = new ExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 90, CPP14Parser.RULE_expression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 825;
  	        this.assignmentExpression();
  	        this.state = 830;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 826;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 827;
  	            this.assignmentExpression();
  	            this.state = 832;
  	            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;
  	}
  
  
  
  	constantExpression() {
  	    let localctx = new ConstantExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 92, CPP14Parser.RULE_constantExpression);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 833;
  	        this.conditionalExpression();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	statement() {
  	    let localctx = new StatementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 94, CPP14Parser.RULE_statement);
  	    try {
  	        this.state = 848;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,75,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 835;
  	            this.labeledStatement();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 837;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,73,this._ctx);
  	            if(la_===1) {
  	                this.state = 836;
  	                this.attributeSpecifierSeq();
  
  	            }
  	            this.state = 845;
  	            this._errHandler.sync(this);
  	            switch(this._input.LA(1)) {
  	            case CPP14Parser.IntegerLiteral:
  	            case CPP14Parser.CharacterLiteral:
  	            case CPP14Parser.FloatingLiteral:
  	            case CPP14Parser.StringLiteral:
  	            case CPP14Parser.BooleanLiteral:
  	            case CPP14Parser.PointerLiteral:
  	            case CPP14Parser.UserDefinedLiteral:
  	            case CPP14Parser.Alignof:
  	            case CPP14Parser.Auto:
  	            case CPP14Parser.Bool:
  	            case CPP14Parser.Char:
  	            case CPP14Parser.Char16:
  	            case CPP14Parser.Char32:
  	            case CPP14Parser.Const_cast:
  	            case CPP14Parser.Decltype:
  	            case CPP14Parser.Delete:
  	            case CPP14Parser.Double:
  	            case CPP14Parser.Dynamic_cast:
  	            case CPP14Parser.Float:
  	            case CPP14Parser.Int:
  	            case CPP14Parser.Long:
  	            case CPP14Parser.New:
  	            case CPP14Parser.Noexcept:
  	            case CPP14Parser.Operator:
  	            case CPP14Parser.Reinterpret_cast:
  	            case CPP14Parser.Short:
  	            case CPP14Parser.Signed:
  	            case CPP14Parser.Sizeof:
  	            case CPP14Parser.Static_cast:
  	            case CPP14Parser.This:
  	            case CPP14Parser.Throw:
  	            case CPP14Parser.Typeid_:
  	            case CPP14Parser.Typename_:
  	            case CPP14Parser.Unsigned:
  	            case CPP14Parser.Void:
  	            case CPP14Parser.Wchar:
  	            case CPP14Parser.LeftParen:
  	            case CPP14Parser.LeftBracket:
  	            case CPP14Parser.Plus:
  	            case CPP14Parser.Minus:
  	            case CPP14Parser.Star:
  	            case CPP14Parser.And:
  	            case CPP14Parser.Or:
  	            case CPP14Parser.Tilde:
  	            case CPP14Parser.Not:
  	            case CPP14Parser.PlusPlus:
  	            case CPP14Parser.MinusMinus:
  	            case CPP14Parser.Doublecolon:
  	            case CPP14Parser.Semi:
  	            case CPP14Parser.Identifier:
  	                this.state = 839;
  	                this.expressionStatement();
  	                break;
  	            case CPP14Parser.LeftBrace:
  	                this.state = 840;
  	                this.compoundStatement();
  	                break;
  	            case CPP14Parser.If:
  	            case CPP14Parser.Switch:
  	                this.state = 841;
  	                this.selectionStatement();
  	                break;
  	            case CPP14Parser.Do:
  	            case CPP14Parser.For:
  	            case CPP14Parser.While:
  	                this.state = 842;
  	                this.iterationStatement();
  	                break;
  	            case CPP14Parser.Break:
  	            case CPP14Parser.Continue:
  	            case CPP14Parser.Goto:
  	            case CPP14Parser.Return:
  	                this.state = 843;
  	                this.jumpStatement();
  	                break;
  	            case CPP14Parser.Try:
  	                this.state = 844;
  	                this.tryBlock();
  	                break;
  	            default:
  	                throw new antlr4.error.NoViableAltException(this);
  	            }
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 847;
  	            this.declarationStatement();
  	            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;
  	}
  
  
  
  	labeledStatement() {
  	    let localctx = new LabeledStatementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 96, CPP14Parser.RULE_labeledStatement);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 851;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 850;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 857;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Identifier:
  	            this.state = 853;
  	            this.match(CPP14Parser.Identifier);
  	            break;
  	        case CPP14Parser.Case:
  	            this.state = 854;
  	            this.match(CPP14Parser.Case);
  	            this.state = 855;
  	            this.constantExpression();
  	            break;
  	        case CPP14Parser.Default:
  	            this.state = 856;
  	            this.match(CPP14Parser.Default);
  	            break;
  	        default:
  	            throw new antlr4.error.NoViableAltException(this);
  	        }
  	        this.state = 859;
  	        this.match(CPP14Parser.Colon);
  	        this.state = 860;
  	        this.statement();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	expressionStatement() {
  	    let localctx = new ExpressionStatementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 98, CPP14Parser.RULE_expressionStatement);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 863;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CPP14Parser.Throw - 71)) | (1 << (CPP14Parser.Typeid_ - 71)) | (1 << (CPP14Parser.Typename_ - 71)) | (1 << (CPP14Parser.Unsigned - 71)) | (1 << (CPP14Parser.Void - 71)) | (1 << (CPP14Parser.Wchar - 71)) | (1 << (CPP14Parser.LeftParen - 71)) | (1 << (CPP14Parser.LeftBracket - 71)) | (1 << (CPP14Parser.Plus - 71)) | (1 << (CPP14Parser.Minus - 71)) | (1 << (CPP14Parser.Star - 71)) | (1 << (CPP14Parser.And - 71)) | (1 << (CPP14Parser.Or - 71)) | (1 << (CPP14Parser.Tilde - 71)) | (1 << (CPP14Parser.Not - 71)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	            this.state = 862;
  	            this.expression();
  	        }
  
  	        this.state = 865;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	compoundStatement() {
  	    let localctx = new CompoundStatementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 100, CPP14Parser.RULE_compoundStatement);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 867;
  	        this.match(CPP14Parser.LeftBrace);
  	        this.state = 869;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignas) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Asm) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Break) | (1 << CPP14Parser.Case) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Constexpr) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Continue) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Default) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Do) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (CPP14Parser.Enum - 33)) | (1 << (CPP14Parser.Explicit - 33)) | (1 << (CPP14Parser.Extern - 33)) | (1 << (CPP14Parser.Float - 33)) | (1 << (CPP14Parser.For - 33)) | (1 << (CPP14Parser.Friend - 33)) | (1 << (CPP14Parser.Goto - 33)) | (1 << (CPP14Parser.If - 33)) | (1 << (CPP14Parser.Inline - 33)) | (1 << (CPP14Parser.Int - 33)) | (1 << (CPP14Parser.Long - 33)) | (1 << (CPP14Parser.Mutable - 33)) | (1 << (CPP14Parser.Namespace - 33)) | (1 << (CPP14Parser.New - 33)) | (1 << (CPP14Parser.Noexcept - 33)) | (1 << (CPP14Parser.Operator - 33)) | (1 << (CPP14Parser.Register - 33)) | (1 << (CPP14Parser.Reinterpret_cast - 33)) | (1 << (CPP14Parser.Return - 33)) | (1 << (CPP14Parser.Short - 33)) | (1 << (CPP14Parser.Signed - 33)) | (1 << (CPP14Parser.Sizeof - 33)) | (1 << (CPP14Parser.Static - 33)) | (1 << (CPP14Parser.Static_assert - 33)))) !== 0) || ((((_la - 65)) & ~0x1f) == 0 && ((1 << (_la - 65)) & ((1 << (CPP14Parser.Static_cast - 65)) | (1 << (CPP14Parser.Struct - 65)) | (1 << (CPP14Parser.Switch - 65)) | (1 << (CPP14Parser.This - 65)) | (1 << (CPP14Parser.Thread_local - 65)) | (1 << (CPP14Parser.Throw - 65)) | (1 << (CPP14Parser.Try - 65)) | (1 << (CPP14Parser.Typedef - 65)) | (1 << (CPP14Parser.Typeid_ - 65)) | (1 << (CPP14Parser.Typename_ - 65)) | (1 << (CPP14Parser.Union - 65)) | (1 << (CPP14Parser.Unsigned - 65)) | (1 << (CPP14Parser.Using - 65)) | (1 << (CPP14Parser.Virtual - 65)) | (1 << (CPP14Parser.Void - 65)) | (1 << (CPP14Parser.Volatile - 65)) | (1 << (CPP14Parser.Wchar - 65)) | (1 << (CPP14Parser.While - 65)) | (1 << (CPP14Parser.LeftParen - 65)) | (1 << (CPP14Parser.LeftBracket - 65)) | (1 << (CPP14Parser.LeftBrace - 65)) | (1 << (CPP14Parser.Plus - 65)) | (1 << (CPP14Parser.Minus - 65)) | (1 << (CPP14Parser.Star - 65)))) !== 0) || ((((_la - 97)) & ~0x1f) == 0 && ((1 << (_la - 97)) & ((1 << (CPP14Parser.And - 97)) | (1 << (CPP14Parser.Or - 97)) | (1 << (CPP14Parser.Tilde - 97)) | (1 << (CPP14Parser.Not - 97)) | (1 << (CPP14Parser.AndAnd - 97)) | (1 << (CPP14Parser.PlusPlus - 97)) | (1 << (CPP14Parser.MinusMinus - 97)) | (1 << (CPP14Parser.Doublecolon - 97)) | (1 << (CPP14Parser.Semi - 97)))) !== 0) || _la===CPP14Parser.Ellipsis || _la===CPP14Parser.Identifier) {
  	            this.state = 868;
  	            this.statementSeq();
  	        }
  
  	        this.state = 871;
  	        this.match(CPP14Parser.RightBrace);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	statementSeq() {
  	    let localctx = new StatementSeqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 102, CPP14Parser.RULE_statementSeq);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 874; 
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        do {
  	            this.state = 873;
  	            this.statement();
  	            this.state = 876; 
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        } while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignas) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Asm) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Break) | (1 << CPP14Parser.Case) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Constexpr) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Continue) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Default) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Do) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (CPP14Parser.Enum - 33)) | (1 << (CPP14Parser.Explicit - 33)) | (1 << (CPP14Parser.Extern - 33)) | (1 << (CPP14Parser.Float - 33)) | (1 << (CPP14Parser.For - 33)) | (1 << (CPP14Parser.Friend - 33)) | (1 << (CPP14Parser.Goto - 33)) | (1 << (CPP14Parser.If - 33)) | (1 << (CPP14Parser.Inline - 33)) | (1 << (CPP14Parser.Int - 33)) | (1 << (CPP14Parser.Long - 33)) | (1 << (CPP14Parser.Mutable - 33)) | (1 << (CPP14Parser.Namespace - 33)) | (1 << (CPP14Parser.New - 33)) | (1 << (CPP14Parser.Noexcept - 33)) | (1 << (CPP14Parser.Operator - 33)) | (1 << (CPP14Parser.Register - 33)) | (1 << (CPP14Parser.Reinterpret_cast - 33)) | (1 << (CPP14Parser.Return - 33)) | (1 << (CPP14Parser.Short - 33)) | (1 << (CPP14Parser.Signed - 33)) | (1 << (CPP14Parser.Sizeof - 33)) | (1 << (CPP14Parser.Static - 33)) | (1 << (CPP14Parser.Static_assert - 33)))) !== 0) || ((((_la - 65)) & ~0x1f) == 0 && ((1 << (_la - 65)) & ((1 << (CPP14Parser.Static_cast - 65)) | (1 << (CPP14Parser.Struct - 65)) | (1 << (CPP14Parser.Switch - 65)) | (1 << (CPP14Parser.This - 65)) | (1 << (CPP14Parser.Thread_local - 65)) | (1 << (CPP14Parser.Throw - 65)) | (1 << (CPP14Parser.Try - 65)) | (1 << (CPP14Parser.Typedef - 65)) | (1 << (CPP14Parser.Typeid_ - 65)) | (1 << (CPP14Parser.Typename_ - 65)) | (1 << (CPP14Parser.Union - 65)) | (1 << (CPP14Parser.Unsigned - 65)) | (1 << (CPP14Parser.Using - 65)) | (1 << (CPP14Parser.Virtual - 65)) | (1 << (CPP14Parser.Void - 65)) | (1 << (CPP14Parser.Volatile - 65)) | (1 << (CPP14Parser.Wchar - 65)) | (1 << (CPP14Parser.While - 65)) | (1 << (CPP14Parser.LeftParen - 65)) | (1 << (CPP14Parser.LeftBracket - 65)) | (1 << (CPP14Parser.LeftBrace - 65)) | (1 << (CPP14Parser.Plus - 65)) | (1 << (CPP14Parser.Minus - 65)) | (1 << (CPP14Parser.Star - 65)))) !== 0) || ((((_la - 97)) & ~0x1f) == 0 && ((1 << (_la - 97)) & ((1 << (CPP14Parser.And - 97)) | (1 << (CPP14Parser.Or - 97)) | (1 << (CPP14Parser.Tilde - 97)) | (1 << (CPP14Parser.Not - 97)) | (1 << (CPP14Parser.AndAnd - 97)) | (1 << (CPP14Parser.PlusPlus - 97)) | (1 << (CPP14Parser.MinusMinus - 97)) | (1 << (CPP14Parser.Doublecolon - 97)) | (1 << (CPP14Parser.Semi - 97)))) !== 0) || _la===CPP14Parser.Ellipsis || _la===CPP14Parser.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;
  	}
  
  
  
  	selectionStatement() {
  	    let localctx = new SelectionStatementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 104, CPP14Parser.RULE_selectionStatement);
  	    try {
  	        this.state = 893;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.If:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 878;
  	            this.match(CPP14Parser.If);
  	            this.state = 879;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 880;
  	            this.condition();
  	            this.state = 881;
  	            this.match(CPP14Parser.RightParen);
  	            this.state = 882;
  	            this.statement();
  	            this.state = 885;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,81,this._ctx);
  	            if(la_===1) {
  	                this.state = 883;
  	                this.match(CPP14Parser.Else);
  	                this.state = 884;
  	                this.statement();
  
  	            }
  	            break;
  	        case CPP14Parser.Switch:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 887;
  	            this.match(CPP14Parser.Switch);
  	            this.state = 888;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 889;
  	            this.condition();
  	            this.state = 890;
  	            this.match(CPP14Parser.RightParen);
  	            this.state = 891;
  	            this.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;
  	}
  
  
  
  	condition() {
  	    let localctx = new ConditionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 106, CPP14Parser.RULE_condition);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 906;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,85,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 895;
  	            this.expression();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 897;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	                this.state = 896;
  	                this.attributeSpecifierSeq();
  	            }
  
  	            this.state = 899;
  	            this.declSpecifierSeq();
  	            this.state = 900;
  	            this.declarator();
  	            this.state = 904;
  	            this._errHandler.sync(this);
  	            switch(this._input.LA(1)) {
  	            case CPP14Parser.Assign:
  	                this.state = 901;
  	                this.match(CPP14Parser.Assign);
  	                this.state = 902;
  	                this.initializerClause();
  	                break;
  	            case CPP14Parser.LeftBrace:
  	                this.state = 903;
  	                this.bracedInitList();
  	                break;
  	            default:
  	                throw new antlr4.error.NoViableAltException(this);
  	            }
  	            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;
  	}
  
  
  
  	iterationStatement() {
  	    let localctx = new IterationStatementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 108, CPP14Parser.RULE_iterationStatement);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 941;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.While:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 908;
  	            this.match(CPP14Parser.While);
  	            this.state = 909;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 910;
  	            this.condition();
  	            this.state = 911;
  	            this.match(CPP14Parser.RightParen);
  	            this.state = 912;
  	            this.statement();
  	            break;
  	        case CPP14Parser.Do:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 914;
  	            this.match(CPP14Parser.Do);
  	            this.state = 915;
  	            this.statement();
  	            this.state = 916;
  	            this.match(CPP14Parser.While);
  	            this.state = 917;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 918;
  	            this.expression();
  	            this.state = 919;
  	            this.match(CPP14Parser.RightParen);
  	            this.state = 920;
  	            this.match(CPP14Parser.Semi);
  	            break;
  	        case CPP14Parser.For:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 922;
  	            this.match(CPP14Parser.For);
  	            this.state = 923;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 936;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,88,this._ctx);
  	            switch(la_) {
  	            case 1:
  	                this.state = 924;
  	                this.forInitStatement();
  	                this.state = 926;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignas) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Constexpr) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (CPP14Parser.Enum - 33)) | (1 << (CPP14Parser.Explicit - 33)) | (1 << (CPP14Parser.Extern - 33)) | (1 << (CPP14Parser.Float - 33)) | (1 << (CPP14Parser.Friend - 33)) | (1 << (CPP14Parser.Inline - 33)) | (1 << (CPP14Parser.Int - 33)) | (1 << (CPP14Parser.Long - 33)) | (1 << (CPP14Parser.Mutable - 33)) | (1 << (CPP14Parser.New - 33)) | (1 << (CPP14Parser.Noexcept - 33)) | (1 << (CPP14Parser.Operator - 33)) | (1 << (CPP14Parser.Register - 33)) | (1 << (CPP14Parser.Reinterpret_cast - 33)) | (1 << (CPP14Parser.Short - 33)) | (1 << (CPP14Parser.Signed - 33)) | (1 << (CPP14Parser.Sizeof - 33)) | (1 << (CPP14Parser.Static - 33)))) !== 0) || ((((_la - 65)) & ~0x1f) == 0 && ((1 << (_la - 65)) & ((1 << (CPP14Parser.Static_cast - 65)) | (1 << (CPP14Parser.Struct - 65)) | (1 << (CPP14Parser.This - 65)) | (1 << (CPP14Parser.Thread_local - 65)) | (1 << (CPP14Parser.Throw - 65)) | (1 << (CPP14Parser.Typedef - 65)) | (1 << (CPP14Parser.Typeid_ - 65)) | (1 << (CPP14Parser.Typename_ - 65)) | (1 << (CPP14Parser.Union - 65)) | (1 << (CPP14Parser.Unsigned - 65)) | (1 << (CPP14Parser.Virtual - 65)) | (1 << (CPP14Parser.Void - 65)) | (1 << (CPP14Parser.Volatile - 65)) | (1 << (CPP14Parser.Wchar - 65)) | (1 << (CPP14Parser.LeftParen - 65)) | (1 << (CPP14Parser.LeftBracket - 65)) | (1 << (CPP14Parser.Plus - 65)) | (1 << (CPP14Parser.Minus - 65)) | (1 << (CPP14Parser.Star - 65)))) !== 0) || ((((_la - 97)) & ~0x1f) == 0 && ((1 << (_la - 97)) & ((1 << (CPP14Parser.And - 97)) | (1 << (CPP14Parser.Or - 97)) | (1 << (CPP14Parser.Tilde - 97)) | (1 << (CPP14Parser.Not - 97)) | (1 << (CPP14Parser.PlusPlus - 97)) | (1 << (CPP14Parser.MinusMinus - 97)) | (1 << (CPP14Parser.Doublecolon - 97)))) !== 0) || _la===CPP14Parser.Identifier) {
  	                    this.state = 925;
  	                    this.condition();
  	                }
  
  	                this.state = 928;
  	                this.match(CPP14Parser.Semi);
  	                this.state = 930;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CPP14Parser.Throw - 71)) | (1 << (CPP14Parser.Typeid_ - 71)) | (1 << (CPP14Parser.Typename_ - 71)) | (1 << (CPP14Parser.Unsigned - 71)) | (1 << (CPP14Parser.Void - 71)) | (1 << (CPP14Parser.Wchar - 71)) | (1 << (CPP14Parser.LeftParen - 71)) | (1 << (CPP14Parser.LeftBracket - 71)) | (1 << (CPP14Parser.Plus - 71)) | (1 << (CPP14Parser.Minus - 71)) | (1 << (CPP14Parser.Star - 71)) | (1 << (CPP14Parser.And - 71)) | (1 << (CPP14Parser.Or - 71)) | (1 << (CPP14Parser.Tilde - 71)) | (1 << (CPP14Parser.Not - 71)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	                    this.state = 929;
  	                    this.expression();
  	                }
  
  	                break;
  
  	            case 2:
  	                this.state = 932;
  	                this.forRangeDeclaration();
  	                this.state = 933;
  	                this.match(CPP14Parser.Colon);
  	                this.state = 934;
  	                this.forRangeInitializer();
  	                break;
  
  	            }
  	            this.state = 938;
  	            this.match(CPP14Parser.RightParen);
  	            this.state = 939;
  	            this.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;
  	}
  
  
  
  	forInitStatement() {
  	    let localctx = new ForInitStatementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 110, CPP14Parser.RULE_forInitStatement);
  	    try {
  	        this.state = 945;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,90,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 943;
  	            this.expressionStatement();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 944;
  	            this.simpleDeclaration();
  	            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;
  	}
  
  
  
  	forRangeDeclaration() {
  	    let localctx = new ForRangeDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 112, CPP14Parser.RULE_forRangeDeclaration);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 948;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 947;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 950;
  	        this.declSpecifierSeq();
  	        this.state = 951;
  	        this.declarator();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	forRangeInitializer() {
  	    let localctx = new ForRangeInitializerContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 114, CPP14Parser.RULE_forRangeInitializer);
  	    try {
  	        this.state = 955;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.IntegerLiteral:
  	        case CPP14Parser.CharacterLiteral:
  	        case CPP14Parser.FloatingLiteral:
  	        case CPP14Parser.StringLiteral:
  	        case CPP14Parser.BooleanLiteral:
  	        case CPP14Parser.PointerLiteral:
  	        case CPP14Parser.UserDefinedLiteral:
  	        case CPP14Parser.Alignof:
  	        case CPP14Parser.Auto:
  	        case CPP14Parser.Bool:
  	        case CPP14Parser.Char:
  	        case CPP14Parser.Char16:
  	        case CPP14Parser.Char32:
  	        case CPP14Parser.Const_cast:
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Delete:
  	        case CPP14Parser.Double:
  	        case CPP14Parser.Dynamic_cast:
  	        case CPP14Parser.Float:
  	        case CPP14Parser.Int:
  	        case CPP14Parser.Long:
  	        case CPP14Parser.New:
  	        case CPP14Parser.Noexcept:
  	        case CPP14Parser.Operator:
  	        case CPP14Parser.Reinterpret_cast:
  	        case CPP14Parser.Short:
  	        case CPP14Parser.Signed:
  	        case CPP14Parser.Sizeof:
  	        case CPP14Parser.Static_cast:
  	        case CPP14Parser.This:
  	        case CPP14Parser.Throw:
  	        case CPP14Parser.Typeid_:
  	        case CPP14Parser.Typename_:
  	        case CPP14Parser.Unsigned:
  	        case CPP14Parser.Void:
  	        case CPP14Parser.Wchar:
  	        case CPP14Parser.LeftParen:
  	        case CPP14Parser.LeftBracket:
  	        case CPP14Parser.Plus:
  	        case CPP14Parser.Minus:
  	        case CPP14Parser.Star:
  	        case CPP14Parser.And:
  	        case CPP14Parser.Or:
  	        case CPP14Parser.Tilde:
  	        case CPP14Parser.Not:
  	        case CPP14Parser.PlusPlus:
  	        case CPP14Parser.MinusMinus:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 953;
  	            this.expression();
  	            break;
  	        case CPP14Parser.LeftBrace:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 954;
  	            this.bracedInitList();
  	            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;
  	}
  
  
  
  	jumpStatement() {
  	    let localctx = new JumpStatementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 116, CPP14Parser.RULE_jumpStatement);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 966;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Break:
  	            this.state = 957;
  	            this.match(CPP14Parser.Break);
  	            break;
  	        case CPP14Parser.Continue:
  	            this.state = 958;
  	            this.match(CPP14Parser.Continue);
  	            break;
  	        case CPP14Parser.Return:
  	            this.state = 959;
  	            this.match(CPP14Parser.Return);
  	            this.state = 962;
  	            this._errHandler.sync(this);
  	            switch (this._input.LA(1)) {
  	            case CPP14Parser.IntegerLiteral:
  	            case CPP14Parser.CharacterLiteral:
  	            case CPP14Parser.FloatingLiteral:
  	            case CPP14Parser.StringLiteral:
  	            case CPP14Parser.BooleanLiteral:
  	            case CPP14Parser.PointerLiteral:
  	            case CPP14Parser.UserDefinedLiteral:
  	            case CPP14Parser.Alignof:
  	            case CPP14Parser.Auto:
  	            case CPP14Parser.Bool:
  	            case CPP14Parser.Char:
  	            case CPP14Parser.Char16:
  	            case CPP14Parser.Char32:
  	            case CPP14Parser.Const_cast:
  	            case CPP14Parser.Decltype:
  	            case CPP14Parser.Delete:
  	            case CPP14Parser.Double:
  	            case CPP14Parser.Dynamic_cast:
  	            case CPP14Parser.Float:
  	            case CPP14Parser.Int:
  	            case CPP14Parser.Long:
  	            case CPP14Parser.New:
  	            case CPP14Parser.Noexcept:
  	            case CPP14Parser.Operator:
  	            case CPP14Parser.Reinterpret_cast:
  	            case CPP14Parser.Short:
  	            case CPP14Parser.Signed:
  	            case CPP14Parser.Sizeof:
  	            case CPP14Parser.Static_cast:
  	            case CPP14Parser.This:
  	            case CPP14Parser.Throw:
  	            case CPP14Parser.Typeid_:
  	            case CPP14Parser.Typename_:
  	            case CPP14Parser.Unsigned:
  	            case CPP14Parser.Void:
  	            case CPP14Parser.Wchar:
  	            case CPP14Parser.LeftParen:
  	            case CPP14Parser.LeftBracket:
  	            case CPP14Parser.Plus:
  	            case CPP14Parser.Minus:
  	            case CPP14Parser.Star:
  	            case CPP14Parser.And:
  	            case CPP14Parser.Or:
  	            case CPP14Parser.Tilde:
  	            case CPP14Parser.Not:
  	            case CPP14Parser.PlusPlus:
  	            case CPP14Parser.MinusMinus:
  	            case CPP14Parser.Doublecolon:
  	            case CPP14Parser.Identifier:
  	            	this.state = 960;
  	            	this.expression();
  	            	break;
  	            case CPP14Parser.LeftBrace:
  	            	this.state = 961;
  	            	this.bracedInitList();
  	            	break;
  	            case CPP14Parser.Semi:
  	            	break;
  	            default:
  	            	break;
  	            }
  	            break;
  	        case CPP14Parser.Goto:
  	            this.state = 964;
  	            this.match(CPP14Parser.Goto);
  	            this.state = 965;
  	            this.match(CPP14Parser.Identifier);
  	            break;
  	        default:
  	            throw new antlr4.error.NoViableAltException(this);
  	        }
  	        this.state = 968;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	declarationStatement() {
  	    let localctx = new DeclarationStatementContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 118, CPP14Parser.RULE_declarationStatement);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 970;
  	        this.blockDeclaration();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	declarationseq() {
  	    let localctx = new DeclarationseqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 120, CPP14Parser.RULE_declarationseq);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 973; 
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        do {
  	            this.state = 972;
  	            this.declaration();
  	            this.state = 975; 
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        } while(((((_la - 10)) & ~0x1f) == 0 && ((1 << (_la - 10)) & ((1 << (CPP14Parser.Alignas - 10)) | (1 << (CPP14Parser.Asm - 10)) | (1 << (CPP14Parser.Auto - 10)) | (1 << (CPP14Parser.Bool - 10)) | (1 << (CPP14Parser.Char - 10)) | (1 << (CPP14Parser.Char16 - 10)) | (1 << (CPP14Parser.Char32 - 10)) | (1 << (CPP14Parser.Class - 10)) | (1 << (CPP14Parser.Const - 10)) | (1 << (CPP14Parser.Constexpr - 10)) | (1 << (CPP14Parser.Decltype - 10)) | (1 << (CPP14Parser.Double - 10)) | (1 << (CPP14Parser.Enum - 10)) | (1 << (CPP14Parser.Explicit - 10)) | (1 << (CPP14Parser.Extern - 10)) | (1 << (CPP14Parser.Float - 10)) | (1 << (CPP14Parser.Friend - 10)))) !== 0) || ((((_la - 44)) & ~0x1f) == 0 && ((1 << (_la - 44)) & ((1 << (CPP14Parser.Inline - 44)) | (1 << (CPP14Parser.Int - 44)) | (1 << (CPP14Parser.Long - 44)) | (1 << (CPP14Parser.Mutable - 44)) | (1 << (CPP14Parser.Namespace - 44)) | (1 << (CPP14Parser.Operator - 44)) | (1 << (CPP14Parser.Register - 44)) | (1 << (CPP14Parser.Short - 44)) | (1 << (CPP14Parser.Signed - 44)) | (1 << (CPP14Parser.Static - 44)) | (1 << (CPP14Parser.Static_assert - 44)) | (1 << (CPP14Parser.Struct - 44)) | (1 << (CPP14Parser.Template - 44)) | (1 << (CPP14Parser.Thread_local - 44)) | (1 << (CPP14Parser.Typedef - 44)))) !== 0) || ((((_la - 76)) & ~0x1f) == 0 && ((1 << (_la - 76)) & ((1 << (CPP14Parser.Typename_ - 76)) | (1 << (CPP14Parser.Union - 76)) | (1 << (CPP14Parser.Unsigned - 76)) | (1 << (CPP14Parser.Using - 76)) | (1 << (CPP14Parser.Virtual - 76)) | (1 << (CPP14Parser.Void - 76)) | (1 << (CPP14Parser.Volatile - 76)) | (1 << (CPP14Parser.Wchar - 76)) | (1 << (CPP14Parser.LeftParen - 76)) | (1 << (CPP14Parser.LeftBracket - 76)) | (1 << (CPP14Parser.Star - 76)) | (1 << (CPP14Parser.And - 76)) | (1 << (CPP14Parser.Tilde - 76)))) !== 0) || ((((_la - 118)) & ~0x1f) == 0 && ((1 << (_la - 118)) & ((1 << (CPP14Parser.AndAnd - 118)) | (1 << (CPP14Parser.Doublecolon - 118)) | (1 << (CPP14Parser.Semi - 118)) | (1 << (CPP14Parser.Ellipsis - 118)) | (1 << (CPP14Parser.Identifier - 118)))) !== 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;
  	}
  
  
  
  	declaration() {
  	    let localctx = new DeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 122, CPP14Parser.RULE_declaration);
  	    try {
  	        this.state = 986;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,96,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 977;
  	            this.blockDeclaration();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 978;
  	            this.functionDefinition();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 979;
  	            this.templateDeclaration();
  	            break;
  
  	        case 4:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 980;
  	            this.explicitInstantiation();
  	            break;
  
  	        case 5:
  	            this.enterOuterAlt(localctx, 5);
  	            this.state = 981;
  	            this.explicitSpecialization();
  	            break;
  
  	        case 6:
  	            this.enterOuterAlt(localctx, 6);
  	            this.state = 982;
  	            this.linkageSpecification();
  	            break;
  
  	        case 7:
  	            this.enterOuterAlt(localctx, 7);
  	            this.state = 983;
  	            this.namespaceDefinition();
  	            break;
  
  	        case 8:
  	            this.enterOuterAlt(localctx, 8);
  	            this.state = 984;
  	            this.emptyDeclaration();
  	            break;
  
  	        case 9:
  	            this.enterOuterAlt(localctx, 9);
  	            this.state = 985;
  	            this.attributeDeclaration();
  	            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;
  	}
  
  
  
  	blockDeclaration() {
  	    let localctx = new BlockDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 124, CPP14Parser.RULE_blockDeclaration);
  	    try {
  	        this.state = 996;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,97,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 988;
  	            this.simpleDeclaration();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 989;
  	            this.asmDefinition();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 990;
  	            this.namespaceAliasDefinition();
  	            break;
  
  	        case 4:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 991;
  	            this.usingDeclaration();
  	            break;
  
  	        case 5:
  	            this.enterOuterAlt(localctx, 5);
  	            this.state = 992;
  	            this.usingDirective();
  	            break;
  
  	        case 6:
  	            this.enterOuterAlt(localctx, 6);
  	            this.state = 993;
  	            this.staticAssertDeclaration();
  	            break;
  
  	        case 7:
  	            this.enterOuterAlt(localctx, 7);
  	            this.state = 994;
  	            this.aliasDeclaration();
  	            break;
  
  	        case 8:
  	            this.enterOuterAlt(localctx, 8);
  	            this.state = 995;
  	            this.opaqueEnumDeclaration();
  	            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;
  	}
  
  
  
  	aliasDeclaration() {
  	    let localctx = new AliasDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 126, CPP14Parser.RULE_aliasDeclaration);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 998;
  	        this.match(CPP14Parser.Using);
  	        this.state = 999;
  	        this.match(CPP14Parser.Identifier);
  	        this.state = 1001;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 1000;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 1003;
  	        this.match(CPP14Parser.Assign);
  	        this.state = 1004;
  	        this.theTypeId();
  	        this.state = 1005;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	simpleDeclaration() {
  	    let localctx = new SimpleDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 128, CPP14Parser.RULE_simpleDeclaration);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1021;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Auto:
  	        case CPP14Parser.Bool:
  	        case CPP14Parser.Char:
  	        case CPP14Parser.Char16:
  	        case CPP14Parser.Char32:
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Const:
  	        case CPP14Parser.Constexpr:
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Double:
  	        case CPP14Parser.Enum:
  	        case CPP14Parser.Explicit:
  	        case CPP14Parser.Extern:
  	        case CPP14Parser.Float:
  	        case CPP14Parser.Friend:
  	        case CPP14Parser.Inline:
  	        case CPP14Parser.Int:
  	        case CPP14Parser.Long:
  	        case CPP14Parser.Mutable:
  	        case CPP14Parser.Operator:
  	        case CPP14Parser.Register:
  	        case CPP14Parser.Short:
  	        case CPP14Parser.Signed:
  	        case CPP14Parser.Static:
  	        case CPP14Parser.Struct:
  	        case CPP14Parser.Thread_local:
  	        case CPP14Parser.Typedef:
  	        case CPP14Parser.Typename_:
  	        case CPP14Parser.Union:
  	        case CPP14Parser.Unsigned:
  	        case CPP14Parser.Virtual:
  	        case CPP14Parser.Void:
  	        case CPP14Parser.Volatile:
  	        case CPP14Parser.Wchar:
  	        case CPP14Parser.LeftParen:
  	        case CPP14Parser.Star:
  	        case CPP14Parser.And:
  	        case CPP14Parser.Tilde:
  	        case CPP14Parser.AndAnd:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Semi:
  	        case CPP14Parser.Ellipsis:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1008;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,99,this._ctx);
  	            if(la_===1) {
  	                this.state = 1007;
  	                this.declSpecifierSeq();
  
  	            }
  	            this.state = 1011;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Decltype || _la===CPP14Parser.Operator || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (CPP14Parser.LeftParen - 85)) | (1 << (CPP14Parser.Star - 85)) | (1 << (CPP14Parser.And - 85)) | (1 << (CPP14Parser.Tilde - 85)))) !== 0) || ((((_la - 118)) & ~0x1f) == 0 && ((1 << (_la - 118)) & ((1 << (CPP14Parser.AndAnd - 118)) | (1 << (CPP14Parser.Doublecolon - 118)) | (1 << (CPP14Parser.Ellipsis - 118)) | (1 << (CPP14Parser.Identifier - 118)))) !== 0)) {
  	                this.state = 1010;
  	                this.initDeclaratorList();
  	            }
  
  	            this.state = 1013;
  	            this.match(CPP14Parser.Semi);
  	            break;
  	        case CPP14Parser.Alignas:
  	        case CPP14Parser.LeftBracket:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1014;
  	            this.attributeSpecifierSeq();
  	            this.state = 1016;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,101,this._ctx);
  	            if(la_===1) {
  	                this.state = 1015;
  	                this.declSpecifierSeq();
  
  	            }
  	            this.state = 1018;
  	            this.initDeclaratorList();
  	            this.state = 1019;
  	            this.match(CPP14Parser.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;
  	}
  
  
  
  	staticAssertDeclaration() {
  	    let localctx = new StaticAssertDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 130, CPP14Parser.RULE_staticAssertDeclaration);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1023;
  	        this.match(CPP14Parser.Static_assert);
  	        this.state = 1024;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 1025;
  	        this.constantExpression();
  	        this.state = 1026;
  	        this.match(CPP14Parser.Comma);
  	        this.state = 1027;
  	        this.match(CPP14Parser.StringLiteral);
  	        this.state = 1028;
  	        this.match(CPP14Parser.RightParen);
  	        this.state = 1029;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	emptyDeclaration() {
  	    let localctx = new EmptyDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 132, CPP14Parser.RULE_emptyDeclaration);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1031;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	attributeDeclaration() {
  	    let localctx = new AttributeDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 134, CPP14Parser.RULE_attributeDeclaration);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1033;
  	        this.attributeSpecifierSeq();
  	        this.state = 1034;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	declSpecifier() {
  	    let localctx = new DeclSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 136, CPP14Parser.RULE_declSpecifier);
  	    try {
  	        this.state = 1042;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Extern:
  	        case CPP14Parser.Mutable:
  	        case CPP14Parser.Register:
  	        case CPP14Parser.Static:
  	        case CPP14Parser.Thread_local:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1036;
  	            this.storageClassSpecifier();
  	            break;
  	        case CPP14Parser.Auto:
  	        case CPP14Parser.Bool:
  	        case CPP14Parser.Char:
  	        case CPP14Parser.Char16:
  	        case CPP14Parser.Char32:
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Const:
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Double:
  	        case CPP14Parser.Enum:
  	        case CPP14Parser.Float:
  	        case CPP14Parser.Int:
  	        case CPP14Parser.Long:
  	        case CPP14Parser.Short:
  	        case CPP14Parser.Signed:
  	        case CPP14Parser.Struct:
  	        case CPP14Parser.Typename_:
  	        case CPP14Parser.Union:
  	        case CPP14Parser.Unsigned:
  	        case CPP14Parser.Void:
  	        case CPP14Parser.Volatile:
  	        case CPP14Parser.Wchar:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1037;
  	            this.typeSpecifier();
  	            break;
  	        case CPP14Parser.Explicit:
  	        case CPP14Parser.Inline:
  	        case CPP14Parser.Virtual:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1038;
  	            this.functionSpecifier();
  	            break;
  	        case CPP14Parser.Friend:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 1039;
  	            this.match(CPP14Parser.Friend);
  	            break;
  	        case CPP14Parser.Typedef:
  	            this.enterOuterAlt(localctx, 5);
  	            this.state = 1040;
  	            this.match(CPP14Parser.Typedef);
  	            break;
  	        case CPP14Parser.Constexpr:
  	            this.enterOuterAlt(localctx, 6);
  	            this.state = 1041;
  	            this.match(CPP14Parser.Constexpr);
  	            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;
  	}
  
  
  
  	declSpecifierSeq() {
  	    let localctx = new DeclSpecifierSeqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 138, CPP14Parser.RULE_declSpecifierSeq);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1045; 
  	        this._errHandler.sync(this);
  	        var _alt = 1+1;
  	        do {
  	        	switch (_alt) {
  	        	case 1+1:
  	        		this.state = 1044;
  	        		this.declSpecifier();
  	        		break;
  	        	default:
  	        		throw new antlr4.error.NoViableAltException(this);
  	        	}
  	        	this.state = 1047; 
  	        	this._errHandler.sync(this);
  	        	_alt = this._interp.adaptivePredict(this._input,104, this._ctx);
  	        } while ( _alt!=1 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
  	        this.state = 1050;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,105,this._ctx);
  	        if(la_===1) {
  	            this.state = 1049;
  	            this.attributeSpecifierSeq();
  
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	storageClassSpecifier() {
  	    let localctx = new StorageClassSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 140, CPP14Parser.RULE_storageClassSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1052;
  	        _la = this._input.LA(1);
  	        if(!(((((_la - 36)) & ~0x1f) == 0 && ((1 << (_la - 36)) & ((1 << (CPP14Parser.Extern - 36)) | (1 << (CPP14Parser.Mutable - 36)) | (1 << (CPP14Parser.Register - 36)) | (1 << (CPP14Parser.Static - 36)))) !== 0) || _la===CPP14Parser.Thread_local)) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	functionSpecifier() {
  	    let localctx = new FunctionSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 142, CPP14Parser.RULE_functionSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1054;
  	        _la = this._input.LA(1);
  	        if(!(_la===CPP14Parser.Explicit || _la===CPP14Parser.Inline || _la===CPP14Parser.Virtual)) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	typedefName() {
  	    let localctx = new TypedefNameContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 144, CPP14Parser.RULE_typedefName);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1056;
  	        this.match(CPP14Parser.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;
  	}
  
  
  
  	typeSpecifier() {
  	    let localctx = new TypeSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 146, CPP14Parser.RULE_typeSpecifier);
  	    try {
  	        this.state = 1061;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,106,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1058;
  	            this.trailingTypeSpecifier();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1059;
  	            this.classSpecifier();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1060;
  	            this.enumSpecifier();
  	            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;
  	}
  
  
  
  	trailingTypeSpecifier() {
  	    let localctx = new TrailingTypeSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 148, CPP14Parser.RULE_trailingTypeSpecifier);
  	    try {
  	        this.state = 1067;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Auto:
  	        case CPP14Parser.Bool:
  	        case CPP14Parser.Char:
  	        case CPP14Parser.Char16:
  	        case CPP14Parser.Char32:
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Double:
  	        case CPP14Parser.Float:
  	        case CPP14Parser.Int:
  	        case CPP14Parser.Long:
  	        case CPP14Parser.Short:
  	        case CPP14Parser.Signed:
  	        case CPP14Parser.Unsigned:
  	        case CPP14Parser.Void:
  	        case CPP14Parser.Wchar:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1063;
  	            this.simpleTypeSpecifier();
  	            break;
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Enum:
  	        case CPP14Parser.Struct:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1064;
  	            this.elaboratedTypeSpecifier();
  	            break;
  	        case CPP14Parser.Typename_:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1065;
  	            this.typeNameSpecifier();
  	            break;
  	        case CPP14Parser.Const:
  	        case CPP14Parser.Volatile:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 1066;
  	            this.cvQualifier();
  	            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;
  	}
  
  
  
  	typeSpecifierSeq() {
  	    let localctx = new TypeSpecifierSeqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 150, CPP14Parser.RULE_typeSpecifierSeq);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1070; 
  	        this._errHandler.sync(this);
  	        var _alt = 1;
  	        do {
  	        	switch (_alt) {
  	        	case 1:
  	        		this.state = 1069;
  	        		this.typeSpecifier();
  	        		break;
  	        	default:
  	        		throw new antlr4.error.NoViableAltException(this);
  	        	}
  	        	this.state = 1072; 
  	        	this._errHandler.sync(this);
  	        	_alt = this._interp.adaptivePredict(this._input,108, this._ctx);
  	        } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
  	        this.state = 1075;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,109,this._ctx);
  	        if(la_===1) {
  	            this.state = 1074;
  	            this.attributeSpecifierSeq();
  
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	trailingTypeSpecifierSeq() {
  	    let localctx = new TrailingTypeSpecifierSeqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 152, CPP14Parser.RULE_trailingTypeSpecifierSeq);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1078; 
  	        this._errHandler.sync(this);
  	        var _alt = 1;
  	        do {
  	        	switch (_alt) {
  	        	case 1:
  	        		this.state = 1077;
  	        		this.trailingTypeSpecifier();
  	        		break;
  	        	default:
  	        		throw new antlr4.error.NoViableAltException(this);
  	        	}
  	        	this.state = 1080; 
  	        	this._errHandler.sync(this);
  	        	_alt = this._interp.adaptivePredict(this._input,110, this._ctx);
  	        } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
  	        this.state = 1083;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,111,this._ctx);
  	        if(la_===1) {
  	            this.state = 1082;
  	            this.attributeSpecifierSeq();
  
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	simpleTypeLengthModifier() {
  	    let localctx = new SimpleTypeLengthModifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 154, CPP14Parser.RULE_simpleTypeLengthModifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1085;
  	        _la = this._input.LA(1);
  	        if(!(_la===CPP14Parser.Long || _la===CPP14Parser.Short)) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	simpleTypeSignednessModifier() {
  	    let localctx = new SimpleTypeSignednessModifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 156, CPP14Parser.RULE_simpleTypeSignednessModifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1087;
  	        _la = this._input.LA(1);
  	        if(!(_la===CPP14Parser.Signed || _la===CPP14Parser.Unsigned)) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	simpleTypeSpecifier() {
  	    let localctx = new SimpleTypeSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 158, CPP14Parser.RULE_simpleTypeSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1141;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,122,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1090;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,112,this._ctx);
  	            if(la_===1) {
  	                this.state = 1089;
  	                this.nestedNameSpecifier(0);
  
  	            }
  	            this.state = 1092;
  	            this.theTypeName();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1093;
  	            this.nestedNameSpecifier(0);
  	            this.state = 1094;
  	            this.match(CPP14Parser.Template);
  	            this.state = 1095;
  	            this.simpleTemplateId();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1097;
  	            this.simpleTypeSignednessModifier();
  	            break;
  
  	        case 4:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 1099;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Signed || _la===CPP14Parser.Unsigned) {
  	                this.state = 1098;
  	                this.simpleTypeSignednessModifier();
  	            }
  
  	            this.state = 1102; 
  	            this._errHandler.sync(this);
  	            var _alt = 1;
  	            do {
  	            	switch (_alt) {
  	            	case 1:
  	            		this.state = 1101;
  	            		this.simpleTypeLengthModifier();
  	            		break;
  	            	default:
  	            		throw new antlr4.error.NoViableAltException(this);
  	            	}
  	            	this.state = 1104; 
  	            	this._errHandler.sync(this);
  	            	_alt = this._interp.adaptivePredict(this._input,114, this._ctx);
  	            } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
  	            break;
  
  	        case 5:
  	            this.enterOuterAlt(localctx, 5);
  	            this.state = 1107;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Signed || _la===CPP14Parser.Unsigned) {
  	                this.state = 1106;
  	                this.simpleTypeSignednessModifier();
  	            }
  
  	            this.state = 1109;
  	            this.match(CPP14Parser.Char);
  	            break;
  
  	        case 6:
  	            this.enterOuterAlt(localctx, 6);
  	            this.state = 1111;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Signed || _la===CPP14Parser.Unsigned) {
  	                this.state = 1110;
  	                this.simpleTypeSignednessModifier();
  	            }
  
  	            this.state = 1113;
  	            this.match(CPP14Parser.Char16);
  	            break;
  
  	        case 7:
  	            this.enterOuterAlt(localctx, 7);
  	            this.state = 1115;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Signed || _la===CPP14Parser.Unsigned) {
  	                this.state = 1114;
  	                this.simpleTypeSignednessModifier();
  	            }
  
  	            this.state = 1117;
  	            this.match(CPP14Parser.Char32);
  	            break;
  
  	        case 8:
  	            this.enterOuterAlt(localctx, 8);
  	            this.state = 1119;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Signed || _la===CPP14Parser.Unsigned) {
  	                this.state = 1118;
  	                this.simpleTypeSignednessModifier();
  	            }
  
  	            this.state = 1121;
  	            this.match(CPP14Parser.Wchar);
  	            break;
  
  	        case 9:
  	            this.enterOuterAlt(localctx, 9);
  	            this.state = 1122;
  	            this.match(CPP14Parser.Bool);
  	            break;
  
  	        case 10:
  	            this.enterOuterAlt(localctx, 10);
  	            this.state = 1124;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Signed || _la===CPP14Parser.Unsigned) {
  	                this.state = 1123;
  	                this.simpleTypeSignednessModifier();
  	            }
  
  	            this.state = 1129;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            while(_la===CPP14Parser.Long || _la===CPP14Parser.Short) {
  	                this.state = 1126;
  	                this.simpleTypeLengthModifier();
  	                this.state = 1131;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	            }
  	            this.state = 1132;
  	            this.match(CPP14Parser.Int);
  	            break;
  
  	        case 11:
  	            this.enterOuterAlt(localctx, 11);
  	            this.state = 1133;
  	            this.match(CPP14Parser.Float);
  	            break;
  
  	        case 12:
  	            this.enterOuterAlt(localctx, 12);
  	            this.state = 1135;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Long || _la===CPP14Parser.Short) {
  	                this.state = 1134;
  	                this.simpleTypeLengthModifier();
  	            }
  
  	            this.state = 1137;
  	            this.match(CPP14Parser.Double);
  	            break;
  
  	        case 13:
  	            this.enterOuterAlt(localctx, 13);
  	            this.state = 1138;
  	            this.match(CPP14Parser.Void);
  	            break;
  
  	        case 14:
  	            this.enterOuterAlt(localctx, 14);
  	            this.state = 1139;
  	            this.match(CPP14Parser.Auto);
  	            break;
  
  	        case 15:
  	            this.enterOuterAlt(localctx, 15);
  	            this.state = 1140;
  	            this.decltypeSpecifier();
  	            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;
  	}
  
  
  
  	theTypeName() {
  	    let localctx = new TheTypeNameContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 160, CPP14Parser.RULE_theTypeName);
  	    try {
  	        this.state = 1147;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,123,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1143;
  	            this.className();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1144;
  	            this.enumName();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1145;
  	            this.typedefName();
  	            break;
  
  	        case 4:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 1146;
  	            this.simpleTemplateId();
  	            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;
  	}
  
  
  
  	decltypeSpecifier() {
  	    let localctx = new DecltypeSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 162, CPP14Parser.RULE_decltypeSpecifier);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1149;
  	        this.match(CPP14Parser.Decltype);
  	        this.state = 1150;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 1153;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,124,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.state = 1151;
  	            this.expression();
  	            break;
  
  	        case 2:
  	            this.state = 1152;
  	            this.match(CPP14Parser.Auto);
  	            break;
  
  	        }
  	        this.state = 1155;
  	        this.match(CPP14Parser.RightParen);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	elaboratedTypeSpecifier() {
  	    let localctx = new ElaboratedTypeSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 164, CPP14Parser.RULE_elaboratedTypeSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1179;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Struct:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1157;
  	            this.classKey();
  	            this.state = 1172;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,128,this._ctx);
  	            switch(la_) {
  	            case 1:
  	                this.state = 1159;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	                    this.state = 1158;
  	                    this.attributeSpecifierSeq();
  	                }
  
  	                this.state = 1162;
  	                this._errHandler.sync(this);
  	                var la_ = this._interp.adaptivePredict(this._input,126,this._ctx);
  	                if(la_===1) {
  	                    this.state = 1161;
  	                    this.nestedNameSpecifier(0);
  
  	                }
  	                this.state = 1164;
  	                this.match(CPP14Parser.Identifier);
  	                break;
  
  	            case 2:
  	                this.state = 1165;
  	                this.simpleTemplateId();
  	                break;
  
  	            case 3:
  	                this.state = 1166;
  	                this.nestedNameSpecifier(0);
  	                this.state = 1168;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if(_la===CPP14Parser.Template) {
  	                    this.state = 1167;
  	                    this.match(CPP14Parser.Template);
  	                }
  
  	                this.state = 1170;
  	                this.simpleTemplateId();
  	                break;
  
  	            }
  	            break;
  	        case CPP14Parser.Enum:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1174;
  	            this.match(CPP14Parser.Enum);
  	            this.state = 1176;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,129,this._ctx);
  	            if(la_===1) {
  	                this.state = 1175;
  	                this.nestedNameSpecifier(0);
  
  	            }
  	            this.state = 1178;
  	            this.match(CPP14Parser.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;
  	}
  
  
  
  	enumName() {
  	    let localctx = new EnumNameContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 166, CPP14Parser.RULE_enumName);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1181;
  	        this.match(CPP14Parser.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;
  	}
  
  
  
  	enumSpecifier() {
  	    let localctx = new EnumSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 168, CPP14Parser.RULE_enumSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1183;
  	        this.enumHead();
  	        this.state = 1184;
  	        this.match(CPP14Parser.LeftBrace);
  	        this.state = 1189;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Identifier) {
  	            this.state = 1185;
  	            this.enumeratorList();
  	            this.state = 1187;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Comma) {
  	                this.state = 1186;
  	                this.match(CPP14Parser.Comma);
  	            }
  
  	        }
  
  	        this.state = 1191;
  	        this.match(CPP14Parser.RightBrace);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	enumHead() {
  	    let localctx = new EnumHeadContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 170, CPP14Parser.RULE_enumHead);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1193;
  	        this.enumkey();
  	        this.state = 1195;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 1194;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 1201;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Decltype || _la===CPP14Parser.Doublecolon || _la===CPP14Parser.Identifier) {
  	            this.state = 1198;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,134,this._ctx);
  	            if(la_===1) {
  	                this.state = 1197;
  	                this.nestedNameSpecifier(0);
  
  	            }
  	            this.state = 1200;
  	            this.match(CPP14Parser.Identifier);
  	        }
  
  	        this.state = 1204;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Colon) {
  	            this.state = 1203;
  	            this.enumbase();
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	opaqueEnumDeclaration() {
  	    let localctx = new OpaqueEnumDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 172, CPP14Parser.RULE_opaqueEnumDeclaration);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1206;
  	        this.enumkey();
  	        this.state = 1208;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 1207;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 1210;
  	        this.match(CPP14Parser.Identifier);
  	        this.state = 1212;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Colon) {
  	            this.state = 1211;
  	            this.enumbase();
  	        }
  
  	        this.state = 1214;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	enumkey() {
  	    let localctx = new EnumkeyContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 174, CPP14Parser.RULE_enumkey);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1216;
  	        this.match(CPP14Parser.Enum);
  	        this.state = 1218;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Class || _la===CPP14Parser.Struct) {
  	            this.state = 1217;
  	            _la = this._input.LA(1);
  	            if(!(_la===CPP14Parser.Class || _la===CPP14Parser.Struct)) {
  	            this._errHandler.recoverInline(this);
  	            }
  	            else {
  	            	this._errHandler.reportMatch(this);
  	                this.consume();
  	            }
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	enumbase() {
  	    let localctx = new EnumbaseContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 176, CPP14Parser.RULE_enumbase);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1220;
  	        this.match(CPP14Parser.Colon);
  	        this.state = 1221;
  	        this.typeSpecifierSeq();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	enumeratorList() {
  	    let localctx = new EnumeratorListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 178, CPP14Parser.RULE_enumeratorList);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1223;
  	        this.enumeratorDefinition();
  	        this.state = 1228;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,140,this._ctx)
  	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
  	            if(_alt===1) {
  	                this.state = 1224;
  	                this.match(CPP14Parser.Comma);
  	                this.state = 1225;
  	                this.enumeratorDefinition(); 
  	            }
  	            this.state = 1230;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,140,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;
  	}
  
  
  
  	enumeratorDefinition() {
  	    let localctx = new EnumeratorDefinitionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 180, CPP14Parser.RULE_enumeratorDefinition);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1231;
  	        this.enumerator();
  	        this.state = 1234;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Assign) {
  	            this.state = 1232;
  	            this.match(CPP14Parser.Assign);
  	            this.state = 1233;
  	            this.constantExpression();
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	enumerator() {
  	    let localctx = new EnumeratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 182, CPP14Parser.RULE_enumerator);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1236;
  	        this.match(CPP14Parser.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;
  	}
  
  
  
  	namespaceName() {
  	    let localctx = new NamespaceNameContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 184, CPP14Parser.RULE_namespaceName);
  	    try {
  	        this.state = 1240;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,142,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1238;
  	            this.originalNamespaceName();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1239;
  	            this.namespaceAlias();
  	            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;
  	}
  
  
  
  	originalNamespaceName() {
  	    let localctx = new OriginalNamespaceNameContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 186, CPP14Parser.RULE_originalNamespaceName);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1242;
  	        this.match(CPP14Parser.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;
  	}
  
  
  
  	namespaceDefinition() {
  	    let localctx = new NamespaceDefinitionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 188, CPP14Parser.RULE_namespaceDefinition);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1245;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Inline) {
  	            this.state = 1244;
  	            this.match(CPP14Parser.Inline);
  	        }
  
  	        this.state = 1247;
  	        this.match(CPP14Parser.Namespace);
  	        this.state = 1250;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,144,this._ctx);
  	        if(la_===1) {
  	            this.state = 1248;
  	            this.match(CPP14Parser.Identifier);
  
  	        } else if(la_===2) {
  	            this.state = 1249;
  	            this.originalNamespaceName();
  
  	        }
  	        this.state = 1252;
  	        this.match(CPP14Parser.LeftBrace);
  	        this.state = 1254;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(((((_la - 10)) & ~0x1f) == 0 && ((1 << (_la - 10)) & ((1 << (CPP14Parser.Alignas - 10)) | (1 << (CPP14Parser.Asm - 10)) | (1 << (CPP14Parser.Auto - 10)) | (1 << (CPP14Parser.Bool - 10)) | (1 << (CPP14Parser.Char - 10)) | (1 << (CPP14Parser.Char16 - 10)) | (1 << (CPP14Parser.Char32 - 10)) | (1 << (CPP14Parser.Class - 10)) | (1 << (CPP14Parser.Const - 10)) | (1 << (CPP14Parser.Constexpr - 10)) | (1 << (CPP14Parser.Decltype - 10)) | (1 << (CPP14Parser.Double - 10)) | (1 << (CPP14Parser.Enum - 10)) | (1 << (CPP14Parser.Explicit - 10)) | (1 << (CPP14Parser.Extern - 10)) | (1 << (CPP14Parser.Float - 10)) | (1 << (CPP14Parser.Friend - 10)))) !== 0) || ((((_la - 44)) & ~0x1f) == 0 && ((1 << (_la - 44)) & ((1 << (CPP14Parser.Inline - 44)) | (1 << (CPP14Parser.Int - 44)) | (1 << (CPP14Parser.Long - 44)) | (1 << (CPP14Parser.Mutable - 44)) | (1 << (CPP14Parser.Namespace - 44)) | (1 << (CPP14Parser.Operator - 44)) | (1 << (CPP14Parser.Register - 44)) | (1 << (CPP14Parser.Short - 44)) | (1 << (CPP14Parser.Signed - 44)) | (1 << (CPP14Parser.Static - 44)) | (1 << (CPP14Parser.Static_assert - 44)) | (1 << (CPP14Parser.Struct - 44)) | (1 << (CPP14Parser.Template - 44)) | (1 << (CPP14Parser.Thread_local - 44)) | (1 << (CPP14Parser.Typedef - 44)))) !== 0) || ((((_la - 76)) & ~0x1f) == 0 && ((1 << (_la - 76)) & ((1 << (CPP14Parser.Typename_ - 76)) | (1 << (CPP14Parser.Union - 76)) | (1 << (CPP14Parser.Unsigned - 76)) | (1 << (CPP14Parser.Using - 76)) | (1 << (CPP14Parser.Virtual - 76)) | (1 << (CPP14Parser.Void - 76)) | (1 << (CPP14Parser.Volatile - 76)) | (1 << (CPP14Parser.Wchar - 76)) | (1 << (CPP14Parser.LeftParen - 76)) | (1 << (CPP14Parser.LeftBracket - 76)) | (1 << (CPP14Parser.Star - 76)) | (1 << (CPP14Parser.And - 76)) | (1 << (CPP14Parser.Tilde - 76)))) !== 0) || ((((_la - 118)) & ~0x1f) == 0 && ((1 << (_la - 118)) & ((1 << (CPP14Parser.AndAnd - 118)) | (1 << (CPP14Parser.Doublecolon - 118)) | (1 << (CPP14Parser.Semi - 118)) | (1 << (CPP14Parser.Ellipsis - 118)) | (1 << (CPP14Parser.Identifier - 118)))) !== 0)) {
  	            this.state = 1253;
  	            localctx.namespaceBody = this.declarationseq();
  	        }
  
  	        this.state = 1256;
  	        this.match(CPP14Parser.RightBrace);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	namespaceAlias() {
  	    let localctx = new NamespaceAliasContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 190, CPP14Parser.RULE_namespaceAlias);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1258;
  	        this.match(CPP14Parser.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;
  	}
  
  
  
  	namespaceAliasDefinition() {
  	    let localctx = new NamespaceAliasDefinitionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 192, CPP14Parser.RULE_namespaceAliasDefinition);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1260;
  	        this.match(CPP14Parser.Namespace);
  	        this.state = 1261;
  	        this.match(CPP14Parser.Identifier);
  	        this.state = 1262;
  	        this.match(CPP14Parser.Assign);
  	        this.state = 1263;
  	        this.qualifiednamespacespecifier();
  	        this.state = 1264;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	qualifiednamespacespecifier() {
  	    let localctx = new QualifiednamespacespecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 194, CPP14Parser.RULE_qualifiednamespacespecifier);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1267;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,146,this._ctx);
  	        if(la_===1) {
  	            this.state = 1266;
  	            this.nestedNameSpecifier(0);
  
  	        }
  	        this.state = 1269;
  	        this.namespaceName();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	usingDeclaration() {
  	    let localctx = new UsingDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 196, CPP14Parser.RULE_usingDeclaration);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1271;
  	        this.match(CPP14Parser.Using);
  	        this.state = 1277;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,148,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.state = 1273;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Typename_) {
  	                this.state = 1272;
  	                this.match(CPP14Parser.Typename_);
  	            }
  
  	            this.state = 1275;
  	            this.nestedNameSpecifier(0);
  	            break;
  
  	        case 2:
  	            this.state = 1276;
  	            this.match(CPP14Parser.Doublecolon);
  	            break;
  
  	        }
  	        this.state = 1279;
  	        this.unqualifiedId();
  	        this.state = 1280;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	usingDirective() {
  	    let localctx = new UsingDirectiveContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 198, CPP14Parser.RULE_usingDirective);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1283;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 1282;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 1285;
  	        this.match(CPP14Parser.Using);
  	        this.state = 1286;
  	        this.match(CPP14Parser.Namespace);
  	        this.state = 1288;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,150,this._ctx);
  	        if(la_===1) {
  	            this.state = 1287;
  	            this.nestedNameSpecifier(0);
  
  	        }
  	        this.state = 1290;
  	        this.namespaceName();
  	        this.state = 1291;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	asmDefinition() {
  	    let localctx = new AsmDefinitionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 200, CPP14Parser.RULE_asmDefinition);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1293;
  	        this.match(CPP14Parser.Asm);
  	        this.state = 1294;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 1295;
  	        this.match(CPP14Parser.StringLiteral);
  	        this.state = 1296;
  	        this.match(CPP14Parser.RightParen);
  	        this.state = 1297;
  	        this.match(CPP14Parser.Semi);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	linkageSpecification() {
  	    let localctx = new LinkageSpecificationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 202, CPP14Parser.RULE_linkageSpecification);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1299;
  	        this.match(CPP14Parser.Extern);
  	        this.state = 1300;
  	        this.match(CPP14Parser.StringLiteral);
  	        this.state = 1307;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.LeftBrace:
  	            this.state = 1301;
  	            this.match(CPP14Parser.LeftBrace);
  	            this.state = 1303;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(((((_la - 10)) & ~0x1f) == 0 && ((1 << (_la - 10)) & ((1 << (CPP14Parser.Alignas - 10)) | (1 << (CPP14Parser.Asm - 10)) | (1 << (CPP14Parser.Auto - 10)) | (1 << (CPP14Parser.Bool - 10)) | (1 << (CPP14Parser.Char - 10)) | (1 << (CPP14Parser.Char16 - 10)) | (1 << (CPP14Parser.Char32 - 10)) | (1 << (CPP14Parser.Class - 10)) | (1 << (CPP14Parser.Const - 10)) | (1 << (CPP14Parser.Constexpr - 10)) | (1 << (CPP14Parser.Decltype - 10)) | (1 << (CPP14Parser.Double - 10)) | (1 << (CPP14Parser.Enum - 10)) | (1 << (CPP14Parser.Explicit - 10)) | (1 << (CPP14Parser.Extern - 10)) | (1 << (CPP14Parser.Float - 10)) | (1 << (CPP14Parser.Friend - 10)))) !== 0) || ((((_la - 44)) & ~0x1f) == 0 && ((1 << (_la - 44)) & ((1 << (CPP14Parser.Inline - 44)) | (1 << (CPP14Parser.Int - 44)) | (1 << (CPP14Parser.Long - 44)) | (1 << (CPP14Parser.Mutable - 44)) | (1 << (CPP14Parser.Namespace - 44)) | (1 << (CPP14Parser.Operator - 44)) | (1 << (CPP14Parser.Register - 44)) | (1 << (CPP14Parser.Short - 44)) | (1 << (CPP14Parser.Signed - 44)) | (1 << (CPP14Parser.Static - 44)) | (1 << (CPP14Parser.Static_assert - 44)) | (1 << (CPP14Parser.Struct - 44)) | (1 << (CPP14Parser.Template - 44)) | (1 << (CPP14Parser.Thread_local - 44)) | (1 << (CPP14Parser.Typedef - 44)))) !== 0) || ((((_la - 76)) & ~0x1f) == 0 && ((1 << (_la - 76)) & ((1 << (CPP14Parser.Typename_ - 76)) | (1 << (CPP14Parser.Union - 76)) | (1 << (CPP14Parser.Unsigned - 76)) | (1 << (CPP14Parser.Using - 76)) | (1 << (CPP14Parser.Virtual - 76)) | (1 << (CPP14Parser.Void - 76)) | (1 << (CPP14Parser.Volatile - 76)) | (1 << (CPP14Parser.Wchar - 76)) | (1 << (CPP14Parser.LeftParen - 76)) | (1 << (CPP14Parser.LeftBracket - 76)) | (1 << (CPP14Parser.Star - 76)) | (1 << (CPP14Parser.And - 76)) | (1 << (CPP14Parser.Tilde - 76)))) !== 0) || ((((_la - 118)) & ~0x1f) == 0 && ((1 << (_la - 118)) & ((1 << (CPP14Parser.AndAnd - 118)) | (1 << (CPP14Parser.Doublecolon - 118)) | (1 << (CPP14Parser.Semi - 118)) | (1 << (CPP14Parser.Ellipsis - 118)) | (1 << (CPP14Parser.Identifier - 118)))) !== 0)) {
  	                this.state = 1302;
  	                this.declarationseq();
  	            }
  
  	            this.state = 1305;
  	            this.match(CPP14Parser.RightBrace);
  	            break;
  	        case CPP14Parser.Alignas:
  	        case CPP14Parser.Asm:
  	        case CPP14Parser.Auto:
  	        case CPP14Parser.Bool:
  	        case CPP14Parser.Char:
  	        case CPP14Parser.Char16:
  	        case CPP14Parser.Char32:
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Const:
  	        case CPP14Parser.Constexpr:
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Double:
  	        case CPP14Parser.Enum:
  	        case CPP14Parser.Explicit:
  	        case CPP14Parser.Extern:
  	        case CPP14Parser.Float:
  	        case CPP14Parser.Friend:
  	        case CPP14Parser.Inline:
  	        case CPP14Parser.Int:
  	        case CPP14Parser.Long:
  	        case CPP14Parser.Mutable:
  	        case CPP14Parser.Namespace:
  	        case CPP14Parser.Operator:
  	        case CPP14Parser.Register:
  	        case CPP14Parser.Short:
  	        case CPP14Parser.Signed:
  	        case CPP14Parser.Static:
  	        case CPP14Parser.Static_assert:
  	        case CPP14Parser.Struct:
  	        case CPP14Parser.Template:
  	        case CPP14Parser.Thread_local:
  	        case CPP14Parser.Typedef:
  	        case CPP14Parser.Typename_:
  	        case CPP14Parser.Union:
  	        case CPP14Parser.Unsigned:
  	        case CPP14Parser.Using:
  	        case CPP14Parser.Virtual:
  	        case CPP14Parser.Void:
  	        case CPP14Parser.Volatile:
  	        case CPP14Parser.Wchar:
  	        case CPP14Parser.LeftParen:
  	        case CPP14Parser.LeftBracket:
  	        case CPP14Parser.Star:
  	        case CPP14Parser.And:
  	        case CPP14Parser.Tilde:
  	        case CPP14Parser.AndAnd:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Semi:
  	        case CPP14Parser.Ellipsis:
  	        case CPP14Parser.Identifier:
  	            this.state = 1306;
  	            this.declaration();
  	            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;
  	}
  
  
  
  	attributeSpecifierSeq() {
  	    let localctx = new AttributeSpecifierSeqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 204, CPP14Parser.RULE_attributeSpecifierSeq);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1310; 
  	        this._errHandler.sync(this);
  	        var _alt = 1;
  	        do {
  	        	switch (_alt) {
  	        	case 1:
  	        		this.state = 1309;
  	        		this.attributeSpecifier();
  	        		break;
  	        	default:
  	        		throw new antlr4.error.NoViableAltException(this);
  	        	}
  	        	this.state = 1312; 
  	        	this._errHandler.sync(this);
  	        	_alt = this._interp.adaptivePredict(this._input,153, this._ctx);
  	        } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	attributeSpecifier() {
  	    let localctx = new AttributeSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 206, CPP14Parser.RULE_attributeSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1322;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.LeftBracket:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1314;
  	            this.match(CPP14Parser.LeftBracket);
  	            this.state = 1315;
  	            this.match(CPP14Parser.LeftBracket);
  	            this.state = 1317;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Identifier) {
  	                this.state = 1316;
  	                this.attributeList();
  	            }
  
  	            this.state = 1319;
  	            this.match(CPP14Parser.RightBracket);
  	            this.state = 1320;
  	            this.match(CPP14Parser.RightBracket);
  	            break;
  	        case CPP14Parser.Alignas:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1321;
  	            this.alignmentspecifier();
  	            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;
  	}
  
  
  
  	alignmentspecifier() {
  	    let localctx = new AlignmentspecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 208, CPP14Parser.RULE_alignmentspecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1324;
  	        this.match(CPP14Parser.Alignas);
  	        this.state = 1325;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 1328;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,156,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.state = 1326;
  	            this.theTypeId();
  	            break;
  
  	        case 2:
  	            this.state = 1327;
  	            this.constantExpression();
  	            break;
  
  	        }
  	        this.state = 1331;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Ellipsis) {
  	            this.state = 1330;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	        this.state = 1333;
  	        this.match(CPP14Parser.RightParen);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	attributeList() {
  	    let localctx = new AttributeListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 210, CPP14Parser.RULE_attributeList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1335;
  	        this.attribute();
  	        this.state = 1340;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 1336;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 1337;
  	            this.attribute();
  	            this.state = 1342;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        }
  	        this.state = 1344;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Ellipsis) {
  	            this.state = 1343;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	attribute() {
  	    let localctx = new AttributeContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 212, CPP14Parser.RULE_attribute);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1349;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,160,this._ctx);
  	        if(la_===1) {
  	            this.state = 1346;
  	            this.attributeNamespace();
  	            this.state = 1347;
  	            this.match(CPP14Parser.Doublecolon);
  
  	        }
  	        this.state = 1351;
  	        this.match(CPP14Parser.Identifier);
  	        this.state = 1353;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.LeftParen) {
  	            this.state = 1352;
  	            this.attributeArgumentClause();
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	attributeNamespace() {
  	    let localctx = new AttributeNamespaceContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 214, CPP14Parser.RULE_attributeNamespace);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1355;
  	        this.match(CPP14Parser.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;
  	}
  
  
  
  	attributeArgumentClause() {
  	    let localctx = new AttributeArgumentClauseContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 216, CPP14Parser.RULE_attributeArgumentClause);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1357;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 1359;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.MultiLineMacro) | (1 << CPP14Parser.Directive) | (1 << CPP14Parser.Alignas) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Asm) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Break) | (1 << CPP14Parser.Case) | (1 << CPP14Parser.Catch) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Constexpr) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Continue) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Default) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Do) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CPP14Parser.Else - 32)) | (1 << (CPP14Parser.Enum - 32)) | (1 << (CPP14Parser.Explicit - 32)) | (1 << (CPP14Parser.Export - 32)) | (1 << (CPP14Parser.Extern - 32)) | (1 << (CPP14Parser.False_ - 32)) | (1 << (CPP14Parser.Final - 32)) | (1 << (CPP14Parser.Float - 32)) | (1 << (CPP14Parser.For - 32)) | (1 << (CPP14Parser.Friend - 32)) | (1 << (CPP14Parser.Goto - 32)) | (1 << (CPP14Parser.If - 32)) | (1 << (CPP14Parser.Inline - 32)) | (1 << (CPP14Parser.Int - 32)) | (1 << (CPP14Parser.Long - 32)) | (1 << (CPP14Parser.Mutable - 32)) | (1 << (CPP14Parser.Namespace - 32)) | (1 << (CPP14Parser.New - 32)) | (1 << (CPP14Parser.Noexcept - 32)) | (1 << (CPP14Parser.Nullptr - 32)) | (1 << (CPP14Parser.Operator - 32)) | (1 << (CPP14Parser.Override - 32)) | (1 << (CPP14Parser.Private - 32)) | (1 << (CPP14Parser.Protected - 32)) | (1 << (CPP14Parser.Public - 32)) | (1 << (CPP14Parser.Register - 32)) | (1 << (CPP14Parser.Reinterpret_cast - 32)) | (1 << (CPP14Parser.Return - 32)) | (1 << (CPP14Parser.Short - 32)) | (1 << (CPP14Parser.Signed - 32)) | (1 << (CPP14Parser.Sizeof - 32)) | (1 << (CPP14Parser.Static - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (CPP14Parser.Static_assert - 64)) | (1 << (CPP14Parser.Static_cast - 64)) | (1 << (CPP14Parser.Struct - 64)) | (1 << (CPP14Parser.Switch - 64)) | (1 << (CPP14Parser.Template - 64)) | (1 << (CPP14Parser.This - 64)) | (1 << (CPP14Parser.Thread_local - 64)) | (1 << (CPP14Parser.Throw - 64)) | (1 << (CPP14Parser.True_ - 64)) | (1 << (CPP14Parser.Try - 64)) | (1 << (CPP14Parser.Typedef - 64)) | (1 << (CPP14Parser.Typeid_ - 64)) | (1 << (CPP14Parser.Typename_ - 64)) | (1 << (CPP14Parser.Union - 64)) | (1 << (CPP14Parser.Unsigned - 64)) | (1 << (CPP14Parser.Using - 64)) | (1 << (CPP14Parser.Virtual - 64)) | (1 << (CPP14Parser.Void - 64)) | (1 << (CPP14Parser.Volatile - 64)) | (1 << (CPP14Parser.Wchar - 64)) | (1 << (CPP14Parser.While - 64)) | (1 << (CPP14Parser.LeftParen - 64)) | (1 << (CPP14Parser.LeftBracket - 64)) | (1 << (CPP14Parser.LeftBrace - 64)) | (1 << (CPP14Parser.Plus - 64)) | (1 << (CPP14Parser.Minus - 64)) | (1 << (CPP14Parser.Star - 64)) | (1 << (CPP14Parser.Div - 64)) | (1 << (CPP14Parser.Mod - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (CPP14Parser.Caret - 96)) | (1 << (CPP14Parser.And - 96)) | (1 << (CPP14Parser.Or - 96)) | (1 << (CPP14Parser.Tilde - 96)) | (1 << (CPP14Parser.Not - 96)) | (1 << (CPP14Parser.Assign - 96)) | (1 << (CPP14Parser.Less - 96)) | (1 << (CPP14Parser.Greater - 96)) | (1 << (CPP14Parser.PlusAssign - 96)) | (1 << (CPP14Parser.MinusAssign - 96)) | (1 << (CPP14Parser.StarAssign - 96)) | (1 << (CPP14Parser.DivAssign - 96)) | (1 << (CPP14Parser.ModAssign - 96)) | (1 << (CPP14Parser.XorAssign - 96)) | (1 << (CPP14Parser.AndAssign - 96)) | (1 << (CPP14Parser.OrAssign - 96)) | (1 << (CPP14Parser.LeftShiftAssign - 96)) | (1 << (CPP14Parser.RightShiftAssign - 96)) | (1 << (CPP14Parser.Equal - 96)) | (1 << (CPP14Parser.NotEqual - 96)) | (1 << (CPP14Parser.LessEqual - 96)) | (1 << (CPP14Parser.GreaterEqual - 96)) | (1 << (CPP14Parser.AndAnd - 96)) | (1 << (CPP14Parser.OrOr - 96)) | (1 << (CPP14Parser.PlusPlus - 96)) | (1 << (CPP14Parser.MinusMinus - 96)) | (1 << (CPP14Parser.Comma - 96)) | (1 << (CPP14Parser.ArrowStar - 96)) | (1 << (CPP14Parser.Arrow - 96)) | (1 << (CPP14Parser.Question - 96)) | (1 << (CPP14Parser.Colon - 96)) | (1 << (CPP14Parser.Doublecolon - 96)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (CPP14Parser.Semi - 128)) | (1 << (CPP14Parser.Dot - 128)) | (1 << (CPP14Parser.DotStar - 128)) | (1 << (CPP14Parser.Ellipsis - 128)) | (1 << (CPP14Parser.Identifier - 128)) | (1 << (CPP14Parser.DecimalLiteral - 128)) | (1 << (CPP14Parser.OctalLiteral - 128)) | (1 << (CPP14Parser.HexadecimalLiteral - 128)) | (1 << (CPP14Parser.BinaryLiteral - 128)) | (1 << (CPP14Parser.Integersuffix - 128)) | (1 << (CPP14Parser.UserDefinedIntegerLiteral - 128)) | (1 << (CPP14Parser.UserDefinedFloatingLiteral - 128)) | (1 << (CPP14Parser.UserDefinedStringLiteral - 128)) | (1 << (CPP14Parser.UserDefinedCharacterLiteral - 128)) | (1 << (CPP14Parser.Whitespace - 128)) | (1 << (CPP14Parser.Newline - 128)) | (1 << (CPP14Parser.BlockComment - 128)) | (1 << (CPP14Parser.LineComment - 128)))) !== 0)) {
  	            this.state = 1358;
  	            this.balancedTokenSeq();
  	        }
  
  	        this.state = 1361;
  	        this.match(CPP14Parser.RightParen);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	balancedTokenSeq() {
  	    let localctx = new BalancedTokenSeqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 218, CPP14Parser.RULE_balancedTokenSeq);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1364; 
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        do {
  	            this.state = 1363;
  	            this.balancedtoken();
  	            this.state = 1366; 
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        } while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.MultiLineMacro) | (1 << CPP14Parser.Directive) | (1 << CPP14Parser.Alignas) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Asm) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Break) | (1 << CPP14Parser.Case) | (1 << CPP14Parser.Catch) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Constexpr) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Continue) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Default) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Do) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (CPP14Parser.Else - 32)) | (1 << (CPP14Parser.Enum - 32)) | (1 << (CPP14Parser.Explicit - 32)) | (1 << (CPP14Parser.Export - 32)) | (1 << (CPP14Parser.Extern - 32)) | (1 << (CPP14Parser.False_ - 32)) | (1 << (CPP14Parser.Final - 32)) | (1 << (CPP14Parser.Float - 32)) | (1 << (CPP14Parser.For - 32)) | (1 << (CPP14Parser.Friend - 32)) | (1 << (CPP14Parser.Goto - 32)) | (1 << (CPP14Parser.If - 32)) | (1 << (CPP14Parser.Inline - 32)) | (1 << (CPP14Parser.Int - 32)) | (1 << (CPP14Parser.Long - 32)) | (1 << (CPP14Parser.Mutable - 32)) | (1 << (CPP14Parser.Namespace - 32)) | (1 << (CPP14Parser.New - 32)) | (1 << (CPP14Parser.Noexcept - 32)) | (1 << (CPP14Parser.Nullptr - 32)) | (1 << (CPP14Parser.Operator - 32)) | (1 << (CPP14Parser.Override - 32)) | (1 << (CPP14Parser.Private - 32)) | (1 << (CPP14Parser.Protected - 32)) | (1 << (CPP14Parser.Public - 32)) | (1 << (CPP14Parser.Register - 32)) | (1 << (CPP14Parser.Reinterpret_cast - 32)) | (1 << (CPP14Parser.Return - 32)) | (1 << (CPP14Parser.Short - 32)) | (1 << (CPP14Parser.Signed - 32)) | (1 << (CPP14Parser.Sizeof - 32)) | (1 << (CPP14Parser.Static - 32)))) !== 0) || ((((_la - 64)) & ~0x1f) == 0 && ((1 << (_la - 64)) & ((1 << (CPP14Parser.Static_assert - 64)) | (1 << (CPP14Parser.Static_cast - 64)) | (1 << (CPP14Parser.Struct - 64)) | (1 << (CPP14Parser.Switch - 64)) | (1 << (CPP14Parser.Template - 64)) | (1 << (CPP14Parser.This - 64)) | (1 << (CPP14Parser.Thread_local - 64)) | (1 << (CPP14Parser.Throw - 64)) | (1 << (CPP14Parser.True_ - 64)) | (1 << (CPP14Parser.Try - 64)) | (1 << (CPP14Parser.Typedef - 64)) | (1 << (CPP14Parser.Typeid_ - 64)) | (1 << (CPP14Parser.Typename_ - 64)) | (1 << (CPP14Parser.Union - 64)) | (1 << (CPP14Parser.Unsigned - 64)) | (1 << (CPP14Parser.Using - 64)) | (1 << (CPP14Parser.Virtual - 64)) | (1 << (CPP14Parser.Void - 64)) | (1 << (CPP14Parser.Volatile - 64)) | (1 << (CPP14Parser.Wchar - 64)) | (1 << (CPP14Parser.While - 64)) | (1 << (CPP14Parser.LeftParen - 64)) | (1 << (CPP14Parser.LeftBracket - 64)) | (1 << (CPP14Parser.LeftBrace - 64)) | (1 << (CPP14Parser.Plus - 64)) | (1 << (CPP14Parser.Minus - 64)) | (1 << (CPP14Parser.Star - 64)) | (1 << (CPP14Parser.Div - 64)) | (1 << (CPP14Parser.Mod - 64)))) !== 0) || ((((_la - 96)) & ~0x1f) == 0 && ((1 << (_la - 96)) & ((1 << (CPP14Parser.Caret - 96)) | (1 << (CPP14Parser.And - 96)) | (1 << (CPP14Parser.Or - 96)) | (1 << (CPP14Parser.Tilde - 96)) | (1 << (CPP14Parser.Not - 96)) | (1 << (CPP14Parser.Assign - 96)) | (1 << (CPP14Parser.Less - 96)) | (1 << (CPP14Parser.Greater - 96)) | (1 << (CPP14Parser.PlusAssign - 96)) | (1 << (CPP14Parser.MinusAssign - 96)) | (1 << (CPP14Parser.StarAssign - 96)) | (1 << (CPP14Parser.DivAssign - 96)) | (1 << (CPP14Parser.ModAssign - 96)) | (1 << (CPP14Parser.XorAssign - 96)) | (1 << (CPP14Parser.AndAssign - 96)) | (1 << (CPP14Parser.OrAssign - 96)) | (1 << (CPP14Parser.LeftShiftAssign - 96)) | (1 << (CPP14Parser.RightShiftAssign - 96)) | (1 << (CPP14Parser.Equal - 96)) | (1 << (CPP14Parser.NotEqual - 96)) | (1 << (CPP14Parser.LessEqual - 96)) | (1 << (CPP14Parser.GreaterEqual - 96)) | (1 << (CPP14Parser.AndAnd - 96)) | (1 << (CPP14Parser.OrOr - 96)) | (1 << (CPP14Parser.PlusPlus - 96)) | (1 << (CPP14Parser.MinusMinus - 96)) | (1 << (CPP14Parser.Comma - 96)) | (1 << (CPP14Parser.ArrowStar - 96)) | (1 << (CPP14Parser.Arrow - 96)) | (1 << (CPP14Parser.Question - 96)) | (1 << (CPP14Parser.Colon - 96)) | (1 << (CPP14Parser.Doublecolon - 96)))) !== 0) || ((((_la - 128)) & ~0x1f) == 0 && ((1 << (_la - 128)) & ((1 << (CPP14Parser.Semi - 128)) | (1 << (CPP14Parser.Dot - 128)) | (1 << (CPP14Parser.DotStar - 128)) | (1 << (CPP14Parser.Ellipsis - 128)) | (1 << (CPP14Parser.Identifier - 128)) | (1 << (CPP14Parser.DecimalLiteral - 128)) | (1 << (CPP14Parser.OctalLiteral - 128)) | (1 << (CPP14Parser.HexadecimalLiteral - 128)) | (1 << (CPP14Parser.BinaryLiteral - 128)) | (1 << (CPP14Parser.Integersuffix - 128)) | (1 << (CPP14Parser.UserDefinedIntegerLiteral - 128)) | (1 << (CPP14Parser.UserDefinedFloatingLiteral - 128)) | (1 << (CPP14Parser.UserDefinedStringLiteral - 128)) | (1 << (CPP14Parser.UserDefinedCharacterLiteral - 128)) | (1 << (CPP14Parser.Whitespace - 128)) | (1 << (CPP14Parser.Newline - 128)) | (1 << (CPP14Parser.BlockComment - 128)) | (1 << (CPP14Parser.LineComment - 128)))) !== 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;
  	}
  
  
  
  	balancedtoken() {
  	    let localctx = new BalancedtokenContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 220, CPP14Parser.RULE_balancedtoken);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1385;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.LeftParen:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1368;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 1369;
  	            this.balancedTokenSeq();
  	            this.state = 1370;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  	        case CPP14Parser.LeftBracket:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1372;
  	            this.match(CPP14Parser.LeftBracket);
  	            this.state = 1373;
  	            this.balancedTokenSeq();
  	            this.state = 1374;
  	            this.match(CPP14Parser.RightBracket);
  	            break;
  	        case CPP14Parser.LeftBrace:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1376;
  	            this.match(CPP14Parser.LeftBrace);
  	            this.state = 1377;
  	            this.balancedTokenSeq();
  	            this.state = 1378;
  	            this.match(CPP14Parser.RightBrace);
  	            break;
  	        case CPP14Parser.IntegerLiteral:
  	        case CPP14Parser.CharacterLiteral:
  	        case CPP14Parser.FloatingLiteral:
  	        case CPP14Parser.StringLiteral:
  	        case CPP14Parser.BooleanLiteral:
  	        case CPP14Parser.PointerLiteral:
  	        case CPP14Parser.UserDefinedLiteral:
  	        case CPP14Parser.MultiLineMacro:
  	        case CPP14Parser.Directive:
  	        case CPP14Parser.Alignas:
  	        case CPP14Parser.Alignof:
  	        case CPP14Parser.Asm:
  	        case CPP14Parser.Auto:
  	        case CPP14Parser.Bool:
  	        case CPP14Parser.Break:
  	        case CPP14Parser.Case:
  	        case CPP14Parser.Catch:
  	        case CPP14Parser.Char:
  	        case CPP14Parser.Char16:
  	        case CPP14Parser.Char32:
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Const:
  	        case CPP14Parser.Constexpr:
  	        case CPP14Parser.Const_cast:
  	        case CPP14Parser.Continue:
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Default:
  	        case CPP14Parser.Delete:
  	        case CPP14Parser.Do:
  	        case CPP14Parser.Double:
  	        case CPP14Parser.Dynamic_cast:
  	        case CPP14Parser.Else:
  	        case CPP14Parser.Enum:
  	        case CPP14Parser.Explicit:
  	        case CPP14Parser.Export:
  	        case CPP14Parser.Extern:
  	        case CPP14Parser.False_:
  	        case CPP14Parser.Final:
  	        case CPP14Parser.Float:
  	        case CPP14Parser.For:
  	        case CPP14Parser.Friend:
  	        case CPP14Parser.Goto:
  	        case CPP14Parser.If:
  	        case CPP14Parser.Inline:
  	        case CPP14Parser.Int:
  	        case CPP14Parser.Long:
  	        case CPP14Parser.Mutable:
  	        case CPP14Parser.Namespace:
  	        case CPP14Parser.New:
  	        case CPP14Parser.Noexcept:
  	        case CPP14Parser.Nullptr:
  	        case CPP14Parser.Operator:
  	        case CPP14Parser.Override:
  	        case CPP14Parser.Private:
  	        case CPP14Parser.Protected:
  	        case CPP14Parser.Public:
  	        case CPP14Parser.Register:
  	        case CPP14Parser.Reinterpret_cast:
  	        case CPP14Parser.Return:
  	        case CPP14Parser.Short:
  	        case CPP14Parser.Signed:
  	        case CPP14Parser.Sizeof:
  	        case CPP14Parser.Static:
  	        case CPP14Parser.Static_assert:
  	        case CPP14Parser.Static_cast:
  	        case CPP14Parser.Struct:
  	        case CPP14Parser.Switch:
  	        case CPP14Parser.Template:
  	        case CPP14Parser.This:
  	        case CPP14Parser.Thread_local:
  	        case CPP14Parser.Throw:
  	        case CPP14Parser.True_:
  	        case CPP14Parser.Try:
  	        case CPP14Parser.Typedef:
  	        case CPP14Parser.Typeid_:
  	        case CPP14Parser.Typename_:
  	        case CPP14Parser.Union:
  	        case CPP14Parser.Unsigned:
  	        case CPP14Parser.Using:
  	        case CPP14Parser.Virtual:
  	        case CPP14Parser.Void:
  	        case CPP14Parser.Volatile:
  	        case CPP14Parser.Wchar:
  	        case CPP14Parser.While:
  	        case CPP14Parser.Plus:
  	        case CPP14Parser.Minus:
  	        case CPP14Parser.Star:
  	        case CPP14Parser.Div:
  	        case CPP14Parser.Mod:
  	        case CPP14Parser.Caret:
  	        case CPP14Parser.And:
  	        case CPP14Parser.Or:
  	        case CPP14Parser.Tilde:
  	        case CPP14Parser.Not:
  	        case CPP14Parser.Assign:
  	        case CPP14Parser.Less:
  	        case CPP14Parser.Greater:
  	        case CPP14Parser.PlusAssign:
  	        case CPP14Parser.MinusAssign:
  	        case CPP14Parser.StarAssign:
  	        case CPP14Parser.DivAssign:
  	        case CPP14Parser.ModAssign:
  	        case CPP14Parser.XorAssign:
  	        case CPP14Parser.AndAssign:
  	        case CPP14Parser.OrAssign:
  	        case CPP14Parser.LeftShiftAssign:
  	        case CPP14Parser.RightShiftAssign:
  	        case CPP14Parser.Equal:
  	        case CPP14Parser.NotEqual:
  	        case CPP14Parser.LessEqual:
  	        case CPP14Parser.GreaterEqual:
  	        case CPP14Parser.AndAnd:
  	        case CPP14Parser.OrOr:
  	        case CPP14Parser.PlusPlus:
  	        case CPP14Parser.MinusMinus:
  	        case CPP14Parser.Comma:
  	        case CPP14Parser.ArrowStar:
  	        case CPP14Parser.Arrow:
  	        case CPP14Parser.Question:
  	        case CPP14Parser.Colon:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Semi:
  	        case CPP14Parser.Dot:
  	        case CPP14Parser.DotStar:
  	        case CPP14Parser.Ellipsis:
  	        case CPP14Parser.Identifier:
  	        case CPP14Parser.DecimalLiteral:
  	        case CPP14Parser.OctalLiteral:
  	        case CPP14Parser.HexadecimalLiteral:
  	        case CPP14Parser.BinaryLiteral:
  	        case CPP14Parser.Integersuffix:
  	        case CPP14Parser.UserDefinedIntegerLiteral:
  	        case CPP14Parser.UserDefinedFloatingLiteral:
  	        case CPP14Parser.UserDefinedStringLiteral:
  	        case CPP14Parser.UserDefinedCharacterLiteral:
  	        case CPP14Parser.Whitespace:
  	        case CPP14Parser.Newline:
  	        case CPP14Parser.BlockComment:
  	        case CPP14Parser.LineComment:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 1381; 
  	            this._errHandler.sync(this);
  	            var _alt = 1;
  	            do {
  	            	switch (_alt) {
  	            	case 1:
  	            		this.state = 1380;
  	            		_la = this._input.LA(1);
  	            		if(_la<=0 || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (CPP14Parser.LeftParen - 85)) | (1 << (CPP14Parser.RightParen - 85)) | (1 << (CPP14Parser.LeftBracket - 85)) | (1 << (CPP14Parser.RightBracket - 85)) | (1 << (CPP14Parser.LeftBrace - 85)) | (1 << (CPP14Parser.RightBrace - 85)))) !== 0)) {
  	            		this._errHandler.recoverInline(this);
  	            		}
  	            		else {
  	            			this._errHandler.reportMatch(this);
  	            		    this.consume();
  	            		}
  	            		break;
  	            	default:
  	            		throw new antlr4.error.NoViableAltException(this);
  	            	}
  	            	this.state = 1383; 
  	            	this._errHandler.sync(this);
  	            	_alt = this._interp.adaptivePredict(this._input,164, this._ctx);
  	            } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
  	            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;
  	}
  
  
  
  	initDeclaratorList() {
  	    let localctx = new InitDeclaratorListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 222, CPP14Parser.RULE_initDeclaratorList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1387;
  	        this.initDeclarator();
  	        this.state = 1392;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 1388;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 1389;
  	            this.initDeclarator();
  	            this.state = 1394;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	initDeclarator() {
  	    let localctx = new InitDeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 224, CPP14Parser.RULE_initDeclarator);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1395;
  	        this.declarator();
  	        this.state = 1397;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (CPP14Parser.LeftParen - 85)) | (1 << (CPP14Parser.LeftBrace - 85)) | (1 << (CPP14Parser.Assign - 85)))) !== 0)) {
  	            this.state = 1396;
  	            this.initializer();
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	declarator() {
  	    let localctx = new DeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 226, CPP14Parser.RULE_declarator);
  	    try {
  	        this.state = 1404;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,168,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1399;
  	            this.pointerDeclarator();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1400;
  	            this.noPointerDeclarator(0);
  	            this.state = 1401;
  	            this.parametersAndQualifiers();
  	            this.state = 1402;
  	            this.trailingReturnType();
  	            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;
  	}
  
  
  
  	pointerDeclarator() {
  	    let localctx = new PointerDeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 228, CPP14Parser.RULE_pointerDeclarator);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1412;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,170,this._ctx)
  	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
  	            if(_alt===1) {
  	                this.state = 1406;
  	                this.pointerOperator();
  	                this.state = 1408;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if(_la===CPP14Parser.Const) {
  	                    this.state = 1407;
  	                    this.match(CPP14Parser.Const);
  	                }
  	         
  	            }
  	            this.state = 1414;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,170,this._ctx);
  	        }
  
  	        this.state = 1415;
  	        this.noPointerDeclarator(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;
  	}
  
  
  	noPointerDeclarator(_p) {
  		if(_p===undefined) {
  		    _p = 0;
  		}
  	    const _parentctx = this._ctx;
  	    const _parentState = this.state;
  	    let localctx = new NoPointerDeclaratorContext(this, this._ctx, _parentState);
  	    let _prevctx = localctx;
  	    const _startState = 230;
  	    this.enterRecursionRule(localctx, 230, CPP14Parser.RULE_noPointerDeclarator, _p);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1426;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Operator:
  	        case CPP14Parser.Tilde:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Ellipsis:
  	        case CPP14Parser.Identifier:
  	            this.state = 1418;
  	            this.declaratorid();
  	            this.state = 1420;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,171,this._ctx);
  	            if(la_===1) {
  	                this.state = 1419;
  	                this.attributeSpecifierSeq();
  
  	            }
  	            break;
  	        case CPP14Parser.LeftParen:
  	            this.state = 1422;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 1423;
  	            this.pointerDeclarator();
  	            this.state = 1424;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  	        default:
  	            throw new antlr4.error.NoViableAltException(this);
  	        }
  	        this._ctx.stop = this._input.LT(-1);
  	        this.state = 1442;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,176,this._ctx)
  	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
  	            if(_alt===1) {
  	                if(this._parseListeners!==null) {
  	                    this.triggerExitRuleEvent();
  	                }
  	                _prevctx = localctx;
  	                localctx = new NoPointerDeclaratorContext(this, _parentctx, _parentState);
  	                this.pushNewRecursionContext(localctx, _startState, CPP14Parser.RULE_noPointerDeclarator);
  	                this.state = 1428;
  	                if (!( this.precpred(this._ctx, 2))) {
  	                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
  	                }
  	                this.state = 1438;
  	                this._errHandler.sync(this);
  	                switch(this._input.LA(1)) {
  	                case CPP14Parser.LeftParen:
  	                    this.state = 1429;
  	                    this.parametersAndQualifiers();
  	                    break;
  	                case CPP14Parser.LeftBracket:
  	                    this.state = 1430;
  	                    this.match(CPP14Parser.LeftBracket);
  	                    this.state = 1432;
  	                    this._errHandler.sync(this);
  	                    _la = this._input.LA(1);
  	                    if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 75)) & ~0x1f) == 0 && ((1 << (_la - 75)) & ((1 << (CPP14Parser.Typeid_ - 75)) | (1 << (CPP14Parser.Typename_ - 75)) | (1 << (CPP14Parser.Unsigned - 75)) | (1 << (CPP14Parser.Void - 75)) | (1 << (CPP14Parser.Wchar - 75)) | (1 << (CPP14Parser.LeftParen - 75)) | (1 << (CPP14Parser.LeftBracket - 75)) | (1 << (CPP14Parser.Plus - 75)) | (1 << (CPP14Parser.Minus - 75)) | (1 << (CPP14Parser.Star - 75)) | (1 << (CPP14Parser.And - 75)) | (1 << (CPP14Parser.Or - 75)) | (1 << (CPP14Parser.Tilde - 75)) | (1 << (CPP14Parser.Not - 75)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	                        this.state = 1431;
  	                        this.constantExpression();
  	                    }
  
  	                    this.state = 1434;
  	                    this.match(CPP14Parser.RightBracket);
  	                    this.state = 1436;
  	                    this._errHandler.sync(this);
  	                    var la_ = this._interp.adaptivePredict(this._input,174,this._ctx);
  	                    if(la_===1) {
  	                        this.state = 1435;
  	                        this.attributeSpecifierSeq();
  
  	                    }
  	                    break;
  	                default:
  	                    throw new antlr4.error.NoViableAltException(this);
  	                } 
  	            }
  	            this.state = 1444;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,176,this._ctx);
  	        }
  
  	    } catch( error) {
  	        if(error instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = error;
  		        this._errHandler.reportError(this, error);
  		        this._errHandler.recover(this, error);
  		    } else {
  		    	throw error;
  		    }
  	    } finally {
  	        this.unrollRecursionContexts(_parentctx)
  	    }
  	    return localctx;
  	}
  
  
  
  	parametersAndQualifiers() {
  	    let localctx = new ParametersAndQualifiersContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 232, CPP14Parser.RULE_parametersAndQualifiers);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1445;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 1447;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.Alignas) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Constexpr) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Double))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (CPP14Parser.Enum - 33)) | (1 << (CPP14Parser.Explicit - 33)) | (1 << (CPP14Parser.Extern - 33)) | (1 << (CPP14Parser.Float - 33)) | (1 << (CPP14Parser.Friend - 33)) | (1 << (CPP14Parser.Inline - 33)) | (1 << (CPP14Parser.Int - 33)) | (1 << (CPP14Parser.Long - 33)) | (1 << (CPP14Parser.Mutable - 33)) | (1 << (CPP14Parser.Register - 33)) | (1 << (CPP14Parser.Short - 33)) | (1 << (CPP14Parser.Signed - 33)) | (1 << (CPP14Parser.Static - 33)))) !== 0) || ((((_la - 66)) & ~0x1f) == 0 && ((1 << (_la - 66)) & ((1 << (CPP14Parser.Struct - 66)) | (1 << (CPP14Parser.Thread_local - 66)) | (1 << (CPP14Parser.Typedef - 66)) | (1 << (CPP14Parser.Typename_ - 66)) | (1 << (CPP14Parser.Union - 66)) | (1 << (CPP14Parser.Unsigned - 66)) | (1 << (CPP14Parser.Virtual - 66)) | (1 << (CPP14Parser.Void - 66)) | (1 << (CPP14Parser.Volatile - 66)) | (1 << (CPP14Parser.Wchar - 66)) | (1 << (CPP14Parser.LeftBracket - 66)))) !== 0) || _la===CPP14Parser.Doublecolon || _la===CPP14Parser.Identifier) {
  	            this.state = 1446;
  	            this.parameterDeclarationClause();
  	        }
  
  	        this.state = 1449;
  	        this.match(CPP14Parser.RightParen);
  	        this.state = 1451;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,178,this._ctx);
  	        if(la_===1) {
  	            this.state = 1450;
  	            this.cvqualifierseq();
  
  	        }
  	        this.state = 1454;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,179,this._ctx);
  	        if(la_===1) {
  	            this.state = 1453;
  	            this.refqualifier();
  
  	        }
  	        this.state = 1457;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,180,this._ctx);
  	        if(la_===1) {
  	            this.state = 1456;
  	            this.exceptionSpecification();
  
  	        }
  	        this.state = 1460;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,181,this._ctx);
  	        if(la_===1) {
  	            this.state = 1459;
  	            this.attributeSpecifierSeq();
  
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	trailingReturnType() {
  	    let localctx = new TrailingReturnTypeContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 234, CPP14Parser.RULE_trailingReturnType);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1462;
  	        this.match(CPP14Parser.Arrow);
  	        this.state = 1463;
  	        this.trailingTypeSpecifierSeq();
  	        this.state = 1465;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,182,this._ctx);
  	        if(la_===1) {
  	            this.state = 1464;
  	            this.abstractDeclarator();
  
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	pointerOperator() {
  	    let localctx = new PointerOperatorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 236, CPP14Parser.RULE_pointerOperator);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1481;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.And:
  	        case CPP14Parser.AndAnd:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1467;
  	            _la = this._input.LA(1);
  	            if(!(_la===CPP14Parser.And || _la===CPP14Parser.AndAnd)) {
  	            this._errHandler.recoverInline(this);
  	            }
  	            else {
  	            	this._errHandler.reportMatch(this);
  	                this.consume();
  	            }
  	            this.state = 1469;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,183,this._ctx);
  	            if(la_===1) {
  	                this.state = 1468;
  	                this.attributeSpecifierSeq();
  
  	            }
  	            break;
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Star:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1472;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Decltype || _la===CPP14Parser.Doublecolon || _la===CPP14Parser.Identifier) {
  	                this.state = 1471;
  	                this.nestedNameSpecifier(0);
  	            }
  
  	            this.state = 1474;
  	            this.match(CPP14Parser.Star);
  	            this.state = 1476;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,185,this._ctx);
  	            if(la_===1) {
  	                this.state = 1475;
  	                this.attributeSpecifierSeq();
  
  	            }
  	            this.state = 1479;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,186,this._ctx);
  	            if(la_===1) {
  	                this.state = 1478;
  	                this.cvqualifierseq();
  
  	            }
  	            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;
  	}
  
  
  
  	cvqualifierseq() {
  	    let localctx = new CvqualifierseqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 238, CPP14Parser.RULE_cvqualifierseq);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1484; 
  	        this._errHandler.sync(this);
  	        var _alt = 1;
  	        do {
  	        	switch (_alt) {
  	        	case 1:
  	        		this.state = 1483;
  	        		this.cvQualifier();
  	        		break;
  	        	default:
  	        		throw new antlr4.error.NoViableAltException(this);
  	        	}
  	        	this.state = 1486; 
  	        	this._errHandler.sync(this);
  	        	_alt = this._interp.adaptivePredict(this._input,188, this._ctx);
  	        } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	cvQualifier() {
  	    let localctx = new CvQualifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 240, CPP14Parser.RULE_cvQualifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1488;
  	        _la = this._input.LA(1);
  	        if(!(_la===CPP14Parser.Const || _la===CPP14Parser.Volatile)) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	refqualifier() {
  	    let localctx = new RefqualifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 242, CPP14Parser.RULE_refqualifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1490;
  	        _la = this._input.LA(1);
  	        if(!(_la===CPP14Parser.And || _la===CPP14Parser.AndAnd)) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	declaratorid() {
  	    let localctx = new DeclaratoridContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 244, CPP14Parser.RULE_declaratorid);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1493;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Ellipsis) {
  	            this.state = 1492;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	        this.state = 1495;
  	        this.idExpression();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	theTypeId() {
  	    let localctx = new TheTypeIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 246, CPP14Parser.RULE_theTypeId);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1497;
  	        this.typeSpecifierSeq();
  	        this.state = 1499;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,190,this._ctx);
  	        if(la_===1) {
  	            this.state = 1498;
  	            this.abstractDeclarator();
  
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	abstractDeclarator() {
  	    let localctx = new AbstractDeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 248, CPP14Parser.RULE_abstractDeclarator);
  	    try {
  	        this.state = 1509;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,192,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1501;
  	            this.pointerAbstractDeclarator();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1503;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,191,this._ctx);
  	            if(la_===1) {
  	                this.state = 1502;
  	                this.noPointerAbstractDeclarator(0);
  
  	            }
  	            this.state = 1505;
  	            this.parametersAndQualifiers();
  	            this.state = 1506;
  	            this.trailingReturnType();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1508;
  	            this.abstractPackDeclarator();
  	            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;
  	}
  
  
  
  	pointerAbstractDeclarator() {
  	    let localctx = new PointerAbstractDeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 250, CPP14Parser.RULE_pointerAbstractDeclarator);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1520;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.LeftParen:
  	        case CPP14Parser.LeftBracket:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1511;
  	            this.noPointerAbstractDeclarator(0);
  	            break;
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Star:
  	        case CPP14Parser.And:
  	        case CPP14Parser.AndAnd:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1513; 
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            do {
  	                this.state = 1512;
  	                this.pointerOperator();
  	                this.state = 1515; 
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	            } while(_la===CPP14Parser.Decltype || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (CPP14Parser.Star - 93)) | (1 << (CPP14Parser.And - 93)) | (1 << (CPP14Parser.AndAnd - 93)))) !== 0) || _la===CPP14Parser.Doublecolon || _la===CPP14Parser.Identifier);
  	            this.state = 1518;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,194,this._ctx);
  	            if(la_===1) {
  	                this.state = 1517;
  	                this.noPointerAbstractDeclarator(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;
  	}
  
  
  	noPointerAbstractDeclarator(_p) {
  		if(_p===undefined) {
  		    _p = 0;
  		}
  	    const _parentctx = this._ctx;
  	    const _parentState = this.state;
  	    let localctx = new NoPointerAbstractDeclaratorContext(this, this._ctx, _parentState);
  	    let _prevctx = localctx;
  	    const _startState = 252;
  	    this.enterRecursionRule(localctx, 252, CPP14Parser.RULE_noPointerAbstractDeclarator, _p);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1536;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,198,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.state = 1523;
  	            this.parametersAndQualifiers();
  	            break;
  
  	        case 2:
  	            this.state = 1524;
  	            this.match(CPP14Parser.LeftBracket);
  	            this.state = 1526;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 75)) & ~0x1f) == 0 && ((1 << (_la - 75)) & ((1 << (CPP14Parser.Typeid_ - 75)) | (1 << (CPP14Parser.Typename_ - 75)) | (1 << (CPP14Parser.Unsigned - 75)) | (1 << (CPP14Parser.Void - 75)) | (1 << (CPP14Parser.Wchar - 75)) | (1 << (CPP14Parser.LeftParen - 75)) | (1 << (CPP14Parser.LeftBracket - 75)) | (1 << (CPP14Parser.Plus - 75)) | (1 << (CPP14Parser.Minus - 75)) | (1 << (CPP14Parser.Star - 75)) | (1 << (CPP14Parser.And - 75)) | (1 << (CPP14Parser.Or - 75)) | (1 << (CPP14Parser.Tilde - 75)) | (1 << (CPP14Parser.Not - 75)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	                this.state = 1525;
  	                this.constantExpression();
  	            }
  
  	            this.state = 1528;
  	            this.match(CPP14Parser.RightBracket);
  	            this.state = 1530;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,197,this._ctx);
  	            if(la_===1) {
  	                this.state = 1529;
  	                this.attributeSpecifierSeq();
  
  	            }
  	            break;
  
  	        case 3:
  	            this.state = 1532;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 1533;
  	            this.pointerAbstractDeclarator();
  	            this.state = 1534;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  
  	        }
  	        this._ctx.stop = this._input.LT(-1);
  	        this.state = 1553;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,202,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 NoPointerAbstractDeclaratorContext(this, _parentctx, _parentState);
  	                this.pushNewRecursionContext(localctx, _startState, CPP14Parser.RULE_noPointerAbstractDeclarator);
  	                this.state = 1538;
  	                if (!( this.precpred(this._ctx, 4))) {
  	                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
  	                }
  	                this.state = 1549;
  	                this._errHandler.sync(this);
  	                var la_ = this._interp.adaptivePredict(this._input,201,this._ctx);
  	                switch(la_) {
  	                case 1:
  	                    this.state = 1539;
  	                    this.parametersAndQualifiers();
  	                    break;
  
  	                case 2:
  	                    this.state = 1540;
  	                    this.noPointerAbstractDeclarator(0);
  	                    this.state = 1541;
  	                    this.match(CPP14Parser.LeftBracket);
  	                    this.state = 1543;
  	                    this._errHandler.sync(this);
  	                    _la = this._input.LA(1);
  	                    if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 75)) & ~0x1f) == 0 && ((1 << (_la - 75)) & ((1 << (CPP14Parser.Typeid_ - 75)) | (1 << (CPP14Parser.Typename_ - 75)) | (1 << (CPP14Parser.Unsigned - 75)) | (1 << (CPP14Parser.Void - 75)) | (1 << (CPP14Parser.Wchar - 75)) | (1 << (CPP14Parser.LeftParen - 75)) | (1 << (CPP14Parser.LeftBracket - 75)) | (1 << (CPP14Parser.Plus - 75)) | (1 << (CPP14Parser.Minus - 75)) | (1 << (CPP14Parser.Star - 75)) | (1 << (CPP14Parser.And - 75)) | (1 << (CPP14Parser.Or - 75)) | (1 << (CPP14Parser.Tilde - 75)) | (1 << (CPP14Parser.Not - 75)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	                        this.state = 1542;
  	                        this.constantExpression();
  	                    }
  
  	                    this.state = 1545;
  	                    this.match(CPP14Parser.RightBracket);
  	                    this.state = 1547;
  	                    this._errHandler.sync(this);
  	                    var la_ = this._interp.adaptivePredict(this._input,200,this._ctx);
  	                    if(la_===1) {
  	                        this.state = 1546;
  	                        this.attributeSpecifierSeq();
  
  	                    }
  	                    break;
  
  	                } 
  	            }
  	            this.state = 1555;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,202,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;
  	}
  
  
  
  	abstractPackDeclarator() {
  	    let localctx = new AbstractPackDeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 254, CPP14Parser.RULE_abstractPackDeclarator);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1559;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Decltype || ((((_la - 93)) & ~0x1f) == 0 && ((1 << (_la - 93)) & ((1 << (CPP14Parser.Star - 93)) | (1 << (CPP14Parser.And - 93)) | (1 << (CPP14Parser.AndAnd - 93)))) !== 0) || _la===CPP14Parser.Doublecolon || _la===CPP14Parser.Identifier) {
  	            this.state = 1556;
  	            this.pointerOperator();
  	            this.state = 1561;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        }
  	        this.state = 1562;
  	        this.noPointerAbstractPackDeclarator(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;
  	}
  
  
  	noPointerAbstractPackDeclarator(_p) {
  		if(_p===undefined) {
  		    _p = 0;
  		}
  	    const _parentctx = this._ctx;
  	    const _parentState = this.state;
  	    let localctx = new NoPointerAbstractPackDeclaratorContext(this, this._ctx, _parentState);
  	    let _prevctx = localctx;
  	    const _startState = 256;
  	    this.enterRecursionRule(localctx, 256, CPP14Parser.RULE_noPointerAbstractPackDeclarator, _p);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1565;
  	        this.match(CPP14Parser.Ellipsis);
  	        this._ctx.stop = this._input.LT(-1);
  	        this.state = 1581;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,207,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 NoPointerAbstractPackDeclaratorContext(this, _parentctx, _parentState);
  	                this.pushNewRecursionContext(localctx, _startState, CPP14Parser.RULE_noPointerAbstractPackDeclarator);
  	                this.state = 1567;
  	                if (!( this.precpred(this._ctx, 2))) {
  	                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
  	                }
  	                this.state = 1577;
  	                this._errHandler.sync(this);
  	                switch(this._input.LA(1)) {
  	                case CPP14Parser.LeftParen:
  	                    this.state = 1568;
  	                    this.parametersAndQualifiers();
  	                    break;
  	                case CPP14Parser.LeftBracket:
  	                    this.state = 1569;
  	                    this.match(CPP14Parser.LeftBracket);
  	                    this.state = 1571;
  	                    this._errHandler.sync(this);
  	                    _la = this._input.LA(1);
  	                    if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 75)) & ~0x1f) == 0 && ((1 << (_la - 75)) & ((1 << (CPP14Parser.Typeid_ - 75)) | (1 << (CPP14Parser.Typename_ - 75)) | (1 << (CPP14Parser.Unsigned - 75)) | (1 << (CPP14Parser.Void - 75)) | (1 << (CPP14Parser.Wchar - 75)) | (1 << (CPP14Parser.LeftParen - 75)) | (1 << (CPP14Parser.LeftBracket - 75)) | (1 << (CPP14Parser.Plus - 75)) | (1 << (CPP14Parser.Minus - 75)) | (1 << (CPP14Parser.Star - 75)) | (1 << (CPP14Parser.And - 75)) | (1 << (CPP14Parser.Or - 75)) | (1 << (CPP14Parser.Tilde - 75)) | (1 << (CPP14Parser.Not - 75)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	                        this.state = 1570;
  	                        this.constantExpression();
  	                    }
  
  	                    this.state = 1573;
  	                    this.match(CPP14Parser.RightBracket);
  	                    this.state = 1575;
  	                    this._errHandler.sync(this);
  	                    var la_ = this._interp.adaptivePredict(this._input,205,this._ctx);
  	                    if(la_===1) {
  	                        this.state = 1574;
  	                        this.attributeSpecifierSeq();
  
  	                    }
  	                    break;
  	                default:
  	                    throw new antlr4.error.NoViableAltException(this);
  	                } 
  	            }
  	            this.state = 1583;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,207,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;
  	}
  
  
  
  	parameterDeclarationClause() {
  	    let localctx = new ParameterDeclarationClauseContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 258, CPP14Parser.RULE_parameterDeclarationClause);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1584;
  	        this.parameterDeclarationList();
  	        this.state = 1589;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Comma || _la===CPP14Parser.Ellipsis) {
  	            this.state = 1586;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Comma) {
  	                this.state = 1585;
  	                this.match(CPP14Parser.Comma);
  	            }
  
  	            this.state = 1588;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	parameterDeclarationList() {
  	    let localctx = new ParameterDeclarationListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 260, CPP14Parser.RULE_parameterDeclarationList);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1591;
  	        this.parameterDeclaration();
  	        this.state = 1596;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,210,this._ctx)
  	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
  	            if(_alt===1) {
  	                this.state = 1592;
  	                this.match(CPP14Parser.Comma);
  	                this.state = 1593;
  	                this.parameterDeclaration(); 
  	            }
  	            this.state = 1598;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,210,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;
  	}
  
  
  
  	parameterDeclaration() {
  	    let localctx = new ParameterDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 262, CPP14Parser.RULE_parameterDeclaration);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1600;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 1599;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 1602;
  	        this.declSpecifierSeq();
  
  	        this.state = 1607;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,213,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.state = 1603;
  	            this.declarator();
  	            break;
  
  	        case 2:
  	            this.state = 1605;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,212,this._ctx);
  	            if(la_===1) {
  	                this.state = 1604;
  	                this.abstractDeclarator();
  
  	            }
  	            break;
  
  	        }
  	        this.state = 1611;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Assign) {
  	            this.state = 1609;
  	            this.match(CPP14Parser.Assign);
  	            this.state = 1610;
  	            this.initializerClause();
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	functionDefinition() {
  	    let localctx = new FunctionDefinitionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 264, CPP14Parser.RULE_functionDefinition);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1614;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 1613;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 1617;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,216,this._ctx);
  	        if(la_===1) {
  	            this.state = 1616;
  	            this.declSpecifierSeq();
  
  	        }
  	        this.state = 1619;
  	        this.declarator();
  	        this.state = 1621;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Final || _la===CPP14Parser.Override) {
  	            this.state = 1620;
  	            this.virtualSpecifierSeq();
  	        }
  
  	        this.state = 1623;
  	        this.functionBody();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	functionBody() {
  	    let localctx = new FunctionBodyContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 266, CPP14Parser.RULE_functionBody);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1633;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.LeftBrace:
  	        case CPP14Parser.Colon:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1626;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Colon) {
  	                this.state = 1625;
  	                this.constructorInitializer();
  	            }
  
  	            this.state = 1628;
  	            this.compoundStatement();
  	            break;
  	        case CPP14Parser.Try:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1629;
  	            this.functionTryBlock();
  	            break;
  	        case CPP14Parser.Assign:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1630;
  	            this.match(CPP14Parser.Assign);
  	            this.state = 1631;
  	            _la = this._input.LA(1);
  	            if(!(_la===CPP14Parser.Default || _la===CPP14Parser.Delete)) {
  	            this._errHandler.recoverInline(this);
  	            }
  	            else {
  	            	this._errHandler.reportMatch(this);
  	                this.consume();
  	            }
  	            this.state = 1632;
  	            this.match(CPP14Parser.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;
  	}
  
  
  
  	initializer() {
  	    let localctx = new InitializerContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 268, CPP14Parser.RULE_initializer);
  	    try {
  	        this.state = 1640;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.LeftBrace:
  	        case CPP14Parser.Assign:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1635;
  	            this.braceOrEqualInitializer();
  	            break;
  	        case CPP14Parser.LeftParen:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1636;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 1637;
  	            this.expressionList();
  	            this.state = 1638;
  	            this.match(CPP14Parser.RightParen);
  	            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;
  	}
  
  
  
  	braceOrEqualInitializer() {
  	    let localctx = new BraceOrEqualInitializerContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 270, CPP14Parser.RULE_braceOrEqualInitializer);
  	    try {
  	        this.state = 1645;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Assign:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1642;
  	            this.match(CPP14Parser.Assign);
  	            this.state = 1643;
  	            this.initializerClause();
  	            break;
  	        case CPP14Parser.LeftBrace:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1644;
  	            this.bracedInitList();
  	            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;
  	}
  
  
  
  	initializerClause() {
  	    let localctx = new InitializerClauseContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 272, CPP14Parser.RULE_initializerClause);
  	    try {
  	        this.state = 1649;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.IntegerLiteral:
  	        case CPP14Parser.CharacterLiteral:
  	        case CPP14Parser.FloatingLiteral:
  	        case CPP14Parser.StringLiteral:
  	        case CPP14Parser.BooleanLiteral:
  	        case CPP14Parser.PointerLiteral:
  	        case CPP14Parser.UserDefinedLiteral:
  	        case CPP14Parser.Alignof:
  	        case CPP14Parser.Auto:
  	        case CPP14Parser.Bool:
  	        case CPP14Parser.Char:
  	        case CPP14Parser.Char16:
  	        case CPP14Parser.Char32:
  	        case CPP14Parser.Const_cast:
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Delete:
  	        case CPP14Parser.Double:
  	        case CPP14Parser.Dynamic_cast:
  	        case CPP14Parser.Float:
  	        case CPP14Parser.Int:
  	        case CPP14Parser.Long:
  	        case CPP14Parser.New:
  	        case CPP14Parser.Noexcept:
  	        case CPP14Parser.Operator:
  	        case CPP14Parser.Reinterpret_cast:
  	        case CPP14Parser.Short:
  	        case CPP14Parser.Signed:
  	        case CPP14Parser.Sizeof:
  	        case CPP14Parser.Static_cast:
  	        case CPP14Parser.This:
  	        case CPP14Parser.Throw:
  	        case CPP14Parser.Typeid_:
  	        case CPP14Parser.Typename_:
  	        case CPP14Parser.Unsigned:
  	        case CPP14Parser.Void:
  	        case CPP14Parser.Wchar:
  	        case CPP14Parser.LeftParen:
  	        case CPP14Parser.LeftBracket:
  	        case CPP14Parser.Plus:
  	        case CPP14Parser.Minus:
  	        case CPP14Parser.Star:
  	        case CPP14Parser.And:
  	        case CPP14Parser.Or:
  	        case CPP14Parser.Tilde:
  	        case CPP14Parser.Not:
  	        case CPP14Parser.PlusPlus:
  	        case CPP14Parser.MinusMinus:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1647;
  	            this.assignmentExpression();
  	            break;
  	        case CPP14Parser.LeftBrace:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1648;
  	            this.bracedInitList();
  	            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;
  	}
  
  
  
  	initializerList() {
  	    let localctx = new InitializerListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 274, CPP14Parser.RULE_initializerList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1651;
  	        this.initializerClause();
  	        this.state = 1653;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Ellipsis) {
  	            this.state = 1652;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	        this.state = 1662;
  	        this._errHandler.sync(this);
  	        var _alt = this._interp.adaptivePredict(this._input,225,this._ctx)
  	        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
  	            if(_alt===1) {
  	                this.state = 1655;
  	                this.match(CPP14Parser.Comma);
  	                this.state = 1656;
  	                this.initializerClause();
  	                this.state = 1658;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if(_la===CPP14Parser.Ellipsis) {
  	                    this.state = 1657;
  	                    this.match(CPP14Parser.Ellipsis);
  	                }
  	         
  	            }
  	            this.state = 1664;
  	            this._errHandler.sync(this);
  	            _alt = this._interp.adaptivePredict(this._input,225,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;
  	}
  
  
  
  	bracedInitList() {
  	    let localctx = new BracedInitListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 276, CPP14Parser.RULE_bracedInitList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1665;
  	        this.match(CPP14Parser.LeftBrace);
  	        this.state = 1670;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CPP14Parser.Throw - 71)) | (1 << (CPP14Parser.Typeid_ - 71)) | (1 << (CPP14Parser.Typename_ - 71)) | (1 << (CPP14Parser.Unsigned - 71)) | (1 << (CPP14Parser.Void - 71)) | (1 << (CPP14Parser.Wchar - 71)) | (1 << (CPP14Parser.LeftParen - 71)) | (1 << (CPP14Parser.LeftBracket - 71)) | (1 << (CPP14Parser.LeftBrace - 71)) | (1 << (CPP14Parser.Plus - 71)) | (1 << (CPP14Parser.Minus - 71)) | (1 << (CPP14Parser.Star - 71)) | (1 << (CPP14Parser.And - 71)) | (1 << (CPP14Parser.Or - 71)) | (1 << (CPP14Parser.Tilde - 71)) | (1 << (CPP14Parser.Not - 71)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	            this.state = 1666;
  	            this.initializerList();
  	            this.state = 1668;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Comma) {
  	                this.state = 1667;
  	                this.match(CPP14Parser.Comma);
  	            }
  
  	        }
  
  	        this.state = 1672;
  	        this.match(CPP14Parser.RightBrace);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	className() {
  	    let localctx = new ClassNameContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 278, CPP14Parser.RULE_className);
  	    try {
  	        this.state = 1676;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,228,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1674;
  	            this.match(CPP14Parser.Identifier);
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1675;
  	            this.simpleTemplateId();
  	            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;
  	}
  
  
  
  	classSpecifier() {
  	    let localctx = new ClassSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 280, CPP14Parser.RULE_classSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1678;
  	        this.classHead();
  	        this.state = 1679;
  	        this.match(CPP14Parser.LeftBrace);
  	        this.state = 1681;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(((((_la - 10)) & ~0x1f) == 0 && ((1 << (_la - 10)) & ((1 << (CPP14Parser.Alignas - 10)) | (1 << (CPP14Parser.Auto - 10)) | (1 << (CPP14Parser.Bool - 10)) | (1 << (CPP14Parser.Char - 10)) | (1 << (CPP14Parser.Char16 - 10)) | (1 << (CPP14Parser.Char32 - 10)) | (1 << (CPP14Parser.Class - 10)) | (1 << (CPP14Parser.Const - 10)) | (1 << (CPP14Parser.Constexpr - 10)) | (1 << (CPP14Parser.Decltype - 10)) | (1 << (CPP14Parser.Double - 10)) | (1 << (CPP14Parser.Enum - 10)) | (1 << (CPP14Parser.Explicit - 10)) | (1 << (CPP14Parser.Extern - 10)) | (1 << (CPP14Parser.Float - 10)) | (1 << (CPP14Parser.Friend - 10)))) !== 0) || ((((_la - 44)) & ~0x1f) == 0 && ((1 << (_la - 44)) & ((1 << (CPP14Parser.Inline - 44)) | (1 << (CPP14Parser.Int - 44)) | (1 << (CPP14Parser.Long - 44)) | (1 << (CPP14Parser.Mutable - 44)) | (1 << (CPP14Parser.Operator - 44)) | (1 << (CPP14Parser.Private - 44)) | (1 << (CPP14Parser.Protected - 44)) | (1 << (CPP14Parser.Public - 44)) | (1 << (CPP14Parser.Register - 44)) | (1 << (CPP14Parser.Short - 44)) | (1 << (CPP14Parser.Signed - 44)) | (1 << (CPP14Parser.Static - 44)) | (1 << (CPP14Parser.Static_assert - 44)) | (1 << (CPP14Parser.Struct - 44)) | (1 << (CPP14Parser.Template - 44)) | (1 << (CPP14Parser.Thread_local - 44)) | (1 << (CPP14Parser.Typedef - 44)))) !== 0) || ((((_la - 76)) & ~0x1f) == 0 && ((1 << (_la - 76)) & ((1 << (CPP14Parser.Typename_ - 76)) | (1 << (CPP14Parser.Union - 76)) | (1 << (CPP14Parser.Unsigned - 76)) | (1 << (CPP14Parser.Using - 76)) | (1 << (CPP14Parser.Virtual - 76)) | (1 << (CPP14Parser.Void - 76)) | (1 << (CPP14Parser.Volatile - 76)) | (1 << (CPP14Parser.Wchar - 76)) | (1 << (CPP14Parser.LeftParen - 76)) | (1 << (CPP14Parser.LeftBracket - 76)) | (1 << (CPP14Parser.Star - 76)) | (1 << (CPP14Parser.And - 76)) | (1 << (CPP14Parser.Tilde - 76)))) !== 0) || ((((_la - 118)) & ~0x1f) == 0 && ((1 << (_la - 118)) & ((1 << (CPP14Parser.AndAnd - 118)) | (1 << (CPP14Parser.Colon - 118)) | (1 << (CPP14Parser.Doublecolon - 118)) | (1 << (CPP14Parser.Semi - 118)) | (1 << (CPP14Parser.Ellipsis - 118)) | (1 << (CPP14Parser.Identifier - 118)))) !== 0)) {
  	            this.state = 1680;
  	            this.memberSpecification();
  	        }
  
  	        this.state = 1683;
  	        this.match(CPP14Parser.RightBrace);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	classHead() {
  	    let localctx = new ClassHeadContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 282, CPP14Parser.RULE_classHead);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1708;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Struct:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1685;
  	            this.classKey();
  	            this.state = 1687;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	                this.state = 1686;
  	                this.attributeSpecifierSeq();
  	            }
  
  	            this.state = 1693;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Decltype || _la===CPP14Parser.Doublecolon || _la===CPP14Parser.Identifier) {
  	                this.state = 1689;
  	                this.classHeadName();
  	                this.state = 1691;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if(_la===CPP14Parser.Final) {
  	                    this.state = 1690;
  	                    this.classVirtSpecifier();
  	                }
  
  	            }
  
  	            this.state = 1696;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Colon) {
  	                this.state = 1695;
  	                this.baseClause();
  	            }
  
  	            break;
  	        case CPP14Parser.Union:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1698;
  	            this.match(CPP14Parser.Union);
  	            this.state = 1700;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	                this.state = 1699;
  	                this.attributeSpecifierSeq();
  	            }
  
  	            this.state = 1706;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Decltype || _la===CPP14Parser.Doublecolon || _la===CPP14Parser.Identifier) {
  	                this.state = 1702;
  	                this.classHeadName();
  	                this.state = 1704;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if(_la===CPP14Parser.Final) {
  	                    this.state = 1703;
  	                    this.classVirtSpecifier();
  	                }
  
  	            }
  
  	            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;
  	}
  
  
  
  	classHeadName() {
  	    let localctx = new ClassHeadNameContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 284, CPP14Parser.RULE_classHeadName);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1711;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,238,this._ctx);
  	        if(la_===1) {
  	            this.state = 1710;
  	            this.nestedNameSpecifier(0);
  
  	        }
  	        this.state = 1713;
  	        this.className();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	classVirtSpecifier() {
  	    let localctx = new ClassVirtSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 286, CPP14Parser.RULE_classVirtSpecifier);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1715;
  	        this.match(CPP14Parser.Final);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	classKey() {
  	    let localctx = new ClassKeyContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 288, CPP14Parser.RULE_classKey);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1717;
  	        _la = this._input.LA(1);
  	        if(!(_la===CPP14Parser.Class || _la===CPP14Parser.Struct)) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	memberSpecification() {
  	    let localctx = new MemberSpecificationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 290, CPP14Parser.RULE_memberSpecification);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1723; 
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        do {
  	            this.state = 1723;
  	            this._errHandler.sync(this);
  	            switch(this._input.LA(1)) {
  	            case CPP14Parser.Alignas:
  	            case CPP14Parser.Auto:
  	            case CPP14Parser.Bool:
  	            case CPP14Parser.Char:
  	            case CPP14Parser.Char16:
  	            case CPP14Parser.Char32:
  	            case CPP14Parser.Class:
  	            case CPP14Parser.Const:
  	            case CPP14Parser.Constexpr:
  	            case CPP14Parser.Decltype:
  	            case CPP14Parser.Double:
  	            case CPP14Parser.Enum:
  	            case CPP14Parser.Explicit:
  	            case CPP14Parser.Extern:
  	            case CPP14Parser.Float:
  	            case CPP14Parser.Friend:
  	            case CPP14Parser.Inline:
  	            case CPP14Parser.Int:
  	            case CPP14Parser.Long:
  	            case CPP14Parser.Mutable:
  	            case CPP14Parser.Operator:
  	            case CPP14Parser.Register:
  	            case CPP14Parser.Short:
  	            case CPP14Parser.Signed:
  	            case CPP14Parser.Static:
  	            case CPP14Parser.Static_assert:
  	            case CPP14Parser.Struct:
  	            case CPP14Parser.Template:
  	            case CPP14Parser.Thread_local:
  	            case CPP14Parser.Typedef:
  	            case CPP14Parser.Typename_:
  	            case CPP14Parser.Union:
  	            case CPP14Parser.Unsigned:
  	            case CPP14Parser.Using:
  	            case CPP14Parser.Virtual:
  	            case CPP14Parser.Void:
  	            case CPP14Parser.Volatile:
  	            case CPP14Parser.Wchar:
  	            case CPP14Parser.LeftParen:
  	            case CPP14Parser.LeftBracket:
  	            case CPP14Parser.Star:
  	            case CPP14Parser.And:
  	            case CPP14Parser.Tilde:
  	            case CPP14Parser.AndAnd:
  	            case CPP14Parser.Colon:
  	            case CPP14Parser.Doublecolon:
  	            case CPP14Parser.Semi:
  	            case CPP14Parser.Ellipsis:
  	            case CPP14Parser.Identifier:
  	                this.state = 1719;
  	                this.memberdeclaration();
  	                break;
  	            case CPP14Parser.Private:
  	            case CPP14Parser.Protected:
  	            case CPP14Parser.Public:
  	                this.state = 1720;
  	                this.accessSpecifier();
  	                this.state = 1721;
  	                this.match(CPP14Parser.Colon);
  	                break;
  	            default:
  	                throw new antlr4.error.NoViableAltException(this);
  	            }
  	            this.state = 1725; 
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        } while(((((_la - 10)) & ~0x1f) == 0 && ((1 << (_la - 10)) & ((1 << (CPP14Parser.Alignas - 10)) | (1 << (CPP14Parser.Auto - 10)) | (1 << (CPP14Parser.Bool - 10)) | (1 << (CPP14Parser.Char - 10)) | (1 << (CPP14Parser.Char16 - 10)) | (1 << (CPP14Parser.Char32 - 10)) | (1 << (CPP14Parser.Class - 10)) | (1 << (CPP14Parser.Const - 10)) | (1 << (CPP14Parser.Constexpr - 10)) | (1 << (CPP14Parser.Decltype - 10)) | (1 << (CPP14Parser.Double - 10)) | (1 << (CPP14Parser.Enum - 10)) | (1 << (CPP14Parser.Explicit - 10)) | (1 << (CPP14Parser.Extern - 10)) | (1 << (CPP14Parser.Float - 10)) | (1 << (CPP14Parser.Friend - 10)))) !== 0) || ((((_la - 44)) & ~0x1f) == 0 && ((1 << (_la - 44)) & ((1 << (CPP14Parser.Inline - 44)) | (1 << (CPP14Parser.Int - 44)) | (1 << (CPP14Parser.Long - 44)) | (1 << (CPP14Parser.Mutable - 44)) | (1 << (CPP14Parser.Operator - 44)) | (1 << (CPP14Parser.Private - 44)) | (1 << (CPP14Parser.Protected - 44)) | (1 << (CPP14Parser.Public - 44)) | (1 << (CPP14Parser.Register - 44)) | (1 << (CPP14Parser.Short - 44)) | (1 << (CPP14Parser.Signed - 44)) | (1 << (CPP14Parser.Static - 44)) | (1 << (CPP14Parser.Static_assert - 44)) | (1 << (CPP14Parser.Struct - 44)) | (1 << (CPP14Parser.Template - 44)) | (1 << (CPP14Parser.Thread_local - 44)) | (1 << (CPP14Parser.Typedef - 44)))) !== 0) || ((((_la - 76)) & ~0x1f) == 0 && ((1 << (_la - 76)) & ((1 << (CPP14Parser.Typename_ - 76)) | (1 << (CPP14Parser.Union - 76)) | (1 << (CPP14Parser.Unsigned - 76)) | (1 << (CPP14Parser.Using - 76)) | (1 << (CPP14Parser.Virtual - 76)) | (1 << (CPP14Parser.Void - 76)) | (1 << (CPP14Parser.Volatile - 76)) | (1 << (CPP14Parser.Wchar - 76)) | (1 << (CPP14Parser.LeftParen - 76)) | (1 << (CPP14Parser.LeftBracket - 76)) | (1 << (CPP14Parser.Star - 76)) | (1 << (CPP14Parser.And - 76)) | (1 << (CPP14Parser.Tilde - 76)))) !== 0) || ((((_la - 118)) & ~0x1f) == 0 && ((1 << (_la - 118)) & ((1 << (CPP14Parser.AndAnd - 118)) | (1 << (CPP14Parser.Colon - 118)) | (1 << (CPP14Parser.Doublecolon - 118)) | (1 << (CPP14Parser.Semi - 118)) | (1 << (CPP14Parser.Ellipsis - 118)) | (1 << (CPP14Parser.Identifier - 118)))) !== 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;
  	}
  
  
  
  	memberdeclaration() {
  	    let localctx = new MemberdeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 292, CPP14Parser.RULE_memberdeclaration);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1743;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,244,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1728;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,241,this._ctx);
  	            if(la_===1) {
  	                this.state = 1727;
  	                this.attributeSpecifierSeq();
  
  	            }
  	            this.state = 1731;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,242,this._ctx);
  	            if(la_===1) {
  	                this.state = 1730;
  	                this.declSpecifierSeq();
  
  	            }
  	            this.state = 1734;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Alignas || _la===CPP14Parser.Decltype || _la===CPP14Parser.Operator || ((((_la - 85)) & ~0x1f) == 0 && ((1 << (_la - 85)) & ((1 << (CPP14Parser.LeftParen - 85)) | (1 << (CPP14Parser.LeftBracket - 85)) | (1 << (CPP14Parser.Star - 85)) | (1 << (CPP14Parser.And - 85)) | (1 << (CPP14Parser.Tilde - 85)))) !== 0) || ((((_la - 118)) & ~0x1f) == 0 && ((1 << (_la - 118)) & ((1 << (CPP14Parser.AndAnd - 118)) | (1 << (CPP14Parser.Colon - 118)) | (1 << (CPP14Parser.Doublecolon - 118)) | (1 << (CPP14Parser.Ellipsis - 118)) | (1 << (CPP14Parser.Identifier - 118)))) !== 0)) {
  	                this.state = 1733;
  	                this.memberDeclaratorList();
  	            }
  
  	            this.state = 1736;
  	            this.match(CPP14Parser.Semi);
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1737;
  	            this.functionDefinition();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1738;
  	            this.usingDeclaration();
  	            break;
  
  	        case 4:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 1739;
  	            this.staticAssertDeclaration();
  	            break;
  
  	        case 5:
  	            this.enterOuterAlt(localctx, 5);
  	            this.state = 1740;
  	            this.templateDeclaration();
  	            break;
  
  	        case 6:
  	            this.enterOuterAlt(localctx, 6);
  	            this.state = 1741;
  	            this.aliasDeclaration();
  	            break;
  
  	        case 7:
  	            this.enterOuterAlt(localctx, 7);
  	            this.state = 1742;
  	            this.emptyDeclaration();
  	            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;
  	}
  
  
  
  	memberDeclaratorList() {
  	    let localctx = new MemberDeclaratorListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 294, CPP14Parser.RULE_memberDeclaratorList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1745;
  	        this.memberDeclarator();
  	        this.state = 1750;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 1746;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 1747;
  	            this.memberDeclarator();
  	            this.state = 1752;
  	            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;
  	}
  
  
  
  	memberDeclarator() {
  	    let localctx = new MemberDeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 296, CPP14Parser.RULE_memberDeclarator);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1773;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,252,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1753;
  	            this.declarator();
  	            this.state = 1763;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,249,this._ctx);
  	            switch(la_) {
  	            case 1:
  	                this.state = 1755;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if(_la===CPP14Parser.Final || _la===CPP14Parser.Override) {
  	                    this.state = 1754;
  	                    this.virtualSpecifierSeq();
  	                }
  
  	                this.state = 1758;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if(_la===CPP14Parser.Assign) {
  	                    this.state = 1757;
  	                    this.pureSpecifier();
  	                }
  
  	                break;
  
  	            case 2:
  	                this.state = 1761;
  	                this._errHandler.sync(this);
  	                _la = this._input.LA(1);
  	                if(_la===CPP14Parser.LeftBrace || _la===CPP14Parser.Assign) {
  	                    this.state = 1760;
  	                    this.braceOrEqualInitializer();
  	                }
  
  	                break;
  
  	            }
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1766;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Identifier) {
  	                this.state = 1765;
  	                this.match(CPP14Parser.Identifier);
  	            }
  
  	            this.state = 1769;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	                this.state = 1768;
  	                this.attributeSpecifierSeq();
  	            }
  
  	            this.state = 1771;
  	            this.match(CPP14Parser.Colon);
  	            this.state = 1772;
  	            this.constantExpression();
  	            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;
  	}
  
  
  
  	virtualSpecifierSeq() {
  	    let localctx = new VirtualSpecifierSeqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 298, CPP14Parser.RULE_virtualSpecifierSeq);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1776; 
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        do {
  	            this.state = 1775;
  	            this.virtualSpecifier();
  	            this.state = 1778; 
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        } while(_la===CPP14Parser.Final || _la===CPP14Parser.Override);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	virtualSpecifier() {
  	    let localctx = new VirtualSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 300, CPP14Parser.RULE_virtualSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1780;
  	        _la = this._input.LA(1);
  	        if(!(_la===CPP14Parser.Final || _la===CPP14Parser.Override)) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	pureSpecifier() {
  	    let localctx = new PureSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 302, CPP14Parser.RULE_pureSpecifier);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1782;
  	        this.match(CPP14Parser.Assign);
  	        this.state = 1783;
  	        localctx.val = this.match(CPP14Parser.OctalLiteral);
  	        if((localctx.val===null ? null : localctx.val.text).compareTo("0")!=0) throw new InputMismatchException(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;
  	}
  
  
  
  	baseClause() {
  	    let localctx = new BaseClauseContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 304, CPP14Parser.RULE_baseClause);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1786;
  	        this.match(CPP14Parser.Colon);
  	        this.state = 1787;
  	        this.baseSpecifierList();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	baseSpecifierList() {
  	    let localctx = new BaseSpecifierListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 306, CPP14Parser.RULE_baseSpecifierList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1789;
  	        this.baseSpecifier();
  	        this.state = 1791;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Ellipsis) {
  	            this.state = 1790;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	        this.state = 1800;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 1793;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 1794;
  	            this.baseSpecifier();
  	            this.state = 1796;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Ellipsis) {
  	                this.state = 1795;
  	                this.match(CPP14Parser.Ellipsis);
  	            }
  
  	            this.state = 1802;
  	            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;
  	}
  
  
  
  	baseSpecifier() {
  	    let localctx = new BaseSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 308, CPP14Parser.RULE_baseSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1804;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	            this.state = 1803;
  	            this.attributeSpecifierSeq();
  	        }
  
  	        this.state = 1818;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.state = 1806;
  	            this.baseTypeSpecifier();
  	            break;
  	        case CPP14Parser.Virtual:
  	            this.state = 1807;
  	            this.match(CPP14Parser.Virtual);
  	            this.state = 1809;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(((((_la - 54)) & ~0x1f) == 0 && ((1 << (_la - 54)) & ((1 << (CPP14Parser.Private - 54)) | (1 << (CPP14Parser.Protected - 54)) | (1 << (CPP14Parser.Public - 54)))) !== 0)) {
  	                this.state = 1808;
  	                this.accessSpecifier();
  	            }
  
  	            this.state = 1811;
  	            this.baseTypeSpecifier();
  	            break;
  	        case CPP14Parser.Private:
  	        case CPP14Parser.Protected:
  	        case CPP14Parser.Public:
  	            this.state = 1812;
  	            this.accessSpecifier();
  	            this.state = 1814;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Virtual) {
  	                this.state = 1813;
  	                this.match(CPP14Parser.Virtual);
  	            }
  
  	            this.state = 1816;
  	            this.baseTypeSpecifier();
  	            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;
  	}
  
  
  
  	classOrDeclType() {
  	    let localctx = new ClassOrDeclTypeContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 310, CPP14Parser.RULE_classOrDeclType);
  	    try {
  	        this.state = 1825;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,262,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1821;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,261,this._ctx);
  	            if(la_===1) {
  	                this.state = 1820;
  	                this.nestedNameSpecifier(0);
  
  	            }
  	            this.state = 1823;
  	            this.className();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1824;
  	            this.decltypeSpecifier();
  	            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;
  	}
  
  
  
  	baseTypeSpecifier() {
  	    let localctx = new BaseTypeSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 312, CPP14Parser.RULE_baseTypeSpecifier);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1827;
  	        this.classOrDeclType();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	accessSpecifier() {
  	    let localctx = new AccessSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 314, CPP14Parser.RULE_accessSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1829;
  	        _la = this._input.LA(1);
  	        if(!(((((_la - 54)) & ~0x1f) == 0 && ((1 << (_la - 54)) & ((1 << (CPP14Parser.Private - 54)) | (1 << (CPP14Parser.Protected - 54)) | (1 << (CPP14Parser.Public - 54)))) !== 0))) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	conversionFunctionId() {
  	    let localctx = new ConversionFunctionIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 316, CPP14Parser.RULE_conversionFunctionId);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1831;
  	        this.match(CPP14Parser.Operator);
  	        this.state = 1832;
  	        this.conversionTypeId();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	conversionTypeId() {
  	    let localctx = new ConversionTypeIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 318, CPP14Parser.RULE_conversionTypeId);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1834;
  	        this.typeSpecifierSeq();
  	        this.state = 1836;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,263,this._ctx);
  	        if(la_===1) {
  	            this.state = 1835;
  	            this.conversionDeclarator();
  
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	conversionDeclarator() {
  	    let localctx = new ConversionDeclaratorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 320, CPP14Parser.RULE_conversionDeclarator);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1838;
  	        this.pointerOperator();
  	        this.state = 1840;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,264,this._ctx);
  	        if(la_===1) {
  	            this.state = 1839;
  	            this.conversionDeclarator();
  
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	constructorInitializer() {
  	    let localctx = new ConstructorInitializerContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 322, CPP14Parser.RULE_constructorInitializer);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1842;
  	        this.match(CPP14Parser.Colon);
  	        this.state = 1843;
  	        this.memInitializerList();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	memInitializerList() {
  	    let localctx = new MemInitializerListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 324, CPP14Parser.RULE_memInitializerList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1845;
  	        this.memInitializer();
  	        this.state = 1847;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Ellipsis) {
  	            this.state = 1846;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	        this.state = 1856;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 1849;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 1850;
  	            this.memInitializer();
  	            this.state = 1852;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Ellipsis) {
  	                this.state = 1851;
  	                this.match(CPP14Parser.Ellipsis);
  	            }
  
  	            this.state = 1858;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	memInitializer() {
  	    let localctx = new MemInitializerContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 326, CPP14Parser.RULE_memInitializer);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1859;
  	        this.meminitializerid();
  	        this.state = 1866;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.LeftParen:
  	            this.state = 1860;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 1862;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CPP14Parser.Throw - 71)) | (1 << (CPP14Parser.Typeid_ - 71)) | (1 << (CPP14Parser.Typename_ - 71)) | (1 << (CPP14Parser.Unsigned - 71)) | (1 << (CPP14Parser.Void - 71)) | (1 << (CPP14Parser.Wchar - 71)) | (1 << (CPP14Parser.LeftParen - 71)) | (1 << (CPP14Parser.LeftBracket - 71)) | (1 << (CPP14Parser.LeftBrace - 71)) | (1 << (CPP14Parser.Plus - 71)) | (1 << (CPP14Parser.Minus - 71)) | (1 << (CPP14Parser.Star - 71)) | (1 << (CPP14Parser.And - 71)) | (1 << (CPP14Parser.Or - 71)) | (1 << (CPP14Parser.Tilde - 71)) | (1 << (CPP14Parser.Not - 71)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	                this.state = 1861;
  	                this.expressionList();
  	            }
  
  	            this.state = 1864;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  	        case CPP14Parser.LeftBrace:
  	            this.state = 1865;
  	            this.bracedInitList();
  	            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;
  	}
  
  
  
  	meminitializerid() {
  	    let localctx = new MeminitializeridContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 328, CPP14Parser.RULE_meminitializerid);
  	    try {
  	        this.state = 1870;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,270,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1868;
  	            this.classOrDeclType();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1869;
  	            this.match(CPP14Parser.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;
  	}
  
  
  
  	operatorFunctionId() {
  	    let localctx = new OperatorFunctionIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 330, CPP14Parser.RULE_operatorFunctionId);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1872;
  	        this.match(CPP14Parser.Operator);
  	        this.state = 1873;
  	        this.theOperator();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	literalOperatorId() {
  	    let localctx = new LiteralOperatorIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 332, CPP14Parser.RULE_literalOperatorId);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1875;
  	        this.match(CPP14Parser.Operator);
  	        this.state = 1879;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.StringLiteral:
  	            this.state = 1876;
  	            this.match(CPP14Parser.StringLiteral);
  	            this.state = 1877;
  	            this.match(CPP14Parser.Identifier);
  	            break;
  	        case CPP14Parser.UserDefinedStringLiteral:
  	            this.state = 1878;
  	            this.match(CPP14Parser.UserDefinedStringLiteral);
  	            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;
  	}
  
  
  
  	templateDeclaration() {
  	    let localctx = new TemplateDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 334, CPP14Parser.RULE_templateDeclaration);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1881;
  	        this.match(CPP14Parser.Template);
  	        this.state = 1882;
  	        this.match(CPP14Parser.Less);
  	        this.state = 1883;
  	        this.templateparameterList();
  	        this.state = 1884;
  	        this.match(CPP14Parser.Greater);
  	        this.state = 1885;
  	        this.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;
  	}
  
  
  
  	templateparameterList() {
  	    let localctx = new TemplateparameterListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 336, CPP14Parser.RULE_templateparameterList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1887;
  	        this.templateParameter();
  	        this.state = 1892;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 1888;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 1889;
  	            this.templateParameter();
  	            this.state = 1894;
  	            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;
  	}
  
  
  
  	templateParameter() {
  	    let localctx = new TemplateParameterContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 338, CPP14Parser.RULE_templateParameter);
  	    try {
  	        this.state = 1897;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,273,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1895;
  	            this.typeParameter();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1896;
  	            this.parameterDeclaration();
  	            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;
  	}
  
  
  
  	typeParameter() {
  	    let localctx = new TypeParameterContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 340, CPP14Parser.RULE_typeParameter);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1908;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Template:
  	            this.state = 1904;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Template) {
  	                this.state = 1899;
  	                this.match(CPP14Parser.Template);
  	                this.state = 1900;
  	                this.match(CPP14Parser.Less);
  	                this.state = 1901;
  	                this.templateparameterList();
  	                this.state = 1902;
  	                this.match(CPP14Parser.Greater);
  	            }
  
  	            this.state = 1906;
  	            this.match(CPP14Parser.Class);
  	            break;
  	        case CPP14Parser.Typename_:
  	            this.state = 1907;
  	            this.match(CPP14Parser.Typename_);
  	            break;
  	        default:
  	            throw new antlr4.error.NoViableAltException(this);
  	        }
  	        this.state = 1921;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,279,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.state = 1911;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Ellipsis) {
  	                this.state = 1910;
  	                this.match(CPP14Parser.Ellipsis);
  	            }
  
  	            this.state = 1914;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Identifier) {
  	                this.state = 1913;
  	                this.match(CPP14Parser.Identifier);
  	            }
  
  	            break;
  
  	        case 2:
  	            this.state = 1917;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Identifier) {
  	                this.state = 1916;
  	                this.match(CPP14Parser.Identifier);
  	            }
  
  	            this.state = 1919;
  	            this.match(CPP14Parser.Assign);
  	            this.state = 1920;
  	            this.theTypeId();
  	            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;
  	}
  
  
  
  	simpleTemplateId() {
  	    let localctx = new SimpleTemplateIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 342, CPP14Parser.RULE_simpleTemplateId);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1923;
  	        this.templateName();
  	        this.state = 1924;
  	        this.match(CPP14Parser.Less);
  	        this.state = 1926;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (CPP14Parser.Enum - 33)) | (1 << (CPP14Parser.Float - 33)) | (1 << (CPP14Parser.Int - 33)) | (1 << (CPP14Parser.Long - 33)) | (1 << (CPP14Parser.New - 33)) | (1 << (CPP14Parser.Noexcept - 33)) | (1 << (CPP14Parser.Operator - 33)) | (1 << (CPP14Parser.Reinterpret_cast - 33)) | (1 << (CPP14Parser.Short - 33)) | (1 << (CPP14Parser.Signed - 33)) | (1 << (CPP14Parser.Sizeof - 33)))) !== 0) || ((((_la - 65)) & ~0x1f) == 0 && ((1 << (_la - 65)) & ((1 << (CPP14Parser.Static_cast - 65)) | (1 << (CPP14Parser.Struct - 65)) | (1 << (CPP14Parser.This - 65)) | (1 << (CPP14Parser.Typeid_ - 65)) | (1 << (CPP14Parser.Typename_ - 65)) | (1 << (CPP14Parser.Union - 65)) | (1 << (CPP14Parser.Unsigned - 65)) | (1 << (CPP14Parser.Void - 65)) | (1 << (CPP14Parser.Volatile - 65)) | (1 << (CPP14Parser.Wchar - 65)) | (1 << (CPP14Parser.LeftParen - 65)) | (1 << (CPP14Parser.LeftBracket - 65)) | (1 << (CPP14Parser.Plus - 65)) | (1 << (CPP14Parser.Minus - 65)) | (1 << (CPP14Parser.Star - 65)))) !== 0) || ((((_la - 97)) & ~0x1f) == 0 && ((1 << (_la - 97)) & ((1 << (CPP14Parser.And - 97)) | (1 << (CPP14Parser.Or - 97)) | (1 << (CPP14Parser.Tilde - 97)) | (1 << (CPP14Parser.Not - 97)) | (1 << (CPP14Parser.PlusPlus - 97)) | (1 << (CPP14Parser.MinusMinus - 97)) | (1 << (CPP14Parser.Doublecolon - 97)))) !== 0) || _la===CPP14Parser.Identifier) {
  	            this.state = 1925;
  	            this.templateArgumentList();
  	        }
  
  	        this.state = 1928;
  	        this.match(CPP14Parser.Greater);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	templateId() {
  	    let localctx = new TemplateIdContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 344, CPP14Parser.RULE_templateId);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 1941;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1930;
  	            this.simpleTemplateId();
  	            break;
  	        case CPP14Parser.Operator:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1933;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,281,this._ctx);
  	            switch(la_) {
  	            case 1:
  	                this.state = 1931;
  	                this.operatorFunctionId();
  	                break;
  
  	            case 2:
  	                this.state = 1932;
  	                this.literalOperatorId();
  	                break;
  
  	            }
  	            this.state = 1935;
  	            this.match(CPP14Parser.Less);
  	            this.state = 1937;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (CPP14Parser.Enum - 33)) | (1 << (CPP14Parser.Float - 33)) | (1 << (CPP14Parser.Int - 33)) | (1 << (CPP14Parser.Long - 33)) | (1 << (CPP14Parser.New - 33)) | (1 << (CPP14Parser.Noexcept - 33)) | (1 << (CPP14Parser.Operator - 33)) | (1 << (CPP14Parser.Reinterpret_cast - 33)) | (1 << (CPP14Parser.Short - 33)) | (1 << (CPP14Parser.Signed - 33)) | (1 << (CPP14Parser.Sizeof - 33)))) !== 0) || ((((_la - 65)) & ~0x1f) == 0 && ((1 << (_la - 65)) & ((1 << (CPP14Parser.Static_cast - 65)) | (1 << (CPP14Parser.Struct - 65)) | (1 << (CPP14Parser.This - 65)) | (1 << (CPP14Parser.Typeid_ - 65)) | (1 << (CPP14Parser.Typename_ - 65)) | (1 << (CPP14Parser.Union - 65)) | (1 << (CPP14Parser.Unsigned - 65)) | (1 << (CPP14Parser.Void - 65)) | (1 << (CPP14Parser.Volatile - 65)) | (1 << (CPP14Parser.Wchar - 65)) | (1 << (CPP14Parser.LeftParen - 65)) | (1 << (CPP14Parser.LeftBracket - 65)) | (1 << (CPP14Parser.Plus - 65)) | (1 << (CPP14Parser.Minus - 65)) | (1 << (CPP14Parser.Star - 65)))) !== 0) || ((((_la - 97)) & ~0x1f) == 0 && ((1 << (_la - 97)) & ((1 << (CPP14Parser.And - 97)) | (1 << (CPP14Parser.Or - 97)) | (1 << (CPP14Parser.Tilde - 97)) | (1 << (CPP14Parser.Not - 97)) | (1 << (CPP14Parser.PlusPlus - 97)) | (1 << (CPP14Parser.MinusMinus - 97)) | (1 << (CPP14Parser.Doublecolon - 97)))) !== 0) || _la===CPP14Parser.Identifier) {
  	                this.state = 1936;
  	                this.templateArgumentList();
  	            }
  
  	            this.state = 1939;
  	            this.match(CPP14Parser.Greater);
  	            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;
  	}
  
  
  
  	templateName() {
  	    let localctx = new TemplateNameContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 346, CPP14Parser.RULE_templateName);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1943;
  	        this.match(CPP14Parser.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;
  	}
  
  
  
  	templateArgumentList() {
  	    let localctx = new TemplateArgumentListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 348, CPP14Parser.RULE_templateArgumentList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1945;
  	        this.templateArgument();
  	        this.state = 1947;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Ellipsis) {
  	            this.state = 1946;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	        this.state = 1956;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 1949;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 1950;
  	            this.templateArgument();
  	            this.state = 1952;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Ellipsis) {
  	                this.state = 1951;
  	                this.match(CPP14Parser.Ellipsis);
  	            }
  
  	            this.state = 1958;
  	            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;
  	}
  
  
  
  	templateArgument() {
  	    let localctx = new TemplateArgumentContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 350, CPP14Parser.RULE_templateArgument);
  	    try {
  	        this.state = 1962;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,287,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 1959;
  	            this.theTypeId();
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 1960;
  	            this.constantExpression();
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 1961;
  	            this.idExpression();
  	            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;
  	}
  
  
  
  	typeNameSpecifier() {
  	    let localctx = new TypeNameSpecifierContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 352, CPP14Parser.RULE_typeNameSpecifier);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1964;
  	        this.match(CPP14Parser.Typename_);
  	        this.state = 1965;
  	        this.nestedNameSpecifier(0);
  	        this.state = 1971;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,289,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.state = 1966;
  	            this.match(CPP14Parser.Identifier);
  	            break;
  
  	        case 2:
  	            this.state = 1968;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Template) {
  	                this.state = 1967;
  	                this.match(CPP14Parser.Template);
  	            }
  
  	            this.state = 1970;
  	            this.simpleTemplateId();
  	            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;
  	}
  
  
  
  	explicitInstantiation() {
  	    let localctx = new ExplicitInstantiationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 354, CPP14Parser.RULE_explicitInstantiation);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1974;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Extern) {
  	            this.state = 1973;
  	            this.match(CPP14Parser.Extern);
  	        }
  
  	        this.state = 1976;
  	        this.match(CPP14Parser.Template);
  	        this.state = 1977;
  	        this.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;
  	}
  
  
  
  	explicitSpecialization() {
  	    let localctx = new ExplicitSpecializationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 356, CPP14Parser.RULE_explicitSpecialization);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1979;
  	        this.match(CPP14Parser.Template);
  	        this.state = 1980;
  	        this.match(CPP14Parser.Less);
  	        this.state = 1981;
  	        this.match(CPP14Parser.Greater);
  	        this.state = 1982;
  	        this.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;
  	}
  
  
  
  	tryBlock() {
  	    let localctx = new TryBlockContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 358, CPP14Parser.RULE_tryBlock);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1984;
  	        this.match(CPP14Parser.Try);
  	        this.state = 1985;
  	        this.compoundStatement();
  	        this.state = 1986;
  	        this.handlerSeq();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	functionTryBlock() {
  	    let localctx = new FunctionTryBlockContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 360, CPP14Parser.RULE_functionTryBlock);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1988;
  	        this.match(CPP14Parser.Try);
  	        this.state = 1990;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Colon) {
  	            this.state = 1989;
  	            this.constructorInitializer();
  	        }
  
  	        this.state = 1992;
  	        this.compoundStatement();
  	        this.state = 1993;
  	        this.handlerSeq();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	handlerSeq() {
  	    let localctx = new HandlerSeqContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 362, CPP14Parser.RULE_handlerSeq);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 1996; 
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        do {
  	            this.state = 1995;
  	            this.handler();
  	            this.state = 1998; 
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	        } while(_la===CPP14Parser.Catch);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	handler() {
  	    let localctx = new HandlerContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 364, CPP14Parser.RULE_handler);
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 2000;
  	        this.match(CPP14Parser.Catch);
  	        this.state = 2001;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 2002;
  	        this.exceptionDeclaration();
  	        this.state = 2003;
  	        this.match(CPP14Parser.RightParen);
  	        this.state = 2004;
  	        this.compoundStatement();
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	exceptionDeclaration() {
  	    let localctx = new ExceptionDeclarationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 366, CPP14Parser.RULE_exceptionDeclaration);
  	    var _la = 0; // Token type
  	    try {
  	        this.state = 2015;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Alignas:
  	        case CPP14Parser.Auto:
  	        case CPP14Parser.Bool:
  	        case CPP14Parser.Char:
  	        case CPP14Parser.Char16:
  	        case CPP14Parser.Char32:
  	        case CPP14Parser.Class:
  	        case CPP14Parser.Const:
  	        case CPP14Parser.Decltype:
  	        case CPP14Parser.Double:
  	        case CPP14Parser.Enum:
  	        case CPP14Parser.Float:
  	        case CPP14Parser.Int:
  	        case CPP14Parser.Long:
  	        case CPP14Parser.Short:
  	        case CPP14Parser.Signed:
  	        case CPP14Parser.Struct:
  	        case CPP14Parser.Typename_:
  	        case CPP14Parser.Union:
  	        case CPP14Parser.Unsigned:
  	        case CPP14Parser.Void:
  	        case CPP14Parser.Volatile:
  	        case CPP14Parser.Wchar:
  	        case CPP14Parser.LeftBracket:
  	        case CPP14Parser.Doublecolon:
  	        case CPP14Parser.Identifier:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 2007;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Alignas || _la===CPP14Parser.LeftBracket) {
  	                this.state = 2006;
  	                this.attributeSpecifierSeq();
  	            }
  
  	            this.state = 2009;
  	            this.typeSpecifierSeq();
  	            this.state = 2012;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,294,this._ctx);
  	            if(la_===1) {
  	                this.state = 2010;
  	                this.declarator();
  
  	            } else if(la_===2) {
  	                this.state = 2011;
  	                this.abstractDeclarator();
  
  	            }
  	            break;
  	        case CPP14Parser.Ellipsis:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 2014;
  	            this.match(CPP14Parser.Ellipsis);
  	            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;
  	}
  
  
  
  	throwExpression() {
  	    let localctx = new ThrowExpressionContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 368, CPP14Parser.RULE_throwExpression);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 2017;
  	        this.match(CPP14Parser.Throw);
  	        this.state = 2019;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral) | (1 << CPP14Parser.Alignof) | (1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Const_cast) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Delete) | (1 << CPP14Parser.Double) | (1 << CPP14Parser.Dynamic_cast))) !== 0) || ((((_la - 39)) & ~0x1f) == 0 && ((1 << (_la - 39)) & ((1 << (CPP14Parser.Float - 39)) | (1 << (CPP14Parser.Int - 39)) | (1 << (CPP14Parser.Long - 39)) | (1 << (CPP14Parser.New - 39)) | (1 << (CPP14Parser.Noexcept - 39)) | (1 << (CPP14Parser.Operator - 39)) | (1 << (CPP14Parser.Reinterpret_cast - 39)) | (1 << (CPP14Parser.Short - 39)) | (1 << (CPP14Parser.Signed - 39)) | (1 << (CPP14Parser.Sizeof - 39)) | (1 << (CPP14Parser.Static_cast - 39)) | (1 << (CPP14Parser.This - 39)))) !== 0) || ((((_la - 71)) & ~0x1f) == 0 && ((1 << (_la - 71)) & ((1 << (CPP14Parser.Throw - 71)) | (1 << (CPP14Parser.Typeid_ - 71)) | (1 << (CPP14Parser.Typename_ - 71)) | (1 << (CPP14Parser.Unsigned - 71)) | (1 << (CPP14Parser.Void - 71)) | (1 << (CPP14Parser.Wchar - 71)) | (1 << (CPP14Parser.LeftParen - 71)) | (1 << (CPP14Parser.LeftBracket - 71)) | (1 << (CPP14Parser.Plus - 71)) | (1 << (CPP14Parser.Minus - 71)) | (1 << (CPP14Parser.Star - 71)) | (1 << (CPP14Parser.And - 71)) | (1 << (CPP14Parser.Or - 71)) | (1 << (CPP14Parser.Tilde - 71)) | (1 << (CPP14Parser.Not - 71)))) !== 0) || ((((_la - 120)) & ~0x1f) == 0 && ((1 << (_la - 120)) & ((1 << (CPP14Parser.PlusPlus - 120)) | (1 << (CPP14Parser.MinusMinus - 120)) | (1 << (CPP14Parser.Doublecolon - 120)) | (1 << (CPP14Parser.Identifier - 120)))) !== 0)) {
  	            this.state = 2018;
  	            this.assignmentExpression();
  	        }
  
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	exceptionSpecification() {
  	    let localctx = new ExceptionSpecificationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 370, CPP14Parser.RULE_exceptionSpecification);
  	    try {
  	        this.state = 2023;
  	        this._errHandler.sync(this);
  	        switch(this._input.LA(1)) {
  	        case CPP14Parser.Throw:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 2021;
  	            this.dynamicExceptionSpecification();
  	            break;
  	        case CPP14Parser.Noexcept:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 2022;
  	            this.noeExceptSpecification();
  	            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;
  	}
  
  
  
  	dynamicExceptionSpecification() {
  	    let localctx = new DynamicExceptionSpecificationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 372, CPP14Parser.RULE_dynamicExceptionSpecification);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 2025;
  	        this.match(CPP14Parser.Throw);
  	        this.state = 2026;
  	        this.match(CPP14Parser.LeftParen);
  	        this.state = 2028;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.Auto) | (1 << CPP14Parser.Bool) | (1 << CPP14Parser.Char) | (1 << CPP14Parser.Char16) | (1 << CPP14Parser.Char32) | (1 << CPP14Parser.Class) | (1 << CPP14Parser.Const) | (1 << CPP14Parser.Decltype) | (1 << CPP14Parser.Double))) !== 0) || ((((_la - 33)) & ~0x1f) == 0 && ((1 << (_la - 33)) & ((1 << (CPP14Parser.Enum - 33)) | (1 << (CPP14Parser.Float - 33)) | (1 << (CPP14Parser.Int - 33)) | (1 << (CPP14Parser.Long - 33)) | (1 << (CPP14Parser.Short - 33)) | (1 << (CPP14Parser.Signed - 33)))) !== 0) || ((((_la - 66)) & ~0x1f) == 0 && ((1 << (_la - 66)) & ((1 << (CPP14Parser.Struct - 66)) | (1 << (CPP14Parser.Typename_ - 66)) | (1 << (CPP14Parser.Union - 66)) | (1 << (CPP14Parser.Unsigned - 66)) | (1 << (CPP14Parser.Void - 66)) | (1 << (CPP14Parser.Volatile - 66)) | (1 << (CPP14Parser.Wchar - 66)))) !== 0) || _la===CPP14Parser.Doublecolon || _la===CPP14Parser.Identifier) {
  	            this.state = 2027;
  	            this.typeIdList();
  	        }
  
  	        this.state = 2030;
  	        this.match(CPP14Parser.RightParen);
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  	    return localctx;
  	}
  
  
  
  	typeIdList() {
  	    let localctx = new TypeIdListContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 374, CPP14Parser.RULE_typeIdList);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 2032;
  	        this.theTypeId();
  	        this.state = 2034;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        if(_la===CPP14Parser.Ellipsis) {
  	            this.state = 2033;
  	            this.match(CPP14Parser.Ellipsis);
  	        }
  
  	        this.state = 2043;
  	        this._errHandler.sync(this);
  	        _la = this._input.LA(1);
  	        while(_la===CPP14Parser.Comma) {
  	            this.state = 2036;
  	            this.match(CPP14Parser.Comma);
  	            this.state = 2037;
  	            this.theTypeId();
  	            this.state = 2039;
  	            this._errHandler.sync(this);
  	            _la = this._input.LA(1);
  	            if(_la===CPP14Parser.Ellipsis) {
  	                this.state = 2038;
  	                this.match(CPP14Parser.Ellipsis);
  	            }
  
  	            this.state = 2045;
  	            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;
  	}
  
  
  
  	noeExceptSpecification() {
  	    let localctx = new NoeExceptSpecificationContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 376, CPP14Parser.RULE_noeExceptSpecification);
  	    try {
  	        this.state = 2052;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,302,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 2046;
  	            this.match(CPP14Parser.Noexcept);
  	            this.state = 2047;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 2048;
  	            this.constantExpression();
  	            this.state = 2049;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 2051;
  	            this.match(CPP14Parser.Noexcept);
  	            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;
  	}
  
  
  
  	theOperator() {
  	    let localctx = new TheOperatorContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 378, CPP14Parser.RULE_theOperator);
  	    try {
  	        this.state = 2107;
  	        this._errHandler.sync(this);
  	        var la_ = this._interp.adaptivePredict(this._input,305,this._ctx);
  	        switch(la_) {
  	        case 1:
  	            this.enterOuterAlt(localctx, 1);
  	            this.state = 2054;
  	            this.match(CPP14Parser.New);
  	            this.state = 2057;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,303,this._ctx);
  	            if(la_===1) {
  	                this.state = 2055;
  	                this.match(CPP14Parser.LeftBracket);
  	                this.state = 2056;
  	                this.match(CPP14Parser.RightBracket);
  
  	            }
  	            break;
  
  	        case 2:
  	            this.enterOuterAlt(localctx, 2);
  	            this.state = 2059;
  	            this.match(CPP14Parser.Delete);
  	            this.state = 2062;
  	            this._errHandler.sync(this);
  	            var la_ = this._interp.adaptivePredict(this._input,304,this._ctx);
  	            if(la_===1) {
  	                this.state = 2060;
  	                this.match(CPP14Parser.LeftBracket);
  	                this.state = 2061;
  	                this.match(CPP14Parser.RightBracket);
  
  	            }
  	            break;
  
  	        case 3:
  	            this.enterOuterAlt(localctx, 3);
  	            this.state = 2064;
  	            this.match(CPP14Parser.Plus);
  	            break;
  
  	        case 4:
  	            this.enterOuterAlt(localctx, 4);
  	            this.state = 2065;
  	            this.match(CPP14Parser.Minus);
  	            break;
  
  	        case 5:
  	            this.enterOuterAlt(localctx, 5);
  	            this.state = 2066;
  	            this.match(CPP14Parser.Star);
  	            break;
  
  	        case 6:
  	            this.enterOuterAlt(localctx, 6);
  	            this.state = 2067;
  	            this.match(CPP14Parser.Div);
  	            break;
  
  	        case 7:
  	            this.enterOuterAlt(localctx, 7);
  	            this.state = 2068;
  	            this.match(CPP14Parser.Mod);
  	            break;
  
  	        case 8:
  	            this.enterOuterAlt(localctx, 8);
  	            this.state = 2069;
  	            this.match(CPP14Parser.Caret);
  	            break;
  
  	        case 9:
  	            this.enterOuterAlt(localctx, 9);
  	            this.state = 2070;
  	            this.match(CPP14Parser.And);
  	            break;
  
  	        case 10:
  	            this.enterOuterAlt(localctx, 10);
  	            this.state = 2071;
  	            this.match(CPP14Parser.Or);
  	            break;
  
  	        case 11:
  	            this.enterOuterAlt(localctx, 11);
  	            this.state = 2072;
  	            this.match(CPP14Parser.Tilde);
  	            break;
  
  	        case 12:
  	            this.enterOuterAlt(localctx, 12);
  	            this.state = 2073;
  	            this.match(CPP14Parser.Not);
  	            break;
  
  	        case 13:
  	            this.enterOuterAlt(localctx, 13);
  	            this.state = 2074;
  	            this.match(CPP14Parser.Assign);
  	            break;
  
  	        case 14:
  	            this.enterOuterAlt(localctx, 14);
  	            this.state = 2075;
  	            this.match(CPP14Parser.Greater);
  	            break;
  
  	        case 15:
  	            this.enterOuterAlt(localctx, 15);
  	            this.state = 2076;
  	            this.match(CPP14Parser.Less);
  	            break;
  
  	        case 16:
  	            this.enterOuterAlt(localctx, 16);
  	            this.state = 2077;
  	            this.match(CPP14Parser.GreaterEqual);
  	            break;
  
  	        case 17:
  	            this.enterOuterAlt(localctx, 17);
  	            this.state = 2078;
  	            this.match(CPP14Parser.PlusAssign);
  	            break;
  
  	        case 18:
  	            this.enterOuterAlt(localctx, 18);
  	            this.state = 2079;
  	            this.match(CPP14Parser.MinusAssign);
  	            break;
  
  	        case 19:
  	            this.enterOuterAlt(localctx, 19);
  	            this.state = 2080;
  	            this.match(CPP14Parser.StarAssign);
  	            break;
  
  	        case 20:
  	            this.enterOuterAlt(localctx, 20);
  	            this.state = 2081;
  	            this.match(CPP14Parser.Assign);
  	            break;
  
  	        case 21:
  	            this.enterOuterAlt(localctx, 21);
  	            this.state = 2082;
  	            this.match(CPP14Parser.ModAssign);
  	            break;
  
  	        case 22:
  	            this.enterOuterAlt(localctx, 22);
  	            this.state = 2083;
  	            this.match(CPP14Parser.XorAssign);
  	            break;
  
  	        case 23:
  	            this.enterOuterAlt(localctx, 23);
  	            this.state = 2084;
  	            this.match(CPP14Parser.AndAssign);
  	            break;
  
  	        case 24:
  	            this.enterOuterAlt(localctx, 24);
  	            this.state = 2085;
  	            this.match(CPP14Parser.OrAssign);
  	            break;
  
  	        case 25:
  	            this.enterOuterAlt(localctx, 25);
  	            this.state = 2086;
  	            this.match(CPP14Parser.Less);
  	            this.state = 2087;
  	            this.match(CPP14Parser.Less);
  	            break;
  
  	        case 26:
  	            this.enterOuterAlt(localctx, 26);
  	            this.state = 2088;
  	            this.match(CPP14Parser.Greater);
  	            this.state = 2089;
  	            this.match(CPP14Parser.Greater);
  	            break;
  
  	        case 27:
  	            this.enterOuterAlt(localctx, 27);
  	            this.state = 2090;
  	            this.match(CPP14Parser.RightShiftAssign);
  	            break;
  
  	        case 28:
  	            this.enterOuterAlt(localctx, 28);
  	            this.state = 2091;
  	            this.match(CPP14Parser.LeftShiftAssign);
  	            break;
  
  	        case 29:
  	            this.enterOuterAlt(localctx, 29);
  	            this.state = 2092;
  	            this.match(CPP14Parser.Equal);
  	            break;
  
  	        case 30:
  	            this.enterOuterAlt(localctx, 30);
  	            this.state = 2093;
  	            this.match(CPP14Parser.NotEqual);
  	            break;
  
  	        case 31:
  	            this.enterOuterAlt(localctx, 31);
  	            this.state = 2094;
  	            this.match(CPP14Parser.LessEqual);
  	            break;
  
  	        case 32:
  	            this.enterOuterAlt(localctx, 32);
  	            this.state = 2095;
  	            this.match(CPP14Parser.GreaterEqual);
  	            break;
  
  	        case 33:
  	            this.enterOuterAlt(localctx, 33);
  	            this.state = 2096;
  	            this.match(CPP14Parser.AndAnd);
  	            break;
  
  	        case 34:
  	            this.enterOuterAlt(localctx, 34);
  	            this.state = 2097;
  	            this.match(CPP14Parser.OrOr);
  	            break;
  
  	        case 35:
  	            this.enterOuterAlt(localctx, 35);
  	            this.state = 2098;
  	            this.match(CPP14Parser.PlusPlus);
  	            break;
  
  	        case 36:
  	            this.enterOuterAlt(localctx, 36);
  	            this.state = 2099;
  	            this.match(CPP14Parser.MinusMinus);
  	            break;
  
  	        case 37:
  	            this.enterOuterAlt(localctx, 37);
  	            this.state = 2100;
  	            this.match(CPP14Parser.Comma);
  	            break;
  
  	        case 38:
  	            this.enterOuterAlt(localctx, 38);
  	            this.state = 2101;
  	            this.match(CPP14Parser.ArrowStar);
  	            break;
  
  	        case 39:
  	            this.enterOuterAlt(localctx, 39);
  	            this.state = 2102;
  	            this.match(CPP14Parser.Arrow);
  	            break;
  
  	        case 40:
  	            this.enterOuterAlt(localctx, 40);
  	            this.state = 2103;
  	            this.match(CPP14Parser.LeftParen);
  	            this.state = 2104;
  	            this.match(CPP14Parser.RightParen);
  	            break;
  
  	        case 41:
  	            this.enterOuterAlt(localctx, 41);
  	            this.state = 2105;
  	            this.match(CPP14Parser.LeftBracket);
  	            this.state = 2106;
  	            this.match(CPP14Parser.RightBracket);
  	            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;
  	}
  
  
  
  	literal() {
  	    let localctx = new LiteralContext(this, this._ctx, this.state);
  	    this.enterRule(localctx, 380, CPP14Parser.RULE_literal);
  	    var _la = 0; // Token type
  	    try {
  	        this.enterOuterAlt(localctx, 1);
  	        this.state = 2109;
  	        _la = this._input.LA(1);
  	        if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << CPP14Parser.IntegerLiteral) | (1 << CPP14Parser.CharacterLiteral) | (1 << CPP14Parser.FloatingLiteral) | (1 << CPP14Parser.StringLiteral) | (1 << CPP14Parser.BooleanLiteral) | (1 << CPP14Parser.PointerLiteral) | (1 << CPP14Parser.UserDefinedLiteral))) !== 0))) {
  	        this._errHandler.recoverInline(this);
  	        }
  	        else {
  	        	this._errHandler.reportMatch(this);
  	            this.consume();
  	        }
  	    } catch (re) {
  	    	if(re instanceof antlr4.error.RecognitionException) {
  		        localctx.exception = re;
  		        this._errHandler.reportError(this, re);
  		        this._errHandler.recover(this, re);
  		    } else {
  		    	throw re;
  		    }
  	    } finally {
  	        this.exitRule();
  	    }
  
  
  
  	    return localctx;
  	}
  
  
  }
  
  CPP14Parser.EOF = antlr4.Token.EOF;
  CPP14Parser.IntegerLiteral = 1;
  CPP14Parser.CharacterLiteral = 2;
  CPP14Parser.FloatingLiteral = 3;
  CPP14Parser.StringLiteral = 4;
  CPP14Parser.BooleanLiteral = 5;
  CPP14Parser.PointerLiteral = 6;
  CPP14Parser.UserDefinedLiteral = 7;
  CPP14Parser.MultiLineMacro = 8;
  CPP14Parser.Directive = 9;
  CPP14Parser.Alignas = 10;
  CPP14Parser.Alignof = 11;
  CPP14Parser.Asm = 12;
  CPP14Parser.Auto = 13;
  CPP14Parser.Bool = 14;
  CPP14Parser.Break = 15;
  CPP14Parser.Case = 16;
  CPP14Parser.Catch = 17;
  CPP14Parser.Char = 18;
  CPP14Parser.Char16 = 19;
  CPP14Parser.Char32 = 20;
  CPP14Parser.Class = 21;
  CPP14Parser.Const = 22;
  CPP14Parser.Constexpr = 23;
  CPP14Parser.Const_cast = 24;
  CPP14Parser.Continue = 25;
  CPP14Parser.Decltype = 26;
  CPP14Parser.Default = 27;
  CPP14Parser.Delete = 28;
  CPP14Parser.Do = 29;
  CPP14Parser.Double = 30;
  CPP14Parser.Dynamic_cast = 31;
  CPP14Parser.Else = 32;
  CPP14Parser.Enum = 33;
  CPP14Parser.Explicit = 34;
  CPP14Parser.Export = 35;
  CPP14Parser.Extern = 36;
  CPP14Parser.False_ = 37;
  CPP14Parser.Final = 38;
  CPP14Parser.Float = 39;
  CPP14Parser.For = 40;
  CPP14Parser.Friend = 41;
  CPP14Parser.Goto = 42;
  CPP14Parser.If = 43;
  CPP14Parser.Inline = 44;
  CPP14Parser.Int = 45;
  CPP14Parser.Long = 46;
  CPP14Parser.Mutable = 47;
  CPP14Parser.Namespace = 48;
  CPP14Parser.New = 49;
  CPP14Parser.Noexcept = 50;
  CPP14Parser.Nullptr = 51;
  CPP14Parser.Operator = 52;
  CPP14Parser.Override = 53;
  CPP14Parser.Private = 54;
  CPP14Parser.Protected = 55;
  CPP14Parser.Public = 56;
  CPP14Parser.Register = 57;
  CPP14Parser.Reinterpret_cast = 58;
  CPP14Parser.Return = 59;
  CPP14Parser.Short = 60;
  CPP14Parser.Signed = 61;
  CPP14Parser.Sizeof = 62;
  CPP14Parser.Static = 63;
  CPP14Parser.Static_assert = 64;
  CPP14Parser.Static_cast = 65;
  CPP14Parser.Struct = 66;
  CPP14Parser.Switch = 67;
  CPP14Parser.Template = 68;
  CPP14Parser.This = 69;
  CPP14Parser.Thread_local = 70;
  CPP14Parser.Throw = 71;
  CPP14Parser.True_ = 72;
  CPP14Parser.Try = 73;
  CPP14Parser.Typedef = 74;
  CPP14Parser.Typeid_ = 75;
  CPP14Parser.Typename_ = 76;
  CPP14Parser.Union = 77;
  CPP14Parser.Unsigned = 78;
  CPP14Parser.Using = 79;
  CPP14Parser.Virtual = 80;
  CPP14Parser.Void = 81;
  CPP14Parser.Volatile = 82;
  CPP14Parser.Wchar = 83;
  CPP14Parser.While = 84;
  CPP14Parser.LeftParen = 85;
  CPP14Parser.RightParen = 86;
  CPP14Parser.LeftBracket = 87;
  CPP14Parser.RightBracket = 88;
  CPP14Parser.LeftBrace = 89;
  CPP14Parser.RightBrace = 90;
  CPP14Parser.Plus = 91;
  CPP14Parser.Minus = 92;
  CPP14Parser.Star = 93;
  CPP14Parser.Div = 94;
  CPP14Parser.Mod = 95;
  CPP14Parser.Caret = 96;
  CPP14Parser.And = 97;
  CPP14Parser.Or = 98;
  CPP14Parser.Tilde = 99;
  CPP14Parser.Not = 100;
  CPP14Parser.Assign = 101;
  CPP14Parser.Less = 102;
  CPP14Parser.Greater = 103;
  CPP14Parser.PlusAssign = 104;
  CPP14Parser.MinusAssign = 105;
  CPP14Parser.StarAssign = 106;
  CPP14Parser.DivAssign = 107;
  CPP14Parser.ModAssign = 108;
  CPP14Parser.XorAssign = 109;
  CPP14Parser.AndAssign = 110;
  CPP14Parser.OrAssign = 111;
  CPP14Parser.LeftShiftAssign = 112;
  CPP14Parser.RightShiftAssign = 113;
  CPP14Parser.Equal = 114;
  CPP14Parser.NotEqual = 115;
  CPP14Parser.LessEqual = 116;
  CPP14Parser.GreaterEqual = 117;
  CPP14Parser.AndAnd = 118;
  CPP14Parser.OrOr = 119;
  CPP14Parser.PlusPlus = 120;
  CPP14Parser.MinusMinus = 121;
  CPP14Parser.Comma = 122;
  CPP14Parser.ArrowStar = 123;
  CPP14Parser.Arrow = 124;
  CPP14Parser.Question = 125;
  CPP14Parser.Colon = 126;
  CPP14Parser.Doublecolon = 127;
  CPP14Parser.Semi = 128;
  CPP14Parser.Dot = 129;
  CPP14Parser.DotStar = 130;
  CPP14Parser.Ellipsis = 131;
  CPP14Parser.Identifier = 132;
  CPP14Parser.DecimalLiteral = 133;
  CPP14Parser.OctalLiteral = 134;
  CPP14Parser.HexadecimalLiteral = 135;
  CPP14Parser.BinaryLiteral = 136;
  CPP14Parser.Integersuffix = 137;
  CPP14Parser.UserDefinedIntegerLiteral = 138;
  CPP14Parser.UserDefinedFloatingLiteral = 139;
  CPP14Parser.UserDefinedStringLiteral = 140;
  CPP14Parser.UserDefinedCharacterLiteral = 141;
  CPP14Parser.Whitespace = 142;
  CPP14Parser.Newline = 143;
  CPP14Parser.BlockComment = 144;
  CPP14Parser.LineComment = 145;
  
  CPP14Parser.RULE_translationUnit = 0;
  CPP14Parser.RULE_primaryExpression = 1;
  CPP14Parser.RULE_idExpression = 2;
  CPP14Parser.RULE_unqualifiedId = 3;
  CPP14Parser.RULE_qualifiedId = 4;
  CPP14Parser.RULE_nestedNameSpecifier = 5;
  CPP14Parser.RULE_lambdaExpression = 6;
  CPP14Parser.RULE_lambdaIntroducer = 7;
  CPP14Parser.RULE_lambdaCapture = 8;
  CPP14Parser.RULE_captureDefault = 9;
  CPP14Parser.RULE_captureList = 10;
  CPP14Parser.RULE_capture = 11;
  CPP14Parser.RULE_simpleCapture = 12;
  CPP14Parser.RULE_initcapture = 13;
  CPP14Parser.RULE_lambdaDeclarator = 14;
  CPP14Parser.RULE_postfixExpression = 15;
  CPP14Parser.RULE_typeIdOfTheTypeId = 16;
  CPP14Parser.RULE_expressionList = 17;
  CPP14Parser.RULE_pseudoDestructorName = 18;
  CPP14Parser.RULE_unaryExpression = 19;
  CPP14Parser.RULE_unaryOperator = 20;
  CPP14Parser.RULE_newExpression = 21;
  CPP14Parser.RULE_newPlacement = 22;
  CPP14Parser.RULE_newTypeId = 23;
  CPP14Parser.RULE_newDeclarator = 24;
  CPP14Parser.RULE_noPointerNewDeclarator = 25;
  CPP14Parser.RULE_newInitializer = 26;
  CPP14Parser.RULE_deleteExpression = 27;
  CPP14Parser.RULE_noExceptExpression = 28;
  CPP14Parser.RULE_castExpression = 29;
  CPP14Parser.RULE_pointerMemberExpression = 30;
  CPP14Parser.RULE_multiplicativeExpression = 31;
  CPP14Parser.RULE_additiveExpression = 32;
  CPP14Parser.RULE_shiftExpression = 33;
  CPP14Parser.RULE_shiftOperator = 34;
  CPP14Parser.RULE_relationalExpression = 35;
  CPP14Parser.RULE_equalityExpression = 36;
  CPP14Parser.RULE_andExpression = 37;
  CPP14Parser.RULE_exclusiveOrExpression = 38;
  CPP14Parser.RULE_inclusiveOrExpression = 39;
  CPP14Parser.RULE_logicalAndExpression = 40;
  CPP14Parser.RULE_logicalOrExpression = 41;
  CPP14Parser.RULE_conditionalExpression = 42;
  CPP14Parser.RULE_assignmentExpression = 43;
  CPP14Parser.RULE_assignmentOperator = 44;
  CPP14Parser.RULE_expression = 45;
  CPP14Parser.RULE_constantExpression = 46;
  CPP14Parser.RULE_statement = 47;
  CPP14Parser.RULE_labeledStatement = 48;
  CPP14Parser.RULE_expressionStatement = 49;
  CPP14Parser.RULE_compoundStatement = 50;
  CPP14Parser.RULE_statementSeq = 51;
  CPP14Parser.RULE_selectionStatement = 52;
  CPP14Parser.RULE_condition = 53;
  CPP14Parser.RULE_iterationStatement = 54;
  CPP14Parser.RULE_forInitStatement = 55;
  CPP14Parser.RULE_forRangeDeclaration = 56;
  CPP14Parser.RULE_forRangeInitializer = 57;
  CPP14Parser.RULE_jumpStatement = 58;
  CPP14Parser.RULE_declarationStatement = 59;
  CPP14Parser.RULE_declarationseq = 60;
  CPP14Parser.RULE_declaration = 61;
  CPP14Parser.RULE_blockDeclaration = 62;
  CPP14Parser.RULE_aliasDeclaration = 63;
  CPP14Parser.RULE_simpleDeclaration = 64;
  CPP14Parser.RULE_staticAssertDeclaration = 65;
  CPP14Parser.RULE_emptyDeclaration = 66;
  CPP14Parser.RULE_attributeDeclaration = 67;
  CPP14Parser.RULE_declSpecifier = 68;
  CPP14Parser.RULE_declSpecifierSeq = 69;
  CPP14Parser.RULE_storageClassSpecifier = 70;
  CPP14Parser.RULE_functionSpecifier = 71;
  CPP14Parser.RULE_typedefName = 72;
  CPP14Parser.RULE_typeSpecifier = 73;
  CPP14Parser.RULE_trailingTypeSpecifier = 74;
  CPP14Parser.RULE_typeSpecifierSeq = 75;
  CPP14Parser.RULE_trailingTypeSpecifierSeq = 76;
  CPP14Parser.RULE_simpleTypeLengthModifier = 77;
  CPP14Parser.RULE_simpleTypeSignednessModifier = 78;
  CPP14Parser.RULE_simpleTypeSpecifier = 79;
  CPP14Parser.RULE_theTypeName = 80;
  CPP14Parser.RULE_decltypeSpecifier = 81;
  CPP14Parser.RULE_elaboratedTypeSpecifier = 82;
  CPP14Parser.RULE_enumName = 83;
  CPP14Parser.RULE_enumSpecifier = 84;
  CPP14Parser.RULE_enumHead = 85;
  CPP14Parser.RULE_opaqueEnumDeclaration = 86;
  CPP14Parser.RULE_enumkey = 87;
  CPP14Parser.RULE_enumbase = 88;
  CPP14Parser.RULE_enumeratorList = 89;
  CPP14Parser.RULE_enumeratorDefinition = 90;
  CPP14Parser.RULE_enumerator = 91;
  CPP14Parser.RULE_namespaceName = 92;
  CPP14Parser.RULE_originalNamespaceName = 93;
  CPP14Parser.RULE_namespaceDefinition = 94;
  CPP14Parser.RULE_namespaceAlias = 95;
  CPP14Parser.RULE_namespaceAliasDefinition = 96;
  CPP14Parser.RULE_qualifiednamespacespecifier = 97;
  CPP14Parser.RULE_usingDeclaration = 98;
  CPP14Parser.RULE_usingDirective = 99;
  CPP14Parser.RULE_asmDefinition = 100;
  CPP14Parser.RULE_linkageSpecification = 101;
  CPP14Parser.RULE_attributeSpecifierSeq = 102;
  CPP14Parser.RULE_attributeSpecifier = 103;
  CPP14Parser.RULE_alignmentspecifier = 104;
  CPP14Parser.RULE_attributeList = 105;
  CPP14Parser.RULE_attribute = 106;
  CPP14Parser.RULE_attributeNamespace = 107;
  CPP14Parser.RULE_attributeArgumentClause = 108;
  CPP14Parser.RULE_balancedTokenSeq = 109;
  CPP14Parser.RULE_balancedtoken = 110;
  CPP14Parser.RULE_initDeclaratorList = 111;
  CPP14Parser.RULE_initDeclarator = 112;
  CPP14Parser.RULE_declarator = 113;
  CPP14Parser.RULE_pointerDeclarator = 114;
  CPP14Parser.RULE_noPointerDeclarator = 115;
  CPP14Parser.RULE_parametersAndQualifiers = 116;
  CPP14Parser.RULE_trailingReturnType = 117;
  CPP14Parser.RULE_pointerOperator = 118;
  CPP14Parser.RULE_cvqualifierseq = 119;
  CPP14Parser.RULE_cvQualifier = 120;
  CPP14Parser.RULE_refqualifier = 121;
  CPP14Parser.RULE_declaratorid = 122;
  CPP14Parser.RULE_theTypeId = 123;
  CPP14Parser.RULE_abstractDeclarator = 124;
  CPP14Parser.RULE_pointerAbstractDeclarator = 125;
  CPP14Parser.RULE_noPointerAbstractDeclarator = 126;
  CPP14Parser.RULE_abstractPackDeclarator = 127;
  CPP14Parser.RULE_noPointerAbstractPackDeclarator = 128;
  CPP14Parser.RULE_parameterDeclarationClause = 129;
  CPP14Parser.RULE_parameterDeclarationList = 130;
  CPP14Parser.RULE_parameterDeclaration = 131;
  CPP14Parser.RULE_functionDefinition = 132;
  CPP14Parser.RULE_functionBody = 133;
  CPP14Parser.RULE_initializer = 134;
  CPP14Parser.RULE_braceOrEqualInitializer = 135;
  CPP14Parser.RULE_initializerClause = 136;
  CPP14Parser.RULE_initializerList = 137;
  CPP14Parser.RULE_bracedInitList = 138;
  CPP14Parser.RULE_className = 139;
  CPP14Parser.RULE_classSpecifier = 140;
  CPP14Parser.RULE_classHead = 141;
  CPP14Parser.RULE_classHeadName = 142;
  CPP14Parser.RULE_classVirtSpecifier = 143;
  CPP14Parser.RULE_classKey = 144;
  CPP14Parser.RULE_memberSpecification = 145;
  CPP14Parser.RULE_memberdeclaration = 146;
  CPP14Parser.RULE_memberDeclaratorList = 147;
  CPP14Parser.RULE_memberDeclarator = 148;
  CPP14Parser.RULE_virtualSpecifierSeq = 149;
  CPP14Parser.RULE_virtualSpecifier = 150;
  CPP14Parser.RULE_pureSpecifier = 151;
  CPP14Parser.RULE_baseClause = 152;
  CPP14Parser.RULE_baseSpecifierList = 153;
  CPP14Parser.RULE_baseSpecifier = 154;
  CPP14Parser.RULE_classOrDeclType = 155;
  CPP14Parser.RULE_baseTypeSpecifier = 156;
  CPP14Parser.RULE_accessSpecifier = 157;
  CPP14Parser.RULE_conversionFunctionId = 158;
  CPP14Parser.RULE_conversionTypeId = 159;
  CPP14Parser.RULE_conversionDeclarator = 160;
  CPP14Parser.RULE_constructorInitializer = 161;
  CPP14Parser.RULE_memInitializerList = 162;
  CPP14Parser.RULE_memInitializer = 163;
  CPP14Parser.RULE_meminitializerid = 164;
  CPP14Parser.RULE_operatorFunctionId = 165;
  CPP14Parser.RULE_literalOperatorId = 166;
  CPP14Parser.RULE_templateDeclaration = 167;
  CPP14Parser.RULE_templateparameterList = 168;
  CPP14Parser.RULE_templateParameter = 169;
  CPP14Parser.RULE_typeParameter = 170;
  CPP14Parser.RULE_simpleTemplateId = 171;
  CPP14Parser.RULE_templateId = 172;
  CPP14Parser.RULE_templateName = 173;
  CPP14Parser.RULE_templateArgumentList = 174;
  CPP14Parser.RULE_templateArgument = 175;
  CPP14Parser.RULE_typeNameSpecifier = 176;
  CPP14Parser.RULE_explicitInstantiation = 177;
  CPP14Parser.RULE_explicitSpecialization = 178;
  CPP14Parser.RULE_tryBlock = 179;
  CPP14Parser.RULE_functionTryBlock = 180;
  CPP14Parser.RULE_handlerSeq = 181;
  CPP14Parser.RULE_handler = 182;
  CPP14Parser.RULE_exceptionDeclaration = 183;
  CPP14Parser.RULE_throwExpression = 184;
  CPP14Parser.RULE_exceptionSpecification = 185;
  CPP14Parser.RULE_dynamicExceptionSpecification = 186;
  CPP14Parser.RULE_typeIdList = 187;
  CPP14Parser.RULE_noeExceptSpecification = 188;
  CPP14Parser.RULE_theOperator = 189;
  CPP14Parser.RULE_literal = 190;
  
  class TranslationUnitContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_translationUnit;
      }
  
  	EOF() {
  	    return this.getToken(CPP14Parser.EOF, 0);
  	};
  
  	declarationseq() {
  	    return this.getTypedRuleContext(DeclarationseqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTranslationUnit(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTranslationUnit(this);
  		}
  	}
  
  
  }
  
  
  
  class PrimaryExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_primaryExpression;
      }
  
  	literal = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(LiteralContext);
  	    } else {
  	        return this.getTypedRuleContext(LiteralContext,i);
  	    }
  	};
  
  	This() {
  	    return this.getToken(CPP14Parser.This, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	idExpression() {
  	    return this.getTypedRuleContext(IdExpressionContext,0);
  	};
  
  	lambdaExpression() {
  	    return this.getTypedRuleContext(LambdaExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterPrimaryExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitPrimaryExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class IdExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_idExpression;
      }
  
  	unqualifiedId() {
  	    return this.getTypedRuleContext(UnqualifiedIdContext,0);
  	};
  
  	qualifiedId() {
  	    return this.getTypedRuleContext(QualifiedIdContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterIdExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitIdExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class UnqualifiedIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_unqualifiedId;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	operatorFunctionId() {
  	    return this.getTypedRuleContext(OperatorFunctionIdContext,0);
  	};
  
  	conversionFunctionId() {
  	    return this.getTypedRuleContext(ConversionFunctionIdContext,0);
  	};
  
  	literalOperatorId() {
  	    return this.getTypedRuleContext(LiteralOperatorIdContext,0);
  	};
  
  	Tilde() {
  	    return this.getToken(CPP14Parser.Tilde, 0);
  	};
  
  	className() {
  	    return this.getTypedRuleContext(ClassNameContext,0);
  	};
  
  	decltypeSpecifier() {
  	    return this.getTypedRuleContext(DecltypeSpecifierContext,0);
  	};
  
  	templateId() {
  	    return this.getTypedRuleContext(TemplateIdContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterUnqualifiedId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitUnqualifiedId(this);
  		}
  	}
  
  
  }
  
  
  
  class QualifiedIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_qualifiedId;
      }
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	unqualifiedId() {
  	    return this.getTypedRuleContext(UnqualifiedIdContext,0);
  	};
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterQualifiedId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitQualifiedId(this);
  		}
  	}
  
  
  }
  
  
  
  class NestedNameSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_nestedNameSpecifier;
      }
  
  	Doublecolon() {
  	    return this.getToken(CPP14Parser.Doublecolon, 0);
  	};
  
  	theTypeName() {
  	    return this.getTypedRuleContext(TheTypeNameContext,0);
  	};
  
  	namespaceName() {
  	    return this.getTypedRuleContext(NamespaceNameContext,0);
  	};
  
  	decltypeSpecifier() {
  	    return this.getTypedRuleContext(DecltypeSpecifierContext,0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	simpleTemplateId() {
  	    return this.getTypedRuleContext(SimpleTemplateIdContext,0);
  	};
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNestedNameSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNestedNameSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class LambdaExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_lambdaExpression;
      }
  
  	lambdaIntroducer() {
  	    return this.getTypedRuleContext(LambdaIntroducerContext,0);
  	};
  
  	compoundStatement() {
  	    return this.getTypedRuleContext(CompoundStatementContext,0);
  	};
  
  	lambdaDeclarator() {
  	    return this.getTypedRuleContext(LambdaDeclaratorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLambdaExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLambdaExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class LambdaIntroducerContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_lambdaIntroducer;
      }
  
  	LeftBracket() {
  	    return this.getToken(CPP14Parser.LeftBracket, 0);
  	};
  
  	RightBracket() {
  	    return this.getToken(CPP14Parser.RightBracket, 0);
  	};
  
  	lambdaCapture() {
  	    return this.getTypedRuleContext(LambdaCaptureContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLambdaIntroducer(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLambdaIntroducer(this);
  		}
  	}
  
  
  }
  
  
  
  class LambdaCaptureContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_lambdaCapture;
      }
  
  	captureList() {
  	    return this.getTypedRuleContext(CaptureListContext,0);
  	};
  
  	captureDefault() {
  	    return this.getTypedRuleContext(CaptureDefaultContext,0);
  	};
  
  	Comma() {
  	    return this.getToken(CPP14Parser.Comma, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLambdaCapture(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLambdaCapture(this);
  		}
  	}
  
  
  }
  
  
  
  class CaptureDefaultContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_captureDefault;
      }
  
  	And() {
  	    return this.getToken(CPP14Parser.And, 0);
  	};
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterCaptureDefault(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitCaptureDefault(this);
  		}
  	}
  
  
  }
  
  
  
  class CaptureListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_captureList;
      }
  
  	capture = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(CaptureContext);
  	    } else {
  	        return this.getTypedRuleContext(CaptureContext,i);
  	    }
  	};
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	Ellipsis() {
  	    return this.getToken(CPP14Parser.Ellipsis, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterCaptureList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitCaptureList(this);
  		}
  	}
  
  
  }
  
  
  
  class CaptureContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_capture;
      }
  
  	simpleCapture() {
  	    return this.getTypedRuleContext(SimpleCaptureContext,0);
  	};
  
  	initcapture() {
  	    return this.getTypedRuleContext(InitcaptureContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterCapture(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitCapture(this);
  		}
  	}
  
  
  }
  
  
  
  class SimpleCaptureContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_simpleCapture;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	And() {
  	    return this.getToken(CPP14Parser.And, 0);
  	};
  
  	This() {
  	    return this.getToken(CPP14Parser.This, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterSimpleCapture(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitSimpleCapture(this);
  		}
  	}
  
  
  }
  
  
  
  class InitcaptureContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_initcapture;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	initializer() {
  	    return this.getTypedRuleContext(InitializerContext,0);
  	};
  
  	And() {
  	    return this.getToken(CPP14Parser.And, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterInitcapture(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitInitcapture(this);
  		}
  	}
  
  
  }
  
  
  
  class LambdaDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_lambdaDeclarator;
      }
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	parameterDeclarationClause() {
  	    return this.getTypedRuleContext(ParameterDeclarationClauseContext,0);
  	};
  
  	Mutable() {
  	    return this.getToken(CPP14Parser.Mutable, 0);
  	};
  
  	exceptionSpecification() {
  	    return this.getTypedRuleContext(ExceptionSpecificationContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	trailingReturnType() {
  	    return this.getTypedRuleContext(TrailingReturnTypeContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLambdaDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLambdaDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class PostfixExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_postfixExpression;
      }
  
  	primaryExpression() {
  	    return this.getTypedRuleContext(PrimaryExpressionContext,0);
  	};
  
  	simpleTypeSpecifier() {
  	    return this.getTypedRuleContext(SimpleTypeSpecifierContext,0);
  	};
  
  	typeNameSpecifier() {
  	    return this.getTypedRuleContext(TypeNameSpecifierContext,0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	bracedInitList() {
  	    return this.getTypedRuleContext(BracedInitListContext,0);
  	};
  
  	expressionList() {
  	    return this.getTypedRuleContext(ExpressionListContext,0);
  	};
  
  	Less() {
  	    return this.getToken(CPP14Parser.Less, 0);
  	};
  
  	theTypeId() {
  	    return this.getTypedRuleContext(TheTypeIdContext,0);
  	};
  
  	Greater() {
  	    return this.getToken(CPP14Parser.Greater, 0);
  	};
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	Dynamic_cast() {
  	    return this.getToken(CPP14Parser.Dynamic_cast, 0);
  	};
  
  	Static_cast() {
  	    return this.getToken(CPP14Parser.Static_cast, 0);
  	};
  
  	Reinterpret_cast() {
  	    return this.getToken(CPP14Parser.Reinterpret_cast, 0);
  	};
  
  	Const_cast() {
  	    return this.getToken(CPP14Parser.Const_cast, 0);
  	};
  
  	typeIdOfTheTypeId() {
  	    return this.getTypedRuleContext(TypeIdOfTheTypeIdContext,0);
  	};
  
  	postfixExpression() {
  	    return this.getTypedRuleContext(PostfixExpressionContext,0);
  	};
  
  	LeftBracket() {
  	    return this.getToken(CPP14Parser.LeftBracket, 0);
  	};
  
  	RightBracket() {
  	    return this.getToken(CPP14Parser.RightBracket, 0);
  	};
  
  	Dot() {
  	    return this.getToken(CPP14Parser.Dot, 0);
  	};
  
  	Arrow() {
  	    return this.getToken(CPP14Parser.Arrow, 0);
  	};
  
  	idExpression() {
  	    return this.getTypedRuleContext(IdExpressionContext,0);
  	};
  
  	pseudoDestructorName() {
  	    return this.getTypedRuleContext(PseudoDestructorNameContext,0);
  	};
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	PlusPlus() {
  	    return this.getToken(CPP14Parser.PlusPlus, 0);
  	};
  
  	MinusMinus() {
  	    return this.getToken(CPP14Parser.MinusMinus, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterPostfixExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitPostfixExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class TypeIdOfTheTypeIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_typeIdOfTheTypeId;
      }
  
  	Typeid_() {
  	    return this.getToken(CPP14Parser.Typeid_, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTypeIdOfTheTypeId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTypeIdOfTheTypeId(this);
  		}
  	}
  
  
  }
  
  
  
  class ExpressionListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_expressionList;
      }
  
  	initializerList() {
  	    return this.getTypedRuleContext(InitializerListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterExpressionList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitExpressionList(this);
  		}
  	}
  
  
  }
  
  
  
  class PseudoDestructorNameContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_pseudoDestructorName;
      }
  
  	Tilde() {
  	    return this.getToken(CPP14Parser.Tilde, 0);
  	};
  
  	theTypeName = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(TheTypeNameContext);
  	    } else {
  	        return this.getTypedRuleContext(TheTypeNameContext,i);
  	    }
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	Doublecolon() {
  	    return this.getToken(CPP14Parser.Doublecolon, 0);
  	};
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	simpleTemplateId() {
  	    return this.getTypedRuleContext(SimpleTemplateIdContext,0);
  	};
  
  	decltypeSpecifier() {
  	    return this.getTypedRuleContext(DecltypeSpecifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterPseudoDestructorName(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitPseudoDestructorName(this);
  		}
  	}
  
  
  }
  
  
  
  class UnaryExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_unaryExpression;
      }
  
  	postfixExpression() {
  	    return this.getTypedRuleContext(PostfixExpressionContext,0);
  	};
  
  	unaryExpression() {
  	    return this.getTypedRuleContext(UnaryExpressionContext,0);
  	};
  
  	PlusPlus() {
  	    return this.getToken(CPP14Parser.PlusPlus, 0);
  	};
  
  	MinusMinus() {
  	    return this.getToken(CPP14Parser.MinusMinus, 0);
  	};
  
  	unaryOperator() {
  	    return this.getTypedRuleContext(UnaryOperatorContext,0);
  	};
  
  	Sizeof() {
  	    return this.getToken(CPP14Parser.Sizeof, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	theTypeId() {
  	    return this.getTypedRuleContext(TheTypeIdContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	Ellipsis() {
  	    return this.getToken(CPP14Parser.Ellipsis, 0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	Alignof() {
  	    return this.getToken(CPP14Parser.Alignof, 0);
  	};
  
  	noExceptExpression() {
  	    return this.getTypedRuleContext(NoExceptExpressionContext,0);
  	};
  
  	newExpression() {
  	    return this.getTypedRuleContext(NewExpressionContext,0);
  	};
  
  	deleteExpression() {
  	    return this.getTypedRuleContext(DeleteExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterUnaryExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitUnaryExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class UnaryOperatorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_unaryOperator;
      }
  
  	Or() {
  	    return this.getToken(CPP14Parser.Or, 0);
  	};
  
  	Star() {
  	    return this.getToken(CPP14Parser.Star, 0);
  	};
  
  	And() {
  	    return this.getToken(CPP14Parser.And, 0);
  	};
  
  	Plus() {
  	    return this.getToken(CPP14Parser.Plus, 0);
  	};
  
  	Tilde() {
  	    return this.getToken(CPP14Parser.Tilde, 0);
  	};
  
  	Minus() {
  	    return this.getToken(CPP14Parser.Minus, 0);
  	};
  
  	Not() {
  	    return this.getToken(CPP14Parser.Not, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterUnaryOperator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitUnaryOperator(this);
  		}
  	}
  
  
  }
  
  
  
  class NewExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_newExpression;
      }
  
  	New() {
  	    return this.getToken(CPP14Parser.New, 0);
  	};
  
  	newTypeId() {
  	    return this.getTypedRuleContext(NewTypeIdContext,0);
  	};
  
  	Doublecolon() {
  	    return this.getToken(CPP14Parser.Doublecolon, 0);
  	};
  
  	newPlacement() {
  	    return this.getTypedRuleContext(NewPlacementContext,0);
  	};
  
  	newInitializer() {
  	    return this.getTypedRuleContext(NewInitializerContext,0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	theTypeId() {
  	    return this.getTypedRuleContext(TheTypeIdContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNewExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNewExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class NewPlacementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_newPlacement;
      }
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	expressionList() {
  	    return this.getTypedRuleContext(ExpressionListContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNewPlacement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNewPlacement(this);
  		}
  	}
  
  
  }
  
  
  
  class NewTypeIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_newTypeId;
      }
  
  	typeSpecifierSeq() {
  	    return this.getTypedRuleContext(TypeSpecifierSeqContext,0);
  	};
  
  	newDeclarator() {
  	    return this.getTypedRuleContext(NewDeclaratorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNewTypeId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNewTypeId(this);
  		}
  	}
  
  
  }
  
  
  
  class NewDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_newDeclarator;
      }
  
  	pointerOperator() {
  	    return this.getTypedRuleContext(PointerOperatorContext,0);
  	};
  
  	newDeclarator() {
  	    return this.getTypedRuleContext(NewDeclaratorContext,0);
  	};
  
  	noPointerNewDeclarator() {
  	    return this.getTypedRuleContext(NoPointerNewDeclaratorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNewDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNewDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class NoPointerNewDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_noPointerNewDeclarator;
      }
  
  	LeftBracket() {
  	    return this.getToken(CPP14Parser.LeftBracket, 0);
  	};
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	RightBracket() {
  	    return this.getToken(CPP14Parser.RightBracket, 0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	noPointerNewDeclarator() {
  	    return this.getTypedRuleContext(NoPointerNewDeclaratorContext,0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNoPointerNewDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNoPointerNewDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class NewInitializerContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_newInitializer;
      }
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	expressionList() {
  	    return this.getTypedRuleContext(ExpressionListContext,0);
  	};
  
  	bracedInitList() {
  	    return this.getTypedRuleContext(BracedInitListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNewInitializer(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNewInitializer(this);
  		}
  	}
  
  
  }
  
  
  
  class DeleteExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_deleteExpression;
      }
  
  	Delete() {
  	    return this.getToken(CPP14Parser.Delete, 0);
  	};
  
  	castExpression() {
  	    return this.getTypedRuleContext(CastExpressionContext,0);
  	};
  
  	Doublecolon() {
  	    return this.getToken(CPP14Parser.Doublecolon, 0);
  	};
  
  	LeftBracket() {
  	    return this.getToken(CPP14Parser.LeftBracket, 0);
  	};
  
  	RightBracket() {
  	    return this.getToken(CPP14Parser.RightBracket, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDeleteExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDeleteExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class NoExceptExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_noExceptExpression;
      }
  
  	Noexcept() {
  	    return this.getToken(CPP14Parser.Noexcept, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNoExceptExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNoExceptExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class CastExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_castExpression;
      }
  
  	unaryExpression() {
  	    return this.getTypedRuleContext(UnaryExpressionContext,0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	theTypeId() {
  	    return this.getTypedRuleContext(TheTypeIdContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	castExpression() {
  	    return this.getTypedRuleContext(CastExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterCastExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitCastExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class PointerMemberExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_pointerMemberExpression;
      }
  
  	castExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(CastExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(CastExpressionContext,i);
  	    }
  	};
  
  	DotStar = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.DotStar);
  	    } else {
  	        return this.getToken(CPP14Parser.DotStar, i);
  	    }
  	};
  
  
  	ArrowStar = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.ArrowStar);
  	    } else {
  	        return this.getToken(CPP14Parser.ArrowStar, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterPointerMemberExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitPointerMemberExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class MultiplicativeExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_multiplicativeExpression;
      }
  
  	pointerMemberExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(PointerMemberExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(PointerMemberExpressionContext,i);
  	    }
  	};
  
  	Star = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Star);
  	    } else {
  	        return this.getToken(CPP14Parser.Star, i);
  	    }
  	};
  
  
  	Div = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Div);
  	    } else {
  	        return this.getToken(CPP14Parser.Div, i);
  	    }
  	};
  
  
  	Mod = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Mod);
  	    } else {
  	        return this.getToken(CPP14Parser.Mod, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterMultiplicativeExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitMultiplicativeExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class AdditiveExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_additiveExpression;
      }
  
  	multiplicativeExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(MultiplicativeExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(MultiplicativeExpressionContext,i);
  	    }
  	};
  
  	Plus = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Plus);
  	    } else {
  	        return this.getToken(CPP14Parser.Plus, i);
  	    }
  	};
  
  
  	Minus = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Minus);
  	    } else {
  	        return this.getToken(CPP14Parser.Minus, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAdditiveExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAdditiveExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class ShiftExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_shiftExpression;
      }
  
  	additiveExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(AdditiveExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(AdditiveExpressionContext,i);
  	    }
  	};
  
  	shiftOperator = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(ShiftOperatorContext);
  	    } else {
  	        return this.getTypedRuleContext(ShiftOperatorContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterShiftExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitShiftExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class ShiftOperatorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_shiftOperator;
      }
  
  	Greater = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Greater);
  	    } else {
  	        return this.getToken(CPP14Parser.Greater, i);
  	    }
  	};
  
  
  	Less = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Less);
  	    } else {
  	        return this.getToken(CPP14Parser.Less, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterShiftOperator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitShiftOperator(this);
  		}
  	}
  
  
  }
  
  
  
  class RelationalExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_relationalExpression;
      }
  
  	shiftExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(ShiftExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(ShiftExpressionContext,i);
  	    }
  	};
  
  	Less = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Less);
  	    } else {
  	        return this.getToken(CPP14Parser.Less, i);
  	    }
  	};
  
  
  	Greater = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Greater);
  	    } else {
  	        return this.getToken(CPP14Parser.Greater, i);
  	    }
  	};
  
  
  	LessEqual = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.LessEqual);
  	    } else {
  	        return this.getToken(CPP14Parser.LessEqual, i);
  	    }
  	};
  
  
  	GreaterEqual = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.GreaterEqual);
  	    } else {
  	        return this.getToken(CPP14Parser.GreaterEqual, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterRelationalExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitRelationalExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class EqualityExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_equalityExpression;
      }
  
  	relationalExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(RelationalExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(RelationalExpressionContext,i);
  	    }
  	};
  
  	Equal = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Equal);
  	    } else {
  	        return this.getToken(CPP14Parser.Equal, i);
  	    }
  	};
  
  
  	NotEqual = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.NotEqual);
  	    } else {
  	        return this.getToken(CPP14Parser.NotEqual, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEqualityExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEqualityExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class AndExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_andExpression;
      }
  
  	equalityExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(EqualityExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(EqualityExpressionContext,i);
  	    }
  	};
  
  	And = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.And);
  	    } else {
  	        return this.getToken(CPP14Parser.And, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAndExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAndExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class ExclusiveOrExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_exclusiveOrExpression;
      }
  
  	andExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(AndExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(AndExpressionContext,i);
  	    }
  	};
  
  	Caret = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Caret);
  	    } else {
  	        return this.getToken(CPP14Parser.Caret, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterExclusiveOrExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitExclusiveOrExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class InclusiveOrExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_inclusiveOrExpression;
      }
  
  	exclusiveOrExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(ExclusiveOrExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(ExclusiveOrExpressionContext,i);
  	    }
  	};
  
  	Or = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Or);
  	    } else {
  	        return this.getToken(CPP14Parser.Or, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterInclusiveOrExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitInclusiveOrExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class LogicalAndExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_logicalAndExpression;
      }
  
  	inclusiveOrExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(InclusiveOrExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(InclusiveOrExpressionContext,i);
  	    }
  	};
  
  	AndAnd = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.AndAnd);
  	    } else {
  	        return this.getToken(CPP14Parser.AndAnd, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLogicalAndExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLogicalAndExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class LogicalOrExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_logicalOrExpression;
      }
  
  	logicalAndExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(LogicalAndExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(LogicalAndExpressionContext,i);
  	    }
  	};
  
  	OrOr = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.OrOr);
  	    } else {
  	        return this.getToken(CPP14Parser.OrOr, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLogicalOrExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLogicalOrExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class ConditionalExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_conditionalExpression;
      }
  
  	logicalOrExpression() {
  	    return this.getTypedRuleContext(LogicalOrExpressionContext,0);
  	};
  
  	Question() {
  	    return this.getToken(CPP14Parser.Question, 0);
  	};
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	Colon() {
  	    return this.getToken(CPP14Parser.Colon, 0);
  	};
  
  	assignmentExpression() {
  	    return this.getTypedRuleContext(AssignmentExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterConditionalExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitConditionalExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class AssignmentExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_assignmentExpression;
      }
  
  	conditionalExpression() {
  	    return this.getTypedRuleContext(ConditionalExpressionContext,0);
  	};
  
  	logicalOrExpression() {
  	    return this.getTypedRuleContext(LogicalOrExpressionContext,0);
  	};
  
  	assignmentOperator() {
  	    return this.getTypedRuleContext(AssignmentOperatorContext,0);
  	};
  
  	initializerClause() {
  	    return this.getTypedRuleContext(InitializerClauseContext,0);
  	};
  
  	throwExpression() {
  	    return this.getTypedRuleContext(ThrowExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAssignmentExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAssignmentExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class AssignmentOperatorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_assignmentOperator;
      }
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	StarAssign() {
  	    return this.getToken(CPP14Parser.StarAssign, 0);
  	};
  
  	DivAssign() {
  	    return this.getToken(CPP14Parser.DivAssign, 0);
  	};
  
  	ModAssign() {
  	    return this.getToken(CPP14Parser.ModAssign, 0);
  	};
  
  	PlusAssign() {
  	    return this.getToken(CPP14Parser.PlusAssign, 0);
  	};
  
  	MinusAssign() {
  	    return this.getToken(CPP14Parser.MinusAssign, 0);
  	};
  
  	RightShiftAssign() {
  	    return this.getToken(CPP14Parser.RightShiftAssign, 0);
  	};
  
  	LeftShiftAssign() {
  	    return this.getToken(CPP14Parser.LeftShiftAssign, 0);
  	};
  
  	AndAssign() {
  	    return this.getToken(CPP14Parser.AndAssign, 0);
  	};
  
  	XorAssign() {
  	    return this.getToken(CPP14Parser.XorAssign, 0);
  	};
  
  	OrAssign() {
  	    return this.getToken(CPP14Parser.OrAssign, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAssignmentOperator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAssignmentOperator(this);
  		}
  	}
  
  
  }
  
  
  
  class ExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_expression;
      }
  
  	assignmentExpression = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(AssignmentExpressionContext);
  	    } else {
  	        return this.getTypedRuleContext(AssignmentExpressionContext,i);
  	    }
  	};
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class ConstantExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_constantExpression;
      }
  
  	conditionalExpression() {
  	    return this.getTypedRuleContext(ConditionalExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterConstantExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitConstantExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class StatementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_statement;
      }
  
  	labeledStatement() {
  	    return this.getTypedRuleContext(LabeledStatementContext,0);
  	};
  
  	expressionStatement() {
  	    return this.getTypedRuleContext(ExpressionStatementContext,0);
  	};
  
  	compoundStatement() {
  	    return this.getTypedRuleContext(CompoundStatementContext,0);
  	};
  
  	selectionStatement() {
  	    return this.getTypedRuleContext(SelectionStatementContext,0);
  	};
  
  	iterationStatement() {
  	    return this.getTypedRuleContext(IterationStatementContext,0);
  	};
  
  	jumpStatement() {
  	    return this.getTypedRuleContext(JumpStatementContext,0);
  	};
  
  	tryBlock() {
  	    return this.getTypedRuleContext(TryBlockContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	declarationStatement() {
  	    return this.getTypedRuleContext(DeclarationStatementContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterStatement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitStatement(this);
  		}
  	}
  
  
  }
  
  
  
  class LabeledStatementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_labeledStatement;
      }
  
  	Colon() {
  	    return this.getToken(CPP14Parser.Colon, 0);
  	};
  
  	statement() {
  	    return this.getTypedRuleContext(StatementContext,0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	Case() {
  	    return this.getToken(CPP14Parser.Case, 0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	Default() {
  	    return this.getToken(CPP14Parser.Default, 0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLabeledStatement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLabeledStatement(this);
  		}
  	}
  
  
  }
  
  
  
  class ExpressionStatementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_expressionStatement;
      }
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterExpressionStatement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitExpressionStatement(this);
  		}
  	}
  
  
  }
  
  
  
  class CompoundStatementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_compoundStatement;
      }
  
  	LeftBrace() {
  	    return this.getToken(CPP14Parser.LeftBrace, 0);
  	};
  
  	RightBrace() {
  	    return this.getToken(CPP14Parser.RightBrace, 0);
  	};
  
  	statementSeq() {
  	    return this.getTypedRuleContext(StatementSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterCompoundStatement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitCompoundStatement(this);
  		}
  	}
  
  
  }
  
  
  
  class StatementSeqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_statementSeq;
      }
  
  	statement = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(StatementContext);
  	    } else {
  	        return this.getTypedRuleContext(StatementContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterStatementSeq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitStatementSeq(this);
  		}
  	}
  
  
  }
  
  
  
  class SelectionStatementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_selectionStatement;
      }
  
  	If() {
  	    return this.getToken(CPP14Parser.If, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	condition() {
  	    return this.getTypedRuleContext(ConditionContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	statement = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(StatementContext);
  	    } else {
  	        return this.getTypedRuleContext(StatementContext,i);
  	    }
  	};
  
  	Else() {
  	    return this.getToken(CPP14Parser.Else, 0);
  	};
  
  	Switch() {
  	    return this.getToken(CPP14Parser.Switch, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterSelectionStatement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitSelectionStatement(this);
  		}
  	}
  
  
  }
  
  
  
  class ConditionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_condition;
      }
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	declSpecifierSeq() {
  	    return this.getTypedRuleContext(DeclSpecifierSeqContext,0);
  	};
  
  	declarator() {
  	    return this.getTypedRuleContext(DeclaratorContext,0);
  	};
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	initializerClause() {
  	    return this.getTypedRuleContext(InitializerClauseContext,0);
  	};
  
  	bracedInitList() {
  	    return this.getTypedRuleContext(BracedInitListContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterCondition(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitCondition(this);
  		}
  	}
  
  
  }
  
  
  
  class IterationStatementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_iterationStatement;
      }
  
  	While() {
  	    return this.getToken(CPP14Parser.While, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	condition() {
  	    return this.getTypedRuleContext(ConditionContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	statement() {
  	    return this.getTypedRuleContext(StatementContext,0);
  	};
  
  	Do() {
  	    return this.getToken(CPP14Parser.Do, 0);
  	};
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	For() {
  	    return this.getToken(CPP14Parser.For, 0);
  	};
  
  	forInitStatement() {
  	    return this.getTypedRuleContext(ForInitStatementContext,0);
  	};
  
  	forRangeDeclaration() {
  	    return this.getTypedRuleContext(ForRangeDeclarationContext,0);
  	};
  
  	Colon() {
  	    return this.getToken(CPP14Parser.Colon, 0);
  	};
  
  	forRangeInitializer() {
  	    return this.getTypedRuleContext(ForRangeInitializerContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterIterationStatement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitIterationStatement(this);
  		}
  	}
  
  
  }
  
  
  
  class ForInitStatementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_forInitStatement;
      }
  
  	expressionStatement() {
  	    return this.getTypedRuleContext(ExpressionStatementContext,0);
  	};
  
  	simpleDeclaration() {
  	    return this.getTypedRuleContext(SimpleDeclarationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterForInitStatement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitForInitStatement(this);
  		}
  	}
  
  
  }
  
  
  
  class ForRangeDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_forRangeDeclaration;
      }
  
  	declSpecifierSeq() {
  	    return this.getTypedRuleContext(DeclSpecifierSeqContext,0);
  	};
  
  	declarator() {
  	    return this.getTypedRuleContext(DeclaratorContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterForRangeDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitForRangeDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class ForRangeInitializerContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_forRangeInitializer;
      }
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	bracedInitList() {
  	    return this.getTypedRuleContext(BracedInitListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterForRangeInitializer(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitForRangeInitializer(this);
  		}
  	}
  
  
  }
  
  
  
  class JumpStatementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_jumpStatement;
      }
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	Break() {
  	    return this.getToken(CPP14Parser.Break, 0);
  	};
  
  	Continue() {
  	    return this.getToken(CPP14Parser.Continue, 0);
  	};
  
  	Return() {
  	    return this.getToken(CPP14Parser.Return, 0);
  	};
  
  	Goto() {
  	    return this.getToken(CPP14Parser.Goto, 0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	bracedInitList() {
  	    return this.getTypedRuleContext(BracedInitListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterJumpStatement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitJumpStatement(this);
  		}
  	}
  
  
  }
  
  
  
  class DeclarationStatementContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_declarationStatement;
      }
  
  	blockDeclaration() {
  	    return this.getTypedRuleContext(BlockDeclarationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDeclarationStatement(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDeclarationStatement(this);
  		}
  	}
  
  
  }
  
  
  
  class DeclarationseqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_declarationseq;
      }
  
  	declaration = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(DeclarationContext);
  	    } else {
  	        return this.getTypedRuleContext(DeclarationContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDeclarationseq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDeclarationseq(this);
  		}
  	}
  
  
  }
  
  
  
  class DeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_declaration;
      }
  
  	blockDeclaration() {
  	    return this.getTypedRuleContext(BlockDeclarationContext,0);
  	};
  
  	functionDefinition() {
  	    return this.getTypedRuleContext(FunctionDefinitionContext,0);
  	};
  
  	templateDeclaration() {
  	    return this.getTypedRuleContext(TemplateDeclarationContext,0);
  	};
  
  	explicitInstantiation() {
  	    return this.getTypedRuleContext(ExplicitInstantiationContext,0);
  	};
  
  	explicitSpecialization() {
  	    return this.getTypedRuleContext(ExplicitSpecializationContext,0);
  	};
  
  	linkageSpecification() {
  	    return this.getTypedRuleContext(LinkageSpecificationContext,0);
  	};
  
  	namespaceDefinition() {
  	    return this.getTypedRuleContext(NamespaceDefinitionContext,0);
  	};
  
  	emptyDeclaration() {
  	    return this.getTypedRuleContext(EmptyDeclarationContext,0);
  	};
  
  	attributeDeclaration() {
  	    return this.getTypedRuleContext(AttributeDeclarationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class BlockDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_blockDeclaration;
      }
  
  	simpleDeclaration() {
  	    return this.getTypedRuleContext(SimpleDeclarationContext,0);
  	};
  
  	asmDefinition() {
  	    return this.getTypedRuleContext(AsmDefinitionContext,0);
  	};
  
  	namespaceAliasDefinition() {
  	    return this.getTypedRuleContext(NamespaceAliasDefinitionContext,0);
  	};
  
  	usingDeclaration() {
  	    return this.getTypedRuleContext(UsingDeclarationContext,0);
  	};
  
  	usingDirective() {
  	    return this.getTypedRuleContext(UsingDirectiveContext,0);
  	};
  
  	staticAssertDeclaration() {
  	    return this.getTypedRuleContext(StaticAssertDeclarationContext,0);
  	};
  
  	aliasDeclaration() {
  	    return this.getTypedRuleContext(AliasDeclarationContext,0);
  	};
  
  	opaqueEnumDeclaration() {
  	    return this.getTypedRuleContext(OpaqueEnumDeclarationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterBlockDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitBlockDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class AliasDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_aliasDeclaration;
      }
  
  	Using() {
  	    return this.getToken(CPP14Parser.Using, 0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	theTypeId() {
  	    return this.getTypedRuleContext(TheTypeIdContext,0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAliasDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAliasDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class SimpleDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_simpleDeclaration;
      }
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	declSpecifierSeq() {
  	    return this.getTypedRuleContext(DeclSpecifierSeqContext,0);
  	};
  
  	initDeclaratorList() {
  	    return this.getTypedRuleContext(InitDeclaratorListContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterSimpleDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitSimpleDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class StaticAssertDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_staticAssertDeclaration;
      }
  
  	Static_assert() {
  	    return this.getToken(CPP14Parser.Static_assert, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	Comma() {
  	    return this.getToken(CPP14Parser.Comma, 0);
  	};
  
  	StringLiteral() {
  	    return this.getToken(CPP14Parser.StringLiteral, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterStaticAssertDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitStaticAssertDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class EmptyDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_emptyDeclaration;
      }
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEmptyDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEmptyDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class AttributeDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_attributeDeclaration;
      }
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAttributeDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAttributeDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class DeclSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_declSpecifier;
      }
  
  	storageClassSpecifier() {
  	    return this.getTypedRuleContext(StorageClassSpecifierContext,0);
  	};
  
  	typeSpecifier() {
  	    return this.getTypedRuleContext(TypeSpecifierContext,0);
  	};
  
  	functionSpecifier() {
  	    return this.getTypedRuleContext(FunctionSpecifierContext,0);
  	};
  
  	Friend() {
  	    return this.getToken(CPP14Parser.Friend, 0);
  	};
  
  	Typedef() {
  	    return this.getToken(CPP14Parser.Typedef, 0);
  	};
  
  	Constexpr() {
  	    return this.getToken(CPP14Parser.Constexpr, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDeclSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDeclSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class DeclSpecifierSeqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_declSpecifierSeq;
      }
  
  	declSpecifier = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(DeclSpecifierContext);
  	    } else {
  	        return this.getTypedRuleContext(DeclSpecifierContext,i);
  	    }
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDeclSpecifierSeq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDeclSpecifierSeq(this);
  		}
  	}
  
  
  }
  
  
  
  class StorageClassSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_storageClassSpecifier;
      }
  
  	Register() {
  	    return this.getToken(CPP14Parser.Register, 0);
  	};
  
  	Static() {
  	    return this.getToken(CPP14Parser.Static, 0);
  	};
  
  	Thread_local() {
  	    return this.getToken(CPP14Parser.Thread_local, 0);
  	};
  
  	Extern() {
  	    return this.getToken(CPP14Parser.Extern, 0);
  	};
  
  	Mutable() {
  	    return this.getToken(CPP14Parser.Mutable, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterStorageClassSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitStorageClassSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class FunctionSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_functionSpecifier;
      }
  
  	Inline() {
  	    return this.getToken(CPP14Parser.Inline, 0);
  	};
  
  	Virtual() {
  	    return this.getToken(CPP14Parser.Virtual, 0);
  	};
  
  	Explicit() {
  	    return this.getToken(CPP14Parser.Explicit, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterFunctionSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitFunctionSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class TypedefNameContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_typedefName;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTypedefName(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTypedefName(this);
  		}
  	}
  
  
  }
  
  
  
  class TypeSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_typeSpecifier;
      }
  
  	trailingTypeSpecifier() {
  	    return this.getTypedRuleContext(TrailingTypeSpecifierContext,0);
  	};
  
  	classSpecifier() {
  	    return this.getTypedRuleContext(ClassSpecifierContext,0);
  	};
  
  	enumSpecifier() {
  	    return this.getTypedRuleContext(EnumSpecifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTypeSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTypeSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class TrailingTypeSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_trailingTypeSpecifier;
      }
  
  	simpleTypeSpecifier() {
  	    return this.getTypedRuleContext(SimpleTypeSpecifierContext,0);
  	};
  
  	elaboratedTypeSpecifier() {
  	    return this.getTypedRuleContext(ElaboratedTypeSpecifierContext,0);
  	};
  
  	typeNameSpecifier() {
  	    return this.getTypedRuleContext(TypeNameSpecifierContext,0);
  	};
  
  	cvQualifier() {
  	    return this.getTypedRuleContext(CvQualifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTrailingTypeSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTrailingTypeSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class TypeSpecifierSeqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_typeSpecifierSeq;
      }
  
  	typeSpecifier = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(TypeSpecifierContext);
  	    } else {
  	        return this.getTypedRuleContext(TypeSpecifierContext,i);
  	    }
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTypeSpecifierSeq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTypeSpecifierSeq(this);
  		}
  	}
  
  
  }
  
  
  
  class TrailingTypeSpecifierSeqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_trailingTypeSpecifierSeq;
      }
  
  	trailingTypeSpecifier = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(TrailingTypeSpecifierContext);
  	    } else {
  	        return this.getTypedRuleContext(TrailingTypeSpecifierContext,i);
  	    }
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTrailingTypeSpecifierSeq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTrailingTypeSpecifierSeq(this);
  		}
  	}
  
  
  }
  
  
  
  class SimpleTypeLengthModifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_simpleTypeLengthModifier;
      }
  
  	Short() {
  	    return this.getToken(CPP14Parser.Short, 0);
  	};
  
  	Long() {
  	    return this.getToken(CPP14Parser.Long, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterSimpleTypeLengthModifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitSimpleTypeLengthModifier(this);
  		}
  	}
  
  
  }
  
  
  
  class SimpleTypeSignednessModifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_simpleTypeSignednessModifier;
      }
  
  	Unsigned() {
  	    return this.getToken(CPP14Parser.Unsigned, 0);
  	};
  
  	Signed() {
  	    return this.getToken(CPP14Parser.Signed, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterSimpleTypeSignednessModifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitSimpleTypeSignednessModifier(this);
  		}
  	}
  
  
  }
  
  
  
  class SimpleTypeSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_simpleTypeSpecifier;
      }
  
  	theTypeName() {
  	    return this.getTypedRuleContext(TheTypeNameContext,0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	simpleTemplateId() {
  	    return this.getTypedRuleContext(SimpleTemplateIdContext,0);
  	};
  
  	simpleTypeSignednessModifier() {
  	    return this.getTypedRuleContext(SimpleTypeSignednessModifierContext,0);
  	};
  
  	simpleTypeLengthModifier = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(SimpleTypeLengthModifierContext);
  	    } else {
  	        return this.getTypedRuleContext(SimpleTypeLengthModifierContext,i);
  	    }
  	};
  
  	Char() {
  	    return this.getToken(CPP14Parser.Char, 0);
  	};
  
  	Char16() {
  	    return this.getToken(CPP14Parser.Char16, 0);
  	};
  
  	Char32() {
  	    return this.getToken(CPP14Parser.Char32, 0);
  	};
  
  	Wchar() {
  	    return this.getToken(CPP14Parser.Wchar, 0);
  	};
  
  	Bool() {
  	    return this.getToken(CPP14Parser.Bool, 0);
  	};
  
  	Int() {
  	    return this.getToken(CPP14Parser.Int, 0);
  	};
  
  	Float() {
  	    return this.getToken(CPP14Parser.Float, 0);
  	};
  
  	Double() {
  	    return this.getToken(CPP14Parser.Double, 0);
  	};
  
  	Void() {
  	    return this.getToken(CPP14Parser.Void, 0);
  	};
  
  	Auto() {
  	    return this.getToken(CPP14Parser.Auto, 0);
  	};
  
  	decltypeSpecifier() {
  	    return this.getTypedRuleContext(DecltypeSpecifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterSimpleTypeSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitSimpleTypeSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class TheTypeNameContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_theTypeName;
      }
  
  	className() {
  	    return this.getTypedRuleContext(ClassNameContext,0);
  	};
  
  	enumName() {
  	    return this.getTypedRuleContext(EnumNameContext,0);
  	};
  
  	typedefName() {
  	    return this.getTypedRuleContext(TypedefNameContext,0);
  	};
  
  	simpleTemplateId() {
  	    return this.getTypedRuleContext(SimpleTemplateIdContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTheTypeName(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTheTypeName(this);
  		}
  	}
  
  
  }
  
  
  
  class DecltypeSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_decltypeSpecifier;
      }
  
  	Decltype() {
  	    return this.getToken(CPP14Parser.Decltype, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	expression() {
  	    return this.getTypedRuleContext(ExpressionContext,0);
  	};
  
  	Auto() {
  	    return this.getToken(CPP14Parser.Auto, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDecltypeSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDecltypeSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class ElaboratedTypeSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_elaboratedTypeSpecifier;
      }
  
  	classKey() {
  	    return this.getTypedRuleContext(ClassKeyContext,0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	simpleTemplateId() {
  	    return this.getTypedRuleContext(SimpleTemplateIdContext,0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	Enum() {
  	    return this.getToken(CPP14Parser.Enum, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterElaboratedTypeSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitElaboratedTypeSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class EnumNameContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_enumName;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEnumName(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEnumName(this);
  		}
  	}
  
  
  }
  
  
  
  class EnumSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_enumSpecifier;
      }
  
  	enumHead() {
  	    return this.getTypedRuleContext(EnumHeadContext,0);
  	};
  
  	LeftBrace() {
  	    return this.getToken(CPP14Parser.LeftBrace, 0);
  	};
  
  	RightBrace() {
  	    return this.getToken(CPP14Parser.RightBrace, 0);
  	};
  
  	enumeratorList() {
  	    return this.getTypedRuleContext(EnumeratorListContext,0);
  	};
  
  	Comma() {
  	    return this.getToken(CPP14Parser.Comma, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEnumSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEnumSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class EnumHeadContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_enumHead;
      }
  
  	enumkey() {
  	    return this.getTypedRuleContext(EnumkeyContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enumbase() {
  	    return this.getTypedRuleContext(EnumbaseContext,0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEnumHead(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEnumHead(this);
  		}
  	}
  
  
  }
  
  
  
  class OpaqueEnumDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_opaqueEnumDeclaration;
      }
  
  	enumkey() {
  	    return this.getTypedRuleContext(EnumkeyContext,0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enumbase() {
  	    return this.getTypedRuleContext(EnumbaseContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterOpaqueEnumDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitOpaqueEnumDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class EnumkeyContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_enumkey;
      }
  
  	Enum() {
  	    return this.getToken(CPP14Parser.Enum, 0);
  	};
  
  	Class() {
  	    return this.getToken(CPP14Parser.Class, 0);
  	};
  
  	Struct() {
  	    return this.getToken(CPP14Parser.Struct, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEnumkey(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEnumkey(this);
  		}
  	}
  
  
  }
  
  
  
  class EnumbaseContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_enumbase;
      }
  
  	Colon() {
  	    return this.getToken(CPP14Parser.Colon, 0);
  	};
  
  	typeSpecifierSeq() {
  	    return this.getTypedRuleContext(TypeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEnumbase(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEnumbase(this);
  		}
  	}
  
  
  }
  
  
  
  class EnumeratorListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_enumeratorList;
      }
  
  	enumeratorDefinition = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(EnumeratorDefinitionContext);
  	    } else {
  	        return this.getTypedRuleContext(EnumeratorDefinitionContext,i);
  	    }
  	};
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEnumeratorList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEnumeratorList(this);
  		}
  	}
  
  
  }
  
  
  
  class EnumeratorDefinitionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_enumeratorDefinition;
      }
  
  	enumerator() {
  	    return this.getTypedRuleContext(EnumeratorContext,0);
  	};
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEnumeratorDefinition(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEnumeratorDefinition(this);
  		}
  	}
  
  
  }
  
  
  
  class EnumeratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_enumerator;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterEnumerator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitEnumerator(this);
  		}
  	}
  
  
  }
  
  
  
  class NamespaceNameContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_namespaceName;
      }
  
  	originalNamespaceName() {
  	    return this.getTypedRuleContext(OriginalNamespaceNameContext,0);
  	};
  
  	namespaceAlias() {
  	    return this.getTypedRuleContext(NamespaceAliasContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNamespaceName(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNamespaceName(this);
  		}
  	}
  
  
  }
  
  
  
  class OriginalNamespaceNameContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_originalNamespaceName;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterOriginalNamespaceName(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitOriginalNamespaceName(this);
  		}
  	}
  
  
  }
  
  
  
  class NamespaceDefinitionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_namespaceDefinition;
          this.namespaceBody = null; // DeclarationseqContext
      }
  
  	Namespace() {
  	    return this.getToken(CPP14Parser.Namespace, 0);
  	};
  
  	LeftBrace() {
  	    return this.getToken(CPP14Parser.LeftBrace, 0);
  	};
  
  	RightBrace() {
  	    return this.getToken(CPP14Parser.RightBrace, 0);
  	};
  
  	Inline() {
  	    return this.getToken(CPP14Parser.Inline, 0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	originalNamespaceName() {
  	    return this.getTypedRuleContext(OriginalNamespaceNameContext,0);
  	};
  
  	declarationseq() {
  	    return this.getTypedRuleContext(DeclarationseqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNamespaceDefinition(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNamespaceDefinition(this);
  		}
  	}
  
  
  }
  
  
  
  class NamespaceAliasContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_namespaceAlias;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNamespaceAlias(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNamespaceAlias(this);
  		}
  	}
  
  
  }
  
  
  
  class NamespaceAliasDefinitionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_namespaceAliasDefinition;
      }
  
  	Namespace() {
  	    return this.getToken(CPP14Parser.Namespace, 0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	qualifiednamespacespecifier() {
  	    return this.getTypedRuleContext(QualifiednamespacespecifierContext,0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNamespaceAliasDefinition(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNamespaceAliasDefinition(this);
  		}
  	}
  
  
  }
  
  
  
  class QualifiednamespacespecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_qualifiednamespacespecifier;
      }
  
  	namespaceName() {
  	    return this.getTypedRuleContext(NamespaceNameContext,0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterQualifiednamespacespecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitQualifiednamespacespecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class UsingDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_usingDeclaration;
      }
  
  	Using() {
  	    return this.getToken(CPP14Parser.Using, 0);
  	};
  
  	unqualifiedId() {
  	    return this.getTypedRuleContext(UnqualifiedIdContext,0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	Doublecolon() {
  	    return this.getToken(CPP14Parser.Doublecolon, 0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	Typename_() {
  	    return this.getToken(CPP14Parser.Typename_, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterUsingDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitUsingDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class UsingDirectiveContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_usingDirective;
      }
  
  	Using() {
  	    return this.getToken(CPP14Parser.Using, 0);
  	};
  
  	Namespace() {
  	    return this.getToken(CPP14Parser.Namespace, 0);
  	};
  
  	namespaceName() {
  	    return this.getTypedRuleContext(NamespaceNameContext,0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterUsingDirective(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitUsingDirective(this);
  		}
  	}
  
  
  }
  
  
  
  class AsmDefinitionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_asmDefinition;
      }
  
  	Asm() {
  	    return this.getToken(CPP14Parser.Asm, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	StringLiteral() {
  	    return this.getToken(CPP14Parser.StringLiteral, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAsmDefinition(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAsmDefinition(this);
  		}
  	}
  
  
  }
  
  
  
  class LinkageSpecificationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_linkageSpecification;
      }
  
  	Extern() {
  	    return this.getToken(CPP14Parser.Extern, 0);
  	};
  
  	StringLiteral() {
  	    return this.getToken(CPP14Parser.StringLiteral, 0);
  	};
  
  	LeftBrace() {
  	    return this.getToken(CPP14Parser.LeftBrace, 0);
  	};
  
  	RightBrace() {
  	    return this.getToken(CPP14Parser.RightBrace, 0);
  	};
  
  	declaration() {
  	    return this.getTypedRuleContext(DeclarationContext,0);
  	};
  
  	declarationseq() {
  	    return this.getTypedRuleContext(DeclarationseqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLinkageSpecification(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLinkageSpecification(this);
  		}
  	}
  
  
  }
  
  
  
  class AttributeSpecifierSeqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_attributeSpecifierSeq;
      }
  
  	attributeSpecifier = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(AttributeSpecifierContext);
  	    } else {
  	        return this.getTypedRuleContext(AttributeSpecifierContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAttributeSpecifierSeq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAttributeSpecifierSeq(this);
  		}
  	}
  
  
  }
  
  
  
  class AttributeSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_attributeSpecifier;
      }
  
  	LeftBracket = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.LeftBracket);
  	    } else {
  	        return this.getToken(CPP14Parser.LeftBracket, i);
  	    }
  	};
  
  
  	RightBracket = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.RightBracket);
  	    } else {
  	        return this.getToken(CPP14Parser.RightBracket, i);
  	    }
  	};
  
  
  	attributeList() {
  	    return this.getTypedRuleContext(AttributeListContext,0);
  	};
  
  	alignmentspecifier() {
  	    return this.getTypedRuleContext(AlignmentspecifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAttributeSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAttributeSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class AlignmentspecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_alignmentspecifier;
      }
  
  	Alignas() {
  	    return this.getToken(CPP14Parser.Alignas, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	theTypeId() {
  	    return this.getTypedRuleContext(TheTypeIdContext,0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	Ellipsis() {
  	    return this.getToken(CPP14Parser.Ellipsis, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAlignmentspecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAlignmentspecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class AttributeListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_attributeList;
      }
  
  	attribute = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(AttributeContext);
  	    } else {
  	        return this.getTypedRuleContext(AttributeContext,i);
  	    }
  	};
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	Ellipsis() {
  	    return this.getToken(CPP14Parser.Ellipsis, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAttributeList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAttributeList(this);
  		}
  	}
  
  
  }
  
  
  
  class AttributeContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_attribute;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	attributeNamespace() {
  	    return this.getTypedRuleContext(AttributeNamespaceContext,0);
  	};
  
  	Doublecolon() {
  	    return this.getToken(CPP14Parser.Doublecolon, 0);
  	};
  
  	attributeArgumentClause() {
  	    return this.getTypedRuleContext(AttributeArgumentClauseContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAttribute(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAttribute(this);
  		}
  	}
  
  
  }
  
  
  
  class AttributeNamespaceContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_attributeNamespace;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAttributeNamespace(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAttributeNamespace(this);
  		}
  	}
  
  
  }
  
  
  
  class AttributeArgumentClauseContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_attributeArgumentClause;
      }
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	balancedTokenSeq() {
  	    return this.getTypedRuleContext(BalancedTokenSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAttributeArgumentClause(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAttributeArgumentClause(this);
  		}
  	}
  
  
  }
  
  
  
  class BalancedTokenSeqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_balancedTokenSeq;
      }
  
  	balancedtoken = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(BalancedtokenContext);
  	    } else {
  	        return this.getTypedRuleContext(BalancedtokenContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterBalancedTokenSeq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitBalancedTokenSeq(this);
  		}
  	}
  
  
  }
  
  
  
  class BalancedtokenContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_balancedtoken;
      }
  
  	LeftParen = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.LeftParen);
  	    } else {
  	        return this.getToken(CPP14Parser.LeftParen, i);
  	    }
  	};
  
  
  	balancedTokenSeq() {
  	    return this.getTypedRuleContext(BalancedTokenSeqContext,0);
  	};
  
  	RightParen = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.RightParen);
  	    } else {
  	        return this.getToken(CPP14Parser.RightParen, i);
  	    }
  	};
  
  
  	LeftBracket = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.LeftBracket);
  	    } else {
  	        return this.getToken(CPP14Parser.LeftBracket, i);
  	    }
  	};
  
  
  	RightBracket = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.RightBracket);
  	    } else {
  	        return this.getToken(CPP14Parser.RightBracket, i);
  	    }
  	};
  
  
  	LeftBrace = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.LeftBrace);
  	    } else {
  	        return this.getToken(CPP14Parser.LeftBrace, i);
  	    }
  	};
  
  
  	RightBrace = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.RightBrace);
  	    } else {
  	        return this.getToken(CPP14Parser.RightBrace, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterBalancedtoken(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitBalancedtoken(this);
  		}
  	}
  
  
  }
  
  
  
  class InitDeclaratorListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_initDeclaratorList;
      }
  
  	initDeclarator = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(InitDeclaratorContext);
  	    } else {
  	        return this.getTypedRuleContext(InitDeclaratorContext,i);
  	    }
  	};
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterInitDeclaratorList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitInitDeclaratorList(this);
  		}
  	}
  
  
  }
  
  
  
  class InitDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_initDeclarator;
      }
  
  	declarator() {
  	    return this.getTypedRuleContext(DeclaratorContext,0);
  	};
  
  	initializer() {
  	    return this.getTypedRuleContext(InitializerContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterInitDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitInitDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class DeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_declarator;
      }
  
  	pointerDeclarator() {
  	    return this.getTypedRuleContext(PointerDeclaratorContext,0);
  	};
  
  	noPointerDeclarator() {
  	    return this.getTypedRuleContext(NoPointerDeclaratorContext,0);
  	};
  
  	parametersAndQualifiers() {
  	    return this.getTypedRuleContext(ParametersAndQualifiersContext,0);
  	};
  
  	trailingReturnType() {
  	    return this.getTypedRuleContext(TrailingReturnTypeContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class PointerDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_pointerDeclarator;
      }
  
  	noPointerDeclarator() {
  	    return this.getTypedRuleContext(NoPointerDeclaratorContext,0);
  	};
  
  	pointerOperator = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(PointerOperatorContext);
  	    } else {
  	        return this.getTypedRuleContext(PointerOperatorContext,i);
  	    }
  	};
  
  	Const = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Const);
  	    } else {
  	        return this.getToken(CPP14Parser.Const, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterPointerDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitPointerDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class NoPointerDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_noPointerDeclarator;
      }
  
  	declaratorid() {
  	    return this.getTypedRuleContext(DeclaratoridContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	pointerDeclarator() {
  	    return this.getTypedRuleContext(PointerDeclaratorContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	noPointerDeclarator() {
  	    return this.getTypedRuleContext(NoPointerDeclaratorContext,0);
  	};
  
  	parametersAndQualifiers() {
  	    return this.getTypedRuleContext(ParametersAndQualifiersContext,0);
  	};
  
  	LeftBracket() {
  	    return this.getToken(CPP14Parser.LeftBracket, 0);
  	};
  
  	RightBracket() {
  	    return this.getToken(CPP14Parser.RightBracket, 0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNoPointerDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNoPointerDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class ParametersAndQualifiersContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_parametersAndQualifiers;
      }
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	parameterDeclarationClause() {
  	    return this.getTypedRuleContext(ParameterDeclarationClauseContext,0);
  	};
  
  	cvqualifierseq() {
  	    return this.getTypedRuleContext(CvqualifierseqContext,0);
  	};
  
  	refqualifier() {
  	    return this.getTypedRuleContext(RefqualifierContext,0);
  	};
  
  	exceptionSpecification() {
  	    return this.getTypedRuleContext(ExceptionSpecificationContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterParametersAndQualifiers(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitParametersAndQualifiers(this);
  		}
  	}
  
  
  }
  
  
  
  class TrailingReturnTypeContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_trailingReturnType;
      }
  
  	Arrow() {
  	    return this.getToken(CPP14Parser.Arrow, 0);
  	};
  
  	trailingTypeSpecifierSeq() {
  	    return this.getTypedRuleContext(TrailingTypeSpecifierSeqContext,0);
  	};
  
  	abstractDeclarator() {
  	    return this.getTypedRuleContext(AbstractDeclaratorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTrailingReturnType(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTrailingReturnType(this);
  		}
  	}
  
  
  }
  
  
  
  class PointerOperatorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_pointerOperator;
      }
  
  	And() {
  	    return this.getToken(CPP14Parser.And, 0);
  	};
  
  	AndAnd() {
  	    return this.getToken(CPP14Parser.AndAnd, 0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	Star() {
  	    return this.getToken(CPP14Parser.Star, 0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	cvqualifierseq() {
  	    return this.getTypedRuleContext(CvqualifierseqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterPointerOperator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitPointerOperator(this);
  		}
  	}
  
  
  }
  
  
  
  class CvqualifierseqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_cvqualifierseq;
      }
  
  	cvQualifier = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(CvQualifierContext);
  	    } else {
  	        return this.getTypedRuleContext(CvQualifierContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterCvqualifierseq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitCvqualifierseq(this);
  		}
  	}
  
  
  }
  
  
  
  class CvQualifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_cvQualifier;
      }
  
  	Const() {
  	    return this.getToken(CPP14Parser.Const, 0);
  	};
  
  	Volatile() {
  	    return this.getToken(CPP14Parser.Volatile, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterCvQualifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitCvQualifier(this);
  		}
  	}
  
  
  }
  
  
  
  class RefqualifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_refqualifier;
      }
  
  	And() {
  	    return this.getToken(CPP14Parser.And, 0);
  	};
  
  	AndAnd() {
  	    return this.getToken(CPP14Parser.AndAnd, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterRefqualifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitRefqualifier(this);
  		}
  	}
  
  
  }
  
  
  
  class DeclaratoridContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_declaratorid;
      }
  
  	idExpression() {
  	    return this.getTypedRuleContext(IdExpressionContext,0);
  	};
  
  	Ellipsis() {
  	    return this.getToken(CPP14Parser.Ellipsis, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDeclaratorid(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDeclaratorid(this);
  		}
  	}
  
  
  }
  
  
  
  class TheTypeIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_theTypeId;
      }
  
  	typeSpecifierSeq() {
  	    return this.getTypedRuleContext(TypeSpecifierSeqContext,0);
  	};
  
  	abstractDeclarator() {
  	    return this.getTypedRuleContext(AbstractDeclaratorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTheTypeId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTheTypeId(this);
  		}
  	}
  
  
  }
  
  
  
  class AbstractDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_abstractDeclarator;
      }
  
  	pointerAbstractDeclarator() {
  	    return this.getTypedRuleContext(PointerAbstractDeclaratorContext,0);
  	};
  
  	parametersAndQualifiers() {
  	    return this.getTypedRuleContext(ParametersAndQualifiersContext,0);
  	};
  
  	trailingReturnType() {
  	    return this.getTypedRuleContext(TrailingReturnTypeContext,0);
  	};
  
  	noPointerAbstractDeclarator() {
  	    return this.getTypedRuleContext(NoPointerAbstractDeclaratorContext,0);
  	};
  
  	abstractPackDeclarator() {
  	    return this.getTypedRuleContext(AbstractPackDeclaratorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAbstractDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAbstractDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class PointerAbstractDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_pointerAbstractDeclarator;
      }
  
  	noPointerAbstractDeclarator() {
  	    return this.getTypedRuleContext(NoPointerAbstractDeclaratorContext,0);
  	};
  
  	pointerOperator = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(PointerOperatorContext);
  	    } else {
  	        return this.getTypedRuleContext(PointerOperatorContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterPointerAbstractDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitPointerAbstractDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class NoPointerAbstractDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_noPointerAbstractDeclarator;
      }
  
  	parametersAndQualifiers() {
  	    return this.getTypedRuleContext(ParametersAndQualifiersContext,0);
  	};
  
  	LeftBracket() {
  	    return this.getToken(CPP14Parser.LeftBracket, 0);
  	};
  
  	RightBracket() {
  	    return this.getToken(CPP14Parser.RightBracket, 0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	pointerAbstractDeclarator() {
  	    return this.getTypedRuleContext(PointerAbstractDeclaratorContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	noPointerAbstractDeclarator = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(NoPointerAbstractDeclaratorContext);
  	    } else {
  	        return this.getTypedRuleContext(NoPointerAbstractDeclaratorContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNoPointerAbstractDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNoPointerAbstractDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class AbstractPackDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_abstractPackDeclarator;
      }
  
  	noPointerAbstractPackDeclarator() {
  	    return this.getTypedRuleContext(NoPointerAbstractPackDeclaratorContext,0);
  	};
  
  	pointerOperator = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(PointerOperatorContext);
  	    } else {
  	        return this.getTypedRuleContext(PointerOperatorContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAbstractPackDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAbstractPackDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class NoPointerAbstractPackDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_noPointerAbstractPackDeclarator;
      }
  
  	Ellipsis() {
  	    return this.getToken(CPP14Parser.Ellipsis, 0);
  	};
  
  	noPointerAbstractPackDeclarator() {
  	    return this.getTypedRuleContext(NoPointerAbstractPackDeclaratorContext,0);
  	};
  
  	parametersAndQualifiers() {
  	    return this.getTypedRuleContext(ParametersAndQualifiersContext,0);
  	};
  
  	LeftBracket() {
  	    return this.getToken(CPP14Parser.LeftBracket, 0);
  	};
  
  	RightBracket() {
  	    return this.getToken(CPP14Parser.RightBracket, 0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNoPointerAbstractPackDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNoPointerAbstractPackDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class ParameterDeclarationClauseContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_parameterDeclarationClause;
      }
  
  	parameterDeclarationList() {
  	    return this.getTypedRuleContext(ParameterDeclarationListContext,0);
  	};
  
  	Ellipsis() {
  	    return this.getToken(CPP14Parser.Ellipsis, 0);
  	};
  
  	Comma() {
  	    return this.getToken(CPP14Parser.Comma, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterParameterDeclarationClause(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitParameterDeclarationClause(this);
  		}
  	}
  
  
  }
  
  
  
  class ParameterDeclarationListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_parameterDeclarationList;
      }
  
  	parameterDeclaration = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(ParameterDeclarationContext);
  	    } else {
  	        return this.getTypedRuleContext(ParameterDeclarationContext,i);
  	    }
  	};
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterParameterDeclarationList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitParameterDeclarationList(this);
  		}
  	}
  
  
  }
  
  
  
  class ParameterDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_parameterDeclaration;
      }
  
  	declSpecifierSeq() {
  	    return this.getTypedRuleContext(DeclSpecifierSeqContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	declarator() {
  	    return this.getTypedRuleContext(DeclaratorContext,0);
  	};
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	initializerClause() {
  	    return this.getTypedRuleContext(InitializerClauseContext,0);
  	};
  
  	abstractDeclarator() {
  	    return this.getTypedRuleContext(AbstractDeclaratorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterParameterDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitParameterDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class FunctionDefinitionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_functionDefinition;
      }
  
  	declarator() {
  	    return this.getTypedRuleContext(DeclaratorContext,0);
  	};
  
  	functionBody() {
  	    return this.getTypedRuleContext(FunctionBodyContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	declSpecifierSeq() {
  	    return this.getTypedRuleContext(DeclSpecifierSeqContext,0);
  	};
  
  	virtualSpecifierSeq() {
  	    return this.getTypedRuleContext(VirtualSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterFunctionDefinition(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitFunctionDefinition(this);
  		}
  	}
  
  
  }
  
  
  
  class FunctionBodyContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_functionBody;
      }
  
  	compoundStatement() {
  	    return this.getTypedRuleContext(CompoundStatementContext,0);
  	};
  
  	constructorInitializer() {
  	    return this.getTypedRuleContext(ConstructorInitializerContext,0);
  	};
  
  	functionTryBlock() {
  	    return this.getTypedRuleContext(FunctionTryBlockContext,0);
  	};
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	Default() {
  	    return this.getToken(CPP14Parser.Default, 0);
  	};
  
  	Delete() {
  	    return this.getToken(CPP14Parser.Delete, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterFunctionBody(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitFunctionBody(this);
  		}
  	}
  
  
  }
  
  
  
  class InitializerContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_initializer;
      }
  
  	braceOrEqualInitializer() {
  	    return this.getTypedRuleContext(BraceOrEqualInitializerContext,0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	expressionList() {
  	    return this.getTypedRuleContext(ExpressionListContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterInitializer(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitInitializer(this);
  		}
  	}
  
  
  }
  
  
  
  class BraceOrEqualInitializerContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_braceOrEqualInitializer;
      }
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	initializerClause() {
  	    return this.getTypedRuleContext(InitializerClauseContext,0);
  	};
  
  	bracedInitList() {
  	    return this.getTypedRuleContext(BracedInitListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterBraceOrEqualInitializer(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitBraceOrEqualInitializer(this);
  		}
  	}
  
  
  }
  
  
  
  class InitializerClauseContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_initializerClause;
      }
  
  	assignmentExpression() {
  	    return this.getTypedRuleContext(AssignmentExpressionContext,0);
  	};
  
  	bracedInitList() {
  	    return this.getTypedRuleContext(BracedInitListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterInitializerClause(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitInitializerClause(this);
  		}
  	}
  
  
  }
  
  
  
  class InitializerListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_initializerList;
      }
  
  	initializerClause = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(InitializerClauseContext);
  	    } else {
  	        return this.getTypedRuleContext(InitializerClauseContext,i);
  	    }
  	};
  
  	Ellipsis = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Ellipsis);
  	    } else {
  	        return this.getToken(CPP14Parser.Ellipsis, i);
  	    }
  	};
  
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterInitializerList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitInitializerList(this);
  		}
  	}
  
  
  }
  
  
  
  class BracedInitListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_bracedInitList;
      }
  
  	LeftBrace() {
  	    return this.getToken(CPP14Parser.LeftBrace, 0);
  	};
  
  	RightBrace() {
  	    return this.getToken(CPP14Parser.RightBrace, 0);
  	};
  
  	initializerList() {
  	    return this.getTypedRuleContext(InitializerListContext,0);
  	};
  
  	Comma() {
  	    return this.getToken(CPP14Parser.Comma, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterBracedInitList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitBracedInitList(this);
  		}
  	}
  
  
  }
  
  
  
  class ClassNameContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_className;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	simpleTemplateId() {
  	    return this.getTypedRuleContext(SimpleTemplateIdContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterClassName(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitClassName(this);
  		}
  	}
  
  
  }
  
  
  
  class ClassSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_classSpecifier;
      }
  
  	classHead() {
  	    return this.getTypedRuleContext(ClassHeadContext,0);
  	};
  
  	LeftBrace() {
  	    return this.getToken(CPP14Parser.LeftBrace, 0);
  	};
  
  	RightBrace() {
  	    return this.getToken(CPP14Parser.RightBrace, 0);
  	};
  
  	memberSpecification() {
  	    return this.getTypedRuleContext(MemberSpecificationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterClassSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitClassSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class ClassHeadContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_classHead;
      }
  
  	classKey() {
  	    return this.getTypedRuleContext(ClassKeyContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	classHeadName() {
  	    return this.getTypedRuleContext(ClassHeadNameContext,0);
  	};
  
  	baseClause() {
  	    return this.getTypedRuleContext(BaseClauseContext,0);
  	};
  
  	classVirtSpecifier() {
  	    return this.getTypedRuleContext(ClassVirtSpecifierContext,0);
  	};
  
  	Union() {
  	    return this.getToken(CPP14Parser.Union, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterClassHead(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitClassHead(this);
  		}
  	}
  
  
  }
  
  
  
  class ClassHeadNameContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_classHeadName;
      }
  
  	className() {
  	    return this.getTypedRuleContext(ClassNameContext,0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterClassHeadName(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitClassHeadName(this);
  		}
  	}
  
  
  }
  
  
  
  class ClassVirtSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_classVirtSpecifier;
      }
  
  	Final() {
  	    return this.getToken(CPP14Parser.Final, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterClassVirtSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitClassVirtSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class ClassKeyContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_classKey;
      }
  
  	Class() {
  	    return this.getToken(CPP14Parser.Class, 0);
  	};
  
  	Struct() {
  	    return this.getToken(CPP14Parser.Struct, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterClassKey(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitClassKey(this);
  		}
  	}
  
  
  }
  
  
  
  class MemberSpecificationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_memberSpecification;
      }
  
  	memberdeclaration = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(MemberdeclarationContext);
  	    } else {
  	        return this.getTypedRuleContext(MemberdeclarationContext,i);
  	    }
  	};
  
  	accessSpecifier = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(AccessSpecifierContext);
  	    } else {
  	        return this.getTypedRuleContext(AccessSpecifierContext,i);
  	    }
  	};
  
  	Colon = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Colon);
  	    } else {
  	        return this.getToken(CPP14Parser.Colon, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterMemberSpecification(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitMemberSpecification(this);
  		}
  	}
  
  
  }
  
  
  
  class MemberdeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_memberdeclaration;
      }
  
  	Semi() {
  	    return this.getToken(CPP14Parser.Semi, 0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	declSpecifierSeq() {
  	    return this.getTypedRuleContext(DeclSpecifierSeqContext,0);
  	};
  
  	memberDeclaratorList() {
  	    return this.getTypedRuleContext(MemberDeclaratorListContext,0);
  	};
  
  	functionDefinition() {
  	    return this.getTypedRuleContext(FunctionDefinitionContext,0);
  	};
  
  	usingDeclaration() {
  	    return this.getTypedRuleContext(UsingDeclarationContext,0);
  	};
  
  	staticAssertDeclaration() {
  	    return this.getTypedRuleContext(StaticAssertDeclarationContext,0);
  	};
  
  	templateDeclaration() {
  	    return this.getTypedRuleContext(TemplateDeclarationContext,0);
  	};
  
  	aliasDeclaration() {
  	    return this.getTypedRuleContext(AliasDeclarationContext,0);
  	};
  
  	emptyDeclaration() {
  	    return this.getTypedRuleContext(EmptyDeclarationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterMemberdeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitMemberdeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class MemberDeclaratorListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_memberDeclaratorList;
      }
  
  	memberDeclarator = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(MemberDeclaratorContext);
  	    } else {
  	        return this.getTypedRuleContext(MemberDeclaratorContext,i);
  	    }
  	};
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterMemberDeclaratorList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitMemberDeclaratorList(this);
  		}
  	}
  
  
  }
  
  
  
  class MemberDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_memberDeclarator;
      }
  
  	declarator() {
  	    return this.getTypedRuleContext(DeclaratorContext,0);
  	};
  
  	virtualSpecifierSeq() {
  	    return this.getTypedRuleContext(VirtualSpecifierSeqContext,0);
  	};
  
  	pureSpecifier() {
  	    return this.getTypedRuleContext(PureSpecifierContext,0);
  	};
  
  	braceOrEqualInitializer() {
  	    return this.getTypedRuleContext(BraceOrEqualInitializerContext,0);
  	};
  
  	Colon() {
  	    return this.getToken(CPP14Parser.Colon, 0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterMemberDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitMemberDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class VirtualSpecifierSeqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_virtualSpecifierSeq;
      }
  
  	virtualSpecifier = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(VirtualSpecifierContext);
  	    } else {
  	        return this.getTypedRuleContext(VirtualSpecifierContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterVirtualSpecifierSeq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitVirtualSpecifierSeq(this);
  		}
  	}
  
  
  }
  
  
  
  class VirtualSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_virtualSpecifier;
      }
  
  	Override() {
  	    return this.getToken(CPP14Parser.Override, 0);
  	};
  
  	Final() {
  	    return this.getToken(CPP14Parser.Final, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterVirtualSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitVirtualSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class PureSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_pureSpecifier;
          this.val = null; // Token
      }
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	OctalLiteral() {
  	    return this.getToken(CPP14Parser.OctalLiteral, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterPureSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitPureSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class BaseClauseContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_baseClause;
      }
  
  	Colon() {
  	    return this.getToken(CPP14Parser.Colon, 0);
  	};
  
  	baseSpecifierList() {
  	    return this.getTypedRuleContext(BaseSpecifierListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterBaseClause(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitBaseClause(this);
  		}
  	}
  
  
  }
  
  
  
  class BaseSpecifierListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_baseSpecifierList;
      }
  
  	baseSpecifier = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(BaseSpecifierContext);
  	    } else {
  	        return this.getTypedRuleContext(BaseSpecifierContext,i);
  	    }
  	};
  
  	Ellipsis = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Ellipsis);
  	    } else {
  	        return this.getToken(CPP14Parser.Ellipsis, i);
  	    }
  	};
  
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterBaseSpecifierList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitBaseSpecifierList(this);
  		}
  	}
  
  
  }
  
  
  
  class BaseSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_baseSpecifier;
      }
  
  	baseTypeSpecifier() {
  	    return this.getTypedRuleContext(BaseTypeSpecifierContext,0);
  	};
  
  	Virtual() {
  	    return this.getToken(CPP14Parser.Virtual, 0);
  	};
  
  	accessSpecifier() {
  	    return this.getTypedRuleContext(AccessSpecifierContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterBaseSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitBaseSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class ClassOrDeclTypeContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_classOrDeclType;
      }
  
  	className() {
  	    return this.getTypedRuleContext(ClassNameContext,0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	decltypeSpecifier() {
  	    return this.getTypedRuleContext(DecltypeSpecifierContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterClassOrDeclType(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitClassOrDeclType(this);
  		}
  	}
  
  
  }
  
  
  
  class BaseTypeSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_baseTypeSpecifier;
      }
  
  	classOrDeclType() {
  	    return this.getTypedRuleContext(ClassOrDeclTypeContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterBaseTypeSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitBaseTypeSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class AccessSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_accessSpecifier;
      }
  
  	Private() {
  	    return this.getToken(CPP14Parser.Private, 0);
  	};
  
  	Protected() {
  	    return this.getToken(CPP14Parser.Protected, 0);
  	};
  
  	Public() {
  	    return this.getToken(CPP14Parser.Public, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterAccessSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitAccessSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class ConversionFunctionIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_conversionFunctionId;
      }
  
  	Operator() {
  	    return this.getToken(CPP14Parser.Operator, 0);
  	};
  
  	conversionTypeId() {
  	    return this.getTypedRuleContext(ConversionTypeIdContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterConversionFunctionId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitConversionFunctionId(this);
  		}
  	}
  
  
  }
  
  
  
  class ConversionTypeIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_conversionTypeId;
      }
  
  	typeSpecifierSeq() {
  	    return this.getTypedRuleContext(TypeSpecifierSeqContext,0);
  	};
  
  	conversionDeclarator() {
  	    return this.getTypedRuleContext(ConversionDeclaratorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterConversionTypeId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitConversionTypeId(this);
  		}
  	}
  
  
  }
  
  
  
  class ConversionDeclaratorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_conversionDeclarator;
      }
  
  	pointerOperator() {
  	    return this.getTypedRuleContext(PointerOperatorContext,0);
  	};
  
  	conversionDeclarator() {
  	    return this.getTypedRuleContext(ConversionDeclaratorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterConversionDeclarator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitConversionDeclarator(this);
  		}
  	}
  
  
  }
  
  
  
  class ConstructorInitializerContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_constructorInitializer;
      }
  
  	Colon() {
  	    return this.getToken(CPP14Parser.Colon, 0);
  	};
  
  	memInitializerList() {
  	    return this.getTypedRuleContext(MemInitializerListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterConstructorInitializer(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitConstructorInitializer(this);
  		}
  	}
  
  
  }
  
  
  
  class MemInitializerListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_memInitializerList;
      }
  
  	memInitializer = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(MemInitializerContext);
  	    } else {
  	        return this.getTypedRuleContext(MemInitializerContext,i);
  	    }
  	};
  
  	Ellipsis = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Ellipsis);
  	    } else {
  	        return this.getToken(CPP14Parser.Ellipsis, i);
  	    }
  	};
  
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterMemInitializerList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitMemInitializerList(this);
  		}
  	}
  
  
  }
  
  
  
  class MemInitializerContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_memInitializer;
      }
  
  	meminitializerid() {
  	    return this.getTypedRuleContext(MeminitializeridContext,0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	bracedInitList() {
  	    return this.getTypedRuleContext(BracedInitListContext,0);
  	};
  
  	expressionList() {
  	    return this.getTypedRuleContext(ExpressionListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterMemInitializer(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitMemInitializer(this);
  		}
  	}
  
  
  }
  
  
  
  class MeminitializeridContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_meminitializerid;
      }
  
  	classOrDeclType() {
  	    return this.getTypedRuleContext(ClassOrDeclTypeContext,0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterMeminitializerid(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitMeminitializerid(this);
  		}
  	}
  
  
  }
  
  
  
  class OperatorFunctionIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_operatorFunctionId;
      }
  
  	Operator() {
  	    return this.getToken(CPP14Parser.Operator, 0);
  	};
  
  	theOperator() {
  	    return this.getTypedRuleContext(TheOperatorContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterOperatorFunctionId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitOperatorFunctionId(this);
  		}
  	}
  
  
  }
  
  
  
  class LiteralOperatorIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_literalOperatorId;
      }
  
  	Operator() {
  	    return this.getToken(CPP14Parser.Operator, 0);
  	};
  
  	StringLiteral() {
  	    return this.getToken(CPP14Parser.StringLiteral, 0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	UserDefinedStringLiteral() {
  	    return this.getToken(CPP14Parser.UserDefinedStringLiteral, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLiteralOperatorId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLiteralOperatorId(this);
  		}
  	}
  
  
  }
  
  
  
  class TemplateDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_templateDeclaration;
      }
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	Less() {
  	    return this.getToken(CPP14Parser.Less, 0);
  	};
  
  	templateparameterList() {
  	    return this.getTypedRuleContext(TemplateparameterListContext,0);
  	};
  
  	Greater() {
  	    return this.getToken(CPP14Parser.Greater, 0);
  	};
  
  	declaration() {
  	    return this.getTypedRuleContext(DeclarationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTemplateDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTemplateDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class TemplateparameterListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_templateparameterList;
      }
  
  	templateParameter = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(TemplateParameterContext);
  	    } else {
  	        return this.getTypedRuleContext(TemplateParameterContext,i);
  	    }
  	};
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTemplateparameterList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTemplateparameterList(this);
  		}
  	}
  
  
  }
  
  
  
  class TemplateParameterContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_templateParameter;
      }
  
  	typeParameter() {
  	    return this.getTypedRuleContext(TypeParameterContext,0);
  	};
  
  	parameterDeclaration() {
  	    return this.getTypedRuleContext(ParameterDeclarationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTemplateParameter(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTemplateParameter(this);
  		}
  	}
  
  
  }
  
  
  
  class TypeParameterContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_typeParameter;
      }
  
  	Class() {
  	    return this.getToken(CPP14Parser.Class, 0);
  	};
  
  	Typename_() {
  	    return this.getToken(CPP14Parser.Typename_, 0);
  	};
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	theTypeId() {
  	    return this.getTypedRuleContext(TheTypeIdContext,0);
  	};
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	Less() {
  	    return this.getToken(CPP14Parser.Less, 0);
  	};
  
  	templateparameterList() {
  	    return this.getTypedRuleContext(TemplateparameterListContext,0);
  	};
  
  	Greater() {
  	    return this.getToken(CPP14Parser.Greater, 0);
  	};
  
  	Ellipsis() {
  	    return this.getToken(CPP14Parser.Ellipsis, 0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTypeParameter(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTypeParameter(this);
  		}
  	}
  
  
  }
  
  
  
  class SimpleTemplateIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_simpleTemplateId;
      }
  
  	templateName() {
  	    return this.getTypedRuleContext(TemplateNameContext,0);
  	};
  
  	Less() {
  	    return this.getToken(CPP14Parser.Less, 0);
  	};
  
  	Greater() {
  	    return this.getToken(CPP14Parser.Greater, 0);
  	};
  
  	templateArgumentList() {
  	    return this.getTypedRuleContext(TemplateArgumentListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterSimpleTemplateId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitSimpleTemplateId(this);
  		}
  	}
  
  
  }
  
  
  
  class TemplateIdContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_templateId;
      }
  
  	simpleTemplateId() {
  	    return this.getTypedRuleContext(SimpleTemplateIdContext,0);
  	};
  
  	Less() {
  	    return this.getToken(CPP14Parser.Less, 0);
  	};
  
  	Greater() {
  	    return this.getToken(CPP14Parser.Greater, 0);
  	};
  
  	operatorFunctionId() {
  	    return this.getTypedRuleContext(OperatorFunctionIdContext,0);
  	};
  
  	literalOperatorId() {
  	    return this.getTypedRuleContext(LiteralOperatorIdContext,0);
  	};
  
  	templateArgumentList() {
  	    return this.getTypedRuleContext(TemplateArgumentListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTemplateId(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTemplateId(this);
  		}
  	}
  
  
  }
  
  
  
  class TemplateNameContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_templateName;
      }
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTemplateName(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTemplateName(this);
  		}
  	}
  
  
  }
  
  
  
  class TemplateArgumentListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_templateArgumentList;
      }
  
  	templateArgument = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(TemplateArgumentContext);
  	    } else {
  	        return this.getTypedRuleContext(TemplateArgumentContext,i);
  	    }
  	};
  
  	Ellipsis = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Ellipsis);
  	    } else {
  	        return this.getToken(CPP14Parser.Ellipsis, i);
  	    }
  	};
  
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTemplateArgumentList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTemplateArgumentList(this);
  		}
  	}
  
  
  }
  
  
  
  class TemplateArgumentContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_templateArgument;
      }
  
  	theTypeId() {
  	    return this.getTypedRuleContext(TheTypeIdContext,0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	idExpression() {
  	    return this.getTypedRuleContext(IdExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTemplateArgument(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTemplateArgument(this);
  		}
  	}
  
  
  }
  
  
  
  class TypeNameSpecifierContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_typeNameSpecifier;
      }
  
  	Typename_() {
  	    return this.getToken(CPP14Parser.Typename_, 0);
  	};
  
  	nestedNameSpecifier() {
  	    return this.getTypedRuleContext(NestedNameSpecifierContext,0);
  	};
  
  	Identifier() {
  	    return this.getToken(CPP14Parser.Identifier, 0);
  	};
  
  	simpleTemplateId() {
  	    return this.getTypedRuleContext(SimpleTemplateIdContext,0);
  	};
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTypeNameSpecifier(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTypeNameSpecifier(this);
  		}
  	}
  
  
  }
  
  
  
  class ExplicitInstantiationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_explicitInstantiation;
      }
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	declaration() {
  	    return this.getTypedRuleContext(DeclarationContext,0);
  	};
  
  	Extern() {
  	    return this.getToken(CPP14Parser.Extern, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterExplicitInstantiation(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitExplicitInstantiation(this);
  		}
  	}
  
  
  }
  
  
  
  class ExplicitSpecializationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_explicitSpecialization;
      }
  
  	Template() {
  	    return this.getToken(CPP14Parser.Template, 0);
  	};
  
  	Less() {
  	    return this.getToken(CPP14Parser.Less, 0);
  	};
  
  	Greater() {
  	    return this.getToken(CPP14Parser.Greater, 0);
  	};
  
  	declaration() {
  	    return this.getTypedRuleContext(DeclarationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterExplicitSpecialization(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitExplicitSpecialization(this);
  		}
  	}
  
  
  }
  
  
  
  class TryBlockContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_tryBlock;
      }
  
  	Try() {
  	    return this.getToken(CPP14Parser.Try, 0);
  	};
  
  	compoundStatement() {
  	    return this.getTypedRuleContext(CompoundStatementContext,0);
  	};
  
  	handlerSeq() {
  	    return this.getTypedRuleContext(HandlerSeqContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTryBlock(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTryBlock(this);
  		}
  	}
  
  
  }
  
  
  
  class FunctionTryBlockContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_functionTryBlock;
      }
  
  	Try() {
  	    return this.getToken(CPP14Parser.Try, 0);
  	};
  
  	compoundStatement() {
  	    return this.getTypedRuleContext(CompoundStatementContext,0);
  	};
  
  	handlerSeq() {
  	    return this.getTypedRuleContext(HandlerSeqContext,0);
  	};
  
  	constructorInitializer() {
  	    return this.getTypedRuleContext(ConstructorInitializerContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterFunctionTryBlock(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitFunctionTryBlock(this);
  		}
  	}
  
  
  }
  
  
  
  class HandlerSeqContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_handlerSeq;
      }
  
  	handler = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(HandlerContext);
  	    } else {
  	        return this.getTypedRuleContext(HandlerContext,i);
  	    }
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterHandlerSeq(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitHandlerSeq(this);
  		}
  	}
  
  
  }
  
  
  
  class HandlerContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_handler;
      }
  
  	Catch() {
  	    return this.getToken(CPP14Parser.Catch, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	exceptionDeclaration() {
  	    return this.getTypedRuleContext(ExceptionDeclarationContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	compoundStatement() {
  	    return this.getTypedRuleContext(CompoundStatementContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterHandler(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitHandler(this);
  		}
  	}
  
  
  }
  
  
  
  class ExceptionDeclarationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_exceptionDeclaration;
      }
  
  	typeSpecifierSeq() {
  	    return this.getTypedRuleContext(TypeSpecifierSeqContext,0);
  	};
  
  	attributeSpecifierSeq() {
  	    return this.getTypedRuleContext(AttributeSpecifierSeqContext,0);
  	};
  
  	declarator() {
  	    return this.getTypedRuleContext(DeclaratorContext,0);
  	};
  
  	abstractDeclarator() {
  	    return this.getTypedRuleContext(AbstractDeclaratorContext,0);
  	};
  
  	Ellipsis() {
  	    return this.getToken(CPP14Parser.Ellipsis, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterExceptionDeclaration(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitExceptionDeclaration(this);
  		}
  	}
  
  
  }
  
  
  
  class ThrowExpressionContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_throwExpression;
      }
  
  	Throw() {
  	    return this.getToken(CPP14Parser.Throw, 0);
  	};
  
  	assignmentExpression() {
  	    return this.getTypedRuleContext(AssignmentExpressionContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterThrowExpression(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitThrowExpression(this);
  		}
  	}
  
  
  }
  
  
  
  class ExceptionSpecificationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_exceptionSpecification;
      }
  
  	dynamicExceptionSpecification() {
  	    return this.getTypedRuleContext(DynamicExceptionSpecificationContext,0);
  	};
  
  	noeExceptSpecification() {
  	    return this.getTypedRuleContext(NoeExceptSpecificationContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterExceptionSpecification(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitExceptionSpecification(this);
  		}
  	}
  
  
  }
  
  
  
  class DynamicExceptionSpecificationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_dynamicExceptionSpecification;
      }
  
  	Throw() {
  	    return this.getToken(CPP14Parser.Throw, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	typeIdList() {
  	    return this.getTypedRuleContext(TypeIdListContext,0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterDynamicExceptionSpecification(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitDynamicExceptionSpecification(this);
  		}
  	}
  
  
  }
  
  
  
  class TypeIdListContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_typeIdList;
      }
  
  	theTypeId = function(i) {
  	    if(i===undefined) {
  	        i = null;
  	    }
  	    if(i===null) {
  	        return this.getTypedRuleContexts(TheTypeIdContext);
  	    } else {
  	        return this.getTypedRuleContext(TheTypeIdContext,i);
  	    }
  	};
  
  	Ellipsis = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Ellipsis);
  	    } else {
  	        return this.getToken(CPP14Parser.Ellipsis, i);
  	    }
  	};
  
  
  	Comma = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Comma);
  	    } else {
  	        return this.getToken(CPP14Parser.Comma, i);
  	    }
  	};
  
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTypeIdList(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTypeIdList(this);
  		}
  	}
  
  
  }
  
  
  
  class NoeExceptSpecificationContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_noeExceptSpecification;
      }
  
  	Noexcept() {
  	    return this.getToken(CPP14Parser.Noexcept, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	constantExpression() {
  	    return this.getTypedRuleContext(ConstantExpressionContext,0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterNoeExceptSpecification(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitNoeExceptSpecification(this);
  		}
  	}
  
  
  }
  
  
  
  class TheOperatorContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_theOperator;
      }
  
  	New() {
  	    return this.getToken(CPP14Parser.New, 0);
  	};
  
  	LeftBracket() {
  	    return this.getToken(CPP14Parser.LeftBracket, 0);
  	};
  
  	RightBracket() {
  	    return this.getToken(CPP14Parser.RightBracket, 0);
  	};
  
  	Delete() {
  	    return this.getToken(CPP14Parser.Delete, 0);
  	};
  
  	Plus() {
  	    return this.getToken(CPP14Parser.Plus, 0);
  	};
  
  	Minus() {
  	    return this.getToken(CPP14Parser.Minus, 0);
  	};
  
  	Star() {
  	    return this.getToken(CPP14Parser.Star, 0);
  	};
  
  	Div() {
  	    return this.getToken(CPP14Parser.Div, 0);
  	};
  
  	Mod() {
  	    return this.getToken(CPP14Parser.Mod, 0);
  	};
  
  	Caret() {
  	    return this.getToken(CPP14Parser.Caret, 0);
  	};
  
  	And() {
  	    return this.getToken(CPP14Parser.And, 0);
  	};
  
  	Or() {
  	    return this.getToken(CPP14Parser.Or, 0);
  	};
  
  	Tilde() {
  	    return this.getToken(CPP14Parser.Tilde, 0);
  	};
  
  	Not() {
  	    return this.getToken(CPP14Parser.Not, 0);
  	};
  
  	Assign() {
  	    return this.getToken(CPP14Parser.Assign, 0);
  	};
  
  	Greater = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Greater);
  	    } else {
  	        return this.getToken(CPP14Parser.Greater, i);
  	    }
  	};
  
  
  	Less = function(i) {
  		if(i===undefined) {
  			i = null;
  		}
  	    if(i===null) {
  	        return this.getTokens(CPP14Parser.Less);
  	    } else {
  	        return this.getToken(CPP14Parser.Less, i);
  	    }
  	};
  
  
  	GreaterEqual() {
  	    return this.getToken(CPP14Parser.GreaterEqual, 0);
  	};
  
  	PlusAssign() {
  	    return this.getToken(CPP14Parser.PlusAssign, 0);
  	};
  
  	MinusAssign() {
  	    return this.getToken(CPP14Parser.MinusAssign, 0);
  	};
  
  	StarAssign() {
  	    return this.getToken(CPP14Parser.StarAssign, 0);
  	};
  
  	ModAssign() {
  	    return this.getToken(CPP14Parser.ModAssign, 0);
  	};
  
  	XorAssign() {
  	    return this.getToken(CPP14Parser.XorAssign, 0);
  	};
  
  	AndAssign() {
  	    return this.getToken(CPP14Parser.AndAssign, 0);
  	};
  
  	OrAssign() {
  	    return this.getToken(CPP14Parser.OrAssign, 0);
  	};
  
  	RightShiftAssign() {
  	    return this.getToken(CPP14Parser.RightShiftAssign, 0);
  	};
  
  	LeftShiftAssign() {
  	    return this.getToken(CPP14Parser.LeftShiftAssign, 0);
  	};
  
  	Equal() {
  	    return this.getToken(CPP14Parser.Equal, 0);
  	};
  
  	NotEqual() {
  	    return this.getToken(CPP14Parser.NotEqual, 0);
  	};
  
  	LessEqual() {
  	    return this.getToken(CPP14Parser.LessEqual, 0);
  	};
  
  	AndAnd() {
  	    return this.getToken(CPP14Parser.AndAnd, 0);
  	};
  
  	OrOr() {
  	    return this.getToken(CPP14Parser.OrOr, 0);
  	};
  
  	PlusPlus() {
  	    return this.getToken(CPP14Parser.PlusPlus, 0);
  	};
  
  	MinusMinus() {
  	    return this.getToken(CPP14Parser.MinusMinus, 0);
  	};
  
  	Comma() {
  	    return this.getToken(CPP14Parser.Comma, 0);
  	};
  
  	ArrowStar() {
  	    return this.getToken(CPP14Parser.ArrowStar, 0);
  	};
  
  	Arrow() {
  	    return this.getToken(CPP14Parser.Arrow, 0);
  	};
  
  	LeftParen() {
  	    return this.getToken(CPP14Parser.LeftParen, 0);
  	};
  
  	RightParen() {
  	    return this.getToken(CPP14Parser.RightParen, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterTheOperator(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitTheOperator(this);
  		}
  	}
  
  
  }
  
  
  
  class LiteralContext extends antlr4.ParserRuleContext {
  
      constructor(parser, parent, invokingState) {
          if(parent===undefined) {
              parent = null;
          }
          if(invokingState===undefined || invokingState===null) {
              invokingState = -1;
          }
          super(parent, invokingState);
          this.parser = parser;
          this.ruleIndex = CPP14Parser.RULE_literal;
      }
  
  	IntegerLiteral() {
  	    return this.getToken(CPP14Parser.IntegerLiteral, 0);
  	};
  
  	CharacterLiteral() {
  	    return this.getToken(CPP14Parser.CharacterLiteral, 0);
  	};
  
  	FloatingLiteral() {
  		let term = this.tryGetToken(CPP14Parser.FloatingLiteral, 0);
  		let text = term?.text ?? ""
  
  		if(text[text.length - 1] === "f") text = text.substr(0, text.length - 1)
  		if(text[text.length - 1] === ".") text = text.substr(0, text.length - 1)
  		term.text = text
  		
  		return term
  	};
  
  	StringLiteral() {
  	    return this.getToken(CPP14Parser.StringLiteral, 0);
  	};
  
  	BooleanLiteral() {
  	    return this.getToken(CPP14Parser.BooleanLiteral, 0);
  	};
  
  	PointerLiteral() {
  	    return this.getToken(CPP14Parser.PointerLiteral, 0);
  	};
  
  	UserDefinedLiteral() {
  	    return this.getToken(CPP14Parser.UserDefinedLiteral, 0);
  	};
  
  	enterRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.enterLiteral(this);
  		}
  	}
  
  	exitRule(listener) {
  	    if(listener instanceof CPP14ParserListener ) {
  	        listener.exitLiteral(this);
  		}
  	}
  
  
  }
  
  
  
  
  CPP14Parser.TranslationUnitContext = TranslationUnitContext; 
  CPP14Parser.PrimaryExpressionContext = PrimaryExpressionContext; 
  CPP14Parser.IdExpressionContext = IdExpressionContext; 
  CPP14Parser.UnqualifiedIdContext = UnqualifiedIdContext; 
  CPP14Parser.QualifiedIdContext = QualifiedIdContext; 
  CPP14Parser.NestedNameSpecifierContext = NestedNameSpecifierContext; 
  CPP14Parser.LambdaExpressionContext = LambdaExpressionContext; 
  CPP14Parser.LambdaIntroducerContext = LambdaIntroducerContext; 
  CPP14Parser.LambdaCaptureContext = LambdaCaptureContext; 
  CPP14Parser.CaptureDefaultContext = CaptureDefaultContext; 
  CPP14Parser.CaptureListContext = CaptureListContext; 
  CPP14Parser.CaptureContext = CaptureContext; 
  CPP14Parser.SimpleCaptureContext = SimpleCaptureContext; 
  CPP14Parser.InitcaptureContext = InitcaptureContext; 
  CPP14Parser.LambdaDeclaratorContext = LambdaDeclaratorContext; 
  CPP14Parser.PostfixExpressionContext = PostfixExpressionContext; 
  CPP14Parser.TypeIdOfTheTypeIdContext = TypeIdOfTheTypeIdContext; 
  CPP14Parser.ExpressionListContext = ExpressionListContext; 
  CPP14Parser.PseudoDestructorNameContext = PseudoDestructorNameContext; 
  CPP14Parser.UnaryExpressionContext = UnaryExpressionContext; 
  CPP14Parser.UnaryOperatorContext = UnaryOperatorContext; 
  CPP14Parser.NewExpressionContext = NewExpressionContext; 
  CPP14Parser.NewPlacementContext = NewPlacementContext; 
  CPP14Parser.NewTypeIdContext = NewTypeIdContext; 
  CPP14Parser.NewDeclaratorContext = NewDeclaratorContext; 
  CPP14Parser.NoPointerNewDeclaratorContext = NoPointerNewDeclaratorContext; 
  CPP14Parser.NewInitializerContext = NewInitializerContext; 
  CPP14Parser.DeleteExpressionContext = DeleteExpressionContext; 
  CPP14Parser.NoExceptExpressionContext = NoExceptExpressionContext; 
  CPP14Parser.CastExpressionContext = CastExpressionContext; 
  CPP14Parser.PointerMemberExpressionContext = PointerMemberExpressionContext; 
  CPP14Parser.MultiplicativeExpressionContext = MultiplicativeExpressionContext; 
  CPP14Parser.AdditiveExpressionContext = AdditiveExpressionContext; 
  CPP14Parser.ShiftExpressionContext = ShiftExpressionContext; 
  CPP14Parser.ShiftOperatorContext = ShiftOperatorContext; 
  CPP14Parser.RelationalExpressionContext = RelationalExpressionContext; 
  CPP14Parser.EqualityExpressionContext = EqualityExpressionContext; 
  CPP14Parser.AndExpressionContext = AndExpressionContext; 
  CPP14Parser.ExclusiveOrExpressionContext = ExclusiveOrExpressionContext; 
  CPP14Parser.InclusiveOrExpressionContext = InclusiveOrExpressionContext; 
  CPP14Parser.LogicalAndExpressionContext = LogicalAndExpressionContext; 
  CPP14Parser.LogicalOrExpressionContext = LogicalOrExpressionContext; 
  CPP14Parser.ConditionalExpressionContext = ConditionalExpressionContext; 
  CPP14Parser.AssignmentExpressionContext = AssignmentExpressionContext; 
  CPP14Parser.AssignmentOperatorContext = AssignmentOperatorContext; 
  CPP14Parser.ExpressionContext = ExpressionContext; 
  CPP14Parser.ConstantExpressionContext = ConstantExpressionContext; 
  CPP14Parser.StatementContext = StatementContext; 
  CPP14Parser.LabeledStatementContext = LabeledStatementContext; 
  CPP14Parser.ExpressionStatementContext = ExpressionStatementContext; 
  CPP14Parser.CompoundStatementContext = CompoundStatementContext; 
  CPP14Parser.StatementSeqContext = StatementSeqContext; 
  CPP14Parser.SelectionStatementContext = SelectionStatementContext; 
  CPP14Parser.ConditionContext = ConditionContext; 
  CPP14Parser.IterationStatementContext = IterationStatementContext; 
  CPP14Parser.ForInitStatementContext = ForInitStatementContext; 
  CPP14Parser.ForRangeDeclarationContext = ForRangeDeclarationContext; 
  CPP14Parser.ForRangeInitializerContext = ForRangeInitializerContext; 
  CPP14Parser.JumpStatementContext = JumpStatementContext; 
  CPP14Parser.DeclarationStatementContext = DeclarationStatementContext; 
  CPP14Parser.DeclarationseqContext = DeclarationseqContext; 
  CPP14Parser.DeclarationContext = DeclarationContext; 
  CPP14Parser.BlockDeclarationContext = BlockDeclarationContext; 
  CPP14Parser.AliasDeclarationContext = AliasDeclarationContext; 
  CPP14Parser.SimpleDeclarationContext = SimpleDeclarationContext; 
  CPP14Parser.StaticAssertDeclarationContext = StaticAssertDeclarationContext; 
  CPP14Parser.EmptyDeclarationContext = EmptyDeclarationContext; 
  CPP14Parser.AttributeDeclarationContext = AttributeDeclarationContext; 
  CPP14Parser.DeclSpecifierContext = DeclSpecifierContext; 
  CPP14Parser.DeclSpecifierSeqContext = DeclSpecifierSeqContext; 
  CPP14Parser.StorageClassSpecifierContext = StorageClassSpecifierContext; 
  CPP14Parser.FunctionSpecifierContext = FunctionSpecifierContext; 
  CPP14Parser.TypedefNameContext = TypedefNameContext; 
  CPP14Parser.TypeSpecifierContext = TypeSpecifierContext; 
  CPP14Parser.TrailingTypeSpecifierContext = TrailingTypeSpecifierContext; 
  CPP14Parser.TypeSpecifierSeqContext = TypeSpecifierSeqContext; 
  CPP14Parser.TrailingTypeSpecifierSeqContext = TrailingTypeSpecifierSeqContext; 
  CPP14Parser.SimpleTypeLengthModifierContext = SimpleTypeLengthModifierContext; 
  CPP14Parser.SimpleTypeSignednessModifierContext = SimpleTypeSignednessModifierContext; 
  CPP14Parser.SimpleTypeSpecifierContext = SimpleTypeSpecifierContext; 
  CPP14Parser.TheTypeNameContext = TheTypeNameContext; 
  CPP14Parser.DecltypeSpecifierContext = DecltypeSpecifierContext; 
  CPP14Parser.ElaboratedTypeSpecifierContext = ElaboratedTypeSpecifierContext; 
  CPP14Parser.EnumNameContext = EnumNameContext; 
  CPP14Parser.EnumSpecifierContext = EnumSpecifierContext; 
  CPP14Parser.EnumHeadContext = EnumHeadContext; 
  CPP14Parser.OpaqueEnumDeclarationContext = OpaqueEnumDeclarationContext; 
  CPP14Parser.EnumkeyContext = EnumkeyContext; 
  CPP14Parser.EnumbaseContext = EnumbaseContext; 
  CPP14Parser.EnumeratorListContext = EnumeratorListContext; 
  CPP14Parser.EnumeratorDefinitionContext = EnumeratorDefinitionContext; 
  CPP14Parser.EnumeratorContext = EnumeratorContext; 
  CPP14Parser.NamespaceNameContext = NamespaceNameContext; 
  CPP14Parser.OriginalNamespaceNameContext = OriginalNamespaceNameContext; 
  CPP14Parser.NamespaceDefinitionContext = NamespaceDefinitionContext; 
  CPP14Parser.NamespaceAliasContext = NamespaceAliasContext; 
  CPP14Parser.NamespaceAliasDefinitionContext = NamespaceAliasDefinitionContext; 
  CPP14Parser.QualifiednamespacespecifierContext = QualifiednamespacespecifierContext; 
  CPP14Parser.UsingDeclarationContext = UsingDeclarationContext; 
  CPP14Parser.UsingDirectiveContext = UsingDirectiveContext; 
  CPP14Parser.AsmDefinitionContext = AsmDefinitionContext; 
  CPP14Parser.LinkageSpecificationContext = LinkageSpecificationContext; 
  CPP14Parser.AttributeSpecifierSeqContext = AttributeSpecifierSeqContext; 
  CPP14Parser.AttributeSpecifierContext = AttributeSpecifierContext; 
  CPP14Parser.AlignmentspecifierContext = AlignmentspecifierContext; 
  CPP14Parser.AttributeListContext = AttributeListContext; 
  CPP14Parser.AttributeContext = AttributeContext; 
  CPP14Parser.AttributeNamespaceContext = AttributeNamespaceContext; 
  CPP14Parser.AttributeArgumentClauseContext = AttributeArgumentClauseContext; 
  CPP14Parser.BalancedTokenSeqContext = BalancedTokenSeqContext; 
  CPP14Parser.BalancedtokenContext = BalancedtokenContext; 
  CPP14Parser.InitDeclaratorListContext = InitDeclaratorListContext; 
  CPP14Parser.InitDeclaratorContext = InitDeclaratorContext; 
  CPP14Parser.DeclaratorContext = DeclaratorContext; 
  CPP14Parser.PointerDeclaratorContext = PointerDeclaratorContext; 
  CPP14Parser.NoPointerDeclaratorContext = NoPointerDeclaratorContext; 
  CPP14Parser.ParametersAndQualifiersContext = ParametersAndQualifiersContext; 
  CPP14Parser.TrailingReturnTypeContext = TrailingReturnTypeContext; 
  CPP14Parser.PointerOperatorContext = PointerOperatorContext; 
  CPP14Parser.CvqualifierseqContext = CvqualifierseqContext; 
  CPP14Parser.CvQualifierContext = CvQualifierContext; 
  CPP14Parser.RefqualifierContext = RefqualifierContext; 
  CPP14Parser.DeclaratoridContext = DeclaratoridContext; 
  CPP14Parser.TheTypeIdContext = TheTypeIdContext; 
  CPP14Parser.AbstractDeclaratorContext = AbstractDeclaratorContext; 
  CPP14Parser.PointerAbstractDeclaratorContext = PointerAbstractDeclaratorContext; 
  CPP14Parser.NoPointerAbstractDeclaratorContext = NoPointerAbstractDeclaratorContext; 
  CPP14Parser.AbstractPackDeclaratorContext = AbstractPackDeclaratorContext; 
  CPP14Parser.NoPointerAbstractPackDeclaratorContext = NoPointerAbstractPackDeclaratorContext; 
  CPP14Parser.ParameterDeclarationClauseContext = ParameterDeclarationClauseContext; 
  CPP14Parser.ParameterDeclarationListContext = ParameterDeclarationListContext; 
  CPP14Parser.ParameterDeclarationContext = ParameterDeclarationContext; 
  CPP14Parser.FunctionDefinitionContext = FunctionDefinitionContext; 
  CPP14Parser.FunctionBodyContext = FunctionBodyContext; 
  CPP14Parser.InitializerContext = InitializerContext; 
  CPP14Parser.BraceOrEqualInitializerContext = BraceOrEqualInitializerContext; 
  CPP14Parser.InitializerClauseContext = InitializerClauseContext; 
  CPP14Parser.InitializerListContext = InitializerListContext; 
  CPP14Parser.BracedInitListContext = BracedInitListContext; 
  CPP14Parser.ClassNameContext = ClassNameContext; 
  CPP14Parser.ClassSpecifierContext = ClassSpecifierContext; 
  CPP14Parser.ClassHeadContext = ClassHeadContext; 
  CPP14Parser.ClassHeadNameContext = ClassHeadNameContext; 
  CPP14Parser.ClassVirtSpecifierContext = ClassVirtSpecifierContext; 
  CPP14Parser.ClassKeyContext = ClassKeyContext; 
  CPP14Parser.MemberSpecificationContext = MemberSpecificationContext; 
  CPP14Parser.MemberdeclarationContext = MemberdeclarationContext; 
  CPP14Parser.MemberDeclaratorListContext = MemberDeclaratorListContext; 
  CPP14Parser.MemberDeclaratorContext = MemberDeclaratorContext; 
  CPP14Parser.VirtualSpecifierSeqContext = VirtualSpecifierSeqContext; 
  CPP14Parser.VirtualSpecifierContext = VirtualSpecifierContext; 
  CPP14Parser.PureSpecifierContext = PureSpecifierContext; 
  CPP14Parser.BaseClauseContext = BaseClauseContext; 
  CPP14Parser.BaseSpecifierListContext = BaseSpecifierListContext; 
  CPP14Parser.BaseSpecifierContext = BaseSpecifierContext; 
  CPP14Parser.ClassOrDeclTypeContext = ClassOrDeclTypeContext; 
  CPP14Parser.BaseTypeSpecifierContext = BaseTypeSpecifierContext; 
  CPP14Parser.AccessSpecifierContext = AccessSpecifierContext; 
  CPP14Parser.ConversionFunctionIdContext = ConversionFunctionIdContext; 
  CPP14Parser.ConversionTypeIdContext = ConversionTypeIdContext; 
  CPP14Parser.ConversionDeclaratorContext = ConversionDeclaratorContext; 
  CPP14Parser.ConstructorInitializerContext = ConstructorInitializerContext; 
  CPP14Parser.MemInitializerListContext = MemInitializerListContext; 
  CPP14Parser.MemInitializerContext = MemInitializerContext; 
  CPP14Parser.MeminitializeridContext = MeminitializeridContext; 
  CPP14Parser.OperatorFunctionIdContext = OperatorFunctionIdContext; 
  CPP14Parser.LiteralOperatorIdContext = LiteralOperatorIdContext; 
  CPP14Parser.TemplateDeclarationContext = TemplateDeclarationContext; 
  CPP14Parser.TemplateparameterListContext = TemplateparameterListContext; 
  CPP14Parser.TemplateParameterContext = TemplateParameterContext; 
  CPP14Parser.TypeParameterContext = TypeParameterContext; 
  CPP14Parser.SimpleTemplateIdContext = SimpleTemplateIdContext; 
  CPP14Parser.TemplateIdContext = TemplateIdContext; 
  CPP14Parser.TemplateNameContext = TemplateNameContext; 
  CPP14Parser.TemplateArgumentListContext = TemplateArgumentListContext; 
  CPP14Parser.TemplateArgumentContext = TemplateArgumentContext; 
  CPP14Parser.TypeNameSpecifierContext = TypeNameSpecifierContext; 
  CPP14Parser.ExplicitInstantiationContext = ExplicitInstantiationContext; 
  CPP14Parser.ExplicitSpecializationContext = ExplicitSpecializationContext; 
  CPP14Parser.TryBlockContext = TryBlockContext; 
  CPP14Parser.FunctionTryBlockContext = FunctionTryBlockContext; 
  CPP14Parser.HandlerSeqContext = HandlerSeqContext; 
  CPP14Parser.HandlerContext = HandlerContext; 
  CPP14Parser.ExceptionDeclarationContext = ExceptionDeclarationContext; 
  CPP14Parser.ThrowExpressionContext = ThrowExpressionContext; 
  CPP14Parser.ExceptionSpecificationContext = ExceptionSpecificationContext; 
  CPP14Parser.DynamicExceptionSpecificationContext = DynamicExceptionSpecificationContext; 
  CPP14Parser.TypeIdListContext = TypeIdListContext; 
  CPP14Parser.NoeExceptSpecificationContext = NoeExceptSpecificationContext; 
  CPP14Parser.TheOperatorContext = TheOperatorContext; 
  CPP14Parser.LiteralContext = LiteralContext; 
  