Beispiel #1
0
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class MicroLexer extends Lexer {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int T__30 = 1,
      T__29 = 2,
      T__28 = 3,
      T__27 = 4,
      T__26 = 5,
      T__25 = 6,
      T__24 = 7,
      T__23 = 8,
      T__22 = 9,
      T__21 = 10,
      T__20 = 11,
      T__19 = 12,
      T__18 = 13,
      T__17 = 14,
      T__16 = 15,
      T__15 = 16,
      T__14 = 17,
      T__13 = 18,
      T__12 = 19,
      T__11 = 20,
      T__10 = 21,
      T__9 = 22,
      T__8 = 23,
      T__7 = 24,
      T__6 = 25,
      T__5 = 26,
      T__4 = 27,
      T__3 = 28,
      T__2 = 29,
      T__1 = 30,
      T__0 = 31,
      KEYWORD = 32,
      IDENTIFIER = 33,
      FLOATLITERAL = 34,
      INTLITERAL = 35,
      STRINGLITERAL = 36,
      OPERATORS = 37,
      COMMENTS = 38,
      WHITESPACE = 39;
  public static String[] modeNames = {"DEFAULT_MODE"};

  public static final String[] tokenNames = {
    "<INVALID>",
    "','",
    "'ROF'",
    "'*'",
    "'-'",
    "'FI'",
    "'PROGRAM'",
    "'('",
    "'<'",
    "'READ'",
    "'END'",
    "'!='",
    "'<='",
    "'ELSE'",
    "'VOID'",
    "'STRING'",
    "'IF'",
    "'FOR'",
    "'WRITE'",
    "')'",
    "'+'",
    "'='",
    "';'",
    "'FUNCTION'",
    "'>'",
    "'FLOAT'",
    "':='",
    "'RETURN'",
    "'/'",
    "'BEGIN'",
    "'>='",
    "'INT'",
    "KEYWORD",
    "IDENTIFIER",
    "FLOATLITERAL",
    "INTLITERAL",
    "STRINGLITERAL",
    "OPERATORS",
    "COMMENTS",
    "WHITESPACE"
  };
  public static final String[] ruleNames = {
    "T__30",
    "T__29",
    "T__28",
    "T__27",
    "T__26",
    "T__25",
    "T__24",
    "T__23",
    "T__22",
    "T__21",
    "T__20",
    "T__19",
    "T__18",
    "T__17",
    "T__16",
    "T__15",
    "T__14",
    "T__13",
    "T__12",
    "T__11",
    "T__10",
    "T__9",
    "T__8",
    "T__7",
    "T__6",
    "T__5",
    "T__4",
    "T__3",
    "T__2",
    "T__1",
    "T__0",
    "ESCAPED_QUOTE",
    "ESCAPED_PERIOD",
    "NEW_LINE",
    "CARRIAGE_RETURN",
    "DOUBLE_DASH",
    "KEYWORD",
    "IDENTIFIER",
    "FLOATLITERAL",
    "INTLITERAL",
    "STRINGLITERAL",
    "OPERATORS",
    "COMMENTS",
    "WHITESPACE"
  };

  public MicroLexer(CharStream input) {
    super(input);
    _interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  @Override
  public String getGrammarFileName() {
    return "Micro.g4";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public String[] getModeNames() {
    return modeNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  @Override
  public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
    switch (ruleIndex) {
      case 42:
        COMMENTS_action((RuleContext) _localctx, actionIndex);
        break;

      case 43:
        WHITESPACE_action((RuleContext) _localctx, actionIndex);
        break;
    }
  }

  private void WHITESPACE_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
      case 1:
        skip();
        break;
    }
  }

  private void COMMENTS_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
      case 0:
        skip();
        break;
    }
  }

  public static final String _serializedATN =
      "\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\2)\u017b\b\1\4\2\t"
          + "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"
          + "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"
          + "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"
          + "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"
          + "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"
          + ",\t,\4-\t-\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\6\3\7\3\7"
          + "\3\7\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\13\3\13"
          + "\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3\16\3\17\3\17"
          + "\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\22"
          + "\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\25\3\25\3\26"
          + "\3\26\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31"
          + "\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34"
          + "\3\34\3\34\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3 \3"
          + " \3 \3 \3!\3!\3!\3\"\3\"\3\"\3#\3#\3$\3$\3%\3%\3%\3&\3&\3&\3&\3&\3&\3"
          + "&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3"
          + "&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3"
          + "&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3"
          + "&\3&\3&\3&\3&\3&\3&\3&\5&\u0134\n&\3\'\6\'\u0137\n\'\r\'\16\'\u0138\3"
          + "\'\3\'\6\'\u013d\n\'\r\'\16\'\u013e\5\'\u0141\n\'\3(\7(\u0144\n(\f(\16"
          + "(\u0147\13(\3(\3(\6(\u014b\n(\r(\16(\u014c\3)\6)\u0150\n)\r)\16)\u0151"
          + "\3*\3*\3*\7*\u0157\n*\f*\16*\u015a\13*\3*\3*\3+\3+\3+\3+\3+\3+\3+\3+\3"
          + "+\3+\5+\u0168\n+\3,\3,\3,\3,\7,\u016e\n,\f,\16,\u0171\13,\3,\3,\3-\6-"
          + "\u0176\n-\r-\16-\u0177\3-\3-\3\u0158.\3\3\1\5\4\1\7\5\1\t\6\1\13\7\1\r"
          + "\b\1\17\t\1\21\n\1\23\13\1\25\f\1\27\r\1\31\16\1\33\17\1\35\20\1\37\21"
          + "\1!\22\1#\23\1%\24\1\'\25\1)\26\1+\27\1-\30\1/\31\1\61\32\1\63\33\1\65"
          + "\34\1\67\35\19\36\1;\37\1= \1?!\1A\2\1C\2\1E\2\1G\2\1I\2\1K\"\1M#\1O$"
          + "\1Q%\1S&\1U\'\1W(\2Y)\3\3\2\n\4\2C\\c|\3\2C|\5\2\62;C\\c|\3\2\62;\4\2"
          + "\f\f\17\17\6\2,-//\61\61??\6\2*+..=>@@\5\2\13\f\17\17\"\"\u0195\2\3\3"
          + "\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2"
          + "\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3"
          + "\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2"
          + "%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61"
          + "\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2"
          + "\2=\3\2\2\2\2?\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S"
          + "\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\3[\3\2\2\2\5]\3\2\2\2\7a\3\2"
          + "\2\2\tc\3\2\2\2\13e\3\2\2\2\rh\3\2\2\2\17p\3\2\2\2\21r\3\2\2\2\23t\3\2"
          + "\2\2\25y\3\2\2\2\27}\3\2\2\2\31\u0080\3\2\2\2\33\u0083\3\2\2\2\35\u0088"
          + "\3\2\2\2\37\u008d\3\2\2\2!\u0094\3\2\2\2#\u0097\3\2\2\2%\u009b\3\2\2\2"
          + "\'\u00a1\3\2\2\2)\u00a3\3\2\2\2+\u00a5\3\2\2\2-\u00a7\3\2\2\2/\u00a9\3"
          + "\2\2\2\61\u00b2\3\2\2\2\63\u00b4\3\2\2\2\65\u00ba\3\2\2\2\67\u00bd\3\2"
          + "\2\29\u00c4\3\2\2\2;\u00c6\3\2\2\2=\u00cc\3\2\2\2?\u00cf\3\2\2\2A\u00d3"
          + "\3\2\2\2C\u00d6\3\2\2\2E\u00d9\3\2\2\2G\u00db\3\2\2\2I\u00dd\3\2\2\2K"
          + "\u0133\3\2\2\2M\u0140\3\2\2\2O\u0145\3\2\2\2Q\u014f\3\2\2\2S\u0153\3\2"
          + "\2\2U\u0167\3\2\2\2W\u0169\3\2\2\2Y\u0175\3\2\2\2[\\\7.\2\2\\\4\3\2\2"
          + "\2]^\7T\2\2^_\7Q\2\2_`\7H\2\2`\6\3\2\2\2ab\7,\2\2b\b\3\2\2\2cd\7/\2\2"
          + "d\n\3\2\2\2ef\7H\2\2fg\7K\2\2g\f\3\2\2\2hi\7R\2\2ij\7T\2\2jk\7Q\2\2kl"
          + "\7I\2\2lm\7T\2\2mn\7C\2\2no\7O\2\2o\16\3\2\2\2pq\7*\2\2q\20\3\2\2\2rs"
          + "\7>\2\2s\22\3\2\2\2tu\7T\2\2uv\7G\2\2vw\7C\2\2wx\7F\2\2x\24\3\2\2\2yz"
          + "\7G\2\2z{\7P\2\2{|\7F\2\2|\26\3\2\2\2}~\7#\2\2~\177\7?\2\2\177\30\3\2"
          + "\2\2\u0080\u0081\7>\2\2\u0081\u0082\7?\2\2\u0082\32\3\2\2\2\u0083\u0084"
          + "\7G\2\2\u0084\u0085\7N\2\2\u0085\u0086\7U\2\2\u0086\u0087\7G\2\2\u0087"
          + "\34\3\2\2\2\u0088\u0089\7X\2\2\u0089\u008a\7Q\2\2\u008a\u008b\7K\2\2\u008b"
          + "\u008c\7F\2\2\u008c\36\3\2\2\2\u008d\u008e\7U\2\2\u008e\u008f\7V\2\2\u008f"
          + "\u0090\7T\2\2\u0090\u0091\7K\2\2\u0091\u0092\7P\2\2\u0092\u0093\7I\2\2"
          + "\u0093 \3\2\2\2\u0094\u0095\7K\2\2\u0095\u0096\7H\2\2\u0096\"\3\2\2\2"
          + "\u0097\u0098\7H\2\2\u0098\u0099\7Q\2\2\u0099\u009a\7T\2\2\u009a$\3\2\2"
          + "\2\u009b\u009c\7Y\2\2\u009c\u009d\7T\2\2\u009d\u009e\7K\2\2\u009e\u009f"
          + "\7V\2\2\u009f\u00a0\7G\2\2\u00a0&\3\2\2\2\u00a1\u00a2\7+\2\2\u00a2(\3"
          + "\2\2\2\u00a3\u00a4\7-\2\2\u00a4*\3\2\2\2\u00a5\u00a6\7?\2\2\u00a6,\3\2"
          + "\2\2\u00a7\u00a8\7=\2\2\u00a8.\3\2\2\2\u00a9\u00aa\7H\2\2\u00aa\u00ab"
          + "\7W\2\2\u00ab\u00ac\7P\2\2\u00ac\u00ad\7E\2\2\u00ad\u00ae\7V\2\2\u00ae"
          + "\u00af\7K\2\2\u00af\u00b0\7Q\2\2\u00b0\u00b1\7P\2\2\u00b1\60\3\2\2\2\u00b2"
          + "\u00b3\7@\2\2\u00b3\62\3\2\2\2\u00b4\u00b5\7H\2\2\u00b5\u00b6\7N\2\2\u00b6"
          + "\u00b7\7Q\2\2\u00b7\u00b8\7C\2\2\u00b8\u00b9\7V\2\2\u00b9\64\3\2\2\2\u00ba"
          + "\u00bb\7<\2\2\u00bb\u00bc\7?\2\2\u00bc\66\3\2\2\2\u00bd\u00be\7T\2\2\u00be"
          + "\u00bf\7G\2\2\u00bf\u00c0\7V\2\2\u00c0\u00c1\7W\2\2\u00c1\u00c2\7T\2\2"
          + "\u00c2\u00c3\7P\2\2\u00c38\3\2\2\2\u00c4\u00c5\7\61\2\2\u00c5:\3\2\2\2"
          + "\u00c6\u00c7\7D\2\2\u00c7\u00c8\7G\2\2\u00c8\u00c9\7I\2\2\u00c9\u00ca"
          + "\7K\2\2\u00ca\u00cb\7P\2\2\u00cb<\3\2\2\2\u00cc\u00cd\7@\2\2\u00cd\u00ce"
          + "\7?\2\2\u00ce>\3\2\2\2\u00cf\u00d0\7K\2\2\u00d0\u00d1\7P\2\2\u00d1\u00d2"
          + "\7V\2\2\u00d2@\3\2\2\2\u00d3\u00d4\7^\2\2\u00d4\u00d5\7$\2\2\u00d5B\3"
          + "\2\2\2\u00d6\u00d7\7^\2\2\u00d7\u00d8\7\60\2\2\u00d8D\3\2\2\2\u00d9\u00da"
          + "\7\f\2\2\u00daF\3\2\2\2\u00db\u00dc\7\17\2\2\u00dcH\3\2\2\2\u00dd\u00de"
          + "\7/\2\2\u00de\u00df\7/\2\2\u00dfJ\3\2\2\2\u00e0\u00e1\7R\2\2\u00e1\u00e2"
          + "\7T\2\2\u00e2\u00e3\7Q\2\2\u00e3\u00e4\7I\2\2\u00e4\u00e5\7T\2\2\u00e5"
          + "\u00e6\7C\2\2\u00e6\u0134\7O\2\2\u00e7\u00e8\7D\2\2\u00e8\u00e9\7G\2\2"
          + "\u00e9\u00ea\7I\2\2\u00ea\u00eb\7K\2\2\u00eb\u0134\7P\2\2\u00ec\u00ed"
          + "\7G\2\2\u00ed\u00ee\7P\2\2\u00ee\u0134\7F\2\2\u00ef\u00f0\7H\2\2\u00f0"
          + "\u00f1\7W\2\2\u00f1\u00f2\7P\2\2\u00f2\u00f3\7E\2\2\u00f3\u00f4\7V\2\2"
          + "\u00f4\u00f5\7K\2\2\u00f5\u00f6\7Q\2\2\u00f6\u0134\7P\2\2\u00f7\u00f8"
          + "\7T\2\2\u00f8\u00f9\7G\2\2\u00f9\u00fa\7C\2\2\u00fa\u0134\7F\2\2\u00fb"
          + "\u00fc\7Y\2\2\u00fc\u00fd\7T\2\2\u00fd\u00fe\7K\2\2\u00fe\u00ff\7V\2\2"
          + "\u00ff\u0134\7G\2\2\u0100\u0101\7K\2\2\u0101\u0134\7H\2\2\u0102\u0103"
          + "\7G\2\2\u0103\u0104\7N\2\2\u0104\u0105\7U\2\2\u0105\u0134\7G\2\2\u0106"
          + "\u0107\7H\2\2\u0107\u0134\7K\2\2\u0108\u0109\7H\2\2\u0109\u010a\7Q\2\2"
          + "\u010a\u0134\7T\2\2\u010b\u010c\7T\2\2\u010c\u010d\7Q\2\2\u010d\u0134"
          + "\7H\2\2\u010e\u010f\7E\2\2\u010f\u0110\7Q\2\2\u0110\u0111\7P\2\2\u0111"
          + "\u0112\7V\2\2\u0112\u0113\7K\2\2\u0113\u0114\7P\2\2\u0114\u0115\7W\2\2"
          + "\u0115\u0134\7G\2\2\u0116\u0117\7D\2\2\u0117\u0118\7T\2\2\u0118\u0119"
          + "\7G\2\2\u0119\u011a\7C\2\2\u011a\u0134\7M\2\2\u011b\u011c\7T\2\2\u011c"
          + "\u011d\7G\2\2\u011d\u011e\7V\2\2\u011e\u011f\7W\2\2\u011f\u0120\7T\2\2"
          + "\u0120\u0134\7P\2\2\u0121\u0122\7K\2\2\u0122\u0123\7P\2\2\u0123\u0134"
          + "\7V\2\2\u0124\u0125\7X\2\2\u0125\u0126\7Q\2\2\u0126\u0127\7K\2\2\u0127"
          + "\u0134\7F\2\2\u0128\u0129\7U\2\2\u0129\u012a\7V\2\2\u012a\u012b\7T\2\2"
          + "\u012b\u012c\7K\2\2\u012c\u012d\7P\2\2\u012d\u0134\7I\2\2\u012e\u012f"
          + "\7H\2\2\u012f\u0130\7N\2\2\u0130\u0131\7Q\2\2\u0131\u0132\7C\2\2\u0132"
          + "\u0134\7V\2\2\u0133\u00e0\3\2\2\2\u0133\u00e7\3\2\2\2\u0133\u00ec\3\2"
          + "\2\2\u0133\u00ef\3\2\2\2\u0133\u00f7\3\2\2\2\u0133\u00fb\3\2\2\2\u0133"
          + "\u0100\3\2\2\2\u0133\u0102\3\2\2\2\u0133\u0106\3\2\2\2\u0133\u0108\3\2"
          + "\2\2\u0133\u010b\3\2\2\2\u0133\u010e\3\2\2\2\u0133\u0116\3\2\2\2\u0133"
          + "\u011b\3\2\2\2\u0133\u0121\3\2\2\2\u0133\u0124\3\2\2\2\u0133\u0128\3\2"
          + "\2\2\u0133\u012e\3\2\2\2\u0134L\3\2\2\2\u0135\u0137\t\2\2\2\u0136\u0135"
          + "\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u0136\3\2\2\2\u0138\u0139\3\2\2\2\u0139"
          + "\u0141\3\2\2\2\u013a\u013c\t\3\2\2\u013b\u013d\t\4\2\2\u013c\u013b\3\2"
          + "\2\2\u013d\u013e\3\2\2\2\u013e\u013c\3\2\2\2\u013e\u013f\3\2\2\2\u013f"
          + "\u0141\3\2\2\2\u0140\u0136\3\2\2\2\u0140\u013a\3\2\2\2\u0141N\3\2\2\2"
          + "\u0142\u0144\t\5\2\2\u0143\u0142\3\2\2\2\u0144\u0147\3\2\2\2\u0145\u0143"
          + "\3\2\2\2\u0145\u0146\3\2\2\2\u0146\u0148\3\2\2\2\u0147\u0145\3\2\2\2\u0148"
          + "\u014a\7\60\2\2\u0149\u014b\t\5\2\2\u014a\u0149\3\2\2\2\u014b\u014c\3"
          + "\2\2\2\u014c\u014a\3\2\2\2\u014c\u014d\3\2\2\2\u014dP\3\2\2\2\u014e\u0150"
          + "\t\5\2\2\u014f\u014e\3\2\2\2\u0150\u0151\3\2\2\2\u0151\u014f\3\2\2\2\u0151"
          + "\u0152\3\2\2\2\u0152R\3\2\2\2\u0153\u0158\7$\2\2\u0154\u0157\5A!\2\u0155"
          + "\u0157\n\6\2\2\u0156\u0154\3\2\2\2\u0156\u0155\3\2\2\2\u0157\u015a\3\2"
          + "\2\2\u0158\u0159\3\2\2\2\u0158\u0156\3\2\2\2\u0159\u015b\3\2\2\2\u015a"
          + "\u0158\3\2\2\2\u015b\u015c\7$\2\2\u015cT\3\2\2\2\u015d\u015e\7<\2\2\u015e"
          + "\u0168\7?\2\2\u015f\u0168\t\7\2\2\u0160\u0161\7#\2\2\u0161\u0168\7?\2"
          + "\2\u0162\u0168\t\b\2\2\u0163\u0164\7>\2\2\u0164\u0168\7?\2\2\u0165\u0166"
          + "\7@\2\2\u0166\u0168\7?\2\2\u0167\u015d\3\2\2\2\u0167\u015f\3\2\2\2\u0167"
          + "\u0160\3\2\2\2\u0167\u0162\3\2\2\2\u0167\u0163\3\2\2\2\u0167\u0165\3\2"
          + "\2\2\u0168V\3\2\2\2\u0169\u016a\7/\2\2\u016a\u016b\7/\2\2\u016b\u016f"
          + "\3\2\2\2\u016c\u016e\n\6\2\2\u016d\u016c\3\2\2\2\u016e\u0171\3\2\2\2\u016f"
          + "\u016d\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u0172\3\2\2\2\u0171\u016f\3\2"
          + "\2\2\u0172\u0173\b,\2\2\u0173X\3\2\2\2\u0174\u0176\t\t\2\2\u0175\u0174"
          + "\3\2\2\2\u0176\u0177\3\2\2\2\u0177\u0175\3\2\2\2\u0177\u0178\3\2\2\2\u0178"
          + "\u0179\3\2\2\2\u0179\u017a\b-\3\2\u017aZ\3\2\2\2\17\2\u0133\u0138\u013e"
          + "\u0140\u0145\u014c\u0151\u0156\u0158\u0167\u016f\u0177";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
    for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
    }
  }
}
Beispiel #2
0
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class ETPParser extends Parser {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int FUN = 1,
      REF = 2,
      COMMA = 3,
      LSQUARE = 4,
      RSQUARE = 5,
      LCURLY = 6,
      RCURLY = 7,
      LESSTHAN = 8,
      GREATERTHAN = 9,
      COLON = 10,
      BINSTART = 11,
      BINEND = 12,
      TRUE = 13,
      FALSE = 14,
      AT = 15,
      HASH = 16,
      DOT = 17,
      ID = 18,
      IDSTRING = 19,
      INT = 20,
      FLOAT = 21,
      PID = 22,
      REFID = 23,
      STRING = 24,
      LINE_COMMENT = 25,
      WS = 26;
  public static final String[] tokenNames = {
    "<INVALID>",
    "'Fun'",
    "'Ref'",
    "','",
    "'['",
    "']'",
    "'{'",
    "'}'",
    "'<'",
    "'>'",
    "':'",
    "'<<'",
    "'>>'",
    "'true'",
    "'false'",
    "'@'",
    "'#'",
    "'.'",
    "ID",
    "IDSTRING",
    "INT",
    "FLOAT",
    "PID",
    "REFID",
    "STRING",
    "LINE_COMMENT",
    "WS"
  };
  public static final int RULE_etp_term = 0,
      RULE_etp_int = 1,
      RULE_etp_float = 2,
      RULE_etp_string = 3,
      RULE_etp_atom = 4,
      RULE_etp_bool = 5,
      RULE_etp_list = 6,
      RULE_etp_tuple = 7,
      RULE_etp_pid = 8,
      RULE_etp_fun = 9,
      RULE_etp_binary = 10,
      RULE_etp_binary_item = 11,
      RULE_etp_ref = 12;
  public static final String[] ruleNames = {
    "etp_term", "etp_int", "etp_float", "etp_string", "etp_atom", "etp_bool",
    "etp_list", "etp_tuple", "etp_pid", "etp_fun", "etp_binary", "etp_binary_item",
    "etp_ref"
  };

  @Override
  public String getGrammarFileName() {
    return "ETP.g4";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  public ETPParser(TokenStream input) {
    super(input);
    _interp = new ParserATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  public static class Etp_termContext extends ParserRuleContext {
    public Etp_refContext etp_ref() {
      return getRuleContext(Etp_refContext.class, 0);
    }

    public Etp_floatContext etp_float() {
      return getRuleContext(Etp_floatContext.class, 0);
    }

    public Etp_pidContext etp_pid() {
      return getRuleContext(Etp_pidContext.class, 0);
    }

    public Etp_binaryContext etp_binary() {
      return getRuleContext(Etp_binaryContext.class, 0);
    }

    public Etp_tupleContext etp_tuple() {
      return getRuleContext(Etp_tupleContext.class, 0);
    }

    public Etp_atomContext etp_atom() {
      return getRuleContext(Etp_atomContext.class, 0);
    }

    public Etp_stringContext etp_string() {
      return getRuleContext(Etp_stringContext.class, 0);
    }

    public Etp_funContext etp_fun() {
      return getRuleContext(Etp_funContext.class, 0);
    }

    public Etp_boolContext etp_bool() {
      return getRuleContext(Etp_boolContext.class, 0);
    }

    public Etp_listContext etp_list() {
      return getRuleContext(Etp_listContext.class, 0);
    }

    public Etp_intContext etp_int() {
      return getRuleContext(Etp_intContext.class, 0);
    }

    public Etp_termContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_term;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_term(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_term(this);
    }
  }

  public final Etp_termContext etp_term() throws RecognitionException {
    Etp_termContext _localctx = new Etp_termContext(_ctx, getState());
    enterRule(_localctx, 0, RULE_etp_term);
    try {
      setState(37);
      switch (getInterpreter().adaptivePredict(_input, 0, _ctx)) {
        case 1:
          enterOuterAlt(_localctx, 1);
          {
            setState(26);
            etp_atom();
          }
          break;

        case 2:
          enterOuterAlt(_localctx, 2);
          {
            setState(27);
            etp_int();
          }
          break;

        case 3:
          enterOuterAlt(_localctx, 3);
          {
            setState(28);
            etp_float();
          }
          break;

        case 4:
          enterOuterAlt(_localctx, 4);
          {
            setState(29);
            etp_string();
          }
          break;

        case 5:
          enterOuterAlt(_localctx, 5);
          {
            setState(30);
            etp_bool();
          }
          break;

        case 6:
          enterOuterAlt(_localctx, 6);
          {
            setState(31);
            etp_list();
          }
          break;

        case 7:
          enterOuterAlt(_localctx, 7);
          {
            setState(32);
            etp_tuple();
          }
          break;

        case 8:
          enterOuterAlt(_localctx, 8);
          {
            setState(33);
            etp_binary();
          }
          break;

        case 9:
          enterOuterAlt(_localctx, 9);
          {
            setState(34);
            etp_pid();
          }
          break;

        case 10:
          enterOuterAlt(_localctx, 10);
          {
            setState(35);
            etp_fun();
          }
          break;

        case 11:
          enterOuterAlt(_localctx, 11);
          {
            setState(36);
            etp_ref();
          }
          break;
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_intContext extends ParserRuleContext {
    public TerminalNode INT() {
      return getToken(ETPParser.INT, 0);
    }

    public Etp_intContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_int;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_int(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_int(this);
    }
  }

  public final Etp_intContext etp_int() throws RecognitionException {
    Etp_intContext _localctx = new Etp_intContext(_ctx, getState());
    enterRule(_localctx, 2, RULE_etp_int);
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(39);
        match(INT);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_floatContext extends ParserRuleContext {
    public TerminalNode FLOAT() {
      return getToken(ETPParser.FLOAT, 0);
    }

    public Etp_floatContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_float;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_float(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_float(this);
    }
  }

  public final Etp_floatContext etp_float() throws RecognitionException {
    Etp_floatContext _localctx = new Etp_floatContext(_ctx, getState());
    enterRule(_localctx, 4, RULE_etp_float);
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(41);
        match(FLOAT);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_stringContext extends ParserRuleContext {
    public TerminalNode STRING() {
      return getToken(ETPParser.STRING, 0);
    }

    public Etp_stringContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_string;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_string(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_string(this);
    }
  }

  public final Etp_stringContext etp_string() throws RecognitionException {
    Etp_stringContext _localctx = new Etp_stringContext(_ctx, getState());
    enterRule(_localctx, 6, RULE_etp_string);
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(43);
        match(STRING);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_atomContext extends ParserRuleContext {
    public TerminalNode ID() {
      return getToken(ETPParser.ID, 0);
    }

    public TerminalNode IDSTRING() {
      return getToken(ETPParser.IDSTRING, 0);
    }

    public Etp_atomContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_atom;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_atom(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_atom(this);
    }
  }

  public final Etp_atomContext etp_atom() throws RecognitionException {
    Etp_atomContext _localctx = new Etp_atomContext(_ctx, getState());
    enterRule(_localctx, 8, RULE_etp_atom);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(45);
        _la = _input.LA(1);
        if (!(_la == ID || _la == IDSTRING)) {
          _errHandler.recoverInline(this);
        }
        consume();
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_boolContext extends ParserRuleContext {
    public TerminalNode FALSE() {
      return getToken(ETPParser.FALSE, 0);
    }

    public TerminalNode TRUE() {
      return getToken(ETPParser.TRUE, 0);
    }

    public Etp_boolContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_bool;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_bool(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_bool(this);
    }
  }

  public final Etp_boolContext etp_bool() throws RecognitionException {
    Etp_boolContext _localctx = new Etp_boolContext(_ctx, getState());
    enterRule(_localctx, 10, RULE_etp_bool);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(47);
        _la = _input.LA(1);
        if (!(_la == TRUE || _la == FALSE)) {
          _errHandler.recoverInline(this);
        }
        consume();
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_listContext extends ParserRuleContext {
    public Etp_termContext etp_term;
    public List<Etp_termContext> listitems = new ArrayList<Etp_termContext>();

    public List<Etp_termContext> etp_term() {
      return getRuleContexts(Etp_termContext.class);
    }

    public TerminalNode COMMA(int i) {
      return getToken(ETPParser.COMMA, i);
    }

    public TerminalNode LSQUARE() {
      return getToken(ETPParser.LSQUARE, 0);
    }

    public TerminalNode RSQUARE() {
      return getToken(ETPParser.RSQUARE, 0);
    }

    public List<TerminalNode> COMMA() {
      return getTokens(ETPParser.COMMA);
    }

    public Etp_termContext etp_term(int i) {
      return getRuleContext(Etp_termContext.class, i);
    }

    public Etp_listContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_list;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_list(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_list(this);
    }
  }

  public final Etp_listContext etp_list() throws RecognitionException {
    Etp_listContext _localctx = new Etp_listContext(_ctx, getState());
    enterRule(_localctx, 12, RULE_etp_list);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(49);
        match(LSQUARE);
        setState(58);
        _la = _input.LA(1);
        if ((((_la) & ~0x3f) == 0
            && ((1L << _la)
                    & ((1L << LSQUARE)
                        | (1L << LCURLY)
                        | (1L << LESSTHAN)
                        | (1L << BINSTART)
                        | (1L << TRUE)
                        | (1L << FALSE)
                        | (1L << HASH)
                        | (1L << ID)
                        | (1L << IDSTRING)
                        | (1L << INT)
                        | (1L << FLOAT)
                        | (1L << STRING)))
                != 0)) {
          {
            setState(50);
            ((Etp_listContext) _localctx).etp_term = etp_term();
            ((Etp_listContext) _localctx).listitems.add(((Etp_listContext) _localctx).etp_term);
            setState(55);
            _errHandler.sync(this);
            _la = _input.LA(1);
            while (_la == COMMA) {
              {
                {
                  setState(51);
                  match(COMMA);
                  setState(52);
                  ((Etp_listContext) _localctx).etp_term = etp_term();
                  ((Etp_listContext) _localctx)
                      .listitems.add(((Etp_listContext) _localctx).etp_term);
                }
              }
              setState(57);
              _errHandler.sync(this);
              _la = _input.LA(1);
            }
          }
        }

        setState(60);
        match(RSQUARE);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_tupleContext extends ParserRuleContext {
    public Etp_termContext etp_term;
    public List<Etp_termContext> tupleitems = new ArrayList<Etp_termContext>();

    public List<Etp_termContext> etp_term() {
      return getRuleContexts(Etp_termContext.class);
    }

    public TerminalNode LCURLY() {
      return getToken(ETPParser.LCURLY, 0);
    }

    public TerminalNode COMMA(int i) {
      return getToken(ETPParser.COMMA, i);
    }

    public List<TerminalNode> COMMA() {
      return getTokens(ETPParser.COMMA);
    }

    public Etp_termContext etp_term(int i) {
      return getRuleContext(Etp_termContext.class, i);
    }

    public TerminalNode RCURLY() {
      return getToken(ETPParser.RCURLY, 0);
    }

    public Etp_tupleContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_tuple;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_tuple(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_tuple(this);
    }
  }

  public final Etp_tupleContext etp_tuple() throws RecognitionException {
    Etp_tupleContext _localctx = new Etp_tupleContext(_ctx, getState());
    enterRule(_localctx, 14, RULE_etp_tuple);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(62);
        match(LCURLY);
        setState(71);
        _la = _input.LA(1);
        if ((((_la) & ~0x3f) == 0
            && ((1L << _la)
                    & ((1L << LSQUARE)
                        | (1L << LCURLY)
                        | (1L << LESSTHAN)
                        | (1L << BINSTART)
                        | (1L << TRUE)
                        | (1L << FALSE)
                        | (1L << HASH)
                        | (1L << ID)
                        | (1L << IDSTRING)
                        | (1L << INT)
                        | (1L << FLOAT)
                        | (1L << STRING)))
                != 0)) {
          {
            setState(63);
            ((Etp_tupleContext) _localctx).etp_term = etp_term();
            ((Etp_tupleContext) _localctx).tupleitems.add(((Etp_tupleContext) _localctx).etp_term);
            setState(68);
            _errHandler.sync(this);
            _la = _input.LA(1);
            while (_la == COMMA) {
              {
                {
                  setState(64);
                  match(COMMA);
                  setState(65);
                  ((Etp_tupleContext) _localctx).etp_term = etp_term();
                  ((Etp_tupleContext) _localctx)
                      .tupleitems.add(((Etp_tupleContext) _localctx).etp_term);
                }
              }
              setState(70);
              _errHandler.sync(this);
              _la = _input.LA(1);
            }
          }
        }

        setState(73);
        match(RCURLY);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_pidContext extends ParserRuleContext {
    public TerminalNode LESSTHAN() {
      return getToken(ETPParser.LESSTHAN, 0);
    }

    public TerminalNode PID() {
      return getToken(ETPParser.PID, 0);
    }

    public TerminalNode GREATERTHAN() {
      return getToken(ETPParser.GREATERTHAN, 0);
    }

    public Etp_pidContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_pid;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_pid(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_pid(this);
    }
  }

  public final Etp_pidContext etp_pid() throws RecognitionException {
    Etp_pidContext _localctx = new Etp_pidContext(_ctx, getState());
    enterRule(_localctx, 16, RULE_etp_pid);
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(75);
        match(LESSTHAN);
        setState(76);
        match(PID);
        setState(77);
        match(GREATERTHAN);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_funContext extends ParserRuleContext {
    public TerminalNode HASH() {
      return getToken(ETPParser.HASH, 0);
    }

    public TerminalNode LESSTHAN() {
      return getToken(ETPParser.LESSTHAN, 0);
    }

    public TerminalNode FUN() {
      return getToken(ETPParser.FUN, 0);
    }

    public TerminalNode GREATERTHAN() {
      return getToken(ETPParser.GREATERTHAN, 0);
    }

    public Etp_funContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_fun;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_fun(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_fun(this);
    }
  }

  public final Etp_funContext etp_fun() throws RecognitionException {
    Etp_funContext _localctx = new Etp_funContext(_ctx, getState());
    enterRule(_localctx, 18, RULE_etp_fun);
    try {
      int _alt;
      enterOuterAlt(_localctx, 1);
      {
        setState(79);
        match(HASH);
        setState(80);
        match(FUN);
        setState(81);
        match(LESSTHAN);
        setState(85);
        _errHandler.sync(this);
        _alt = getInterpreter().adaptivePredict(_input, 5, _ctx);
        while (_alt != 1 && _alt != -1) {
          if (_alt == 1 + 1) {
            {
              {
                setState(82);
                matchWildcard();
              }
            }
          }
          setState(87);
          _errHandler.sync(this);
          _alt = getInterpreter().adaptivePredict(_input, 5, _ctx);
        }
        setState(88);
        match(GREATERTHAN);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_binaryContext extends ParserRuleContext {
    public Etp_binary_itemContext etp_binary_item;
    public List<Etp_binary_itemContext> segments = new ArrayList<Etp_binary_itemContext>();

    public TerminalNode COMMA(int i) {
      return getToken(ETPParser.COMMA, i);
    }

    public TerminalNode BINSTART() {
      return getToken(ETPParser.BINSTART, 0);
    }

    public List<TerminalNode> COMMA() {
      return getTokens(ETPParser.COMMA);
    }

    public TerminalNode BINEND() {
      return getToken(ETPParser.BINEND, 0);
    }

    public List<Etp_binary_itemContext> etp_binary_item() {
      return getRuleContexts(Etp_binary_itemContext.class);
    }

    public Etp_binary_itemContext etp_binary_item(int i) {
      return getRuleContext(Etp_binary_itemContext.class, i);
    }

    public Etp_binaryContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_binary;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_binary(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_binary(this);
    }
  }

  public final Etp_binaryContext etp_binary() throws RecognitionException {
    Etp_binaryContext _localctx = new Etp_binaryContext(_ctx, getState());
    enterRule(_localctx, 20, RULE_etp_binary);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(90);
        match(BINSTART);
        setState(99);
        _la = _input.LA(1);
        if (_la == INT || _la == STRING) {
          {
            setState(91);
            ((Etp_binaryContext) _localctx).etp_binary_item = etp_binary_item();
            ((Etp_binaryContext) _localctx)
                .segments.add(((Etp_binaryContext) _localctx).etp_binary_item);
            setState(96);
            _errHandler.sync(this);
            _la = _input.LA(1);
            while (_la == COMMA) {
              {
                {
                  setState(92);
                  match(COMMA);
                  setState(93);
                  ((Etp_binaryContext) _localctx).etp_binary_item = etp_binary_item();
                  ((Etp_binaryContext) _localctx)
                      .segments.add(((Etp_binaryContext) _localctx).etp_binary_item);
                }
              }
              setState(98);
              _errHandler.sync(this);
              _la = _input.LA(1);
            }
          }
        }

        setState(101);
        match(BINEND);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_binary_itemContext extends ParserRuleContext {
    public Token val;
    public Token size;

    public TerminalNode COLON() {
      return getToken(ETPParser.COLON, 0);
    }

    public List<TerminalNode> INT() {
      return getTokens(ETPParser.INT);
    }

    public TerminalNode INT(int i) {
      return getToken(ETPParser.INT, i);
    }

    public TerminalNode STRING() {
      return getToken(ETPParser.STRING, 0);
    }

    public Etp_binary_itemContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_binary_item;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_binary_item(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_binary_item(this);
    }
  }

  public final Etp_binary_itemContext etp_binary_item() throws RecognitionException {
    Etp_binary_itemContext _localctx = new Etp_binary_itemContext(_ctx, getState());
    enterRule(_localctx, 22, RULE_etp_binary_item);
    int _la;
    try {
      setState(109);
      switch (_input.LA(1)) {
        case INT:
          enterOuterAlt(_localctx, 1);
          {
            setState(103);
            ((Etp_binary_itemContext) _localctx).val = match(INT);
            setState(106);
            _la = _input.LA(1);
            if (_la == COLON) {
              {
                setState(104);
                match(COLON);
                setState(105);
                ((Etp_binary_itemContext) _localctx).size = match(INT);
              }
            }
          }
          break;
        case STRING:
          enterOuterAlt(_localctx, 2);
          {
            setState(108);
            match(STRING);
          }
          break;
        default:
          throw new NoViableAltException(this);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class Etp_refContext extends ParserRuleContext {
    public TerminalNode HASH() {
      return getToken(ETPParser.HASH, 0);
    }

    public TerminalNode LESSTHAN() {
      return getToken(ETPParser.LESSTHAN, 0);
    }

    public TerminalNode REFID() {
      return getToken(ETPParser.REFID, 0);
    }

    public TerminalNode REF() {
      return getToken(ETPParser.REF, 0);
    }

    public TerminalNode GREATERTHAN() {
      return getToken(ETPParser.GREATERTHAN, 0);
    }

    public Etp_refContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_etp_ref;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).enterEtp_ref(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ETPListener) ((ETPListener) listener).exitEtp_ref(this);
    }
  }

  public final Etp_refContext etp_ref() throws RecognitionException {
    Etp_refContext _localctx = new Etp_refContext(_ctx, getState());
    enterRule(_localctx, 24, RULE_etp_ref);
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(111);
        match(HASH);
        setState(112);
        match(REF);
        setState(113);
        match(LESSTHAN);
        setState(114);
        match(REFID);
        setState(115);
        match(GREATERTHAN);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static final String _serializedATN =
      "\2\3\34x\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t"
          + "\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\3\2\3\2\3\2\3\2\3\2\3\2"
          + "\3\2\3\2\3\2\3\2\3\2\5\2(\n\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7"
          + "\3\b\3\b\3\b\3\b\7\b8\n\b\f\b\16\b;\13\b\5\b=\n\b\3\b\3\b\3\t\3\t\3\t"
          + "\3\t\7\tE\n\t\f\t\16\tH\13\t\5\tJ\n\t\3\t\3\t\3\n\3\n\3\n\3\n\3\13\3\13"
          + "\3\13\3\13\7\13V\n\13\f\13\16\13Y\13\13\3\13\3\13\3\f\3\f\3\f\3\f\7\f"
          + "a\n\f\f\f\16\fd\13\f\5\ff\n\f\3\f\3\f\3\r\3\r\3\r\5\rm\n\r\3\r\5\rp\n"
          + "\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3W\17\2\4\6\b\n\f\16\20\22\24\26"
          + "\30\32\2\4\3\24\25\3\17\20}\2\'\3\2\2\2\4)\3\2\2\2\6+\3\2\2\2\b-\3\2\2"
          + "\2\n/\3\2\2\2\f\61\3\2\2\2\16\63\3\2\2\2\20@\3\2\2\2\22M\3\2\2\2\24Q\3"
          + "\2\2\2\26\\\3\2\2\2\30o\3\2\2\2\32q\3\2\2\2\34(\5\n\6\2\35(\5\4\3\2\36"
          + "(\5\6\4\2\37(\5\b\5\2 (\5\f\7\2!(\5\16\b\2\"(\5\20\t\2#(\5\26\f\2$(\5"
          + "\22\n\2%(\5\24\13\2&(\5\32\16\2\'\34\3\2\2\2\'\35\3\2\2\2\'\36\3\2\2\2"
          + "\'\37\3\2\2\2\' \3\2\2\2\'!\3\2\2\2\'\"\3\2\2\2\'#\3\2\2\2\'$\3\2\2\2"
          + "\'%\3\2\2\2\'&\3\2\2\2(\3\3\2\2\2)*\7\26\2\2*\5\3\2\2\2+,\7\27\2\2,\7"
          + "\3\2\2\2-.\7\32\2\2.\t\3\2\2\2/\60\t\2\2\2\60\13\3\2\2\2\61\62\t\3\2\2"
          + "\62\r\3\2\2\2\63<\7\6\2\2\649\5\2\2\2\65\66\7\5\2\2\668\5\2\2\2\67\65"
          + "\3\2\2\28;\3\2\2\29\67\3\2\2\29:\3\2\2\2:=\3\2\2\2;9\3\2\2\2<\64\3\2\2"
          + "\2<=\3\2\2\2=>\3\2\2\2>?\7\7\2\2?\17\3\2\2\2@I\7\b\2\2AF\5\2\2\2BC\7\5"
          + "\2\2CE\5\2\2\2DB\3\2\2\2EH\3\2\2\2FD\3\2\2\2FG\3\2\2\2GJ\3\2\2\2HF\3\2"
          + "\2\2IA\3\2\2\2IJ\3\2\2\2JK\3\2\2\2KL\7\t\2\2L\21\3\2\2\2MN\7\n\2\2NO\7"
          + "\30\2\2OP\7\13\2\2P\23\3\2\2\2QR\7\22\2\2RS\7\3\2\2SW\7\n\2\2TV\13\2\2"
          + "\2UT\3\2\2\2VY\3\2\2\2WX\3\2\2\2WU\3\2\2\2XZ\3\2\2\2YW\3\2\2\2Z[\7\13"
          + "\2\2[\25\3\2\2\2\\e\7\r\2\2]b\5\30\r\2^_\7\5\2\2_a\5\30\r\2`^\3\2\2\2"
          + "ad\3\2\2\2b`\3\2\2\2bc\3\2\2\2cf\3\2\2\2db\3\2\2\2e]\3\2\2\2ef\3\2\2\2"
          + "fg\3\2\2\2gh\7\16\2\2h\27\3\2\2\2il\7\26\2\2jk\7\f\2\2km\7\26\2\2lj\3"
          + "\2\2\2lm\3\2\2\2mp\3\2\2\2np\7\32\2\2oi\3\2\2\2on\3\2\2\2p\31\3\2\2\2"
          + "qr\7\22\2\2rs\7\4\2\2st\7\n\2\2tu\7\31\2\2uv\7\13\2\2v\33\3\2\2\2\f\'"
          + "9<FIWbelo";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
  }
}
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class calculatorLexer extends Lexer {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int INT = 1,
      FLOAT = 2,
      MUL = 3,
      DIV = 4,
      ADD = 5,
      SUB = 6,
      EXP = 7,
      WHITESPACE = 8,
      NEWLINE = 9,
      ASSIGN = 10,
      BLOCK_START = 11,
      BLOCK_END = 12,
      IF = 13,
      ELSE = 14,
      WHILE = 15,
      DO = 16,
      AND = 17,
      OR = 18,
      NOT = 19,
      PAREN_OPEN = 20,
      PAREN_CLOSE = 21,
      STRING = 22,
      LT = 23,
      LTE = 24,
      GT = 25,
      GTE = 26,
      EQ = 27,
      NEQ = 28;
  public static String[] modeNames = {"DEFAULT_MODE"};

  public static final String[] tokenNames = {
    "<INVALID>",
    "INT",
    "FLOAT",
    "'*'",
    "'/'",
    "'+'",
    "'-'",
    "'^'",
    "WHITESPACE",
    "'\n'",
    "'='",
    "'{'",
    "'}'",
    "'if'",
    "'else'",
    "'while'",
    "'do'",
    "'and'",
    "'or'",
    "'not'",
    "'('",
    "')'",
    "STRING",
    "'<'",
    "'<='",
    "'>'",
    "'>='",
    "'=='",
    "'!='"
  };
  public static final String[] ruleNames = {
    "INT",
    "FLOAT",
    "MUL",
    "DIV",
    "ADD",
    "SUB",
    "EXP",
    "WHITESPACE",
    "NEWLINE",
    "ASSIGN",
    "BLOCK_START",
    "BLOCK_END",
    "IF",
    "ELSE",
    "WHILE",
    "DO",
    "AND",
    "OR",
    "NOT",
    "PAREN_OPEN",
    "PAREN_CLOSE",
    "STRING",
    "LT",
    "LTE",
    "GT",
    "GTE",
    "EQ",
    "NEQ",
    "DIGIT"
  };

  public calculatorLexer(CharStream input) {
    super(input);
    _interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  @Override
  public String getGrammarFileName() {
    return "calculator.g4";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public String[] getModeNames() {
    return modeNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  @Override
  public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
    switch (ruleIndex) {
      case 7:
        WHITESPACE_action((RuleContext) _localctx, actionIndex);
        break;
    }
  }

  private void WHITESPACE_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
      case 0:
        skip();
        break;
    }
  }

  public static final String _serializedATN =
      "\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\2\36\u009d\b\1\4\2"
          + "\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"
          + "\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"
          + "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"
          + "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\3\2\6\2?\n\2\r"
          + "\2\16\2@\3\3\6\3D\n\3\r\3\16\3E\3\3\3\3\7\3J\n\3\f\3\16\3M\13\3\3\4\3"
          + "\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\t\3\n\3\n\3\13\3\13\3"
          + "\f\3\f\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20"
          + "\3\20\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\24"
          + "\3\24\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\7\27\u0087\n\27\f\27\16"
          + "\27\u008a\13\27\3\30\3\30\3\31\3\31\3\31\3\32\3\32\3\33\3\33\3\33\3\34"
          + "\3\34\3\34\3\35\3\35\3\35\3\36\3\36\2\37\3\3\1\5\4\1\7\5\1\t\6\1\13\7"
          + "\1\r\b\1\17\t\1\21\n\2\23\13\1\25\f\1\27\r\1\31\16\1\33\17\1\35\20\1\37"
          + "\21\1!\22\1#\23\1%\24\1\'\25\1)\26\1+\27\1-\30\1/\31\1\61\32\1\63\33\1"
          + "\65\34\1\67\35\19\36\1;\2\1\3\2\6\4\2\13\13\"\"\4\2C\\c|\5\2\62;C\\c|"
          + "\3\2\62;\u009f\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3"
          + "\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2"
          + "\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3"
          + "\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2"
          + "\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\2"
          + "9\3\2\2\2\3>\3\2\2\2\5C\3\2\2\2\7N\3\2\2\2\tP\3\2\2\2\13R\3\2\2\2\rT\3"
          + "\2\2\2\17V\3\2\2\2\21X\3\2\2\2\23\\\3\2\2\2\25^\3\2\2\2\27`\3\2\2\2\31"
          + "b\3\2\2\2\33d\3\2\2\2\35g\3\2\2\2\37l\3\2\2\2!r\3\2\2\2#u\3\2\2\2%y\3"
          + "\2\2\2\'|\3\2\2\2)\u0080\3\2\2\2+\u0082\3\2\2\2-\u0084\3\2\2\2/\u008b"
          + "\3\2\2\2\61\u008d\3\2\2\2\63\u0090\3\2\2\2\65\u0092\3\2\2\2\67\u0095\3"
          + "\2\2\29\u0098\3\2\2\2;\u009b\3\2\2\2=?\5;\36\2>=\3\2\2\2?@\3\2\2\2@>\3"
          + "\2\2\2@A\3\2\2\2A\4\3\2\2\2BD\5;\36\2CB\3\2\2\2DE\3\2\2\2EC\3\2\2\2EF"
          + "\3\2\2\2FG\3\2\2\2GK\7\60\2\2HJ\5;\36\2IH\3\2\2\2JM\3\2\2\2KI\3\2\2\2"
          + "KL\3\2\2\2L\6\3\2\2\2MK\3\2\2\2NO\7,\2\2O\b\3\2\2\2PQ\7\61\2\2Q\n\3\2"
          + "\2\2RS\7-\2\2S\f\3\2\2\2TU\7/\2\2U\16\3\2\2\2VW\7`\2\2W\20\3\2\2\2XY\t"
          + "\2\2\2YZ\3\2\2\2Z[\b\t\2\2[\22\3\2\2\2\\]\7\f\2\2]\24\3\2\2\2^_\7?\2\2"
          + "_\26\3\2\2\2`a\7}\2\2a\30\3\2\2\2bc\7\177\2\2c\32\3\2\2\2de\7k\2\2ef\7"
          + "h\2\2f\34\3\2\2\2gh\7g\2\2hi\7n\2\2ij\7u\2\2jk\7g\2\2k\36\3\2\2\2lm\7"
          + "y\2\2mn\7j\2\2no\7k\2\2op\7n\2\2pq\7g\2\2q \3\2\2\2rs\7f\2\2st\7q\2\2"
          + "t\"\3\2\2\2uv\7c\2\2vw\7p\2\2wx\7f\2\2x$\3\2\2\2yz\7q\2\2z{\7t\2\2{&\3"
          + "\2\2\2|}\7p\2\2}~\7q\2\2~\177\7v\2\2\177(\3\2\2\2\u0080\u0081\7*\2\2\u0081"
          + "*\3\2\2\2\u0082\u0083\7+\2\2\u0083,\3\2\2\2\u0084\u0088\t\3\2\2\u0085"
          + "\u0087\t\4\2\2\u0086\u0085\3\2\2\2\u0087\u008a\3\2\2\2\u0088\u0086\3\2"
          + "\2\2\u0088\u0089\3\2\2\2\u0089.\3\2\2\2\u008a\u0088\3\2\2\2\u008b\u008c"
          + "\7>\2\2\u008c\60\3\2\2\2\u008d\u008e\7>\2\2\u008e\u008f\7?\2\2\u008f\62"
          + "\3\2\2\2\u0090\u0091\7@\2\2\u0091\64\3\2\2\2\u0092\u0093\7@\2\2\u0093"
          + "\u0094\7?\2\2\u0094\66\3\2\2\2\u0095\u0096\7?\2\2\u0096\u0097\7?\2\2\u0097"
          + "8\3\2\2\2\u0098\u0099\7#\2\2\u0099\u009a\7?\2\2\u009a:\3\2\2\2\u009b\u009c"
          + "\t\5\2\2\u009c<\3\2\2\2\7\2@EK\u0088";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
    for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
    }
  }
}
Beispiel #4
0
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class ExprParser extends Parser {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int T__6 = 1,
      T__5 = 2,
      T__4 = 3,
      T__3 = 4,
      T__2 = 5,
      T__1 = 6,
      T__0 = 7,
      ID = 8,
      INT = 9,
      NEWLINE = 10,
      WS = 11;
  public static final String[] tokenNames = {
    "<INVALID>", "')'", "'+'", "'*'", "'-'", "'('", "'/'", "'='", "ID", "INT", "NEWLINE", "WS"
  };
  public static final int RULE_prog = 0, RULE_stat = 1, RULE_expr = 2;
  public static final String[] ruleNames = {"prog", "stat", "expr"};

  @Override
  public String getGrammarFileName() {
    return "Expr.g4";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  public ExprParser(TokenStream input) {
    super(input);
    _interp = new ParserATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  public static class ProgContext extends ParserRuleContext {
    public StatContext stat(int i) {
      return getRuleContext(StatContext.class, i);
    }

    public List<StatContext> stat() {
      return getRuleContexts(StatContext.class);
    }

    public ProgContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_prog;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ExprListener) ((ExprListener) listener).enterProg(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ExprListener) ((ExprListener) listener).exitProg(this);
    }
  }

  public final ProgContext prog() throws RecognitionException {
    ProgContext _localctx = new ProgContext(_ctx, getState());
    enterRule(_localctx, 0, RULE_prog);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(7);
        _errHandler.sync(this);
        _la = _input.LA(1);
        do {
          {
            {
              setState(6);
              stat();
            }
          }
          setState(9);
          _errHandler.sync(this);
          _la = _input.LA(1);
        } while ((((_la) & ~0x3f) == 0
            && ((1L << _la) & ((1L << 5) | (1L << ID) | (1L << INT) | (1L << NEWLINE))) != 0));
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class StatContext extends ParserRuleContext {
    public TerminalNode NEWLINE() {
      return getToken(ExprParser.NEWLINE, 0);
    }

    public ExprContext expr() {
      return getRuleContext(ExprContext.class, 0);
    }

    public TerminalNode ID() {
      return getToken(ExprParser.ID, 0);
    }

    public StatContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_stat;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ExprListener) ((ExprListener) listener).enterStat(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ExprListener) ((ExprListener) listener).exitStat(this);
    }
  }

  public final StatContext stat() throws RecognitionException {
    StatContext _localctx = new StatContext(_ctx, getState());
    enterRule(_localctx, 2, RULE_stat);
    try {
      setState(20);
      switch (getInterpreter().adaptivePredict(_input, 1, _ctx)) {
        case 1:
          enterOuterAlt(_localctx, 1);
          {
            setState(11);
            expr(0);
            setState(12);
            match(NEWLINE);
          }
          break;

        case 2:
          enterOuterAlt(_localctx, 2);
          {
            setState(14);
            match(ID);
            setState(15);
            match(7);
            setState(16);
            expr(0);
            setState(17);
            match(NEWLINE);
          }
          break;

        case 3:
          enterOuterAlt(_localctx, 3);
          {
            setState(19);
            match(NEWLINE);
          }
          break;
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class ExprContext extends ParserRuleContext {
    public int _p;

    public TerminalNode INT() {
      return getToken(ExprParser.INT, 0);
    }

    public List<ExprContext> expr() {
      return getRuleContexts(ExprContext.class);
    }

    public ExprContext expr(int i) {
      return getRuleContext(ExprContext.class, i);
    }

    public TerminalNode ID() {
      return getToken(ExprParser.ID, 0);
    }

    public ExprContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    public ExprContext(ParserRuleContext parent, int invokingState, int _p) {
      super(parent, invokingState);
      this._p = _p;
    }

    @Override
    public int getRuleIndex() {
      return RULE_expr;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ExprListener) ((ExprListener) listener).enterExpr(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ExprListener) ((ExprListener) listener).exitExpr(this);
    }
  }

  public final ExprContext expr(int _p) throws RecognitionException {
    ParserRuleContext _parentctx = _ctx;
    int _parentState = getState();
    ExprContext _localctx = new ExprContext(_ctx, _parentState, _p);
    ExprContext _prevctx = _localctx;
    int _startState = 4;
    enterRecursionRule(_localctx, RULE_expr);
    int _la;
    try {
      int _alt;
      enterOuterAlt(_localctx, 1);
      {
        setState(29);
        switch (_input.LA(1)) {
          case INT:
            {
              setState(23);
              match(INT);
            }
            break;
          case ID:
            {
              setState(24);
              match(ID);
            }
            break;
          case 5:
            {
              setState(25);
              match(5);
              setState(26);
              expr(0);
              setState(27);
              match(1);
            }
            break;
          default:
            throw new NoViableAltException(this);
        }
        _ctx.stop = _input.LT(-1);
        setState(39);
        _errHandler.sync(this);
        _alt = getInterpreter().adaptivePredict(_input, 4, _ctx);
        while (_alt != 2 && _alt != -1) {
          if (_alt == 1) {
            if (_parseListeners != null) triggerExitRuleEvent();
            _prevctx = _localctx;
            {
              setState(37);
              switch (getInterpreter().adaptivePredict(_input, 3, _ctx)) {
                case 1:
                  {
                    _localctx = new ExprContext(_parentctx, _parentState, _p);
                    pushNewRecursionContext(_localctx, _startState, RULE_expr);
                    setState(31);
                    if (!(5 >= _localctx._p)) throw new FailedPredicateException(this, "5 >= $_p");
                    setState(32);
                    _la = _input.LA(1);
                    if (!(_la == 3 || _la == 6)) {
                      _errHandler.recoverInline(this);
                    }
                    consume();
                    setState(33);
                    expr(6);
                  }
                  break;

                case 2:
                  {
                    _localctx = new ExprContext(_parentctx, _parentState, _p);
                    pushNewRecursionContext(_localctx, _startState, RULE_expr);
                    setState(34);
                    if (!(4 >= _localctx._p)) throw new FailedPredicateException(this, "4 >= $_p");
                    setState(35);
                    _la = _input.LA(1);
                    if (!(_la == 2 || _la == 4)) {
                      _errHandler.recoverInline(this);
                    }
                    consume();
                    setState(36);
                    expr(5);
                  }
                  break;
              }
            }
          }
          setState(41);
          _errHandler.sync(this);
          _alt = getInterpreter().adaptivePredict(_input, 4, _ctx);
        }
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      unrollRecursionContexts(_parentctx);
    }
    return _localctx;
  }

  public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
    switch (ruleIndex) {
      case 2:
        return expr_sempred((ExprContext) _localctx, predIndex);
    }
    return true;
  }

  private boolean expr_sempred(ExprContext _localctx, int predIndex) {
    switch (predIndex) {
      case 0:
        return 5 >= _localctx._p;

      case 1:
        return 4 >= _localctx._p;
    }
    return true;
  }

  public static final String _serializedATN =
      "\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\3\r-\4\2\t\2\4\3\t"
          + "\3\4\4\t\4\3\2\6\2\n\n\2\r\2\16\2\13\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3"
          + "\3\5\3\27\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4 \n\4\3\4\3\4\3\4\3\4\3\4"
          + "\3\4\7\4(\n\4\f\4\16\4+\13\4\3\4\2\5\2\4\6\2\4\4\2\5\5\b\b\4\2\4\4\6\6"
          + "\60\2\t\3\2\2\2\4\26\3\2\2\2\6\37\3\2\2\2\b\n\5\4\3\2\t\b\3\2\2\2\n\13"
          + "\3\2\2\2\13\t\3\2\2\2\13\f\3\2\2\2\f\3\3\2\2\2\r\16\5\6\4\2\16\17\7\f"
          + "\2\2\17\27\3\2\2\2\20\21\7\n\2\2\21\22\7\t\2\2\22\23\5\6\4\2\23\24\7\f"
          + "\2\2\24\27\3\2\2\2\25\27\7\f\2\2\26\r\3\2\2\2\26\20\3\2\2\2\26\25\3\2"
          + "\2\2\27\5\3\2\2\2\30\31\b\4\1\2\31 \7\13\2\2\32 \7\n\2\2\33\34\7\7\2\2"
          + "\34\35\5\6\4\2\35\36\7\3\2\2\36 \3\2\2\2\37\30\3\2\2\2\37\32\3\2\2\2\37"
          + "\33\3\2\2\2 )\3\2\2\2!\"\6\4\2\3\"#\t\2\2\2#(\5\6\4\2$%\6\4\3\3%&\t\3"
          + "\2\2&(\5\6\4\2\'!\3\2\2\2\'$\3\2\2\2(+\3\2\2\2)\'\3\2\2\2)*\3\2\2\2*\7"
          + "\3\2\2\2+)\3\2\2\2\7\13\26\37\')";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
    for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
    }
  }
}
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class TURTLELexer extends Lexer {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int T__12 = 1,
      T__11 = 2,
      T__10 = 3,
      T__9 = 4,
      T__8 = 5,
      T__7 = 6,
      T__6 = 7,
      T__5 = 8,
      T__4 = 9,
      T__3 = 10,
      T__2 = 11,
      T__1 = 12,
      T__0 = 13,
      NumericLiteral = 14,
      BooleanLiteral = 15,
      String = 16,
      BlankNode = 17,
      WS = 18,
      PN_PREFIX = 19,
      IRIREF = 20,
      PNAME_NS = 21,
      PrefixedName = 22,
      PNAME_LN = 23,
      BLANK_NODE_LABEL = 24,
      LANGTAG = 25,
      INTEGER = 26,
      DECIMAL = 27,
      DOUBLE = 28,
      EXPONENT = 29,
      STRING_LITERAL_LONG_SINGLE_QUOTE = 30,
      STRING_LITERAL_LONG_QUOTE = 31,
      STRING_LITERAL_QUOTE = 32,
      STRING_LITERAL_SINGLE_QUOTE = 33,
      UCHAR = 34,
      ECHAR = 35,
      ANON_WS = 36,
      ANON = 37,
      SC = 38,
      PN_CHARS_BASE = 39,
      PN_CHARS_U = 40,
      PN_CHARS = 41,
      PN_LOCAL = 42,
      PLX = 43,
      PERCENT = 44,
      HEX = 45,
      PN_LOCAL_ESC = 46;
  public static String[] modeNames = {"DEFAULT_MODE"};

  public static final String[] tokenNames = {
    "<INVALID>",
    "']'",
    "'PREFIX'",
    "'a'",
    "')'",
    "'.'",
    "','",
    "'['",
    "'('",
    "'@base'",
    "';'",
    "'BASE'",
    "'@prefix'",
    "'^^'",
    "NumericLiteral",
    "BooleanLiteral",
    "String",
    "BlankNode",
    "WS",
    "PN_PREFIX",
    "IRIREF",
    "PNAME_NS",
    "PrefixedName",
    "PNAME_LN",
    "BLANK_NODE_LABEL",
    "LANGTAG",
    "INTEGER",
    "DECIMAL",
    "DOUBLE",
    "EXPONENT",
    "STRING_LITERAL_LONG_SINGLE_QUOTE",
    "STRING_LITERAL_LONG_QUOTE",
    "STRING_LITERAL_QUOTE",
    "STRING_LITERAL_SINGLE_QUOTE",
    "UCHAR",
    "ECHAR",
    "ANON_WS",
    "ANON",
    "SC",
    "PN_CHARS_BASE",
    "PN_CHARS_U",
    "PN_CHARS",
    "PN_LOCAL",
    "PLX",
    "PERCENT",
    "HEX",
    "PN_LOCAL_ESC"
  };
  public static final String[] ruleNames = {
    "T__12",
    "T__11",
    "T__10",
    "T__9",
    "T__8",
    "T__7",
    "T__6",
    "T__5",
    "T__4",
    "T__3",
    "T__2",
    "T__1",
    "T__0",
    "NumericLiteral",
    "BooleanLiteral",
    "String",
    "BlankNode",
    "WS",
    "PN_PREFIX",
    "IRIREF",
    "PNAME_NS",
    "PrefixedName",
    "PNAME_LN",
    "BLANK_NODE_LABEL",
    "LANGTAG",
    "INTEGER",
    "DECIMAL",
    "DOUBLE",
    "EXPONENT",
    "STRING_LITERAL_LONG_SINGLE_QUOTE",
    "STRING_LITERAL_LONG_QUOTE",
    "STRING_LITERAL_QUOTE",
    "STRING_LITERAL_SINGLE_QUOTE",
    "UCHAR",
    "ECHAR",
    "ANON_WS",
    "ANON",
    "SC",
    "PN_CHARS_BASE",
    "PN_CHARS_U",
    "PN_CHARS",
    "PN_LOCAL",
    "PLX",
    "PERCENT",
    "HEX",
    "PN_LOCAL_ESC"
  };

  public TURTLELexer(CharStream input) {
    super(input);
    _interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  @Override
  public String getGrammarFileName() {
    return "TURTLE.g4";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public String[] getModeNames() {
    return modeNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  @Override
  public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
    switch (ruleIndex) {
      case 17:
        WS_action((RuleContext) _localctx, actionIndex);
        break;
    }
  }

  private void WS_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
      case 0:
        skip();
        break;
    }
  }

  public static final String _serializedATN =
      "\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\2\60\u01cd\b\1\4\2"
          + "\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"
          + "\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"
          + "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"
          + "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"
          + " \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"
          + "+\4,\t,\4-\t-\4.\t.\4/\t/\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4"
          + "\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13"
          + "\3\13\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\16\3\16\3"
          + "\16\3\17\3\17\3\17\5\17\u0090\n\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20"
          + "\3\20\3\20\5\20\u009b\n\20\3\21\3\21\3\21\3\21\5\21\u00a1\n\21\3\22\3"
          + "\22\5\22\u00a5\n\22\3\23\6\23\u00a8\n\23\r\23\16\23\u00a9\3\23\3\23\3"
          + "\24\3\24\3\24\7\24\u00b1\n\24\f\24\16\24\u00b4\13\24\3\24\5\24\u00b7\n"
          + "\24\3\25\3\25\3\25\3\25\7\25\u00bd\n\25\f\25\16\25\u00c0\13\25\3\25\3"
          + "\25\3\26\5\26\u00c5\n\26\3\26\3\26\3\27\3\27\5\27\u00cb\n\27\3\30\3\30"
          + "\3\30\3\31\3\31\3\31\3\31\3\31\5\31\u00d5\n\31\3\31\3\31\7\31\u00d9\n"
          + "\31\f\31\16\31\u00dc\13\31\3\31\5\31\u00df\n\31\3\32\3\32\6\32\u00e3\n"
          + "\32\r\32\16\32\u00e4\3\32\3\32\6\32\u00e9\n\32\r\32\16\32\u00ea\7\32\u00ed"
          + "\n\32\f\32\16\32\u00f0\13\32\3\33\5\33\u00f3\n\33\3\33\6\33\u00f6\n\33"
          + "\r\33\16\33\u00f7\3\34\5\34\u00fb\n\34\3\34\7\34\u00fe\n\34\f\34\16\34"
          + "\u0101\13\34\3\34\3\34\6\34\u0105\n\34\r\34\16\34\u0106\3\35\5\35\u010a"
          + "\n\35\3\35\6\35\u010d\n\35\r\35\16\35\u010e\3\35\3\35\7\35\u0113\n\35"
          + "\f\35\16\35\u0116\13\35\3\35\3\35\3\35\6\35\u011b\n\35\r\35\16\35\u011c"
          + "\3\35\3\35\6\35\u0121\n\35\r\35\16\35\u0122\3\35\5\35\u0126\n\35\3\36"
          + "\3\36\5\36\u012a\n\36\3\36\6\36\u012d\n\36\r\36\16\36\u012e\3\37\3\37"
          + "\3\37\3\37\3\37\3\37\3\37\5\37\u0138\n\37\3\37\3\37\3\37\3\37\5\37\u013e"
          + "\n\37\7\37\u0140\n\37\f\37\16\37\u0143\13\37\3\37\3\37\3\37\3\37\3 \3"
          + " \3 \3 \3 \3 \3 \5 \u0150\n \3 \3 \3 \3 \5 \u0156\n \7 \u0158\n \f \16"
          + " \u015b\13 \3 \3 \3 \3 \3!\3!\3!\3!\3!\7!\u0166\n!\f!\16!\u0169\13!\3"
          + "!\3!\3\"\3\"\3\"\3\"\3\"\7\"\u0172\n\"\f\"\16\"\u0175\13\"\3\"\3\"\3#"
          + "\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\5#\u018d\n#"
          + "\3$\3$\3$\3%\3%\3&\3&\7&\u0196\n&\f&\16&\u0199\13&\3&\3&\3\'\6\'\u019e"
          + "\n\'\r\'\16\'\u019f\3(\3(\3)\3)\5)\u01a6\n)\3*\3*\5*\u01aa\n*\3+\3+\3"
          + "+\5+\u01af\n+\3+\3+\3+\7+\u01b4\n+\f+\16+\u01b7\13+\3+\3+\3+\5+\u01bc"
          + "\n+\5+\u01be\n+\3,\3,\5,\u01c2\n,\3-\3-\3-\3-\3.\5.\u01c9\n.\3/\3/\3/"
          + "\2\60\3\3\1\5\4\1\7\5\1\t\6\1\13\7\1\r\b\1\17\t\1\21\n\1\23\13\1\25\f"
          + "\1\27\r\1\31\16\1\33\17\1\35\20\1\37\21\1!\22\1#\23\1%\24\2\'\25\1)\26"
          + "\1+\27\1-\30\1/\31\1\61\32\1\63\33\1\65\34\1\67\35\19\36\1;\37\1= \1?"
          + "!\1A\"\1C#\1E$\1G%\1I&\1K\'\1M(\1O)\1Q*\1S+\1U,\1W-\1Y.\1[/\1]\60\1\3"
          + "\2\25\5\2\13\f\16\17\"\"\b\2%%\'(\60\61<<BB^^\3\2\62;\4\2C\\c|\5\2\62"
          + ";C\\c|\4\2--//\4\2GGgg\5\2))^^``\4\2$$^^\7\2\f\f\17\17$$))^^\6\2\f\f\17"
          + "\17))^^\n\2$$))^^ddhhppttvv\5\2\13\f\17\17\"\"\4\2YY^^\17\2C\\c|\u00c2"
          + "\u00d8\u00da\u00f8\u00fa\u0301\u0372\u037f\u0381\u2001\u200e\u200f\u2072"
          + "\u2191\u2c02\u2ff1\u3003\ud801\uf902\ufdd1\ufdf2\uffff\7\2//\62;\u00b9"
          + "\u00b9\u0302\u0371\u2041\u2042\4\2\60\60<<\5\2\62;CHch\t\2##%\61==??A"
          + "Baa\u0080\u0080\u0212\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2"
          + "\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25"
          + "\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2"
          + "\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2"
          + "\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3"
          + "\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2"
          + "\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2"
          + "Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3"
          + "\2\2\2\3_\3\2\2\2\5a\3\2\2\2\7h\3\2\2\2\tj\3\2\2\2\13l\3\2\2\2\rn\3\2"
          + "\2\2\17p\3\2\2\2\21r\3\2\2\2\23t\3\2\2\2\25z\3\2\2\2\27|\3\2\2\2\31\u0081"
          + "\3\2\2\2\33\u0089\3\2\2\2\35\u008f\3\2\2\2\37\u009a\3\2\2\2!\u00a0\3\2"
          + "\2\2#\u00a4\3\2\2\2%\u00a7\3\2\2\2\'\u00ad\3\2\2\2)\u00b8\3\2\2\2+\u00c4"
          + "\3\2\2\2-\u00ca\3\2\2\2/\u00cc\3\2\2\2\61\u00cf\3\2\2\2\63\u00e0\3\2\2"
          + "\2\65\u00f2\3\2\2\2\67\u00fa\3\2\2\29\u0109\3\2\2\2;\u0127\3\2\2\2=\u0130"
          + "\3\2\2\2?\u0148\3\2\2\2A\u0160\3\2\2\2C\u016c\3\2\2\2E\u018c\3\2\2\2G"
          + "\u018e\3\2\2\2I\u0191\3\2\2\2K\u0193\3\2\2\2M\u019d\3\2\2\2O\u01a1\3\2"
          + "\2\2Q\u01a5\3\2\2\2S\u01a9\3\2\2\2U\u01ae\3\2\2\2W\u01c1\3\2\2\2Y\u01c3"
          + "\3\2\2\2[\u01c8\3\2\2\2]\u01ca\3\2\2\2_`\7_\2\2`\4\3\2\2\2ab\7R\2\2bc"
          + "\7T\2\2cd\7G\2\2de\7H\2\2ef\7K\2\2fg\7Z\2\2g\6\3\2\2\2hi\7c\2\2i\b\3\2"
          + "\2\2jk\7+\2\2k\n\3\2\2\2lm\7\60\2\2m\f\3\2\2\2no\7.\2\2o\16\3\2\2\2pq"
          + "\7]\2\2q\20\3\2\2\2rs\7*\2\2s\22\3\2\2\2tu\7B\2\2uv\7d\2\2vw\7c\2\2wx"
          + "\7u\2\2xy\7g\2\2y\24\3\2\2\2z{\7=\2\2{\26\3\2\2\2|}\7D\2\2}~\7C\2\2~\177"
          + "\7U\2\2\177\u0080\7G\2\2\u0080\30\3\2\2\2\u0081\u0082\7B\2\2\u0082\u0083"
          + "\7r\2\2\u0083\u0084\7t\2\2\u0084\u0085\7g\2\2\u0085\u0086\7h\2\2\u0086"
          + "\u0087\7k\2\2\u0087\u0088\7z\2\2\u0088\32\3\2\2\2\u0089\u008a\7`\2\2\u008a"
          + "\u008b\7`\2\2\u008b\34\3\2\2\2\u008c\u0090\5\65\33\2\u008d\u0090\5\67"
          + "\34\2\u008e\u0090\59\35\2\u008f\u008c\3\2\2\2\u008f\u008d\3\2\2\2\u008f"
          + "\u008e\3\2\2\2\u0090\36\3\2\2\2\u0091\u0092\7v\2\2\u0092\u0093\7t\2\2"
          + "\u0093\u0094\7w\2\2\u0094\u009b\7g\2\2\u0095\u0096\7h\2\2\u0096\u0097"
          + "\7c\2\2\u0097\u0098\7n\2\2\u0098\u0099\7u\2\2\u0099\u009b\7g\2\2\u009a"
          + "\u0091\3\2\2\2\u009a\u0095\3\2\2\2\u009b \3\2\2\2\u009c\u00a1\5A!\2\u009d"
          + "\u00a1\5C\"\2\u009e\u00a1\5=\37\2\u009f\u00a1\5? \2\u00a0\u009c\3\2\2"
          + "\2\u00a0\u009d\3\2\2\2\u00a0\u009e\3\2\2\2\u00a0\u009f\3\2\2\2\u00a1\""
          + "\3\2\2\2\u00a2\u00a5\5\61\31\2\u00a3\u00a5\5K&\2\u00a4\u00a2\3\2\2\2\u00a4"
          + "\u00a3\3\2\2\2\u00a5$\3\2\2\2\u00a6\u00a8\t\2\2\2\u00a7\u00a6\3\2\2\2"
          + "\u00a8\u00a9\3\2\2\2\u00a9\u00a7\3\2\2\2\u00a9\u00aa\3\2\2\2\u00aa\u00ab"
          + "\3\2\2\2\u00ab\u00ac\b\23\2\2\u00ac&\3\2\2\2\u00ad\u00b6\5O(\2\u00ae\u00b1"
          + "\5S*\2\u00af\u00b1\7\60\2\2\u00b0\u00ae\3\2\2\2\u00b0\u00af\3\2\2\2\u00b1"
          + "\u00b4\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3\u00b5\3\2"
          + "\2\2\u00b4\u00b2\3\2\2\2\u00b5\u00b7\5S*\2\u00b6\u00b2\3\2\2\2\u00b6\u00b7"
          + "\3\2\2\2\u00b7(\3\2\2\2\u00b8\u00be\7>\2\2\u00b9\u00bd\5S*\2\u00ba\u00bd"
          + "\t\3\2\2\u00bb\u00bd\5E#\2\u00bc\u00b9\3\2\2\2\u00bc\u00ba\3\2\2\2\u00bc"
          + "\u00bb\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00be\u00bf\3\2"
          + "\2\2\u00bf\u00c1\3\2\2\2\u00c0\u00be\3\2\2\2\u00c1\u00c2\7@\2\2\u00c2"
          + "*\3\2\2\2\u00c3\u00c5\5\'\24\2\u00c4\u00c3\3\2\2\2\u00c4\u00c5\3\2\2\2"
          + "\u00c5\u00c6\3\2\2\2\u00c6\u00c7\7<\2\2\u00c7,\3\2\2\2\u00c8\u00cb\5/"
          + "\30\2\u00c9\u00cb\5+\26\2\u00ca\u00c8\3\2\2\2\u00ca\u00c9\3\2\2\2\u00cb"
          + ".\3\2\2\2\u00cc\u00cd\5+\26\2\u00cd\u00ce\5U+\2\u00ce\60\3\2\2\2\u00cf"
          + "\u00d0\7a\2\2\u00d0\u00d1\7<\2\2\u00d1\u00d4\3\2\2\2\u00d2\u00d5\5Q)\2"
          + "\u00d3\u00d5\t\4\2\2\u00d4\u00d2\3\2\2\2\u00d4\u00d3\3\2\2\2\u00d5\u00de"
          + "\3\2\2\2\u00d6\u00d9\5S*\2\u00d7\u00d9\7\60\2\2\u00d8\u00d6\3\2\2\2\u00d8"
          + "\u00d7\3\2\2\2\u00d9\u00dc\3\2\2\2\u00da\u00d8\3\2\2\2\u00da\u00db\3\2"
          + "\2\2\u00db\u00dd\3\2\2\2\u00dc\u00da\3\2\2\2\u00dd\u00df\5S*\2\u00de\u00da"
          + "\3\2\2\2\u00de\u00df\3\2\2\2\u00df\62\3\2\2\2\u00e0\u00e2\7B\2\2\u00e1"
          + "\u00e3\t\5\2\2\u00e2\u00e1\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4\u00e2\3\2"
          + "\2\2\u00e4\u00e5\3\2\2\2\u00e5\u00ee\3\2\2\2\u00e6\u00e8\7/\2\2\u00e7"
          + "\u00e9\t\6\2\2\u00e8\u00e7\3\2\2\2\u00e9\u00ea\3\2\2\2\u00ea\u00e8\3\2"
          + "\2\2\u00ea\u00eb\3\2\2\2\u00eb\u00ed\3\2\2\2\u00ec\u00e6\3\2\2\2\u00ed"
          + "\u00f0\3\2\2\2\u00ee\u00ec\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\64\3\2\2"
          + "\2\u00f0\u00ee\3\2\2\2\u00f1\u00f3\t\7\2\2\u00f2\u00f1\3\2\2\2\u00f2\u00f3"
          + "\3\2\2\2\u00f3\u00f5\3\2\2\2\u00f4\u00f6\t\4\2\2\u00f5\u00f4\3\2\2\2\u00f6"
          + "\u00f7\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f7\u00f8\3\2\2\2\u00f8\66\3\2\2"
          + "\2\u00f9\u00fb\t\7\2\2\u00fa\u00f9\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00ff"
          + "\3\2\2\2\u00fc\u00fe\t\4\2\2\u00fd\u00fc\3\2\2\2\u00fe\u0101\3\2\2\2\u00ff"
          + "\u00fd\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\u0102\3\2\2\2\u0101\u00ff\3\2"
          + "\2\2\u0102\u0104\7\60\2\2\u0103\u0105\t\4\2\2\u0104\u0103\3\2\2\2\u0105"
          + "\u0106\3\2\2\2\u0106\u0104\3\2\2\2\u0106\u0107\3\2\2\2\u01078\3\2\2\2"
          + "\u0108\u010a\t\7\2\2\u0109\u0108\3\2\2\2\u0109\u010a\3\2\2\2\u010a\u0125"
          + "\3\2\2\2\u010b\u010d\t\4\2\2\u010c\u010b\3\2\2\2\u010d\u010e\3\2\2\2\u010e"
          + "\u010c\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110\3\2\2\2\u0110\u0114\7\60"
          + "\2\2\u0111\u0113\t\4\2\2\u0112\u0111\3\2\2\2\u0113\u0116\3\2\2\2\u0114"
          + "\u0112\3\2\2\2\u0114\u0115\3\2\2\2\u0115\u0117\3\2\2\2\u0116\u0114\3\2"
          + "\2\2\u0117\u0126\5;\36\2\u0118\u011a\7\60\2\2\u0119\u011b\t\4\2\2\u011a"
          + "\u0119\3\2\2\2\u011b\u011c\3\2\2\2\u011c\u011a\3\2\2\2\u011c\u011d\3\2"
          + "\2\2\u011d\u011e\3\2\2\2\u011e\u0126\5;\36\2\u011f\u0121\t\4\2\2\u0120"
          + "\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122\u0120\3\2\2\2\u0122\u0123\3\2"
          + "\2\2\u0123\u0124\3\2\2\2\u0124\u0126\5;\36\2\u0125\u010c\3\2\2\2\u0125"
          + "\u0118\3\2\2\2\u0125\u0120\3\2\2\2\u0126:\3\2\2\2\u0127\u0129\t\b\2\2"
          + "\u0128\u012a\t\7\2\2\u0129\u0128\3\2\2\2\u0129\u012a\3\2\2\2\u012a\u012c"
          + "\3\2\2\2\u012b\u012d\t\4\2\2\u012c\u012b\3\2\2\2\u012d\u012e\3\2\2\2\u012e"
          + "\u012c\3\2\2\2\u012e\u012f\3\2\2\2\u012f<\3\2\2\2\u0130\u0131\7)\2\2\u0131"
          + "\u0132\7)\2\2\u0132\u0133\7)\2\2\u0133\u0141\3\2\2\2\u0134\u0138\7)\2"
          + "\2\u0135\u0136\7)\2\2\u0136\u0138\7)\2\2\u0137\u0134\3\2\2\2\u0137\u0135"
          + "\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u013d\3\2\2\2\u0139\u013e\t\t\2\2\u013a"
          + "\u013e\5G$\2\u013b\u013e\5E#\2\u013c\u013e\7$\2\2\u013d\u0139\3\2\2\2"
          + "\u013d\u013a\3\2\2\2\u013d\u013b\3\2\2\2\u013d\u013c\3\2\2\2\u013e\u0140"
          + "\3\2\2\2\u013f\u0137\3\2\2\2\u0140\u0143\3\2\2\2\u0141\u013f\3\2\2\2\u0141"
          + "\u0142\3\2\2\2\u0142\u0144\3\2\2\2\u0143\u0141\3\2\2\2\u0144\u0145\7)"
          + "\2\2\u0145\u0146\7)\2\2\u0146\u0147\7)\2\2\u0147>\3\2\2\2\u0148\u0149"
          + "\7$\2\2\u0149\u014a\7$\2\2\u014a\u014b\7$\2\2\u014b\u0159\3\2\2\2\u014c"
          + "\u0150\7$\2\2\u014d\u014e\7$\2\2\u014e\u0150\7$\2\2\u014f\u014c\3\2\2"
          + "\2\u014f\u014d\3\2\2\2\u014f\u0150\3\2\2\2\u0150\u0155\3\2\2\2\u0151\u0156"
          + "\n\n\2\2\u0152\u0156\5G$\2\u0153\u0156\5E#\2\u0154\u0156\7)\2\2\u0155"
          + "\u0151\3\2\2\2\u0155\u0152\3\2\2\2\u0155\u0153\3\2\2\2\u0155\u0154\3\2"
          + "\2\2\u0156\u0158\3\2\2\2\u0157\u014f\3\2\2\2\u0158\u015b\3\2\2\2\u0159"
          + "\u0157\3\2\2\2\u0159\u015a\3\2\2\2\u015a\u015c\3\2\2\2\u015b\u0159\3\2"
          + "\2\2\u015c\u015d\7$\2\2\u015d\u015e\7$\2\2\u015e\u015f\7$\2\2\u015f@\3"
          + "\2\2\2\u0160\u0167\7$\2\2\u0161\u0166\n\13\2\2\u0162\u0166\7)\2\2\u0163"
          + "\u0164\7^\2\2\u0164\u0166\7$\2\2\u0165\u0161\3\2\2\2\u0165\u0162\3\2\2"
          + "\2\u0165\u0163\3\2\2\2\u0166\u0169\3\2\2\2\u0167\u0165\3\2\2\2\u0167\u0168"
          + "\3\2\2\2\u0168\u016a\3\2\2\2\u0169\u0167\3\2\2\2\u016a\u016b\7$\2\2\u016b"
          + "B\3\2\2\2\u016c\u0173\7)\2\2\u016d\u0172\n\f\2\2\u016e\u0172\5G$\2\u016f"
          + "\u0172\5E#\2\u0170\u0172\7$\2\2\u0171\u016d\3\2\2\2\u0171\u016e\3\2\2"
          + "\2\u0171\u016f\3\2\2\2\u0171\u0170\3\2\2\2\u0172\u0175\3\2\2\2\u0173\u0171"
          + "\3\2\2\2\u0173\u0174\3\2\2\2\u0174\u0176\3\2\2\2\u0175\u0173\3\2\2\2\u0176"
          + "\u0177\7)\2\2\u0177D\3\2\2\2\u0178\u0179\7^\2\2\u0179\u017a\7w\2\2\u017a"
          + "\u017b\3\2\2\2\u017b\u017c\5[.\2\u017c\u017d\5[.\2\u017d\u017e\5[.\2\u017e"
          + "\u017f\5[.\2\u017f\u018d\3\2\2\2\u0180\u0181\7^\2\2\u0181\u0182\7W\2\2"
          + "\u0182\u0183\3\2\2\2\u0183\u0184\5[.\2\u0184\u0185\5[.\2\u0185\u0186\5"
          + "[.\2\u0186\u0187\5[.\2\u0187\u0188\5[.\2\u0188\u0189\5[.\2\u0189\u018a"
          + "\5[.\2\u018a\u018b\5[.\2\u018b\u018d\3\2\2\2\u018c\u0178\3\2\2\2\u018c"
          + "\u0180\3\2\2\2\u018dF\3\2\2\2\u018e\u018f\7^\2\2\u018f\u0190\t\r\2\2\u0190"
          + "H\3\2\2\2\u0191\u0192\t\16\2\2\u0192J\3\2\2\2\u0193\u0197\7]\2\2\u0194"
          + "\u0196\5I%\2\u0195\u0194\3\2\2\2\u0196\u0199\3\2\2\2\u0197\u0195\3\2\2"
          + "\2\u0197\u0198\3\2\2\2\u0198\u019a\3\2\2\2\u0199\u0197\3\2\2\2\u019a\u019b"
          + "\7_\2\2\u019bL\3\2\2\2\u019c\u019e\t\17\2\2\u019d\u019c\3\2\2\2\u019e"
          + "\u019f\3\2\2\2\u019f\u019d\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0N\3\2\2\2"
          + "\u01a1\u01a2\t\20\2\2\u01a2P\3\2\2\2\u01a3\u01a6\5O(\2\u01a4\u01a6\7a"
          + "\2\2\u01a5\u01a3\3\2\2\2\u01a5\u01a4\3\2\2\2\u01a6R\3\2\2\2\u01a7\u01aa"
          + "\5Q)\2\u01a8\u01aa\t\21\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01a8\3\2\2\2\u01aa"
          + "T\3\2\2\2\u01ab\u01af\5Q)\2\u01ac\u01af\4\62<\2\u01ad\u01af\5W,\2\u01ae"
          + "\u01ab\3\2\2\2\u01ae\u01ac\3\2\2\2\u01ae\u01ad\3\2\2\2\u01af\u01bd\3\2"
          + "\2\2\u01b0\u01b4\5S*\2\u01b1\u01b4\t\22\2\2\u01b2\u01b4\5W,\2\u01b3\u01b0"
          + "\3\2\2\2\u01b3\u01b1\3\2\2\2\u01b3\u01b2\3\2\2\2\u01b4\u01b7\3\2\2\2\u01b5"
          + "\u01b3\3\2\2\2\u01b5\u01b6\3\2\2\2\u01b6\u01bb\3\2\2\2\u01b7\u01b5\3\2"
          + "\2\2\u01b8\u01bc\5S*\2\u01b9\u01bc\7<\2\2\u01ba\u01bc\5W,\2\u01bb\u01b8"
          + "\3\2\2\2\u01bb\u01b9\3\2\2\2\u01bb\u01ba\3\2\2\2\u01bc\u01be\3\2\2\2\u01bd"
          + "\u01b5\3\2\2\2\u01bd\u01be\3\2\2\2\u01beV\3\2\2\2\u01bf\u01c2\5Y-\2\u01c0"
          + "\u01c2\5]/\2\u01c1\u01bf\3\2\2\2\u01c1\u01c0\3\2\2\2\u01c2X\3\2\2\2\u01c3"
          + "\u01c4\7\'\2\2\u01c4\u01c5\5[.\2\u01c5\u01c6\5[.\2\u01c6Z\3\2\2\2\u01c7"
          + "\u01c9\t\23\2\2\u01c8\u01c7\3\2\2\2\u01c9\\\3\2\2\2\u01ca\u01cb\7^\2\2"
          + "\u01cb\u01cc\t\24\2\2\u01cc^\3\2\2\2:\2\u008f\u009a\u00a0\u00a4\u00a7"
          + "\u00a9\u00b0\u00b2\u00b6\u00bc\u00be\u00c4\u00ca\u00d4\u00d8\u00da\u00de"
          + "\u00e4\u00ea\u00ee\u00f2\u00f7\u00fa\u00ff\u0106\u0109\u010e\u0114\u011c"
          + "\u0122\u0125\u0129\u012e\u0137\u013d\u0141\u014f\u0155\u0159\u0165\u0167"
          + "\u0171\u0173\u018c\u0197\u019f\u01a5\u01a9\u01ae\u01b3\u01b5\u01bb\u01bd"
          + "\u01c1\u01c8";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
    for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
    }
  }
}
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class ExtractedLittleParser extends Parser {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int T__1 = 1, T__0 = 2;
  public static final String[] tokenNames = {"<INVALID>", "'+'", "'e'"};
  public static final int RULE_s = 0, RULE_e = 1;
  public static final String[] ruleNames = {"s", "e"};

  @Override
  public String getGrammarFileName() {
    return "ExtractedLittle.g4";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  public ExtractedLittleParser(TokenStream input) {
    super(input);
    _interp = new ParserATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  public static class SContext extends ParserRuleContext {
    public EContext e() {
      return getRuleContext(EContext.class, 0);
    }

    public SContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_s;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ExtractedLittleListener)
        ((ExtractedLittleListener) listener).enterS(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ExtractedLittleListener)
        ((ExtractedLittleListener) listener).exitS(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof ExtractedLittleVisitor)
        return ((ExtractedLittleVisitor<? extends T>) visitor).visitS(this);
      else return visitor.visitChildren(this);
    }
  }

  public final SContext s() throws RecognitionException {
    SContext _localctx = new SContext(_ctx, getState());
    enterRule(_localctx, 0, RULE_s);
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(4);
        e(0);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class EContext extends ParserRuleContext {
    public int _p;

    public EContext e(int i) {
      return getRuleContext(EContext.class, i);
    }

    public List<EContext> e() {
      return getRuleContexts(EContext.class);
    }

    public EContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    public EContext(ParserRuleContext parent, int invokingState, int _p) {
      super(parent, invokingState);
      this._p = _p;
    }

    @Override
    public int getRuleIndex() {
      return RULE_e;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof ExtractedLittleListener)
        ((ExtractedLittleListener) listener).enterE(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof ExtractedLittleListener)
        ((ExtractedLittleListener) listener).exitE(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof ExtractedLittleVisitor)
        return ((ExtractedLittleVisitor<? extends T>) visitor).visitE(this);
      else return visitor.visitChildren(this);
    }
  }

  public final EContext e(int _p) throws RecognitionException {
    ParserRuleContext _parentctx = _ctx;
    int _parentState = getState();
    EContext _localctx = new EContext(_ctx, _parentState, _p);
    EContext _prevctx = _localctx;
    int _startState = 2;
    enterRecursionRule(_localctx, RULE_e);
    try {
      int _alt;
      enterOuterAlt(_localctx, 1);
      {
        {
          setState(7);
          match(2);
        }
        _ctx.stop = _input.LT(-1);
        setState(14);
        _errHandler.sync(this);
        _alt = getInterpreter().adaptivePredict(_input, 0, _ctx);
        while (_alt != 2 && _alt != -1) {
          if (_alt == 1) {
            if (_parseListeners != null) triggerExitRuleEvent();
            _prevctx = _localctx;
            {
              {
                _localctx = new EContext(_parentctx, _parentState, _p);
                pushNewRecursionContext(_localctx, _startState, RULE_e);
                setState(9);
                if (!(2 >= _localctx._p)) throw new FailedPredicateException(this, "2 >= $_p");
                setState(10);
                match(1);
                setState(11);
                e(3);
              }
            }
          }
          setState(16);
          _errHandler.sync(this);
          _alt = getInterpreter().adaptivePredict(_input, 0, _ctx);
        }
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      unrollRecursionContexts(_parentctx);
    }
    return _localctx;
  }

  public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
    switch (ruleIndex) {
      case 1:
        return e_sempred((EContext) _localctx, predIndex);
    }
    return true;
  }

  private boolean e_sempred(EContext _localctx, int predIndex) {
    switch (predIndex) {
      case 0:
        return 2 >= _localctx._p;
    }
    return true;
  }

  public static final String _serializedATN =
      "\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\3\4\24\4\2\t\2\4\3"
          + "\t\3\3\2\3\2\3\3\3\3\3\3\3\3\3\3\3\3\7\3\17\n\3\f\3\16\3\22\13\3\3\3\2"
          + "\4\2\4\2\2\22\2\6\3\2\2\2\4\b\3\2\2\2\6\7\5\4\3\2\7\3\3\2\2\2\b\t\b\3"
          + "\1\2\t\n\7\4\2\2\n\20\3\2\2\2\13\f\6\3\2\3\f\r\7\3\2\2\r\17\5\4\3\2\16"
          + "\13\3\2\2\2\17\22\3\2\2\2\20\16\3\2\2\2\20\21\3\2\2\2\21\5\3\2\2\2\22"
          + "\20\3\2\2\2\3\20";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
    for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
    }
  }
}
Beispiel #7
0
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class SQLCommonLexer extends Lexer {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int ARMSCII8 = 1,
      ASCII = 2,
      BIG5 = 3,
      BINARY = 4,
      CP1250 = 5,
      CP1251 = 6,
      CP1256 = 7,
      CP1257 = 8,
      CP850 = 9,
      CP852 = 10,
      CP866 = 11,
      CP932 = 12,
      DEC8 = 13,
      EUCJPMS = 14,
      EUCKR = 15,
      GB2312 = 16,
      GBK = 17,
      GEOSTD8 = 18,
      GREEK = 19,
      HEBREW = 20,
      HP8 = 21,
      KEYBCS2 = 22,
      KOI8R = 23,
      KOI8U = 24,
      LATIN1 = 25,
      LATIN2 = 26,
      LATIN5 = 27,
      LATIN7 = 28,
      MACCE = 29,
      MACROMAN = 30,
      SJIS = 31,
      SWE7 = 32,
      TIS620 = 33,
      UCS2 = 34,
      UJIS = 35,
      UTF8 = 36,
      CHARSET_NAME = 37,
      E_SYM = 38,
      SELECT = 39,
      INSERT = 40,
      UPDATE = 41,
      DELETE = 42,
      INTO = 43,
      SET = 44,
      FROM = 45,
      UNION = 46,
      UNION_ALL = 47,
      ALL = 48,
      DISTINCT = 49,
      GROUP_BY = 50,
      HAVING = 51,
      WHERE = 52,
      ON = 53,
      ORDER_BY = 54,
      LIMIT = 55,
      AS = 56,
      CASE = 57,
      WHEN = 58,
      ELSE = 59,
      THEN = 60,
      INNER = 61,
      JOIN = 62,
      ASC = 63,
      DESC = 64,
      END = 65,
      LEFT = 66,
      RIGHT = 67,
      OUTER = 68,
      NOT = 69,
      AND = 70,
      OR = 71,
      IN = 72,
      EXIST = 73,
      BETWEEN = 74,
      NULL = 75,
      VALUES = 76,
      DOT = 77,
      VERTICAL_BAR = 78,
      DOUBLE_VERTICAL_BAR = 79,
      PLUS = 80,
      DIV = 81,
      MINUS = 82,
      PERCENT = 83,
      COMMA = 84,
      SEMI = 85,
      COLON = 86,
      RBRACK = 87,
      LBRACK = 88,
      NEGATION = 89,
      BITAND = 90,
      POWER_OP = 91,
      LPAREN = 92,
      RPAREN = 93,
      ASTERISK = 94,
      GT = 95,
      GE = 96,
      EQ = 97,
      LT = 98,
      LE = 99,
      LIKE = 100,
      ID = 101,
      INT = 102,
      FLOAT = 103,
      CHAR_LITERAL = 104,
      HEX = 105,
      BIT = 106,
      BOOLEAN = 107,
      NEWLINE = 108,
      WS = 109;
  public static String[] modeNames = {"DEFAULT_MODE"};

  public static final String[] tokenNames = {
    "<INVALID>",
    "ARMSCII8",
    "ASCII",
    "BIG5",
    "BINARY",
    "CP1250",
    "CP1251",
    "CP1256",
    "CP1257",
    "CP850",
    "CP852",
    "CP866",
    "CP932",
    "DEC8",
    "EUCJPMS",
    "EUCKR",
    "GB2312",
    "GBK",
    "GEOSTD8",
    "GREEK",
    "HEBREW",
    "HP8",
    "KEYBCS2",
    "KOI8R",
    "KOI8U",
    "LATIN1",
    "LATIN2",
    "LATIN5",
    "LATIN7",
    "MACCE",
    "MACROMAN",
    "SJIS",
    "SWE7",
    "TIS620",
    "UCS2",
    "UJIS",
    "UTF8",
    "CHARSET_NAME",
    "E_SYM",
    "SELECT",
    "INSERT",
    "UPDATE",
    "DELETE",
    "INTO",
    "SET",
    "FROM",
    "UNION",
    "UNION_ALL",
    "ALL",
    "DISTINCT",
    "GROUP_BY",
    "HAVING",
    "WHERE",
    "ON",
    "ORDER_BY",
    "LIMIT",
    "AS",
    "CASE",
    "WHEN",
    "ELSE",
    "THEN",
    "INNER",
    "JOIN",
    "ASC",
    "DESC",
    "END",
    "LEFT",
    "RIGHT",
    "OUTER",
    "NOT",
    "AND",
    "OR",
    "IN",
    "EXIST",
    "BETWEEN",
    "NULL",
    "VALUES",
    "DOT",
    "'|'",
    "'||'",
    "'+'",
    "'/'",
    "'-'",
    "'%'",
    "','",
    "';'",
    "':'",
    "']'",
    "'['",
    "'~'",
    "'&'",
    "'^'",
    "'('",
    "')'",
    "'*'",
    "'>'",
    "'>='",
    "'='",
    "'<'",
    "'<='",
    "LIKE",
    "ID",
    "INT",
    "FLOAT",
    "CHAR_LITERAL",
    "HEX",
    "BIT",
    "BOOLEAN",
    "NEWLINE",
    "WS"
  };
  public static final String[] ruleNames = {
    "DIGIT",
    "FIRST_ID_CHAR",
    "ID_CHAR",
    "HEX_DIGIT",
    "APOSTROPHE",
    "QUOT",
    "A_",
    "B_",
    "C_",
    "D_",
    "E_",
    "F_",
    "G_",
    "H_",
    "I_",
    "J_",
    "K_",
    "L_",
    "M_",
    "N_",
    "O_",
    "P_",
    "Q_",
    "R_",
    "S_",
    "T_",
    "U_",
    "V_",
    "W_",
    "X_",
    "Y_",
    "Z_",
    "ARMSCII8",
    "ASCII",
    "BIG5",
    "BINARY",
    "CP1250",
    "CP1251",
    "CP1256",
    "CP1257",
    "CP850",
    "CP852",
    "CP866",
    "CP932",
    "DEC8",
    "EUCJPMS",
    "EUCKR",
    "GB2312",
    "GBK",
    "GEOSTD8",
    "GREEK",
    "HEBREW",
    "HP8",
    "KEYBCS2",
    "KOI8R",
    "KOI8U",
    "LATIN1",
    "LATIN2",
    "LATIN5",
    "LATIN7",
    "MACCE",
    "MACROMAN",
    "SJIS",
    "SWE7",
    "TIS620",
    "UCS2",
    "UJIS",
    "UTF8",
    "CHARSET_NAME",
    "E_SYM",
    "SELECT",
    "INSERT",
    "UPDATE",
    "DELETE",
    "INTO",
    "SET",
    "FROM",
    "UNION",
    "UNION_ALL",
    "ALL",
    "DISTINCT",
    "GROUP_BY",
    "HAVING",
    "WHERE",
    "ON",
    "ORDER_BY",
    "LIMIT",
    "AS",
    "CASE",
    "WHEN",
    "ELSE",
    "THEN",
    "INNER",
    "JOIN",
    "ASC",
    "DESC",
    "END",
    "LEFT",
    "RIGHT",
    "OUTER",
    "NOT",
    "AND",
    "OR",
    "IN",
    "EXIST",
    "BETWEEN",
    "NULL",
    "VALUES",
    "DOT",
    "VERTICAL_BAR",
    "DOUBLE_VERTICAL_BAR",
    "PLUS",
    "DIV",
    "MINUS",
    "PERCENT",
    "COMMA",
    "SEMI",
    "COLON",
    "RBRACK",
    "LBRACK",
    "NEGATION",
    "BITAND",
    "POWER_OP",
    "LPAREN",
    "RPAREN",
    "ASTERISK",
    "GT",
    "GE",
    "EQ",
    "LT",
    "LE",
    "LIKE",
    "ID",
    "INT",
    "FLOAT",
    "CHAR_LITERAL",
    "HEX",
    "BIT",
    "BOOLEAN",
    "NEWLINE",
    "WS"
  };

  public SQLCommonLexer(CharStream input) {
    super(input);
    _interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  @Override
  public String getGrammarFileName() {
    return "SQLCommon.g";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public String[] getModeNames() {
    return modeNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  @Override
  public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
    switch (ruleIndex) {
      case 140:
        WS_action((RuleContext) _localctx, actionIndex);
        break;
    }
  }

  private void WS_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
      case 0:
        skip();
        break;
    }
  }

  public static final String _serializedATN =
      "\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\2o\u0406\b\1\4\2\t"
          + "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"
          + "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"
          + "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"
          + "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"
          + "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"
          + ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"
          + "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="
          + "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"
          + "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"
          + "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"
          + "`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"
          + "k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"
          + "w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t\u0080"
          + "\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084\4\u0085"
          + "\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089"
          + "\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e"
          + "\t\u008e\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3"
          + "\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21"
          + "\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30"
          + "\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\37"
          + "\3\37\3 \3 \3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3"
          + "#\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'"
          + "\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3"
          + "*\3*\3*\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3,\3-\3-\3-\3-\3-\3-\3.\3.\3"
          + ".\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61"
          + "\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63"
          + "\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65"
          + "\3\65\3\65\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67"
          + "\38\38\38\38\38\38\39\39\39\39\39\39\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3;"
          + "\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3=\3=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>"
          + "\3?\3?\3?\3?\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3A\3A\3A\3A\3A\3B\3B\3B\3B"
          + "\3B\3B\3B\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F"
          + "\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F"
          + "\3F\3F\3F\3F\3F\3F\3F\3F\5F\u0267\nF\3G\3G\3H\3H\3H\3H\3H\3H\3H\3I\3I"
          + "\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L"
          + "\3L\3M\3M\3M\3M\3N\3N\3N\3N\3N\3O\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\6P"
          + "\u02a1\nP\rP\16P\u02a2\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R\3R\3R\3"
          + "R\3R\3S\3S\3S\3S\3S\3S\6S\u02bc\nS\rS\16S\u02bd\3S\3S\3S\3T\3T\3T\3T\3"
          + "T\3T\3T\3U\3U\3U\3U\3U\3U\3V\3V\3V\3W\3W\3W\3W\3W\3W\6W\u02d9\nW\rW\16"
          + "W\u02da\3W\3W\3W\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3Z\3[\3[\3[\3"
          + "[\3[\3\\\3\\\3\\\3\\\3\\\3]\3]\3]\3]\3]\3^\3^\3^\3^\3^\3^\3_\3_\3_\3_"
          + "\3_\3`\3`\3`\3`\3a\3a\3a\3a\3a\3b\3b\3b\3b\3c\3c\3c\3c\3c\3d\3d\3d\3d"
          + "\3d\3d\3e\3e\3e\3e\3e\3e\3f\3f\3f\3f\3g\3g\3g\3g\3h\3h\3h\3i\3i\3i\3j"
          + "\3j\3j\3j\3j\3j\3k\3k\3k\3k\3k\3k\3k\3k\3l\3l\3l\3l\3l\3m\3m\3m\3m\3m"
          + "\3m\3m\3n\3n\3o\3o\3p\3p\3p\3q\3q\3r\3r\3s\3s\3t\3t\3u\3u\3v\3v\3w\3w"
          + "\3x\3x\3y\3y\3z\3z\3{\3{\3|\3|\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080"
          + "\3\u0081\3\u0081\3\u0081\3\u0082\3\u0082\3\u0083\3\u0083\3\u0084\3\u0084"
          + "\3\u0084\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085"
          + "\5\u0085\u0387\n\u0085\3\u0086\6\u0086\u038a\n\u0086\r\u0086\16\u0086"
          + "\u038b\3\u0086\7\u0086\u038f\n\u0086\f\u0086\16\u0086\u0392\13\u0086\3"
          + "\u0087\6\u0087\u0395\n\u0087\r\u0087\16\u0087\u0396\3\u0088\6\u0088\u039a"
          + "\n\u0088\r\u0088\16\u0088\u039b\3\u0088\3\u0088\6\u0088\u03a0\n\u0088"
          + "\r\u0088\16\u0088\u03a1\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089"
          + "\3\u0089\3\u0089\7\u0089\u03ac\n\u0089\f\u0089\16\u0089\u03af\13\u0089"
          + "\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089\3\u0089"
          + "\7\u0089\u03ba\n\u0089\f\u0089\16\u0089\u03bd\13\u0089\3\u0089\5\u0089"
          + "\u03c0\n\u0089\3\u008a\3\u008a\3\u008a\3\u008a\6\u008a\u03c6\n\u008a\r"
          + "\u008a\16\u008a\u03c7\3\u008a\3\u008a\3\u008a\6\u008a\u03cd\n\u008a\r"
          + "\u008a\16\u008a\u03ce\3\u008a\3\u008a\5\u008a\u03d3\n\u008a\3\u008b\3"
          + "\u008b\3\u008b\3\u008b\6\u008b\u03d9\n\u008b\r\u008b\16\u008b\u03da\3"
          + "\u008b\3\u008b\3\u008b\6\u008b\u03e0\n\u008b\r\u008b\16\u008b\u03e1\3"
          + "\u008b\5\u008b\u03e5\n\u008b\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3"
          + "\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c\3\u008c"
          + "\3\u008c\3\u008c\3\u008c\3\u008c\5\u008c\u03f9\n\u008c\3\u008d\5\u008d"
          + "\u03fc\n\u008d\3\u008d\3\u008d\3\u008e\6\u008e\u0401\n\u008e\r\u008e\16"
          + "\u008e\u0402\3\u008e\3\u008e\2\u008f\3\2\1\5\2\1\7\2\1\t\2\1\13\2\1\r"
          + "\2\1\17\2\1\21\2\1\23\2\1\25\2\1\27\2\1\31\2\1\33\2\1\35\2\1\37\2\1!\2"
          + "\1#\2\1%\2\1\'\2\1)\2\1+\2\1-\2\1/\2\1\61\2\1\63\2\1\65\2\1\67\2\19\2"
          + "\1;\2\1=\2\1?\2\1A\2\1C\3\1E\4\1G\5\1I\6\1K\7\1M\b\1O\t\1Q\n\1S\13\1U"
          + "\f\1W\r\1Y\16\1[\17\1]\20\1_\21\1a\22\1c\23\1e\24\1g\25\1i\26\1k\27\1"
          + "m\30\1o\31\1q\32\1s\33\1u\34\1w\35\1y\36\1{\37\1} \1\177!\1\u0081\"\1"
          + "\u0083#\1\u0085$\1\u0087%\1\u0089&\1\u008b\'\1\u008d(\1\u008f)\1\u0091"
          + "*\1\u0093+\1\u0095,\1\u0097-\1\u0099.\1\u009b/\1\u009d\60\1\u009f\61\1"
          + "\u00a1\62\1\u00a3\63\1\u00a5\64\1\u00a7\65\1\u00a9\66\1\u00ab\67\1\u00ad"
          + "8\1\u00af9\1\u00b1:\1\u00b3;\1\u00b5<\1\u00b7=\1\u00b9>\1\u00bb?\1\u00bd"
          + "@\1\u00bfA\1\u00c1B\1\u00c3C\1\u00c5D\1\u00c7E\1\u00c9F\1\u00cbG\1\u00cd"
          + "H\1\u00cfI\1\u00d1J\1\u00d3K\1\u00d5L\1\u00d7M\1\u00d9N\1\u00dbO\1\u00dd"
          + "P\1\u00dfQ\1\u00e1R\1\u00e3S\1\u00e5T\1\u00e7U\1\u00e9V\1\u00ebW\1\u00ed"
          + "X\1\u00efY\1\u00f1Z\1\u00f3[\1\u00f5\\\1\u00f7]\1\u00f9^\1\u00fb_\1\u00fd"
          + "`\1\u00ffa\1\u0101b\1\u0103c\1\u0105d\1\u0107e\1\u0109f\1\u010bg\1\u010d"
          + "h\1\u010fi\1\u0111j\1\u0113k\1\u0115l\1\u0117m\1\u0119n\1\u011bo\2\3\2"
          + "$\3\2\62;\6\2&&C\\aac|\6\2\62;C\\aac|\5\2\62;CHch\4\2CCcc\4\2DDdd\4\2"
          + "EEee\4\2FFff\4\2GGgg\4\2HHhh\4\2IIii\4\2JJjj\4\2KKkk\4\2LLll\4\2MMmm\4"
          + "\2NNnn\4\2OOoo\4\2PPpp\4\2QQqq\4\2RRrr\4\2SSss\4\2TTtt\4\2UUuu\4\2VVv"
          + "v\4\2WWww\4\2XXxx\4\2YYyy\4\2ZZzz\4\2[[{{\4\2\\\\||\4\2\13\13\"\"\3\2"
          + "))\3\2$$\6\2\13\f\17\17\"\"~~\u0425\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2"
          + "I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3"
          + "\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2"
          + "\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2"
          + "o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3"
          + "\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083\3\2\2\2\2\u0085"
          + "\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2\2\2\u008d\3\2\2"
          + "\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095\3\2\2\2\2\u0097"
          + "\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2\2\2\u009f\3\2\2"
          + "\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9"
          + "\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b1\3\2\2"
          + "\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb"
          + "\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2"
          + "\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb\3\2\2\2\2\u00cd"
          + "\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d3\3\2\2\2\2\u00d5\3\2\2"
          + "\2\2\u00d7\3\2\2\2\2\u00d9\3\2\2\2\2\u00db\3\2\2\2\2\u00dd\3\2\2\2\2\u00df"
          + "\3\2\2\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5\3\2\2\2\2\u00e7\3\2\2"
          + "\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed\3\2\2\2\2\u00ef\3\2\2\2\2\u00f1"
          + "\3\2\2\2\2\u00f3\3\2\2\2\2\u00f5\3\2\2\2\2\u00f7\3\2\2\2\2\u00f9\3\2\2"
          + "\2\2\u00fb\3\2\2\2\2\u00fd\3\2\2\2\2\u00ff\3\2\2\2\2\u0101\3\2\2\2\2\u0103"
          + "\3\2\2\2\2\u0105\3\2\2\2\2\u0107\3\2\2\2\2\u0109\3\2\2\2\2\u010b\3\2\2"
          + "\2\2\u010d\3\2\2\2\2\u010f\3\2\2\2\2\u0111\3\2\2\2\2\u0113\3\2\2\2\2\u0115"
          + "\3\2\2\2\2\u0117\3\2\2\2\2\u0119\3\2\2\2\2\u011b\3\2\2\2\3\u011d\3\2\2"
          + "\2\5\u011f\3\2\2\2\7\u0121\3\2\2\2\t\u0123\3\2\2\2\13\u0125\3\2\2\2\r"
          + "\u0127\3\2\2\2\17\u0129\3\2\2\2\21\u012b\3\2\2\2\23\u012d\3\2\2\2\25\u012f"
          + "\3\2\2\2\27\u0131\3\2\2\2\31\u0133\3\2\2\2\33\u0135\3\2\2\2\35\u0137\3"
          + "\2\2\2\37\u0139\3\2\2\2!\u013b\3\2\2\2#\u013d\3\2\2\2%\u013f\3\2\2\2\'"
          + "\u0141\3\2\2\2)\u0143\3\2\2\2+\u0145\3\2\2\2-\u0147\3\2\2\2/\u0149\3\2"
          + "\2\2\61\u014b\3\2\2\2\63\u014d\3\2\2\2\65\u014f\3\2\2\2\67\u0151\3\2\2"
          + "\29\u0153\3\2\2\2;\u0155\3\2\2\2=\u0157\3\2\2\2?\u0159\3\2\2\2A\u015b"
          + "\3\2\2\2C\u015d\3\2\2\2E\u0166\3\2\2\2G\u016c\3\2\2\2I\u0171\3\2\2\2K"
          + "\u0178\3\2\2\2M\u017f\3\2\2\2O\u0186\3\2\2\2Q\u018d\3\2\2\2S\u0194\3\2"
          + "\2\2U\u019a\3\2\2\2W\u01a0\3\2\2\2Y\u01a6\3\2\2\2[\u01ac\3\2\2\2]\u01b1"
          + "\3\2\2\2_\u01b9\3\2\2\2a\u01bf\3\2\2\2c\u01c6\3\2\2\2e\u01ca\3\2\2\2g"
          + "\u01d2\3\2\2\2i\u01d8\3\2\2\2k\u01df\3\2\2\2m\u01e3\3\2\2\2o\u01eb\3\2"
          + "\2\2q\u01f1\3\2\2\2s\u01f7\3\2\2\2u\u01fe\3\2\2\2w\u0205\3\2\2\2y\u020c"
          + "\3\2\2\2{\u0213\3\2\2\2}\u0219\3\2\2\2\177\u0222\3\2\2\2\u0081\u0227\3"
          + "\2\2\2\u0083\u022c\3\2\2\2\u0085\u0233\3\2\2\2\u0087\u0238\3\2\2\2\u0089"
          + "\u023d\3\2\2\2\u008b\u0266\3\2\2\2\u008d\u0268\3\2\2\2\u008f\u026a\3\2"
          + "\2\2\u0091\u0271\3\2\2\2\u0093\u0278\3\2\2\2\u0095\u027f\3\2\2\2\u0097"
          + "\u0286\3\2\2\2\u0099\u028b\3\2\2\2\u009b\u028f\3\2\2\2\u009d\u0294\3\2"
          + "\2\2\u009f\u029a\3\2\2\2\u00a1\u02a8\3\2\2\2\u00a3\u02ac\3\2\2\2\u00a5"
          + "\u02b5\3\2\2\2\u00a7\u02c2\3\2\2\2\u00a9\u02c9\3\2\2\2\u00ab\u02cf\3\2"
          + "\2\2\u00ad\u02d2\3\2\2\2\u00af\u02df\3\2\2\2\u00b1\u02e5\3\2\2\2\u00b3"
          + "\u02e8\3\2\2\2\u00b5\u02ed\3\2\2\2\u00b7\u02f2\3\2\2\2\u00b9\u02f7\3\2"
          + "\2\2\u00bb\u02fc\3\2\2\2\u00bd\u0302\3\2\2\2\u00bf\u0307\3\2\2\2\u00c1"
          + "\u030b\3\2\2\2\u00c3\u0310\3\2\2\2\u00c5\u0314\3\2\2\2\u00c7\u0319\3\2"
          + "\2\2\u00c9\u031f\3\2\2\2\u00cb\u0325\3\2\2\2\u00cd\u0329\3\2\2\2\u00cf"
          + "\u032d\3\2\2\2\u00d1\u0330\3\2\2\2\u00d3\u0333\3\2\2\2\u00d5\u0339\3\2"
          + "\2\2\u00d7\u0341\3\2\2\2\u00d9\u0346\3\2\2\2\u00db\u034d\3\2\2\2\u00dd"
          + "\u034f\3\2\2\2\u00df\u0351\3\2\2\2\u00e1\u0354\3\2\2\2\u00e3\u0356\3\2"
          + "\2\2\u00e5\u0358\3\2\2\2\u00e7\u035a\3\2\2\2\u00e9\u035c\3\2\2\2\u00eb"
          + "\u035e\3\2\2\2\u00ed\u0360\3\2\2\2\u00ef\u0362\3\2\2\2\u00f1\u0364\3\2"
          + "\2\2\u00f3\u0366\3\2\2\2\u00f5\u0368\3\2\2\2\u00f7\u036a\3\2\2\2\u00f9"
          + "\u036c\3\2\2\2\u00fb\u036e\3\2\2\2\u00fd\u0370\3\2\2\2\u00ff\u0372\3\2"
          + "\2\2\u0101\u0374\3\2\2\2\u0103\u0377\3\2\2\2\u0105\u0379\3\2\2\2\u0107"
          + "\u037b\3\2\2\2\u0109\u0386\3\2\2\2\u010b\u0389\3\2\2\2\u010d\u0394\3\2"
          + "\2\2\u010f\u0399\3\2\2\2\u0111\u03bf\3\2\2\2\u0113\u03d2\3\2\2\2\u0115"
          + "\u03e4\3\2\2\2\u0117\u03f8\3\2\2\2\u0119\u03fb\3\2\2\2\u011b\u0400\3\2"
          + "\2\2\u011d\u011e\t\2\2\2\u011e\4\3\2\2\2\u011f\u0120\t\3\2\2\u0120\6\3"
          + "\2\2\2\u0121\u0122\t\4\2\2\u0122\b\3\2\2\2\u0123\u0124\t\5\2\2\u0124\n"
          + "\3\2\2\2\u0125\u0126\7)\2\2\u0126\f\3\2\2\2\u0127\u0128\7$\2\2\u0128\16"
          + "\3\2\2\2\u0129\u012a\t\6\2\2\u012a\20\3\2\2\2\u012b\u012c\t\7\2\2\u012c"
          + "\22\3\2\2\2\u012d\u012e\t\b\2\2\u012e\24\3\2\2\2\u012f\u0130\t\t\2\2\u0130"
          + "\26\3\2\2\2\u0131\u0132\t\n\2\2\u0132\30\3\2\2\2\u0133\u0134\t\13\2\2"
          + "\u0134\32\3\2\2\2\u0135\u0136\t\f\2\2\u0136\34\3\2\2\2\u0137\u0138\t\r"
          + "\2\2\u0138\36\3\2\2\2\u0139\u013a\t\16\2\2\u013a \3\2\2\2\u013b\u013c"
          + "\t\17\2\2\u013c\"\3\2\2\2\u013d\u013e\t\20\2\2\u013e$\3\2\2\2\u013f\u0140"
          + "\t\21\2\2\u0140&\3\2\2\2\u0141\u0142\t\22\2\2\u0142(\3\2\2\2\u0143\u0144"
          + "\t\23\2\2\u0144*\3\2\2\2\u0145\u0146\t\24\2\2\u0146,\3\2\2\2\u0147\u0148"
          + "\t\25\2\2\u0148.\3\2\2\2\u0149\u014a\t\26\2\2\u014a\60\3\2\2\2\u014b\u014c"
          + "\t\27\2\2\u014c\62\3\2\2\2\u014d\u014e\t\30\2\2\u014e\64\3\2\2\2\u014f"
          + "\u0150\t\31\2\2\u0150\66\3\2\2\2\u0151\u0152\t\32\2\2\u01528\3\2\2\2\u0153"
          + "\u0154\t\33\2\2\u0154:\3\2\2\2\u0155\u0156\t\34\2\2\u0156<\3\2\2\2\u0157"
          + "\u0158\t\35\2\2\u0158>\3\2\2\2\u0159\u015a\t\36\2\2\u015a@\3\2\2\2\u015b"
          + "\u015c\t\37\2\2\u015cB\3\2\2\2\u015d\u015e\5\17\b\2\u015e\u015f\5\61\31"
          + "\2\u015f\u0160\5\'\24\2\u0160\u0161\5\63\32\2\u0161\u0162\5\23\n\2\u0162"
          + "\u0163\5\37\20\2\u0163\u0164\5\37\20\2\u0164\u0165\7:\2\2\u0165D\3\2\2"
          + "\2\u0166\u0167\5\17\b\2\u0167\u0168\5\63\32\2\u0168\u0169\5\23\n\2\u0169"
          + "\u016a\5\37\20\2\u016a\u016b\5\37\20\2\u016bF\3\2\2\2\u016c\u016d\5\21"
          + "\t\2\u016d\u016e\5\37\20\2\u016e\u016f\5\33\16\2\u016f\u0170\7\67\2\2"
          + "\u0170H\3\2\2\2\u0171\u0172\5\21\t\2\u0172\u0173\5\37\20\2\u0173\u0174"
          + "\5)\25\2\u0174\u0175\5\17\b\2\u0175\u0176\5\61\31\2\u0176\u0177\5? \2"
          + "\u0177J\3\2\2\2\u0178\u0179\5\23\n\2\u0179\u017a\5-\27\2\u017a\u017b\7"
          + "\63\2\2\u017b\u017c\7\64\2\2\u017c\u017d\7\67\2\2\u017d\u017e\7\62\2\2"
          + "\u017eL\3\2\2\2\u017f\u0180\5\23\n\2\u0180\u0181\5-\27\2\u0181\u0182\7"
          + "\63\2\2\u0182\u0183\7\64\2\2\u0183\u0184\7\67\2\2\u0184\u0185\7\63\2\2"
          + "\u0185N\3\2\2\2\u0186\u0187\5\23\n\2\u0187\u0188\5-\27\2\u0188\u0189\7"
          + "\63\2\2\u0189\u018a\7\64\2\2\u018a\u018b\7\67\2\2\u018b\u018c\78\2\2\u018c"
          + "P\3\2\2\2\u018d\u018e\5\23\n\2\u018e\u018f\5-\27\2\u018f\u0190\7\63\2"
          + "\2\u0190\u0191\7\64\2\2\u0191\u0192\7\67\2\2\u0192\u0193\79\2\2\u0193"
          + "R\3\2\2\2\u0194\u0195\5\23\n\2\u0195\u0196\5-\27\2\u0196\u0197\7:\2\2"
          + "\u0197\u0198\7\67\2\2\u0198\u0199\7\62\2\2\u0199T\3\2\2\2\u019a\u019b"
          + "\5\23\n\2\u019b\u019c\5-\27\2\u019c\u019d\7:\2\2\u019d\u019e\7\67\2\2"
          + "\u019e\u019f\7\64\2\2\u019fV\3\2\2\2\u01a0\u01a1\5\23\n\2\u01a1\u01a2"
          + "\5-\27\2\u01a2\u01a3\7:\2\2\u01a3\u01a4\78\2\2\u01a4\u01a5\78\2\2\u01a5"
          + "X\3\2\2\2\u01a6\u01a7\5\23\n\2\u01a7\u01a8\5-\27\2\u01a8\u01a9\7;\2\2"
          + "\u01a9\u01aa\7\65\2\2\u01aa\u01ab\7\64\2\2\u01abZ\3\2\2\2\u01ac\u01ad"
          + "\5\25\13\2\u01ad\u01ae\5\27\f\2\u01ae\u01af\5\23\n\2\u01af\u01b0\7:\2"
          + "\2\u01b0\\\3\2\2\2\u01b1\u01b2\5\27\f\2\u01b2\u01b3\5\67\34\2\u01b3\u01b4"
          + "\5\23\n\2\u01b4\u01b5\5!\21\2\u01b5\u01b6\5-\27\2\u01b6\u01b7\5\'\24\2"
          + "\u01b7\u01b8\5\63\32\2\u01b8^\3\2\2\2\u01b9\u01ba\5\27\f\2\u01ba\u01bb"
          + "\5\67\34\2\u01bb\u01bc\5\23\n\2\u01bc\u01bd\5#\22\2\u01bd\u01be\5\61\31"
          + "\2\u01be`\3\2\2\2\u01bf\u01c0\5\33\16\2\u01c0\u01c1\5\21\t\2\u01c1\u01c2"
          + "\7\64\2\2\u01c2\u01c3\7\65\2\2\u01c3\u01c4\7\63\2\2\u01c4\u01c5\7\64\2"
          + "\2\u01c5b\3\2\2\2\u01c6\u01c7\5\33\16\2\u01c7\u01c8\5\21\t\2\u01c8\u01c9"
          + "\5#\22\2\u01c9d\3\2\2\2\u01ca\u01cb\5\33\16\2\u01cb\u01cc\5\27\f\2\u01cc"
          + "\u01cd\5+\26\2\u01cd\u01ce\5\63\32\2\u01ce\u01cf\5\65\33\2\u01cf\u01d0"
          + "\5\25\13\2\u01d0\u01d1\7:\2\2\u01d1f\3\2\2\2\u01d2\u01d3\5\33\16\2\u01d3"
          + "\u01d4\5\61\31\2\u01d4\u01d5\5\27\f\2\u01d5\u01d6\5\27\f\2\u01d6\u01d7"
          + "\5#\22\2\u01d7h\3\2\2\2\u01d8\u01d9\5\35\17\2\u01d9\u01da\5\27\f\2\u01da"
          + "\u01db\5\21\t\2\u01db\u01dc\5\61\31\2\u01dc\u01dd\5\27\f\2\u01dd\u01de"
          + "\5;\36\2\u01dej\3\2\2\2\u01df\u01e0\5\35\17\2\u01e0\u01e1\5-\27\2\u01e1"
          + "\u01e2\7:\2\2\u01e2l\3\2\2\2\u01e3\u01e4\5#\22\2\u01e4\u01e5\5\27\f\2"
          + "\u01e5\u01e6\5? \2\u01e6\u01e7\5\21\t\2\u01e7\u01e8\5\23\n\2\u01e8\u01e9"
          + "\5\63\32\2\u01e9\u01ea\7\64\2\2\u01ean\3\2\2\2\u01eb\u01ec\5#\22\2\u01ec"
          + "\u01ed\5+\26\2\u01ed\u01ee\5\37\20\2\u01ee\u01ef\7:\2\2\u01ef\u01f0\5"
          + "\61\31\2\u01f0p\3\2\2\2\u01f1\u01f2\5#\22\2\u01f2\u01f3\5+\26\2\u01f3"
          + "\u01f4\5\37\20\2\u01f4\u01f5\7:\2\2\u01f5\u01f6\5\67\34\2\u01f6r\3\2\2"
          + "\2\u01f7\u01f8\5%\23\2\u01f8\u01f9\5\17\b\2\u01f9\u01fa\5\65\33\2\u01fa"
          + "\u01fb\5\37\20\2\u01fb\u01fc\5)\25\2\u01fc\u01fd\7\63\2\2\u01fdt\3\2\2"
          + "\2\u01fe\u01ff\5%\23\2\u01ff\u0200\5\17\b\2\u0200\u0201\5\65\33\2\u0201"
          + "\u0202\5\37\20\2\u0202\u0203\5)\25\2\u0203\u0204\7\64\2\2\u0204v\3\2\2"
          + "\2\u0205\u0206\5%\23\2\u0206\u0207\5\17\b\2\u0207\u0208\5\65\33\2\u0208"
          + "\u0209\5\37\20\2\u0209\u020a\5)\25\2\u020a\u020b\7\67\2\2\u020bx\3\2\2"
          + "\2\u020c\u020d\5%\23\2\u020d\u020e\5\17\b\2\u020e\u020f\5\65\33\2\u020f"
          + "\u0210\5\37\20\2\u0210\u0211\5)\25\2\u0211\u0212\79\2\2\u0212z\3\2\2\2"
          + "\u0213\u0214\5\'\24\2\u0214\u0215\5\17\b\2\u0215\u0216\5\23\n\2\u0216"
          + "\u0217\5\23\n\2\u0217\u0218\5\27\f\2\u0218|\3\2\2\2\u0219\u021a\5\'\24"
          + "\2\u021a\u021b\5\17\b\2\u021b\u021c\5\23\n\2\u021c\u021d\5\61\31\2\u021d"
          + "\u021e\5+\26\2\u021e\u021f\5\'\24\2\u021f\u0220\5\17\b\2\u0220\u0221\5"
          + ")\25\2\u0221~\3\2\2\2\u0222\u0223\5\63\32\2\u0223\u0224\5!\21\2\u0224"
          + "\u0225\5\37\20\2\u0225\u0226\5\63\32\2\u0226\u0080\3\2\2\2\u0227\u0228"
          + "\5\63\32\2\u0228\u0229\5;\36\2\u0229\u022a\5\27\f\2\u022a\u022b\79\2\2"
          + "\u022b\u0082\3\2\2\2\u022c\u022d\5\65\33\2\u022d\u022e\5\37\20\2\u022e"
          + "\u022f\5\63\32\2\u022f\u0230\78\2\2\u0230\u0231\7\64\2\2\u0231\u0232\7"
          + "\62\2\2\u0232\u0084\3\2\2\2\u0233\u0234\5\67\34\2\u0234\u0235\5\23\n\2"
          + "\u0235\u0236\5\63\32\2\u0236\u0237\7\64\2\2\u0237\u0086\3\2\2\2\u0238"
          + "\u0239\5\67\34\2\u0239\u023a\5!\21\2\u023a\u023b\5\37\20\2\u023b\u023c"
          + "\5\63\32\2\u023c\u0088\3\2\2\2\u023d\u023e\5\67\34\2\u023e\u023f\5\65"
          + "\33\2\u023f\u0240\5\31\r\2\u0240\u0241\7:\2\2\u0241\u008a\3\2\2\2\u0242"
          + "\u0267\5C\"\2\u0243\u0267\5E#\2\u0244\u0267\5G$\2\u0245\u0267\5I%\2\u0246"
          + "\u0267\5K&\2\u0247\u0267\5M\'\2\u0248\u0267\5O(\2\u0249\u0267\5Q)\2\u024a"
          + "\u0267\5S*\2\u024b\u0267\5U+\2\u024c\u0267\5W,\2\u024d\u0267\5Y-\2\u024e"
          + "\u0267\5[.\2\u024f\u0267\5]/\2\u0250\u0267\5_\60\2\u0251\u0267\5a\61\2"
          + "\u0252\u0267\5c\62\2\u0253\u0267\5e\63\2\u0254\u0267\5g\64\2\u0255\u0267"
          + "\5i\65\2\u0256\u0267\5k\66\2\u0257\u0267\5m\67\2\u0258\u0267\5o8\2\u0259"
          + "\u0267\5q9\2\u025a\u0267\5s:\2\u025b\u0267\5u;\2\u025c\u0267\5w<\2\u025d"
          + "\u0267\5y=\2\u025e\u0267\5{>\2\u025f\u0267\5}?\2\u0260\u0267\5\177@\2"
          + "\u0261\u0267\5\u0081A\2\u0262\u0267\5\u0083B\2\u0263\u0267\5\u0085C\2"
          + "\u0264\u0267\5\u0087D\2\u0265\u0267\5\u0089E\2\u0266\u0242\3\2\2\2\u0266"
          + "\u0243\3\2\2\2\u0266\u0244\3\2\2\2\u0266\u0245\3\2\2\2\u0266\u0246\3\2"
          + "\2\2\u0266\u0247\3\2\2\2\u0266\u0248\3\2\2\2\u0266\u0249\3\2\2\2\u0266"
          + "\u024a\3\2\2\2\u0266\u024b\3\2\2\2\u0266\u024c\3\2\2\2\u0266\u024d\3\2"
          + "\2\2\u0266\u024e\3\2\2\2\u0266\u024f\3\2\2\2\u0266\u0250\3\2\2\2\u0266"
          + "\u0251\3\2\2\2\u0266\u0252\3\2\2\2\u0266\u0253\3\2\2\2\u0266\u0254\3\2"
          + "\2\2\u0266\u0255\3\2\2\2\u0266\u0256\3\2\2\2\u0266\u0257\3\2\2\2\u0266"
          + "\u0258\3\2\2\2\u0266\u0259\3\2\2\2\u0266\u025a\3\2\2\2\u0266\u025b\3\2"
          + "\2\2\u0266\u025c\3\2\2\2\u0266\u025d\3\2\2\2\u0266\u025e\3\2\2\2\u0266"
          + "\u025f\3\2\2\2\u0266\u0260\3\2\2\2\u0266\u0261\3\2\2\2\u0266\u0262\3\2"
          + "\2\2\u0266\u0263\3\2\2\2\u0266\u0264\3\2\2\2\u0266\u0265\3\2\2\2\u0267"
          + "\u008c\3\2\2\2\u0268\u0269\5\27\f\2\u0269\u008e\3\2\2\2\u026a\u026b\5"
          + "\63\32\2\u026b\u026c\5\27\f\2\u026c\u026d\5%\23\2\u026d\u026e\5\27\f\2"
          + "\u026e\u026f\5\23\n\2\u026f\u0270\5\65\33\2\u0270\u0090\3\2\2\2\u0271"
          + "\u0272\5\37\20\2\u0272\u0273\5)\25\2\u0273\u0274\5\63\32\2\u0274\u0275"
          + "\5\27\f\2\u0275\u0276\5\61\31\2\u0276\u0277\5\65\33\2\u0277\u0092\3\2"
          + "\2\2\u0278\u0279\5\67\34\2\u0279\u027a\5-\27\2\u027a\u027b\5\25\13\2\u027b"
          + "\u027c\5\17\b\2\u027c\u027d\5\65\33\2\u027d\u027e\5\27\f\2\u027e\u0094"
          + "\3\2\2\2\u027f\u0280\5\25\13\2\u0280\u0281\5\27\f\2\u0281\u0282\5%\23"
          + "\2\u0282\u0283\5\27\f\2\u0283\u0284\5\65\33\2\u0284\u0285\5\27\f\2\u0285"
          + "\u0096\3\2\2\2\u0286\u0287\5\37\20\2\u0287\u0288\5)\25\2\u0288\u0289\5"
          + "\65\33\2\u0289\u028a\5+\26\2\u028a\u0098\3\2\2\2\u028b\u028c\5\63\32\2"
          + "\u028c\u028d\5\27\f\2\u028d\u028e\5\65\33\2\u028e\u009a\3\2\2\2\u028f"
          + "\u0290\5\31\r\2\u0290\u0291\5\61\31\2\u0291\u0292\5+\26\2\u0292\u0293"
          + "\5\'\24\2\u0293\u009c\3\2\2\2\u0294\u0295\5\67\34\2\u0295\u0296\5)\25"
          + "\2\u0296\u0297\5\37\20\2\u0297\u0298\5+\26\2\u0298\u0299\5)\25\2\u0299"
          + "\u009e\3\2\2\2\u029a\u029b\5\67\34\2\u029b\u029c\5)\25\2\u029c\u029d\5"
          + "\37\20\2\u029d\u029e\5+\26\2\u029e\u02a0\5)\25\2\u029f\u02a1\t \2\2\u02a0"
          + "\u029f\3\2\2\2\u02a1\u02a2\3\2\2\2\u02a2\u02a0\3\2\2\2\u02a2\u02a3\3\2"
          + "\2\2\u02a3\u02a4\3\2\2\2\u02a4\u02a5\5\17\b\2\u02a5\u02a6\5%\23\2\u02a6"
          + "\u02a7\5%\23\2\u02a7\u00a0\3\2\2\2\u02a8\u02a9\5\17\b\2\u02a9\u02aa\5"
          + "%\23\2\u02aa\u02ab\5%\23\2\u02ab\u00a2\3\2\2\2\u02ac\u02ad\5\25\13\2\u02ad"
          + "\u02ae\5\37\20\2\u02ae\u02af\5\63\32\2\u02af\u02b0\5\65\33\2\u02b0\u02b1"
          + "\5\37\20\2\u02b1\u02b2\5)\25\2\u02b2\u02b3\5\23\n\2\u02b3\u02b4\5\65\33"
          + "\2\u02b4\u00a4\3\2\2\2\u02b5\u02b6\5\33\16\2\u02b6\u02b7\5\61\31\2\u02b7"
          + "\u02b8\5+\26\2\u02b8\u02b9\5\67\34\2\u02b9\u02bb\5-\27\2\u02ba\u02bc\t"
          + " \2\2\u02bb\u02ba\3\2\2\2\u02bc\u02bd\3\2\2\2\u02bd\u02bb\3\2\2\2\u02bd"
          + "\u02be\3\2\2\2\u02be\u02bf\3\2\2\2\u02bf\u02c0\5\21\t\2\u02c0\u02c1\5"
          + "? \2\u02c1\u00a6\3\2\2\2\u02c2\u02c3\5\35\17\2\u02c3\u02c4\5\17\b\2\u02c4"
          + "\u02c5\59\35\2\u02c5\u02c6\5\37\20\2\u02c6\u02c7\5)\25\2\u02c7\u02c8\5"
          + "\33\16\2\u02c8\u00a8\3\2\2\2\u02c9\u02ca\5;\36\2\u02ca\u02cb\5\35\17\2"
          + "\u02cb\u02cc\5\27\f\2\u02cc\u02cd\5\61\31\2\u02cd\u02ce\5\27\f\2\u02ce"
          + "\u00aa\3\2\2\2\u02cf\u02d0\5+\26\2\u02d0\u02d1\5)\25\2\u02d1\u00ac\3\2"
          + "\2\2\u02d2\u02d3\5+\26\2\u02d3\u02d4\5\61\31\2\u02d4\u02d5\5\25\13\2\u02d5"
          + "\u02d6\5\27\f\2\u02d6\u02d8\5\61\31\2\u02d7\u02d9\t \2\2\u02d8\u02d7\3"
          + "\2\2\2\u02d9\u02da\3\2\2\2\u02da\u02d8\3\2\2\2\u02da\u02db\3\2\2\2\u02db"
          + "\u02dc\3\2\2\2\u02dc\u02dd\5\21\t\2\u02dd\u02de\5? \2\u02de\u00ae\3\2"
          + "\2\2\u02df\u02e0\5%\23\2\u02e0\u02e1\5\37\20\2\u02e1\u02e2\5\'\24\2\u02e2"
          + "\u02e3\5\37\20\2\u02e3\u02e4\5\65\33\2\u02e4\u00b0\3\2\2\2\u02e5\u02e6"
          + "\5\17\b\2\u02e6\u02e7\5\63\32\2\u02e7\u00b2\3\2\2\2\u02e8\u02e9\5\23\n"
          + "\2\u02e9\u02ea\5\17\b\2\u02ea\u02eb\5\63\32\2\u02eb\u02ec\5\27\f\2\u02ec"
          + "\u00b4\3\2\2\2\u02ed\u02ee\5;\36\2\u02ee\u02ef\5\35\17\2\u02ef\u02f0\5"
          + "\27\f\2\u02f0\u02f1\5)\25\2\u02f1\u00b6\3\2\2\2\u02f2\u02f3\5\27\f\2\u02f3"
          + "\u02f4\5%\23\2\u02f4\u02f5\5\63\32\2\u02f5\u02f6\5\27\f\2\u02f6\u00b8"
          + "\3\2\2\2\u02f7\u02f8\5\65\33\2\u02f8\u02f9\5\35\17\2\u02f9\u02fa\5\27"
          + "\f\2\u02fa\u02fb\5)\25\2\u02fb\u00ba\3\2\2\2\u02fc\u02fd\5\37\20\2\u02fd"
          + "\u02fe\5)\25\2\u02fe\u02ff\5)\25\2\u02ff\u0300\5\27\f\2\u0300\u0301\5"
          + "\61\31\2\u0301\u00bc\3\2\2\2\u0302\u0303\5!\21\2\u0303\u0304\5+\26\2\u0304"
          + "\u0305\5\37\20\2\u0305\u0306\5)\25\2\u0306\u00be\3\2\2\2\u0307\u0308\5"
          + "\17\b\2\u0308\u0309\5\63\32\2\u0309\u030a\5\23\n\2\u030a\u00c0\3\2\2\2"
          + "\u030b\u030c\5\25\13\2\u030c\u030d\5\27\f\2\u030d\u030e\5\63\32\2\u030e"
          + "\u030f\5\23\n\2\u030f\u00c2\3\2\2\2\u0310\u0311\5\27\f\2\u0311\u0312\5"
          + ")\25\2\u0312\u0313\5\25\13\2\u0313\u00c4\3\2\2\2\u0314\u0315\5%\23\2\u0315"
          + "\u0316\5\27\f\2\u0316\u0317\5\31\r\2\u0317\u0318\5\65\33\2\u0318\u00c6"
          + "\3\2\2\2\u0319\u031a\5\61\31\2\u031a\u031b\5\37\20\2\u031b\u031c\5\33"
          + "\16\2\u031c\u031d\5\35\17\2\u031d\u031e\5\65\33\2\u031e\u00c8\3\2\2\2"
          + "\u031f\u0320\5+\26\2\u0320\u0321\5\67\34\2\u0321\u0322\5\65\33\2\u0322"
          + "\u0323\5\27\f\2\u0323\u0324\5\61\31\2\u0324\u00ca\3\2\2\2\u0325\u0326"
          + "\5)\25\2\u0326\u0327\5+\26\2\u0327\u0328\5\65\33\2\u0328\u00cc\3\2\2\2"
          + "\u0329\u032a\5\17\b\2\u032a\u032b\5)\25\2\u032b\u032c\5\25\13\2\u032c"
          + "\u00ce\3\2\2\2\u032d\u032e\5+\26\2\u032e\u032f\5\61\31\2\u032f\u00d0\3"
          + "\2\2\2\u0330\u0331\5\37\20\2\u0331\u0332\5)\25\2\u0332\u00d2\3\2\2\2\u0333"
          + "\u0334\5\27\f\2\u0334\u0335\5=\37\2\u0335\u0336\5\37\20\2\u0336\u0337"
          + "\5\63\32\2\u0337\u0338\5\65\33\2\u0338\u00d4\3\2\2\2\u0339\u033a\5\21"
          + "\t\2\u033a\u033b\5\27\f\2\u033b\u033c\5\65\33\2\u033c\u033d\5;\36\2\u033d"
          + "\u033e\5\27\f\2\u033e\u033f\5\27\f\2\u033f\u0340\5)\25\2\u0340\u00d6\3"
          + "\2\2\2\u0341\u0342\5)\25\2\u0342\u0343\5\67\34\2\u0343\u0344\5%\23\2\u0344"
          + "\u0345\5%\23\2\u0345\u00d8\3\2\2\2\u0346\u0347\59\35\2\u0347\u0348\5\17"
          + "\b\2\u0348\u0349\5%\23\2\u0349\u034a\5\67\34\2\u034a\u034b\5\27\f\2\u034b"
          + "\u034c\5\63\32\2\u034c\u00da\3\2\2\2\u034d\u034e\7\60\2\2\u034e\u00dc"
          + "\3\2\2\2\u034f\u0350\7~\2\2\u0350\u00de\3\2\2\2\u0351\u0352\7~\2\2\u0352"
          + "\u0353\7~\2\2\u0353\u00e0\3\2\2\2\u0354\u0355\7-\2\2\u0355\u00e2\3\2\2"
          + "\2\u0356\u0357\7\61\2\2\u0357\u00e4\3\2\2\2\u0358\u0359\7/\2\2\u0359\u00e6"
          + "\3\2\2\2\u035a\u035b\7\'\2\2\u035b\u00e8\3\2\2\2\u035c\u035d\7.\2\2\u035d"
          + "\u00ea\3\2\2\2\u035e\u035f\7=\2\2\u035f\u00ec\3\2\2\2\u0360\u0361\7<\2"
          + "\2\u0361\u00ee\3\2\2\2\u0362\u0363\7_\2\2\u0363\u00f0\3\2\2\2\u0364\u0365"
          + "\7]\2\2\u0365\u00f2\3\2\2\2\u0366\u0367\7\u0080\2\2\u0367\u00f4\3\2\2"
          + "\2\u0368\u0369\7(\2\2\u0369\u00f6\3\2\2\2\u036a\u036b\7`\2\2\u036b\u00f8"
          + "\3\2\2\2\u036c\u036d\7*\2\2\u036d\u00fa\3\2\2\2\u036e\u036f\7+\2\2\u036f"
          + "\u00fc\3\2\2\2\u0370\u0371\7,\2\2\u0371\u00fe\3\2\2\2\u0372\u0373\7@\2"
          + "\2\u0373\u0100\3\2\2\2\u0374\u0375\7@\2\2\u0375\u0376\7?\2\2\u0376\u0102"
          + "\3\2\2\2\u0377\u0378\7?\2\2\u0378\u0104\3\2\2\2\u0379\u037a\7>\2\2\u037a"
          + "\u0106\3\2\2\2\u037b\u037c\7>\2\2\u037c\u037d\7?\2\2\u037d\u0108\3\2\2"
          + "\2\u037e\u037f\7n\2\2\u037f\u0380\7k\2\2\u0380\u0381\7m\2\2\u0381\u0387"
          + "\7g\2\2\u0382\u0383\7N\2\2\u0383\u0384\7K\2\2\u0384\u0385\7M\2\2\u0385"
          + "\u0387\7G\2\2\u0386\u037e\3\2\2\2\u0386\u0382\3\2\2\2\u0387\u010a\3\2"
          + "\2\2\u0388\u038a\5\5\3\2\u0389\u0388\3\2\2\2\u038a\u038b\3\2\2\2\u038b"
          + "\u0389\3\2\2\2\u038b\u038c\3\2\2\2\u038c\u0390\3\2\2\2\u038d\u038f\5\3"
          + "\2\2\u038e\u038d\3\2\2\2\u038f\u0392\3\2\2\2\u0390\u038e\3\2\2\2\u0390"
          + "\u0391\3\2\2\2\u0391\u010c\3\2\2\2\u0392\u0390\3\2\2\2\u0393\u0395\5\3"
          + "\2\2\u0394\u0393\3\2\2\2\u0395\u0396\3\2\2\2\u0396\u0394\3\2\2\2\u0396"
          + "\u0397\3\2\2\2\u0397\u010e\3\2\2\2\u0398\u039a\5\3\2\2\u0399\u0398\3\2"
          + "\2\2\u039a\u039b\3\2\2\2\u039b\u0399\3\2\2\2\u039b\u039c\3\2\2\2\u039c"
          + "\u039d\3\2\2\2\u039d\u039f\7\60\2\2\u039e\u03a0\5\3\2\2\u039f\u039e\3"
          + "\2\2\2\u03a0\u03a1\3\2\2\2\u03a1\u039f\3\2\2\2\u03a1\u03a2\3\2\2\2\u03a2"
          + "\u0110\3\2\2\2\u03a3\u03ad\7)\2\2\u03a4\u03a5\7^\2\2\u03a5\u03ac\7^\2"
          + "\2\u03a6\u03a7\7)\2\2\u03a7\u03ac\7)\2\2\u03a8\u03a9\7^\2\2\u03a9\u03ac"
          + "\7)\2\2\u03aa\u03ac\n!\2\2\u03ab\u03a4\3\2\2\2\u03ab\u03a6\3\2\2\2\u03ab"
          + "\u03a8\3\2\2\2\u03ab\u03aa\3\2\2\2\u03ac\u03af\3\2\2\2\u03ad\u03ab\3\2"
          + "\2\2\u03ad\u03ae\3\2\2\2\u03ae\u03b0\3\2\2\2\u03af\u03ad\3\2\2\2\u03b0"
          + "\u03c0\7)\2\2\u03b1\u03bb\7$\2\2\u03b2\u03b3\7^\2\2\u03b3\u03ba\7^\2\2"
          + "\u03b4\u03b5\7$\2\2\u03b5\u03ba\7$\2\2\u03b6\u03b7\7^\2\2\u03b7\u03ba"
          + "\7$\2\2\u03b8\u03ba\n\"\2\2\u03b9\u03b2\3\2\2\2\u03b9\u03b4\3\2\2\2\u03b9"
          + "\u03b6\3\2\2\2\u03b9\u03b8\3\2\2\2\u03ba\u03bd\3\2\2\2\u03bb\u03b9\3\2"
          + "\2\2\u03bb\u03bc\3\2\2\2\u03bc\u03be\3\2\2\2\u03bd\u03bb\3\2\2\2\u03be"
          + "\u03c0\7$\2\2\u03bf\u03a3\3\2\2\2\u03bf\u03b1\3\2\2\2\u03c0\u0112\3\2"
          + "\2\2\u03c1\u03c2\7\62\2\2\u03c2\u03c3\7z\2\2\u03c3\u03c5\3\2\2\2\u03c4"
          + "\u03c6\5\t\5\2\u03c5\u03c4\3\2\2\2\u03c6\u03c7\3\2\2\2\u03c7\u03c5\3\2"
          + "\2\2\u03c7\u03c8\3\2\2\2\u03c8\u03d3\3\2\2\2\u03c9\u03ca\7Z\2\2\u03ca"
          + "\u03cc\7)\2\2\u03cb\u03cd\5\t\5\2\u03cc\u03cb\3\2\2\2\u03cd\u03ce\3\2"
          + "\2\2\u03ce\u03cc\3\2\2\2\u03ce\u03cf\3\2\2\2\u03cf\u03d0\3\2\2\2\u03d0"
          + "\u03d1\7)\2\2\u03d1\u03d3\3\2\2\2\u03d2\u03c1\3\2\2\2\u03d2\u03c9\3\2"
          + "\2\2\u03d3\u0114\3\2\2\2\u03d4\u03d5\7\62\2\2\u03d5\u03d6\7d\2\2\u03d6"
          + "\u03d8\3\2\2\2\u03d7\u03d9\4\62\63\2\u03d8\u03d7\3\2\2\2\u03d9\u03da\3"
          + "\2\2\2\u03da\u03d8\3\2\2\2\u03da\u03db\3\2\2\2\u03db\u03e5\3\2\2\2\u03dc"
          + "\u03dd\7D\2\2\u03dd\u03df\7)\2\2\u03de\u03e0\4\62\63\2\u03df\u03de\3\2"
          + "\2\2\u03e0\u03e1\3\2\2\2\u03e1\u03df\3\2\2\2\u03e1\u03e2\3\2\2\2\u03e2"
          + "\u03e3\3\2\2\2\u03e3\u03e5\7)\2\2\u03e4\u03d4\3\2\2\2\u03e4\u03dc\3\2"
          + "\2\2\u03e5\u0116\3\2\2\2\u03e6\u03e7\7v\2\2\u03e7\u03e8\7t\2\2\u03e8\u03e9"
          + "\7w\2\2\u03e9\u03f9\7g\2\2\u03ea\u03eb\7V\2\2\u03eb\u03ec\7T\2\2\u03ec"
          + "\u03ed\7W\2\2\u03ed\u03f9\7G\2\2\u03ee\u03ef\7h\2\2\u03ef\u03f0\7c\2\2"
          + "\u03f0\u03f1\7n\2\2\u03f1\u03f2\7u\2\2\u03f2\u03f9\7g\2\2\u03f3\u03f4"
          + "\7H\2\2\u03f4\u03f5\7C\2\2\u03f5\u03f6\7N\2\2\u03f6\u03f7\7U\2\2\u03f7"
          + "\u03f9\7G\2\2\u03f8\u03e6\3\2\2\2\u03f8\u03ea\3\2\2\2\u03f8\u03ee\3\2"
          + "\2\2\u03f8\u03f3\3\2\2\2\u03f9\u0118\3\2\2\2\u03fa\u03fc\7\17\2\2\u03fb"
          + "\u03fa\3\2\2\2\u03fb\u03fc\3\2\2\2\u03fc\u03fd\3\2\2\2\u03fd\u03fe\7\f"
          + "\2\2\u03fe\u011a\3\2\2\2\u03ff\u0401\t#\2\2\u0400\u03ff\3\2\2\2\u0401"
          + "\u0402\3\2\2\2\u0402\u0400\3\2\2\2\u0402\u0403\3\2\2\2\u0403\u0404\3\2"
          + "\2\2\u0404\u0405\b\u008e\2\2\u0405\u011c\3\2\2\2\33\2\u0266\u02a2\u02bd"
          + "\u02da\u0386\u038b\u0390\u0396\u039b\u03a1\u03ab\u03ad\u03b9\u03bb\u03bf"
          + "\u03c7\u03ce\u03d2\u03da\u03e1\u03e4\u03f8\u03fb\u0402";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
    for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
    }
  }
}
Beispiel #8
0
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class CymbolParser extends Parser {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int T__20 = 1,
      T__19 = 2,
      T__18 = 3,
      T__17 = 4,
      T__16 = 5,
      T__15 = 6,
      T__14 = 7,
      T__13 = 8,
      T__12 = 9,
      T__11 = 10,
      T__10 = 11,
      T__9 = 12,
      T__8 = 13,
      T__7 = 14,
      T__6 = 15,
      T__5 = 16,
      T__4 = 17,
      T__3 = 18,
      T__2 = 19,
      T__1 = 20,
      T__0 = 21,
      ID = 22,
      INT = 23,
      WS = 24,
      SL_COMMENT = 25;
  public static final String[] tokenNames = {
    "<INVALID>",
    "']'",
    "')'",
    "','",
    "'+'",
    "'['",
    "'-'",
    "'*'",
    "'('",
    "'if'",
    "'int'",
    "'='",
    "'return'",
    "';'",
    "'void'",
    "'{'",
    "'then'",
    "'else'",
    "'=='",
    "'}'",
    "'float'",
    "'!'",
    "ID",
    "INT",
    "WS",
    "SL_COMMENT"
  };
  public static final int RULE_file = 0,
      RULE_varDecl = 1,
      RULE_type = 2,
      RULE_functionDecl = 3,
      RULE_formalParameters = 4,
      RULE_formalParameter = 5,
      RULE_block = 6,
      RULE_stat = 7,
      RULE_expr = 8,
      RULE_exprList = 9;
  public static final String[] ruleNames = {
    "file",
    "varDecl",
    "type",
    "functionDecl",
    "formalParameters",
    "formalParameter",
    "block",
    "stat",
    "expr",
    "exprList"
  };

  @Override
  public String getGrammarFileName() {
    return "Cymbol.g4";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  public CymbolParser(TokenStream input) {
    super(input);
    _interp = new ParserATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  public static class FileContext extends ParserRuleContext {
    public FunctionDeclContext functionDecl(int i) {
      return getRuleContext(FunctionDeclContext.class, i);
    }

    public VarDeclContext varDecl(int i) {
      return getRuleContext(VarDeclContext.class, i);
    }

    public List<VarDeclContext> varDecl() {
      return getRuleContexts(VarDeclContext.class);
    }

    public List<FunctionDeclContext> functionDecl() {
      return getRuleContexts(FunctionDeclContext.class);
    }

    public FileContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_file;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterFile(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitFile(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitFile(this);
      else return visitor.visitChildren(this);
    }
  }

  public final FileContext file() throws RecognitionException {
    FileContext _localctx = new FileContext(_ctx, getState());
    enterRule(_localctx, 0, RULE_file);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(22);
        _errHandler.sync(this);
        _la = _input.LA(1);
        do {
          {
            setState(22);
            switch (getInterpreter().adaptivePredict(_input, 0, _ctx)) {
              case 1:
                {
                  setState(20);
                  functionDecl();
                }
                break;

              case 2:
                {
                  setState(21);
                  varDecl();
                }
                break;
            }
          }
          setState(24);
          _errHandler.sync(this);
          _la = _input.LA(1);
        } while ((((_la) & ~0x3f) == 0
            && ((1L << _la) & ((1L << 10) | (1L << 14) | (1L << 20))) != 0));
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class VarDeclContext extends ParserRuleContext {
    public TerminalNode ID() {
      return getToken(CymbolParser.ID, 0);
    }

    public ExprContext expr() {
      return getRuleContext(ExprContext.class, 0);
    }

    public TypeContext type() {
      return getRuleContext(TypeContext.class, 0);
    }

    public VarDeclContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_varDecl;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterVarDecl(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitVarDecl(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitVarDecl(this);
      else return visitor.visitChildren(this);
    }
  }

  public final VarDeclContext varDecl() throws RecognitionException {
    VarDeclContext _localctx = new VarDeclContext(_ctx, getState());
    enterRule(_localctx, 2, RULE_varDecl);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(26);
        type();
        setState(27);
        match(ID);
        setState(30);
        _la = _input.LA(1);
        if (_la == 11) {
          {
            setState(28);
            match(11);
            setState(29);
            expr(0);
          }
        }

        setState(32);
        match(13);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class TypeContext extends ParserRuleContext {
    public TypeContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_type;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterType(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitType(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitType(this);
      else return visitor.visitChildren(this);
    }
  }

  public final TypeContext type() throws RecognitionException {
    TypeContext _localctx = new TypeContext(_ctx, getState());
    enterRule(_localctx, 4, RULE_type);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(34);
        _la = _input.LA(1);
        if (!((((_la) & ~0x3f) == 0
            && ((1L << _la) & ((1L << 10) | (1L << 14) | (1L << 20))) != 0))) {
          _errHandler.recoverInline(this);
        }
        consume();
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class FunctionDeclContext extends ParserRuleContext {
    public FormalParametersContext formalParameters() {
      return getRuleContext(FormalParametersContext.class, 0);
    }

    public TerminalNode ID() {
      return getToken(CymbolParser.ID, 0);
    }

    public BlockContext block() {
      return getRuleContext(BlockContext.class, 0);
    }

    public TypeContext type() {
      return getRuleContext(TypeContext.class, 0);
    }

    public FunctionDeclContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_functionDecl;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterFunctionDecl(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitFunctionDecl(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitFunctionDecl(this);
      else return visitor.visitChildren(this);
    }
  }

  public final FunctionDeclContext functionDecl() throws RecognitionException {
    FunctionDeclContext _localctx = new FunctionDeclContext(_ctx, getState());
    enterRule(_localctx, 6, RULE_functionDecl);
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(36);
        type();
        setState(37);
        match(ID);
        setState(38);
        match(8);
        setState(39);
        formalParameters();
        setState(40);
        match(2);
        setState(41);
        block();
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class FormalParametersContext extends ParserRuleContext {
    public FormalParameterContext formalParameter(int i) {
      return getRuleContext(FormalParameterContext.class, i);
    }

    public List<FormalParameterContext> formalParameter() {
      return getRuleContexts(FormalParameterContext.class);
    }

    public FormalParametersContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_formalParameters;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener)
        ((CymbolListener) listener).enterFormalParameters(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener)
        ((CymbolListener) listener).exitFormalParameters(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitFormalParameters(this);
      else return visitor.visitChildren(this);
    }
  }

  public final FormalParametersContext formalParameters() throws RecognitionException {
    FormalParametersContext _localctx = new FormalParametersContext(_ctx, getState());
    enterRule(_localctx, 8, RULE_formalParameters);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(43);
        formalParameter();
        setState(48);
        _errHandler.sync(this);
        _la = _input.LA(1);
        while (_la == 3) {
          {
            {
              setState(44);
              match(3);
              setState(45);
              formalParameter();
            }
          }
          setState(50);
          _errHandler.sync(this);
          _la = _input.LA(1);
        }
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class FormalParameterContext extends ParserRuleContext {
    public TerminalNode ID() {
      return getToken(CymbolParser.ID, 0);
    }

    public TypeContext type() {
      return getRuleContext(TypeContext.class, 0);
    }

    public FormalParameterContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_formalParameter;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener)
        ((CymbolListener) listener).enterFormalParameter(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitFormalParameter(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitFormalParameter(this);
      else return visitor.visitChildren(this);
    }
  }

  public final FormalParameterContext formalParameter() throws RecognitionException {
    FormalParameterContext _localctx = new FormalParameterContext(_ctx, getState());
    enterRule(_localctx, 10, RULE_formalParameter);
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(51);
        type();
        setState(52);
        match(ID);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class BlockContext extends ParserRuleContext {
    public StatContext stat(int i) {
      return getRuleContext(StatContext.class, i);
    }

    public List<StatContext> stat() {
      return getRuleContexts(StatContext.class);
    }

    public BlockContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_block;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterBlock(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitBlock(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitBlock(this);
      else return visitor.visitChildren(this);
    }
  }

  public final BlockContext block() throws RecognitionException {
    BlockContext _localctx = new BlockContext(_ctx, getState());
    enterRule(_localctx, 12, RULE_block);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(54);
        match(15);
        setState(58);
        _errHandler.sync(this);
        _la = _input.LA(1);
        while ((((_la) & ~0x3f) == 0
            && ((1L << _la)
                    & ((1L << 6)
                        | (1L << 8)
                        | (1L << 9)
                        | (1L << 10)
                        | (1L << 12)
                        | (1L << 14)
                        | (1L << 15)
                        | (1L << 20)
                        | (1L << 21)
                        | (1L << ID)
                        | (1L << INT)))
                != 0)) {
          {
            {
              setState(55);
              stat();
            }
          }
          setState(60);
          _errHandler.sync(this);
          _la = _input.LA(1);
        }
        setState(61);
        match(19);
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class StatContext extends ParserRuleContext {
    public StatContext stat(int i) {
      return getRuleContext(StatContext.class, i);
    }

    public ExprContext expr(int i) {
      return getRuleContext(ExprContext.class, i);
    }

    public VarDeclContext varDecl() {
      return getRuleContext(VarDeclContext.class, 0);
    }

    public BlockContext block() {
      return getRuleContext(BlockContext.class, 0);
    }

    public List<ExprContext> expr() {
      return getRuleContexts(ExprContext.class);
    }

    public List<StatContext> stat() {
      return getRuleContexts(StatContext.class);
    }

    public StatContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_stat;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterStat(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitStat(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitStat(this);
      else return visitor.visitChildren(this);
    }
  }

  public final StatContext stat() throws RecognitionException {
    StatContext _localctx = new StatContext(_ctx, getState());
    enterRule(_localctx, 14, RULE_stat);
    int _la;
    try {
      setState(86);
      switch (getInterpreter().adaptivePredict(_input, 7, _ctx)) {
        case 1:
          enterOuterAlt(_localctx, 1);
          {
            setState(63);
            block();
          }
          break;

        case 2:
          enterOuterAlt(_localctx, 2);
          {
            setState(64);
            varDecl();
          }
          break;

        case 3:
          enterOuterAlt(_localctx, 3);
          {
            setState(65);
            match(9);
            setState(66);
            expr(0);
            setState(67);
            match(16);
            setState(68);
            stat();
            setState(71);
            switch (getInterpreter().adaptivePredict(_input, 5, _ctx)) {
              case 1:
                {
                  setState(69);
                  match(17);
                  setState(70);
                  stat();
                }
                break;
            }
          }
          break;

        case 4:
          enterOuterAlt(_localctx, 4);
          {
            setState(73);
            match(12);
            setState(75);
            _la = _input.LA(1);
            if ((((_la) & ~0x3f) == 0
                && ((1L << _la) & ((1L << 6) | (1L << 8) | (1L << 21) | (1L << ID) | (1L << INT)))
                    != 0)) {
              {
                setState(74);
                expr(0);
              }
            }

            setState(77);
            match(13);
          }
          break;

        case 5:
          enterOuterAlt(_localctx, 5);
          {
            setState(78);
            expr(0);
            setState(79);
            match(11);
            setState(80);
            expr(0);
            setState(81);
            match(13);
          }
          break;

        case 6:
          enterOuterAlt(_localctx, 6);
          {
            setState(83);
            expr(0);
            setState(84);
            match(13);
          }
          break;
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public static class ExprContext extends ParserRuleContext {
    public int _p;

    public ExprContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    public ExprContext(ParserRuleContext parent, int invokingState, int _p) {
      super(parent, invokingState);
      this._p = _p;
    }

    @Override
    public int getRuleIndex() {
      return RULE_expr;
    }

    public ExprContext() {}

    public void copyFrom(ExprContext ctx) {
      super.copyFrom(ctx);
      this._p = ctx._p;
    }
  }

  public static class MultContext extends ExprContext {
    public ExprContext expr(int i) {
      return getRuleContext(ExprContext.class, i);
    }

    public List<ExprContext> expr() {
      return getRuleContexts(ExprContext.class);
    }

    public MultContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterMult(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitMult(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitMult(this);
      else return visitor.visitChildren(this);
    }
  }

  public static class ParensContext extends ExprContext {
    public ExprContext expr() {
      return getRuleContext(ExprContext.class, 0);
    }

    public ParensContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterParens(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitParens(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitParens(this);
      else return visitor.visitChildren(this);
    }
  }

  public static class IndexContext extends ExprContext {
    public ExprContext expr(int i) {
      return getRuleContext(ExprContext.class, i);
    }

    public List<ExprContext> expr() {
      return getRuleContexts(ExprContext.class);
    }

    public IndexContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterIndex(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitIndex(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitIndex(this);
      else return visitor.visitChildren(this);
    }
  }

  public static class CallContext extends ExprContext {
    public TerminalNode ID() {
      return getToken(CymbolParser.ID, 0);
    }

    public ExprListContext exprList() {
      return getRuleContext(ExprListContext.class, 0);
    }

    public CallContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterCall(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitCall(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitCall(this);
      else return visitor.visitChildren(this);
    }
  }

  public static class AddSubContext extends ExprContext {
    public ExprContext expr(int i) {
      return getRuleContext(ExprContext.class, i);
    }

    public List<ExprContext> expr() {
      return getRuleContexts(ExprContext.class);
    }

    public AddSubContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterAddSub(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitAddSub(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitAddSub(this);
      else return visitor.visitChildren(this);
    }
  }

  public static class EqualContext extends ExprContext {
    public ExprContext expr(int i) {
      return getRuleContext(ExprContext.class, i);
    }

    public List<ExprContext> expr() {
      return getRuleContexts(ExprContext.class);
    }

    public EqualContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterEqual(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitEqual(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitEqual(this);
      else return visitor.visitChildren(this);
    }
  }

  public static class NegateContext extends ExprContext {
    public ExprContext expr() {
      return getRuleContext(ExprContext.class, 0);
    }

    public NegateContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterNegate(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitNegate(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitNegate(this);
      else return visitor.visitChildren(this);
    }
  }

  public static class VarContext extends ExprContext {
    public TerminalNode ID() {
      return getToken(CymbolParser.ID, 0);
    }

    public VarContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterVar(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitVar(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitVar(this);
      else return visitor.visitChildren(this);
    }
  }

  public static class IntContext extends ExprContext {
    public TerminalNode INT() {
      return getToken(CymbolParser.INT, 0);
    }

    public IntContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterInt(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitInt(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitInt(this);
      else return visitor.visitChildren(this);
    }
  }

  public static class NotContext extends ExprContext {
    public ExprContext expr() {
      return getRuleContext(ExprContext.class, 0);
    }

    public NotContext(ExprContext ctx) {
      copyFrom(ctx);
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterNot(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitNot(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitNot(this);
      else return visitor.visitChildren(this);
    }
  }

  public final ExprContext expr(int _p) throws RecognitionException {
    ParserRuleContext _parentctx = _ctx;
    int _parentState = getState();
    ExprContext _localctx = new ExprContext(_ctx, _parentState, _p);
    ExprContext _prevctx = _localctx;
    int _startState = 16;
    enterRecursionRule(_localctx, RULE_expr);
    int _la;
    try {
      int _alt;
      enterOuterAlt(_localctx, 1);
      {
        setState(105);
        switch (getInterpreter().adaptivePredict(_input, 9, _ctx)) {
          case 1:
            {
              _localctx = new NegateContext(_localctx);
              _ctx = _localctx;
              _prevctx = _localctx;

              setState(89);
              match(6);
              setState(90);
              expr(8);
            }
            break;

          case 2:
            {
              _localctx = new NotContext(_localctx);
              _ctx = _localctx;
              _prevctx = _localctx;
              setState(91);
              match(21);
              setState(92);
              expr(7);
            }
            break;

          case 3:
            {
              _localctx = new CallContext(_localctx);
              _ctx = _localctx;
              _prevctx = _localctx;
              setState(93);
              match(ID);
              setState(94);
              match(8);
              setState(96);
              _la = _input.LA(1);
              if ((((_la) & ~0x3f) == 0
                  && ((1L << _la) & ((1L << 6) | (1L << 8) | (1L << 21) | (1L << ID) | (1L << INT)))
                      != 0)) {
                {
                  setState(95);
                  exprList();
                }
              }

              setState(98);
              match(2);
            }
            break;

          case 4:
            {
              _localctx = new VarContext(_localctx);
              _ctx = _localctx;
              _prevctx = _localctx;
              setState(99);
              match(ID);
            }
            break;

          case 5:
            {
              _localctx = new IntContext(_localctx);
              _ctx = _localctx;
              _prevctx = _localctx;
              setState(100);
              match(INT);
            }
            break;

          case 6:
            {
              _localctx = new ParensContext(_localctx);
              _ctx = _localctx;
              _prevctx = _localctx;
              setState(101);
              match(8);
              setState(102);
              expr(0);
              setState(103);
              match(2);
            }
            break;
        }
        _ctx.stop = _input.LT(-1);
        setState(123);
        _errHandler.sync(this);
        _alt = getInterpreter().adaptivePredict(_input, 11, _ctx);
        while (_alt != 2 && _alt != -1) {
          if (_alt == 1) {
            if (_parseListeners != null) triggerExitRuleEvent();
            _prevctx = _localctx;
            {
              setState(121);
              switch (getInterpreter().adaptivePredict(_input, 10, _ctx)) {
                case 1:
                  {
                    _localctx = new MultContext(new ExprContext(_parentctx, _parentState, _p));
                    pushNewRecursionContext(_localctx, _startState, RULE_expr);
                    setState(107);
                    if (!(6 >= _localctx._p)) throw new FailedPredicateException(this, "6 >= $_p");
                    setState(108);
                    match(7);
                    setState(109);
                    expr(7);
                  }
                  break;

                case 2:
                  {
                    _localctx = new AddSubContext(new ExprContext(_parentctx, _parentState, _p));
                    pushNewRecursionContext(_localctx, _startState, RULE_expr);
                    setState(110);
                    if (!(5 >= _localctx._p)) throw new FailedPredicateException(this, "5 >= $_p");
                    setState(111);
                    _la = _input.LA(1);
                    if (!(_la == 4 || _la == 6)) {
                      _errHandler.recoverInline(this);
                    }
                    consume();
                    setState(112);
                    expr(6);
                  }
                  break;

                case 3:
                  {
                    _localctx = new EqualContext(new ExprContext(_parentctx, _parentState, _p));
                    pushNewRecursionContext(_localctx, _startState, RULE_expr);
                    setState(113);
                    if (!(4 >= _localctx._p)) throw new FailedPredicateException(this, "4 >= $_p");
                    setState(114);
                    match(18);
                    setState(115);
                    expr(5);
                  }
                  break;

                case 4:
                  {
                    _localctx = new IndexContext(new ExprContext(_parentctx, _parentState, _p));
                    pushNewRecursionContext(_localctx, _startState, RULE_expr);
                    setState(116);
                    if (!(9 >= _localctx._p)) throw new FailedPredicateException(this, "9 >= $_p");
                    setState(117);
                    match(5);
                    setState(118);
                    expr(0);
                    setState(119);
                    match(1);
                  }
                  break;
              }
            }
          }
          setState(125);
          _errHandler.sync(this);
          _alt = getInterpreter().adaptivePredict(_input, 11, _ctx);
        }
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      unrollRecursionContexts(_parentctx);
    }
    return _localctx;
  }

  public static class ExprListContext extends ParserRuleContext {
    public ExprContext expr(int i) {
      return getRuleContext(ExprContext.class, i);
    }

    public List<ExprContext> expr() {
      return getRuleContexts(ExprContext.class);
    }

    public ExprListContext(ParserRuleContext parent, int invokingState) {
      super(parent, invokingState);
    }

    @Override
    public int getRuleIndex() {
      return RULE_exprList;
    }

    @Override
    public void enterRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).enterExprList(this);
    }

    @Override
    public void exitRule(ParseTreeListener listener) {
      if (listener instanceof CymbolListener) ((CymbolListener) listener).exitExprList(this);
    }

    @Override
    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
      if (visitor instanceof CymbolVisitor)
        return ((CymbolVisitor<? extends T>) visitor).visitExprList(this);
      else return visitor.visitChildren(this);
    }
  }

  public final ExprListContext exprList() throws RecognitionException {
    ExprListContext _localctx = new ExprListContext(_ctx, getState());
    enterRule(_localctx, 18, RULE_exprList);
    int _la;
    try {
      enterOuterAlt(_localctx, 1);
      {
        setState(126);
        expr(0);
        setState(131);
        _errHandler.sync(this);
        _la = _input.LA(1);
        while (_la == 3) {
          {
            {
              setState(127);
              match(3);
              setState(128);
              expr(0);
            }
          }
          setState(133);
          _errHandler.sync(this);
          _la = _input.LA(1);
        }
      }
    } catch (RecognitionException re) {
      _localctx.exception = re;
      _errHandler.reportError(this, re);
      _errHandler.recover(this, re);
    } finally {
      exitRule();
    }
    return _localctx;
  }

  public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
    switch (ruleIndex) {
      case 8:
        return expr_sempred((ExprContext) _localctx, predIndex);
    }
    return true;
  }

  private boolean expr_sempred(ExprContext _localctx, int predIndex) {
    switch (predIndex) {
      case 0:
        return 6 >= _localctx._p;

      case 1:
        return 5 >= _localctx._p;

      case 2:
        return 4 >= _localctx._p;

      case 3:
        return 9 >= _localctx._p;
    }
    return true;
  }

  public static final String _serializedATN =
      "\2\3\33\u0089\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b"
          + "\4\t\t\t\4\n\t\n\4\13\t\13\3\2\3\2\6\2\31\n\2\r\2\16\2\32\3\3\3\3\3\3"
          + "\3\3\5\3!\n\3\3\3\3\3\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6"
          + "\7\6\61\n\6\f\6\16\6\64\13\6\3\7\3\7\3\7\3\b\3\b\7\b;\n\b\f\b\16\b>\13"
          + "\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\tJ\n\t\3\t\3\t\5\tN\n\t\3"
          + "\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\3\t\5\tY\n\t\3\n\3\n\3\n\3\n\3\n\3\n\3"
          + "\n\3\n\5\nc\n\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\5\nl\n\n\3\n\3\n\3\n\3\n\3"
          + "\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\3\n\7\n|\n\n\f\n\16\n\177\13\n\3\13"
          + "\3\13\3\13\7\13\u0084\n\13\f\13\16\13\u0087\13\13\3\13\2\f\2\4\6\b\n\f"
          + "\16\20\22\24\2\4\5\f\f\20\20\26\26\4\6\6\b\b\u0095\2\30\3\2\2\2\4\34\3"
          + "\2\2\2\6$\3\2\2\2\b&\3\2\2\2\n-\3\2\2\2\f\65\3\2\2\2\168\3\2\2\2\20X\3"
          + "\2\2\2\22k\3\2\2\2\24\u0080\3\2\2\2\26\31\5\b\5\2\27\31\5\4\3\2\30\26"
          + "\3\2\2\2\30\27\3\2\2\2\31\32\3\2\2\2\32\30\3\2\2\2\32\33\3\2\2\2\33\3"
          + "\3\2\2\2\34\35\5\6\4\2\35 \7\30\2\2\36\37\7\r\2\2\37!\5\22\n\2 \36\3\2"
          + "\2\2 !\3\2\2\2!\"\3\2\2\2\"#\7\17\2\2#\5\3\2\2\2$%\t\2\2\2%\7\3\2\2\2"
          + "&\'\5\6\4\2\'(\7\30\2\2()\7\n\2\2)*\5\n\6\2*+\7\4\2\2+,\5\16\b\2,\t\3"
          + "\2\2\2-\62\5\f\7\2./\7\5\2\2/\61\5\f\7\2\60.\3\2\2\2\61\64\3\2\2\2\62"
          + "\60\3\2\2\2\62\63\3\2\2\2\63\13\3\2\2\2\64\62\3\2\2\2\65\66\5\6\4\2\66"
          + "\67\7\30\2\2\67\r\3\2\2\28<\7\21\2\29;\5\20\t\2:9\3\2\2\2;>\3\2\2\2<:"
          + "\3\2\2\2<=\3\2\2\2=?\3\2\2\2><\3\2\2\2?@\7\25\2\2@\17\3\2\2\2AY\5\16\b"
          + "\2BY\5\4\3\2CD\7\13\2\2DE\5\22\n\2EF\7\22\2\2FI\5\20\t\2GH\7\23\2\2HJ"
          + "\5\20\t\2IG\3\2\2\2IJ\3\2\2\2JY\3\2\2\2KM\7\16\2\2LN\5\22\n\2ML\3\2\2"
          + "\2MN\3\2\2\2NO\3\2\2\2OY\7\17\2\2PQ\5\22\n\2QR\7\r\2\2RS\5\22\n\2ST\7"
          + "\17\2\2TY\3\2\2\2UV\5\22\n\2VW\7\17\2\2WY\3\2\2\2XA\3\2\2\2XB\3\2\2\2"
          + "XC\3\2\2\2XK\3\2\2\2XP\3\2\2\2XU\3\2\2\2Y\21\3\2\2\2Z[\b\n\1\2[\\\7\b"
          + "\2\2\\l\5\22\n\2]^\7\27\2\2^l\5\22\n\2_`\7\30\2\2`b\7\n\2\2ac\5\24\13"
          + "\2ba\3\2\2\2bc\3\2\2\2cd\3\2\2\2dl\7\4\2\2el\7\30\2\2fl\7\31\2\2gh\7\n"
          + "\2\2hi\5\22\n\2ij\7\4\2\2jl\3\2\2\2kZ\3\2\2\2k]\3\2\2\2k_\3\2\2\2ke\3"
          + "\2\2\2kf\3\2\2\2kg\3\2\2\2l}\3\2\2\2mn\6\n\2\3no\7\t\2\2o|\5\22\n\2pq"
          + "\6\n\3\3qr\t\3\2\2r|\5\22\n\2st\6\n\4\3tu\7\24\2\2u|\5\22\n\2vw\6\n\5"
          + "\3wx\7\7\2\2xy\5\22\n\2yz\7\3\2\2z|\3\2\2\2{m\3\2\2\2{p\3\2\2\2{s\3\2"
          + "\2\2{v\3\2\2\2|\177\3\2\2\2}{\3\2\2\2}~\3\2\2\2~\23\3\2\2\2\177}\3\2\2"
          + "\2\u0080\u0085\5\22\n\2\u0081\u0082\7\5\2\2\u0082\u0084\5\22\n\2\u0083"
          + "\u0081\3\2\2\2\u0084\u0087\3\2\2\2\u0085\u0083\3\2\2\2\u0085\u0086\3\2"
          + "\2\2\u0086\25\3\2\2\2\u0087\u0085\3\2\2\2\17\30\32 \62<IMXbk{}\u0085";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
  }
}
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class BooleanQueryLexer extends Lexer {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int AND = 1, OR = 2, NOT = 3, STRING = 4, QSTRING = 5, WS = 6;
  public static String[] modeNames = {"DEFAULT_MODE"};

  public static final String[] tokenNames = {
    "<INVALID>", "AND", "OR", "NOT", "STRING", "QSTRING", "WS"
  };
  public static final String[] ruleNames = {"AND", "OR", "NOT", "STRING", "QSTRING", "WS"};

  public BooleanQueryLexer(CharStream input) {
    super(input);
    _interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  @Override
  public String getGrammarFileName() {
    return "BooleanQuery.g4";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public String[] getModeNames() {
    return modeNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  @Override
  public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
    switch (ruleIndex) {
      case 5:
        WS_action((RuleContext) _localctx, actionIndex);
        break;
    }
  }

  private void WS_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
      case 0:
        skip();
        break;
    }
  }

  public static final String _serializedATN =
      "\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\2\bH\b\1\4\2\t\2\4"
          + "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2"
          + "\5\2\30\n\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\5\3\"\n\3\3\4\3\4\3\4\3\4"
          + "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\60\n\4\3\5\6\5\63\n\5\r\5\16\5\64"
          + "\3\6\3\6\3\6\3\6\7\6;\n\6\f\6\16\6>\13\6\3\6\3\6\3\7\6\7C\n\7\r\7\16\7"
          + "D\3\7\3\7\2\b\3\3\1\5\4\1\7\5\1\t\6\1\13\7\1\r\b\2\3\2\5\6\2\13\f\17\17"
          + "\"\"$$\3\2$$\5\2\13\f\17\17\"\"Q\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2"
          + "\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\3\27\3\2\2\2\5!\3\2\2\2\7/\3\2\2\2"
          + "\t\62\3\2\2\2\13\66\3\2\2\2\rB\3\2\2\2\17\20\7C\2\2\20\21\7P\2\2\21\30"
          + "\7F\2\2\22\23\7G\2\2\23\30\7V\2\2\24\25\7W\2\2\25\26\7P\2\2\26\30\7F\2"
          + "\2\27\17\3\2\2\2\27\22\3\2\2\2\27\24\3\2\2\2\30\4\3\2\2\2\31\32\7Q\2\2"
          + "\32\"\7T\2\2\33\34\7Q\2\2\34\"\7W\2\2\35\36\7Q\2\2\36\37\7F\2\2\37 \7"
          + "G\2\2 \"\7T\2\2!\31\3\2\2\2!\33\3\2\2\2!\35\3\2\2\2\"\6\3\2\2\2#$\7P\2"
          + "\2$%\7Q\2\2%\60\7V\2\2&\'\7P\2\2\'(\7Q\2\2(\60\7P\2\2)*\7P\2\2*+\7K\2"
          + "\2+,\7E\2\2,-\7J\2\2-.\7V\2\2.\60\7U\2\2/#\3\2\2\2/&\3\2\2\2/)\3\2\2\2"
          + "\60\b\3\2\2\2\61\63\n\2\2\2\62\61\3\2\2\2\63\64\3\2\2\2\64\62\3\2\2\2"
          + "\64\65\3\2\2\2\65\n\3\2\2\2\66<\7$\2\2\678\7$\2\28;\7$\2\29;\n\3\2\2:"
          + "\67\3\2\2\2:9\3\2\2\2;>\3\2\2\2<:\3\2\2\2<=\3\2\2\2=?\3\2\2\2><\3\2\2"
          + "\2?@\7$\2\2@\f\3\2\2\2AC\t\4\2\2BA\3\2\2\2CD\3\2\2\2DB\3\2\2\2DE\3\2\2"
          + "\2EF\3\2\2\2FG\b\7\2\2G\16\3\2\2\2\n\2\27!/\64:<D";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
    for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
    }
  }
}
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class bnfLexer extends Lexer {
  protected static final DFA[] _decisionToDFA;
  protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
  public static final int ID = 1,
      ASSIGN = 2,
      LPAREN = 3,
      RPAREN = 4,
      LBRACE = 5,
      RBRACE = 6,
      LEND = 7,
      REND = 8,
      BAR = 9,
      CAPTEXT = 10,
      TEXT = 11,
      STRINGLITERAL = 12,
      WS = 13;
  public static String[] modeNames = {"DEFAULT_MODE"};

  public static final String[] tokenNames = {
    "<INVALID>",
    "ID",
    "'::='",
    "')'",
    "'('",
    "'}'",
    "'{'",
    "']'",
    "'['",
    "'|'",
    "CAPTEXT",
    "TEXT",
    "STRINGLITERAL",
    "WS"
  };
  public static final String[] ruleNames = {
    "ID",
    "ASSIGN",
    "LPAREN",
    "RPAREN",
    "LBRACE",
    "RBRACE",
    "LEND",
    "REND",
    "BAR",
    "CAPTEXT",
    "TEXT",
    "STRINGLITERAL",
    "UPPERCASE_LETTER",
    "LOWERCASE_LETTER",
    "DIGIT",
    "SYMBOL",
    "WS"
  };

  public bnfLexer(CharStream input) {
    super(input);
    _interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
  }

  @Override
  public String getGrammarFileName() {
    return "bnf.g4";
  }

  @Override
  public String[] getTokenNames() {
    return tokenNames;
  }

  @Override
  public String[] getRuleNames() {
    return ruleNames;
  }

  @Override
  public String[] getModeNames() {
    return modeNames;
  }

  @Override
  public ATN getATN() {
    return _ATN;
  }

  @Override
  public void action(RuleContext _localctx, int ruleIndex, int actionIndex) {
    switch (ruleIndex) {
      case 16:
        WS_action((RuleContext) _localctx, actionIndex);
        break;
    }
  }

  private void WS_action(RuleContext _localctx, int actionIndex) {
    switch (actionIndex) {
      case 0:
        skip();
        break;
    }
  }

  public static final String _serializedATN =
      "\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\2\17`\b\1\4\2\t\2\4"
          + "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"
          + "\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"
          + "\3\2\3\2\7\2(\n\2\f\2\16\2+\13\2\3\2\3\2\3\3\3\3\3\3\3\3\3\4\3\4\3\5\3"
          + "\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f"
          + "\3\f\6\fH\n\f\r\f\16\fI\3\r\3\r\7\rN\n\r\f\r\16\rQ\13\r\3\r\3\r\3\16\3"
          + "\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\22\3\22\4)O\23\3\3\1\5\4"
          + "\1\7\5\1\t\6\1\13\7\1\r\b\1\17\t\1\21\n\1\23\13\1\25\f\1\27\r\1\31\16"
          + "\1\33\2\1\35\2\1\37\2\1!\2\1#\17\2\3\2\4\n\2#),\61<B`b\u00a3\u0101\u0154"
          + "\u0194\u2015\u2124\u2192\u2301\5\2\13\f\17\17\"\"a\2\3\3\2\2\2\2\5\3\2"
          + "\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21"
          + "\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2#\3\2\2"
          + "\2\3%\3\2\2\2\5.\3\2\2\2\7\62\3\2\2\2\t\64\3\2\2\2\13\66\3\2\2\2\r8\3"
          + "\2\2\2\17:\3\2\2\2\21<\3\2\2\2\23>\3\2\2\2\25@\3\2\2\2\27G\3\2\2\2\31"
          + "K\3\2\2\2\33T\3\2\2\2\35V\3\2\2\2\37X\3\2\2\2!Z\3\2\2\2#\\\3\2\2\2%)\7"
          + ">\2\2&(\13\2\2\2\'&\3\2\2\2(+\3\2\2\2)*\3\2\2\2)\'\3\2\2\2*,\3\2\2\2+"
          + ")\3\2\2\2,-\7@\2\2-\4\3\2\2\2./\7<\2\2/\60\7<\2\2\60\61\7?\2\2\61\6\3"
          + "\2\2\2\62\63\7+\2\2\63\b\3\2\2\2\64\65\7*\2\2\65\n\3\2\2\2\66\67\7\177"
          + "\2\2\67\f\3\2\2\289\7}\2\29\16\3\2\2\2:;\7_\2\2;\20\3\2\2\2<=\7]\2\2="
          + "\22\3\2\2\2>?\7~\2\2?\24\3\2\2\2@A\5\33\16\2AB\5\27\f\2B\26\3\2\2\2CH"
          + "\5\33\16\2DH\5\35\17\2EH\5\37\20\2FH\5!\21\2GC\3\2\2\2GD\3\2\2\2GE\3\2"
          + "\2\2GF\3\2\2\2HI\3\2\2\2IG\3\2\2\2IJ\3\2\2\2J\30\3\2\2\2KO\7$\2\2LN\13"
          + "\2\2\2ML\3\2\2\2NQ\3\2\2\2OP\3\2\2\2OM\3\2\2\2PR\3\2\2\2QO\3\2\2\2RS\7"
          + "$\2\2S\32\3\2\2\2TU\4C\\\2U\34\3\2\2\2VW\4c|\2W\36\3\2\2\2XY\4\62;\2Y"
          + " \3\2\2\2Z[\t\2\2\2[\"\3\2\2\2\\]\t\3\2\2]^\3\2\2\2^_\b\22\2\2_$\3\2\2"
          + "\2\7\2)GIO";
  public static final ATN _ATN = ATNSimulator.deserialize(_serializedATN.toCharArray());

  static {
    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
    for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
    }
  }
}