f7
f7 is a spreadsheet formula execution library
git clone https://git.vogt.world/f7.git
Log | Files | README.md | LICENSE.md
← All files
name: src/main/java/io/protobase/f7/antlr/F7Parser.java
-rw-r--r--
83384
   1// Generated from F7.g4 by ANTLR 4.7.2
   2package io.protobase.f7.antlr;
   3
   4import org.antlr.v4.runtime.FailedPredicateException;
   5import org.antlr.v4.runtime.NoViableAltException;
   6import org.antlr.v4.runtime.Parser;
   7import org.antlr.v4.runtime.ParserRuleContext;
   8import org.antlr.v4.runtime.RecognitionException;
   9import org.antlr.v4.runtime.RuleContext;
  10import org.antlr.v4.runtime.RuntimeMetaData;
  11import org.antlr.v4.runtime.Token;
  12import org.antlr.v4.runtime.TokenStream;
  13import org.antlr.v4.runtime.Vocabulary;
  14import org.antlr.v4.runtime.VocabularyImpl;
  15import org.antlr.v4.runtime.atn.ATN;
  16import org.antlr.v4.runtime.atn.ATNDeserializer;
  17import org.antlr.v4.runtime.atn.ParserATNSimulator;
  18import org.antlr.v4.runtime.atn.PredictionContextCache;
  19import org.antlr.v4.runtime.dfa.DFA;
  20import org.antlr.v4.runtime.tree.ParseTreeListener;
  21import org.antlr.v4.runtime.tree.ParseTreeVisitor;
  22import org.antlr.v4.runtime.tree.TerminalNode;
  23
  24import java.util.List;
  25
  26@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
  27public class F7Parser extends Parser {
  28  public static final int
  29      NCharacters = 1, Dot = 2, Int = 3, Number = 4, String = 5, Error = 6, LeftParen = 7,
  30      RightParen = 8, LeftBrace = 9, RightBrace = 10, Comma = 11, Colon = 12, SemiColon = 13,
  31      Bang = 14, Plus = 15, Minus = 16, Percent = 17, Power = 18, Divide = 19, Multiply = 20,
  32      GreaterThan = 21, GreaterThanOrEqualTo = 22, LessThan = 23, LessThanOrEqualTO = 24,
  33      Equal = 25, NotEqual = 26, Ampersand = 27, Dollar = 28, Underscore = 29, WS = 30;
  34  public static final int
  35      RULE_start = 0, RULE_block = 1, RULE_expression = 2, RULE_atom = 3, RULE_range = 4,
  36      RULE_arguments = 5, RULE_identifier = 6, RULE_comparisonOperator = 7;
  37  public static final String[] ruleNames = makeRuleNames();
  38  /**
  39   * @deprecated Use {@link #VOCABULARY} instead.
  40   */
  41  @Deprecated
  42  public static final String[] tokenNames;
  43  public static final String _serializedATN =
  44      "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3 \u00fb\4\2\t\2\4" +
  45          "\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\3\2\3\2\3\2\3\3" +
  46          "\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\6\4!\n\4\r\4\16\4\"\5\4%\n\4" +
  47          "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3" +
  48          "\4\6\49\n\4\r\4\16\4:\7\4=\n\4\f\4\16\4@\13\4\3\5\3\5\3\5\3\5\3\5\3\5" +
  49          "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\7\5T\n\5\f\5\16\5W\13" +
  50          "\5\5\5Y\n\5\3\5\3\5\5\5]\n\5\3\6\3\6\3\6\5\6b\n\6\3\6\5\6e\n\6\3\6\3\6" +
  51          "\5\6i\n\6\3\6\3\6\3\6\5\6n\n\6\3\6\3\6\5\6r\n\6\3\6\3\6\3\6\3\6\5\6x\n" +
  52          "\6\3\6\5\6{\n\6\3\6\3\6\5\6\177\n\6\3\6\3\6\3\6\3\6\5\6\u0085\n\6\3\6" +
  53          "\5\6\u0088\n\6\3\6\3\6\3\6\5\6\u008d\n\6\3\6\3\6\3\6\3\6\5\6\u0093\n\6" +
  54          "\3\6\5\6\u0096\n\6\3\6\3\6\5\6\u009a\n\6\3\6\3\6\3\6\5\6\u009f\n\6\3\6" +
  55          "\3\6\3\6\3\6\5\6\u00a5\n\6\3\6\5\6\u00a8\n\6\3\6\3\6\3\6\5\6\u00ad\n\6" +
  56          "\3\6\3\6\5\6\u00b1\n\6\3\6\3\6\3\6\3\6\5\6\u00b7\n\6\3\6\5\6\u00ba\n\6" +
  57          "\3\6\3\6\3\6\5\6\u00bf\n\6\3\6\3\6\3\6\3\6\5\6\u00c5\n\6\3\6\5\6\u00c8" +
  58          "\n\6\3\6\3\6\5\6\u00cc\n\6\3\6\3\6\3\6\5\6\u00d1\n\6\3\6\3\6\3\6\3\6\5" +
  59          "\6\u00d7\n\6\3\6\5\6\u00da\n\6\3\6\3\6\3\6\5\6\u00df\n\6\3\6\3\6\5\6\u00e3" +
  60          "\n\6\3\6\5\6\u00e6\n\6\3\7\3\7\3\7\7\7\u00eb\n\7\f\7\16\7\u00ee\13\7\5" +
  61          "\7\u00f0\n\7\3\b\3\b\7\b\u00f4\n\b\f\b\16\b\u00f7\13\b\3\t\3\t\3\t\2\3" +
  62          "\6\n\2\4\6\b\n\f\16\20\2\7\3\2\25\26\3\2\21\22\4\2\r\r\17\17\4\2\3\5\37" +
  63          "\37\3\2\27\34\2\u012f\2\22\3\2\2\2\4\25\3\2\2\2\6$\3\2\2\2\b\\\3\2\2\2" +
  64          "\n\u00e5\3\2\2\2\f\u00ef\3\2\2\2\16\u00f1\3\2\2\2\20\u00f8\3\2\2\2\22" +
  65          "\23\5\4\3\2\23\24\7\2\2\3\24\3\3\2\2\2\25\26\5\6\4\2\26\5\3\2\2\2\27\30" +
  66          "\b\4\1\2\30\31\7\22\2\2\31%\5\6\4\f\32\33\7\21\2\2\33%\5\6\4\13\34%\5" +
  67          "\b\5\2\35 \5\b\5\2\36\37\7\16\2\2\37!\5\b\5\2 \36\3\2\2\2!\"\3\2\2\2\"" +
  68          " \3\2\2\2\"#\3\2\2\2#%\3\2\2\2$\27\3\2\2\2$\32\3\2\2\2$\34\3\2\2\2$\35" +
  69          "\3\2\2\2%>\3\2\2\2&\'\f\t\2\2\'(\7\24\2\2(=\5\6\4\n)*\f\b\2\2*+\t\2\2" +
  70          "\2+=\5\6\4\t,-\f\7\2\2-.\t\3\2\2.=\5\6\4\b/\60\f\6\2\2\60\61\5\20\t\2" +
  71          "\61\62\5\6\4\7\62=\3\2\2\2\63\64\f\5\2\2\64\65\7\35\2\2\65=\5\6\4\6\66" +
  72          "8\f\n\2\2\679\7\23\2\28\67\3\2\2\29:\3\2\2\2:8\3\2\2\2:;\3\2\2\2;=\3\2" +
  73          "\2\2<&\3\2\2\2<)\3\2\2\2<,\3\2\2\2</\3\2\2\2<\63\3\2\2\2<\66\3\2\2\2=" +
  74          "@\3\2\2\2><\3\2\2\2>?\3\2\2\2?\7\3\2\2\2@>\3\2\2\2A]\5\n\6\2B]\7\7\2\2" +
  75          "C]\7\b\2\2D]\7\5\2\2E]\7\6\2\2FG\7\t\2\2GH\5\6\4\2HI\7\n\2\2I]\3\2\2\2" +
  76          "JK\5\16\b\2KL\7\t\2\2LM\5\f\7\2MN\7\n\2\2N]\3\2\2\2OX\7\13\2\2PU\5\6\4" +
  77          "\2QR\t\4\2\2RT\5\6\4\2SQ\3\2\2\2TW\3\2\2\2US\3\2\2\2UV\3\2\2\2VY\3\2\2" +
  78          "\2WU\3\2\2\2XP\3\2\2\2XY\3\2\2\2YZ\3\2\2\2Z]\7\f\2\2[]\5\16\b\2\\A\3\2" +
  79          "\2\2\\B\3\2\2\2\\C\3\2\2\2\\D\3\2\2\2\\E\3\2\2\2\\F\3\2\2\2\\J\3\2\2\2" +
  80          "\\O\3\2\2\2\\[\3\2\2\2]\t\3\2\2\2^_\5\16\b\2_`\7\20\2\2`b\3\2\2\2a^\3" +
  81          "\2\2\2ab\3\2\2\2bd\3\2\2\2ce\7\36\2\2dc\3\2\2\2de\3\2\2\2ef\3\2\2\2fh" +
  82          "\7\3\2\2gi\7\36\2\2hg\3\2\2\2hi\3\2\2\2ij\3\2\2\2jk\7\5\2\2km\7\16\2\2" +
  83          "ln\7\36\2\2ml\3\2\2\2mn\3\2\2\2no\3\2\2\2oq\7\3\2\2pr\7\36\2\2qp\3\2\2" +
  84          "\2qr\3\2\2\2rs\3\2\2\2s\u00e6\7\5\2\2tu\5\16\b\2uv\7\20\2\2vx\3\2\2\2" +
  85          "wt\3\2\2\2wx\3\2\2\2xz\3\2\2\2y{\7\36\2\2zy\3\2\2\2z{\3\2\2\2{|\3\2\2" +
  86          "\2|~\7\3\2\2}\177\7\36\2\2~}\3\2\2\2~\177\3\2\2\2\177\u0080\3\2\2\2\u0080" +
  87          "\u00e6\7\5\2\2\u0081\u0082\5\16\b\2\u0082\u0083\7\20\2\2\u0083\u0085\3" +
  88          "\2\2\2\u0084\u0081\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0087\3\2\2\2\u0086" +
  89          "\u0088\7\36\2\2\u0087\u0086\3\2\2\2\u0087\u0088\3\2\2\2\u0088\u0089\3" +
  90          "\2\2\2\u0089\u008a\7\3\2\2\u008a\u008c\7\16\2\2\u008b\u008d\7\36\2\2\u008c" +
  91          "\u008b\3\2\2\2\u008c\u008d\3\2\2\2\u008d\u008e\3\2\2\2\u008e\u00e6\7\3" +
  92          "\2\2\u008f\u0090\5\16\b\2\u0090\u0091\7\20\2\2\u0091\u0093\3\2\2\2\u0092" +
  93          "\u008f\3\2\2\2\u0092\u0093\3\2\2\2\u0093\u0095\3\2\2\2\u0094\u0096\7\36" +
  94          "\2\2\u0095\u0094\3\2\2\2\u0095\u0096\3\2\2\2\u0096\u0097\3\2\2\2\u0097" +
  95          "\u0099\7\3\2\2\u0098\u009a\7\36\2\2\u0099\u0098\3\2\2\2\u0099\u009a\3" +
  96          "\2\2\2\u009a\u009b\3\2\2\2\u009b\u009c\7\5\2\2\u009c\u009e\7\16\2\2\u009d" +
  97          "\u009f\7\36\2\2\u009e\u009d\3\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a0\3" +
  98          "\2\2\2\u00a0\u00e6\7\3\2\2\u00a1\u00a2\5\16\b\2\u00a2\u00a3\7\20\2\2\u00a3" +
  99          "\u00a5\3\2\2\2\u00a4\u00a1\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a7\3\2" +
 100          "\2\2\u00a6\u00a8\7\36\2\2\u00a7\u00a6\3\2\2\2\u00a7\u00a8\3\2\2\2\u00a8" +
 101          "\u00a9\3\2\2\2\u00a9\u00aa\7\3\2\2\u00aa\u00ac\7\16\2\2\u00ab\u00ad\7" +
 102          "\36\2\2\u00ac\u00ab\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae" +
 103          "\u00b0\7\3\2\2\u00af\u00b1\7\36\2\2\u00b0\u00af\3\2\2\2\u00b0\u00b1\3" +
 104          "\2\2\2\u00b1\u00b2\3\2\2\2\u00b2\u00e6\7\5\2\2\u00b3\u00b4\5\16\b\2\u00b4" +
 105          "\u00b5\7\20\2\2\u00b5\u00b7\3\2\2\2\u00b6\u00b3\3\2\2\2\u00b6\u00b7\3" +
 106          "\2\2\2\u00b7\u00b9\3\2\2\2\u00b8\u00ba\7\36\2\2\u00b9\u00b8\3\2\2\2\u00b9" +
 107          "\u00ba\3\2\2\2\u00ba\u00bb\3\2\2\2\u00bb\u00bc\7\5\2\2\u00bc\u00be\7\16" +
 108          "\2\2\u00bd\u00bf\7\36\2\2\u00be\u00bd\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf" +
 109          "\u00c0\3\2\2\2\u00c0\u00e6\7\5\2\2\u00c1\u00c2\5\16\b\2\u00c2\u00c3\7" +
 110          "\20\2\2\u00c3\u00c5\3\2\2\2\u00c4\u00c1\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5" +
 111          "\u00c7\3\2\2\2\u00c6\u00c8\7\36\2\2\u00c7\u00c6\3\2\2\2\u00c7\u00c8\3" +
 112          "\2\2\2\u00c8\u00c9\3\2\2\2\u00c9\u00cb\7\3\2\2\u00ca\u00cc\7\36\2\2\u00cb" +
 113          "\u00ca\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00ce\7\5" +
 114          "\2\2\u00ce\u00d0\7\16\2\2\u00cf\u00d1\7\36\2\2\u00d0\u00cf\3\2\2\2\u00d0" +
 115          "\u00d1\3\2\2\2\u00d1\u00d2\3\2\2\2\u00d2\u00e6\7\5\2\2\u00d3\u00d4\5\16" +
 116          "\b\2\u00d4\u00d5\7\20\2\2\u00d5\u00d7\3\2\2\2\u00d6\u00d3\3\2\2\2\u00d6" +
 117          "\u00d7\3\2\2\2\u00d7\u00d9\3\2\2\2\u00d8\u00da\7\36\2\2\u00d9\u00d8\3" +
 118          "\2\2\2\u00d9\u00da\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc\7\5\2\2\u00dc" +
 119          "\u00de\7\16\2\2\u00dd\u00df\7\36\2\2\u00de\u00dd\3\2\2\2\u00de\u00df\3" +
 120          "\2\2\2\u00df\u00e0\3\2\2\2\u00e0\u00e2\7\3\2\2\u00e1\u00e3\7\36\2\2\u00e2" +
 121          "\u00e1\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4\u00e6\7\5" +
 122          "\2\2\u00e5a\3\2\2\2\u00e5w\3\2\2\2\u00e5\u0084\3\2\2\2\u00e5\u0092\3\2" +
 123          "\2\2\u00e5\u00a4\3\2\2\2\u00e5\u00b6\3\2\2\2\u00e5\u00c4\3\2\2\2\u00e5" +
 124          "\u00d6\3\2\2\2\u00e6\13\3\2\2\2\u00e7\u00ec\5\6\4\2\u00e8\u00e9\7\r\2" +
 125          "\2\u00e9\u00eb\5\6\4\2\u00ea\u00e8\3\2\2\2\u00eb\u00ee\3\2\2\2\u00ec\u00ea" +
 126          "\3\2\2\2\u00ec\u00ed\3\2\2\2\u00ed\u00f0\3\2\2\2\u00ee\u00ec\3\2\2\2\u00ef" +
 127          "\u00e7\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\r\3\2\2\2\u00f1\u00f5\7\3\2\2" +
 128          "\u00f2\u00f4\t\5\2\2\u00f3\u00f2\3\2\2\2\u00f4\u00f7\3\2\2\2\u00f5\u00f3" +
 129          "\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\17\3\2\2\2\u00f7\u00f5\3\2\2\2\u00f8" +
 130          "\u00f9\t\6\2\2\u00f9\21\3\2\2\2,\"$:<>UX\\adhmqwz~\u0084\u0087\u008c\u0092" +
 131          "\u0095\u0099\u009e\u00a4\u00a7\u00ac\u00b0\u00b6\u00b9\u00be\u00c4\u00c7" +
 132          "\u00cb\u00d0\u00d6\u00d9\u00de\u00e2\u00e5\u00ec\u00ef\u00f5";
 133  public static final ATN _ATN =
 134      new ATNDeserializer().deserialize(_serializedATN.toCharArray());
 135  protected static final DFA[] _decisionToDFA;
 136  protected static final PredictionContextCache _sharedContextCache =
 137      new PredictionContextCache();
 138  private static final String[] _LITERAL_NAMES = makeLiteralNames();
 139  private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
 140  public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
 141
 142  static {
 143    RuntimeMetaData.checkVersion("4.7.2", RuntimeMetaData.VERSION);
 144  }
 145
 146  static {
 147    tokenNames = new String[_SYMBOLIC_NAMES.length];
 148    for (int i = 0; i < tokenNames.length; i++) {
 149      tokenNames[i] = VOCABULARY.getLiteralName(i);
 150      if (tokenNames[i] == null) {
 151        tokenNames[i] = VOCABULARY.getSymbolicName(i);
 152      }
 153
 154      if (tokenNames[i] == null) {
 155        tokenNames[i] = "<INVALID>";
 156      }
 157    }
 158  }
 159
 160  static {
 161    _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
 162    for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
 163      _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
 164    }
 165  }
 166
 167  public F7Parser(TokenStream input) {
 168    super(input);
 169    _interp = new ParserATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
 170  }
 171
 172  private static String[] makeRuleNames() {
 173    return new String[]{
 174        "start", "block", "expression", "atom", "range", "arguments", "identifier",
 175        "comparisonOperator"
 176    };
 177  }
 178
 179  private static String[] makeLiteralNames() {
 180    return new String[]{
 181        null, null, "'.'"
 182    };
 183  }
 184
 185  private static String[] makeSymbolicNames() {
 186    return new String[]{
 187        null, "NCharacters", "Dot", "Int", "Number", "String", "Error", "LeftParen",
 188        "RightParen", "LeftBrace", "RightBrace", "Comma", "Colon", "SemiColon",
 189        "Bang", "Plus", "Minus", "Percent", "Power", "Divide", "Multiply", "GreaterThan",
 190        "GreaterThanOrEqualTo", "LessThan", "LessThanOrEqualTO", "Equal", "NotEqual",
 191        "Ampersand", "Dollar", "Underscore", "WS"
 192    };
 193  }
 194
 195  @Override
 196  @Deprecated
 197  public String[] getTokenNames() {
 198    return tokenNames;
 199  }
 200
 201  @Override
 202
 203  public Vocabulary getVocabulary() {
 204    return VOCABULARY;
 205  }
 206
 207  @Override
 208  public String getGrammarFileName() {
 209    return "F7.g4";
 210  }
 211
 212  @Override
 213  public String[] getRuleNames() {
 214    return ruleNames;
 215  }
 216
 217  @Override
 218  public String getSerializedATN() {
 219    return _serializedATN;
 220  }
 221
 222  @Override
 223  public ATN getATN() {
 224    return _ATN;
 225  }
 226
 227  public final StartContext start() throws RecognitionException {
 228    StartContext _localctx = new StartContext(_ctx, getState());
 229    enterRule(_localctx, 0, RULE_start);
 230    try {
 231      enterOuterAlt(_localctx, 1);
 232      {
 233        setState(16);
 234        block();
 235        setState(17);
 236        match(EOF);
 237      }
 238    } catch (RecognitionException re) {
 239      _localctx.exception = re;
 240      _errHandler.reportError(this, re);
 241      _errHandler.recover(this, re);
 242    } finally {
 243      exitRule();
 244    }
 245    return _localctx;
 246  }
 247
 248  public final BlockContext block() throws RecognitionException {
 249    BlockContext _localctx = new BlockContext(_ctx, getState());
 250    enterRule(_localctx, 2, RULE_block);
 251    try {
 252      enterOuterAlt(_localctx, 1);
 253      {
 254        setState(19);
 255        expression(0);
 256      }
 257    } catch (RecognitionException re) {
 258      _localctx.exception = re;
 259      _errHandler.reportError(this, re);
 260      _errHandler.recover(this, re);
 261    } finally {
 262      exitRule();
 263    }
 264    return _localctx;
 265  }
 266
 267  public final ExpressionContext expression() throws RecognitionException {
 268    return expression(0);
 269  }
 270
 271  private ExpressionContext expression(int _p) throws RecognitionException {
 272    ParserRuleContext _parentctx = _ctx;
 273    int _parentState = getState();
 274    ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
 275    ExpressionContext _prevctx = _localctx;
 276    int _startState = 4;
 277    enterRecursionRule(_localctx, 4, RULE_expression, _p);
 278    int _la;
 279    try {
 280      int _alt;
 281      enterOuterAlt(_localctx, 1);
 282      {
 283        setState(34);
 284        _errHandler.sync(this);
 285        switch (getInterpreter().adaptivePredict(_input, 1, _ctx)) {
 286          case 1: {
 287            _localctx = new UnaryMinusExpressionContext(_localctx);
 288            _ctx = _localctx;
 289            _prevctx = _localctx;
 290
 291            setState(22);
 292            match(Minus);
 293            setState(23);
 294            expression(10);
 295          }
 296          break;
 297          case 2: {
 298            _localctx = new UnaryPlusExpressionContext(_localctx);
 299            _ctx = _localctx;
 300            _prevctx = _localctx;
 301            setState(24);
 302            match(Plus);
 303            setState(25);
 304            expression(9);
 305          }
 306          break;
 307          case 3: {
 308            _localctx = new AtomExpressionContext(_localctx);
 309            _ctx = _localctx;
 310            _prevctx = _localctx;
 311            setState(26);
 312            atom();
 313          }
 314          break;
 315          case 4: {
 316            _localctx = new RangeExpressionContext(_localctx);
 317            _ctx = _localctx;
 318            _prevctx = _localctx;
 319            setState(27);
 320            atom();
 321            setState(30);
 322            _errHandler.sync(this);
 323            _alt = 1;
 324            do {
 325              switch (_alt) {
 326                case 1: {
 327                  {
 328                    setState(28);
 329                    ((RangeExpressionContext) _localctx).separator = match(Colon);
 330                    setState(29);
 331                    atom();
 332                  }
 333                }
 334                break;
 335                default:
 336                  throw new NoViableAltException(this);
 337              }
 338              setState(32);
 339              _errHandler.sync(this);
 340              _alt = getInterpreter().adaptivePredict(_input, 0, _ctx);
 341            } while (_alt != 2 && _alt != org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER);
 342          }
 343          break;
 344        }
 345        _ctx.stop = _input.LT(-1);
 346        setState(60);
 347        _errHandler.sync(this);
 348        _alt = getInterpreter().adaptivePredict(_input, 4, _ctx);
 349        while (_alt != 2 && _alt != org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER) {
 350          if (_alt == 1) {
 351            if (_parseListeners != null) triggerExitRuleEvent();
 352            _prevctx = _localctx;
 353            {
 354              setState(58);
 355              _errHandler.sync(this);
 356              switch (getInterpreter().adaptivePredict(_input, 3, _ctx)) {
 357                case 1: {
 358                  _localctx = new PowerExpressionContext(new ExpressionContext(_parentctx, _parentState));
 359                  ((PowerExpressionContext) _localctx).left = _prevctx;
 360                  pushNewRecursionContext(_localctx, _startState, RULE_expression);
 361                  setState(36);
 362                  if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
 363                  setState(37);
 364                  ((PowerExpressionContext) _localctx).op = match(Power);
 365                  setState(38);
 366                  ((PowerExpressionContext) _localctx).right = expression(8);
 367                }
 368                break;
 369                case 2: {
 370                  _localctx = new MultiplicationExpressionContext(new ExpressionContext(_parentctx, _parentState));
 371                  ((MultiplicationExpressionContext) _localctx).left = _prevctx;
 372                  pushNewRecursionContext(_localctx, _startState, RULE_expression);
 373                  setState(39);
 374                  if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
 375                  setState(40);
 376                  ((MultiplicationExpressionContext) _localctx).op = _input.LT(1);
 377                  _la = _input.LA(1);
 378                  if (!(_la == Divide || _la == Multiply)) {
 379                    ((MultiplicationExpressionContext) _localctx).op = (Token) _errHandler.recoverInline(this);
 380                  } else {
 381                    if (_input.LA(1) == Token.EOF) matchedEOF = true;
 382                    _errHandler.reportMatch(this);
 383                    consume();
 384                  }
 385                  setState(41);
 386                  ((MultiplicationExpressionContext) _localctx).right = expression(7);
 387                }
 388                break;
 389                case 3: {
 390                  _localctx = new AdditiveExpressionContext(new ExpressionContext(_parentctx, _parentState));
 391                  ((AdditiveExpressionContext) _localctx).left = _prevctx;
 392                  pushNewRecursionContext(_localctx, _startState, RULE_expression);
 393                  setState(42);
 394                  if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
 395                  setState(43);
 396                  ((AdditiveExpressionContext) _localctx).op = _input.LT(1);
 397                  _la = _input.LA(1);
 398                  if (!(_la == Plus || _la == Minus)) {
 399                    ((AdditiveExpressionContext) _localctx).op = (Token) _errHandler.recoverInline(this);
 400                  } else {
 401                    if (_input.LA(1) == Token.EOF) matchedEOF = true;
 402                    _errHandler.reportMatch(this);
 403                    consume();
 404                  }
 405                  setState(44);
 406                  ((AdditiveExpressionContext) _localctx).right = expression(6);
 407                }
 408                break;
 409                case 4: {
 410                  _localctx = new RelationalExpressionContext(new ExpressionContext(_parentctx, _parentState));
 411                  ((RelationalExpressionContext) _localctx).left = _prevctx;
 412                  pushNewRecursionContext(_localctx, _startState, RULE_expression);
 413                  setState(45);
 414                  if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
 415                  setState(46);
 416                  ((RelationalExpressionContext) _localctx).op = comparisonOperator();
 417                  setState(47);
 418                  ((RelationalExpressionContext) _localctx).right = expression(5);
 419                }
 420                break;
 421                case 5: {
 422                  _localctx = new ConcatExpressionContext(new ExpressionContext(_parentctx, _parentState));
 423                  ((ConcatExpressionContext) _localctx).left = _prevctx;
 424                  pushNewRecursionContext(_localctx, _startState, RULE_expression);
 425                  setState(49);
 426                  if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
 427                  setState(50);
 428                  ((ConcatExpressionContext) _localctx).op = match(Ampersand);
 429                  setState(51);
 430                  ((ConcatExpressionContext) _localctx).right = expression(4);
 431                }
 432                break;
 433                case 6: {
 434                  _localctx = new UnaryPercentExpressionContext(new ExpressionContext(_parentctx, _parentState));
 435                  pushNewRecursionContext(_localctx, _startState, RULE_expression);
 436                  setState(52);
 437                  if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
 438                  setState(54);
 439                  _errHandler.sync(this);
 440                  _alt = 1;
 441                  do {
 442                    switch (_alt) {
 443                      case 1: {
 444                        {
 445                          setState(53);
 446                          match(Percent);
 447                        }
 448                      }
 449                      break;
 450                      default:
 451                        throw new NoViableAltException(this);
 452                    }
 453                    setState(56);
 454                    _errHandler.sync(this);
 455                    _alt = getInterpreter().adaptivePredict(_input, 2, _ctx);
 456                  } while (_alt != 2 && _alt != org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER);
 457                }
 458                break;
 459              }
 460            }
 461          }
 462          setState(62);
 463          _errHandler.sync(this);
 464          _alt = getInterpreter().adaptivePredict(_input, 4, _ctx);
 465        }
 466      }
 467    } catch (RecognitionException re) {
 468      _localctx.exception = re;
 469      _errHandler.reportError(this, re);
 470      _errHandler.recover(this, re);
 471    } finally {
 472      unrollRecursionContexts(_parentctx);
 473    }
 474    return _localctx;
 475  }
 476
 477  public final AtomContext atom() throws RecognitionException {
 478    AtomContext _localctx = new AtomContext(_ctx, getState());
 479    enterRule(_localctx, 6, RULE_atom);
 480    int _la;
 481    try {
 482      setState(90);
 483      _errHandler.sync(this);
 484      switch (getInterpreter().adaptivePredict(_input, 7, _ctx)) {
 485        case 1:
 486          _localctx = new CellAtomContext(_localctx);
 487          enterOuterAlt(_localctx, 1);
 488        {
 489          setState(63);
 490          range();
 491        }
 492        break;
 493        case 2:
 494          _localctx = new StringAtomContext(_localctx);
 495          enterOuterAlt(_localctx, 2);
 496        {
 497          setState(64);
 498          match(String);
 499        }
 500        break;
 501        case 3:
 502          _localctx = new ErrorAtomContext(_localctx);
 503          enterOuterAlt(_localctx, 3);
 504        {
 505          setState(65);
 506          match(Error);
 507        }
 508        break;
 509        case 4:
 510          _localctx = new NumberAtomContext(_localctx);
 511          enterOuterAlt(_localctx, 4);
 512        {
 513          setState(66);
 514          match(Int);
 515        }
 516        break;
 517        case 5:
 518          _localctx = new NumberAtomContext(_localctx);
 519          enterOuterAlt(_localctx, 5);
 520        {
 521          setState(67);
 522          match(Number);
 523        }
 524        break;
 525        case 6:
 526          _localctx = new ParentheticalAtomContext(_localctx);
 527          enterOuterAlt(_localctx, 6);
 528        {
 529          setState(68);
 530          match(LeftParen);
 531          setState(69);
 532          expression(0);
 533          setState(70);
 534          match(RightParen);
 535        }
 536        break;
 537        case 7:
 538          _localctx = new FormulaAtomContext(_localctx);
 539          enterOuterAlt(_localctx, 7);
 540        {
 541          setState(72);
 542          ((FormulaAtomContext) _localctx).name = identifier();
 543          setState(73);
 544          match(LeftParen);
 545          setState(74);
 546          arguments();
 547          setState(75);
 548          match(RightParen);
 549        }
 550        break;
 551        case 8:
 552          _localctx = new ListAtomContext(_localctx);
 553          enterOuterAlt(_localctx, 8);
 554        {
 555          setState(77);
 556          match(LeftBrace);
 557          setState(86);
 558          _errHandler.sync(this);
 559          _la = _input.LA(1);
 560          if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NCharacters) | (1L << Int) | (1L << Number) | (1L << String) | (1L << Error) | (1L << LeftParen) | (1L << LeftBrace) | (1L << Plus) | (1L << Minus) | (1L << Dollar))) != 0)) {
 561            {
 562              setState(78);
 563              expression(0);
 564              setState(83);
 565              _errHandler.sync(this);
 566              _la = _input.LA(1);
 567              while (_la == Comma || _la == SemiColon) {
 568                {
 569                  {
 570                    setState(79);
 571                    ((ListAtomContext) _localctx).separator = _input.LT(1);
 572                    _la = _input.LA(1);
 573                    if (!(_la == Comma || _la == SemiColon)) {
 574                      ((ListAtomContext) _localctx).separator = (Token) _errHandler.recoverInline(this);
 575                    } else {
 576                      if (_input.LA(1) == Token.EOF) matchedEOF = true;
 577                      _errHandler.reportMatch(this);
 578                      consume();
 579                    }
 580                    setState(80);
 581                    expression(0);
 582                  }
 583                }
 584                setState(85);
 585                _errHandler.sync(this);
 586                _la = _input.LA(1);
 587              }
 588            }
 589          }
 590
 591          setState(88);
 592          match(RightBrace);
 593        }
 594        break;
 595        case 9:
 596          _localctx = new NamedAtomContext(_localctx);
 597          enterOuterAlt(_localctx, 9);
 598        {
 599          setState(89);
 600          identifier();
 601        }
 602        break;
 603      }
 604    } catch (RecognitionException re) {
 605      _localctx.exception = re;
 606      _errHandler.reportError(this, re);
 607      _errHandler.recover(this, re);
 608    } finally {
 609      exitRule();
 610    }
 611    return _localctx;
 612  }
 613
 614  public final RangeContext range() throws RecognitionException {
 615    RangeContext _localctx = new RangeContext(_ctx, getState());
 616    enterRule(_localctx, 8, RULE_range);
 617    int _la;
 618    try {
 619      setState(227);
 620      _errHandler.sync(this);
 621      switch (getInterpreter().adaptivePredict(_input, 38, _ctx)) {
 622        case 1:
 623          _localctx = new BiRangeContext(_localctx);
 624          enterOuterAlt(_localctx, 1);
 625        {
 626          setState(95);
 627          _errHandler.sync(this);
 628          switch (getInterpreter().adaptivePredict(_input, 8, _ctx)) {
 629            case 1: {
 630              setState(92);
 631              ((BiRangeContext) _localctx).grid = identifier();
 632              setState(93);
 633              match(Bang);
 634            }
 635            break;
 636          }
 637          setState(98);
 638          _errHandler.sync(this);
 639          _la = _input.LA(1);
 640          if (_la == Dollar) {
 641            {
 642              setState(97);
 643              ((BiRangeContext) _localctx).absoFirstColumn = match(Dollar);
 644            }
 645          }
 646
 647          setState(100);
 648          ((BiRangeContext) _localctx).firstColumn = match(NCharacters);
 649          setState(102);
 650          _errHandler.sync(this);
 651          _la = _input.LA(1);
 652          if (_la == Dollar) {
 653            {
 654              setState(101);
 655              ((BiRangeContext) _localctx).absoRow = match(Dollar);
 656            }
 657          }
 658
 659          setState(104);
 660          ((BiRangeContext) _localctx).firstRow = match(Int);
 661          setState(105);
 662          match(Colon);
 663          setState(107);
 664          _errHandler.sync(this);
 665          _la = _input.LA(1);
 666          if (_la == Dollar) {
 667            {
 668              setState(106);
 669              ((BiRangeContext) _localctx).absoLastColumn = match(Dollar);
 670            }
 671          }
 672
 673          setState(109);
 674          ((BiRangeContext) _localctx).lastColumn = match(NCharacters);
 675          setState(111);
 676          _errHandler.sync(this);
 677          _la = _input.LA(1);
 678          if (_la == Dollar) {
 679            {
 680              setState(110);
 681              ((BiRangeContext) _localctx).absoLastRow = match(Dollar);
 682            }
 683          }
 684
 685          setState(113);
 686          ((BiRangeContext) _localctx).lastRow = match(Int);
 687        }
 688        break;
 689        case 2:
 690          _localctx = new UniRangeContext(_localctx);
 691          enterOuterAlt(_localctx, 2);
 692        {
 693          setState(117);
 694          _errHandler.sync(this);
 695          switch (getInterpreter().adaptivePredict(_input, 13, _ctx)) {
 696            case 1: {
 697              setState(114);
 698              ((UniRangeContext) _localctx).grid = identifier();
 699              setState(115);
 700              match(Bang);
 701            }
 702            break;
 703          }
 704          setState(120);
 705          _errHandler.sync(this);
 706          _la = _input.LA(1);
 707          if (_la == Dollar) {
 708            {
 709              setState(119);
 710              ((UniRangeContext) _localctx).absoFirstColumn = match(Dollar);
 711            }
 712          }
 713
 714          setState(122);
 715          ((UniRangeContext) _localctx).firstColumn = match(NCharacters);
 716          setState(124);
 717          _errHandler.sync(this);
 718          _la = _input.LA(1);
 719          if (_la == Dollar) {
 720            {
 721              setState(123);
 722              ((UniRangeContext) _localctx).absoFirstRow = match(Dollar);
 723            }
 724          }
 725
 726          setState(126);
 727          ((UniRangeContext) _localctx).firstRow = match(Int);
 728        }
 729        break;
 730        case 3:
 731          _localctx = new ColumnWiseBiRangeContext(_localctx);
 732          enterOuterAlt(_localctx, 3);
 733        {
 734          setState(130);
 735          _errHandler.sync(this);
 736          switch (getInterpreter().adaptivePredict(_input, 16, _ctx)) {
 737            case 1: {
 738              setState(127);
 739              ((ColumnWiseBiRangeContext) _localctx).grid = identifier();
 740              setState(128);
 741              match(Bang);
 742            }
 743            break;
 744          }
 745          setState(133);
 746          _errHandler.sync(this);
 747          _la = _input.LA(1);
 748          if (_la == Dollar) {
 749            {
 750              setState(132);
 751              ((ColumnWiseBiRangeContext) _localctx).absoFirstColumn = match(Dollar);
 752            }
 753          }
 754
 755          setState(135);
 756          ((ColumnWiseBiRangeContext) _localctx).firstColumn = match(NCharacters);
 757          setState(136);
 758          match(Colon);
 759          setState(138);
 760          _errHandler.sync(this);
 761          _la = _input.LA(1);
 762          if (_la == Dollar) {
 763            {
 764              setState(137);
 765              ((ColumnWiseBiRangeContext) _localctx).absoLastColumn = match(Dollar);
 766            }
 767          }
 768
 769          setState(140);
 770          ((ColumnWiseBiRangeContext) _localctx).lastColumn = match(NCharacters);
 771        }
 772        break;
 773        case 4:
 774          _localctx = new ColumnWiseWithRowOffsetFirstBiRangeContext(_localctx);
 775          enterOuterAlt(_localctx, 4);
 776        {
 777          setState(144);
 778          _errHandler.sync(this);
 779          switch (getInterpreter().adaptivePredict(_input, 19, _ctx)) {
 780            case 1: {
 781              setState(141);
 782              ((ColumnWiseWithRowOffsetFirstBiRangeContext) _localctx).grid = identifier();
 783              setState(142);
 784              match(Bang);
 785            }
 786            break;
 787          }
 788          setState(147);
 789          _errHandler.sync(this);
 790          _la = _input.LA(1);
 791          if (_la == Dollar) {
 792            {
 793              setState(146);
 794              ((ColumnWiseWithRowOffsetFirstBiRangeContext) _localctx).absoFirstColumn = match(Dollar);
 795            }
 796          }
 797
 798          setState(149);
 799          ((ColumnWiseWithRowOffsetFirstBiRangeContext) _localctx).firstColumn = match(NCharacters);
 800          setState(151);
 801          _errHandler.sync(this);
 802          _la = _input.LA(1);
 803          if (_la == Dollar) {
 804            {
 805              setState(150);
 806              ((ColumnWiseWithRowOffsetFirstBiRangeContext) _localctx).absoFirstRow = match(Dollar);
 807            }
 808          }
 809
 810          setState(153);
 811          ((ColumnWiseWithRowOffsetFirstBiRangeContext) _localctx).firstRow = match(Int);
 812          setState(154);
 813          match(Colon);
 814          setState(156);
 815          _errHandler.sync(this);
 816          _la = _input.LA(1);
 817          if (_la == Dollar) {
 818            {
 819              setState(155);
 820              ((ColumnWiseWithRowOffsetFirstBiRangeContext) _localctx).absoLastColumn = match(Dollar);
 821            }
 822          }
 823
 824          setState(158);
 825          ((ColumnWiseWithRowOffsetFirstBiRangeContext) _localctx).lastColumn = match(NCharacters);
 826        }
 827        break;
 828        case 5:
 829          _localctx = new ColumnWiseWithRowOffsetLastBiRangeContext(_localctx);
 830          enterOuterAlt(_localctx, 5);
 831        {
 832          setState(162);
 833          _errHandler.sync(this);
 834          switch (getInterpreter().adaptivePredict(_input, 23, _ctx)) {
 835            case 1: {
 836              setState(159);
 837              ((ColumnWiseWithRowOffsetLastBiRangeContext) _localctx).grid = identifier();
 838              setState(160);
 839              match(Bang);
 840            }
 841            break;
 842          }
 843          setState(165);
 844          _errHandler.sync(this);
 845          _la = _input.LA(1);
 846          if (_la == Dollar) {
 847            {
 848              setState(164);
 849              ((ColumnWiseWithRowOffsetLastBiRangeContext) _localctx).absoFirstColumn = match(Dollar);
 850            }
 851          }
 852
 853          setState(167);
 854          ((ColumnWiseWithRowOffsetLastBiRangeContext) _localctx).firstColumn = match(NCharacters);
 855          setState(168);
 856          match(Colon);
 857          setState(170);
 858          _errHandler.sync(this);
 859          _la = _input.LA(1);
 860          if (_la == Dollar) {
 861            {
 862              setState(169);
 863              ((ColumnWiseWithRowOffsetLastBiRangeContext) _localctx).absoLastColumn = match(Dollar);
 864            }
 865          }
 866
 867          setState(172);
 868          ((ColumnWiseWithRowOffsetLastBiRangeContext) _localctx).lastColumn = match(NCharacters);
 869          setState(174);
 870          _errHandler.sync(this);
 871          _la = _input.LA(1);
 872          if (_la == Dollar) {
 873            {
 874              setState(173);
 875              ((ColumnWiseWithRowOffsetLastBiRangeContext) _localctx).absoLastRow = match(Dollar);
 876            }
 877          }
 878
 879          setState(176);
 880          ((ColumnWiseWithRowOffsetLastBiRangeContext) _localctx).lastRow = match(Int);
 881        }
 882        break;
 883        case 6:
 884          _localctx = new RowWiseBiRangeContext(_localctx);
 885          enterOuterAlt(_localctx, 6);
 886        {
 887          setState(180);
 888          _errHandler.sync(this);
 889          _la = _input.LA(1);
 890          if (_la == NCharacters) {
 891            {
 892              setState(177);
 893              ((RowWiseBiRangeContext) _localctx).grid = identifier();
 894              setState(178);
 895              match(Bang);
 896            }
 897          }
 898
 899          setState(183);
 900          _errHandler.sync(this);
 901          _la = _input.LA(1);
 902          if (_la == Dollar) {
 903            {
 904              setState(182);
 905              ((RowWiseBiRangeContext) _localctx).absoFirstRow = match(Dollar);
 906            }
 907          }
 908
 909          setState(185);
 910          ((RowWiseBiRangeContext) _localctx).firstRow = match(Int);
 911          setState(186);
 912          match(Colon);
 913          setState(188);
 914          _errHandler.sync(this);
 915          _la = _input.LA(1);
 916          if (_la == Dollar) {
 917            {
 918              setState(187);
 919              ((RowWiseBiRangeContext) _localctx).absoLastRow = match(Dollar);
 920            }
 921          }
 922
 923          setState(190);
 924          ((RowWiseBiRangeContext) _localctx).lastRow = match(Int);
 925        }
 926        break;
 927        case 7:
 928          _localctx = new RowWiseWithColumnOffsetFirstBiRangeContext(_localctx);
 929          enterOuterAlt(_localctx, 7);
 930        {
 931          setState(194);
 932          _errHandler.sync(this);
 933          switch (getInterpreter().adaptivePredict(_input, 30, _ctx)) {
 934            case 1: {
 935              setState(191);
 936              ((RowWiseWithColumnOffsetFirstBiRangeContext) _localctx).grid = identifier();
 937              setState(192);
 938              match(Bang);
 939            }
 940            break;
 941          }
 942          setState(197);
 943          _errHandler.sync(this);
 944          _la = _input.LA(1);
 945          if (_la == Dollar) {
 946            {
 947              setState(196);
 948              ((RowWiseWithColumnOffsetFirstBiRangeContext) _localctx).absoFirstColumn = match(Dollar);
 949            }
 950          }
 951
 952          setState(199);
 953          ((RowWiseWithColumnOffsetFirstBiRangeContext) _localctx).firstColumn = match(NCharacters);
 954          setState(201);
 955          _errHandler.sync(this);
 956          _la = _input.LA(1);
 957          if (_la == Dollar) {
 958            {
 959              setState(200);
 960              ((RowWiseWithColumnOffsetFirstBiRangeContext) _localctx).absoFirstRow = match(Dollar);
 961            }
 962          }
 963
 964          setState(203);
 965          ((RowWiseWithColumnOffsetFirstBiRangeContext) _localctx).firstRow = match(Int);
 966          setState(204);
 967          match(Colon);
 968          setState(206);
 969          _errHandler.sync(this);
 970          _la = _input.LA(1);
 971          if (_la == Dollar) {
 972            {
 973              setState(205);
 974              ((RowWiseWithColumnOffsetFirstBiRangeContext) _localctx).absoLastRow = match(Dollar);
 975            }
 976          }
 977
 978          setState(208);
 979          ((RowWiseWithColumnOffsetFirstBiRangeContext) _localctx).lastRow = match(Int);
 980        }
 981        break;
 982        case 8:
 983          _localctx = new RowWiseWithColumnOffsetLastBiRangeContext(_localctx);
 984          enterOuterAlt(_localctx, 8);
 985        {
 986          setState(212);
 987          _errHandler.sync(this);
 988          _la = _input.LA(1);
 989          if (_la == NCharacters) {
 990            {
 991              setState(209);
 992              ((RowWiseWithColumnOffsetLastBiRangeContext) _localctx).grid = identifier();
 993              setState(210);
 994              match(Bang);
 995            }
 996          }
 997
 998          setState(215);
 999          _errHandler.sync(this);
1000          _la = _input.LA(1);
1001          if (_la == Dollar) {
1002            {
1003              setState(214);
1004              ((RowWiseWithColumnOffsetLastBiRangeContext) _localctx).absoFirstRow = match(Dollar);
1005            }
1006          }
1007
1008          setState(217);
1009          ((RowWiseWithColumnOffsetLastBiRangeContext) _localctx).firstRow = match(Int);
1010          setState(218);
1011          match(Colon);
1012          setState(220);
1013          _errHandler.sync(this);
1014          _la = _input.LA(1);
1015          if (_la == Dollar) {
1016            {
1017              setState(219);
1018              ((RowWiseWithColumnOffsetLastBiRangeContext) _localctx).absLastColumn = match(Dollar);
1019            }
1020          }
1021
1022          setState(222);
1023          ((RowWiseWithColumnOffsetLastBiRangeContext) _localctx).lastColumn = match(NCharacters);
1024          setState(224);
1025          _errHandler.sync(this);
1026          _la = _input.LA(1);
1027          if (_la == Dollar) {
1028            {
1029              setState(223);
1030              ((RowWiseWithColumnOffsetLastBiRangeContext) _localctx).absoLastRow = match(Dollar);
1031            }
1032          }
1033
1034          setState(226);
1035          ((RowWiseWithColumnOffsetLastBiRangeContext) _localctx).lastRow = match(Int);
1036        }
1037        break;
1038      }
1039    } catch (RecognitionException re) {
1040      _localctx.exception = re;
1041      _errHandler.reportError(this, re);
1042      _errHandler.recover(this, re);
1043    } finally {
1044      exitRule();
1045    }
1046    return _localctx;
1047  }
1048
1049  public final ArgumentsContext arguments() throws RecognitionException {
1050    ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState());
1051    enterRule(_localctx, 10, RULE_arguments);
1052    int _la;
1053    try {
1054      enterOuterAlt(_localctx, 1);
1055      {
1056        setState(237);
1057        _errHandler.sync(this);
1058        _la = _input.LA(1);
1059        if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NCharacters) | (1L << Int) | (1L << Number) | (1L << String) | (1L << Error) | (1L << LeftParen) | (1L << LeftBrace) | (1L << Plus) | (1L << Minus) | (1L << Dollar))) != 0)) {
1060          {
1061            setState(229);
1062            expression(0);
1063            setState(234);
1064            _errHandler.sync(this);
1065            _la = _input.LA(1);
1066            while (_la == Comma) {
1067              {
1068                {
1069                  setState(230);
1070                  match(Comma);
1071                  setState(231);
1072                  expression(0);
1073                }
1074              }
1075              setState(236);
1076              _errHandler.sync(this);
1077              _la = _input.LA(1);
1078            }
1079          }
1080        }
1081
1082      }
1083    } catch (RecognitionException re) {
1084      _localctx.exception = re;
1085      _errHandler.reportError(this, re);
1086      _errHandler.recover(this, re);
1087    } finally {
1088      exitRule();
1089    }
1090    return _localctx;
1091  }
1092
1093  public final IdentifierContext identifier() throws RecognitionException {
1094    IdentifierContext _localctx = new IdentifierContext(_ctx, getState());
1095    enterRule(_localctx, 12, RULE_identifier);
1096    int _la;
1097    try {
1098      int _alt;
1099      enterOuterAlt(_localctx, 1);
1100      {
1101        setState(239);
1102        match(NCharacters);
1103        setState(243);
1104        _errHandler.sync(this);
1105        _alt = getInterpreter().adaptivePredict(_input, 41, _ctx);
1106        while (_alt != 2 && _alt != org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER) {
1107          if (_alt == 1) {
1108            {
1109              {
1110                setState(240);
1111                _la = _input.LA(1);
1112                if (!((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NCharacters) | (1L << Dot) | (1L << Int) | (1L << Underscore))) != 0))) {
1113                  _errHandler.recoverInline(this);
1114                } else {
1115                  if (_input.LA(1) == Token.EOF) matchedEOF = true;
1116                  _errHandler.reportMatch(this);
1117                  consume();
1118                }
1119              }
1120            }
1121          }
1122          setState(245);
1123          _errHandler.sync(this);
1124          _alt = getInterpreter().adaptivePredict(_input, 41, _ctx);
1125        }
1126      }
1127    } catch (RecognitionException re) {
1128      _localctx.exception = re;
1129      _errHandler.reportError(this, re);
1130      _errHandler.recover(this, re);
1131    } finally {
1132      exitRule();
1133    }
1134    return _localctx;
1135  }
1136
1137  public final ComparisonOperatorContext comparisonOperator() throws RecognitionException {
1138    ComparisonOperatorContext _localctx = new ComparisonOperatorContext(_ctx, getState());
1139    enterRule(_localctx, 14, RULE_comparisonOperator);
1140    int _la;
1141    try {
1142      enterOuterAlt(_localctx, 1);
1143      {
1144        setState(246);
1145        _la = _input.LA(1);
1146        if (!((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << GreaterThan) | (1L << GreaterThanOrEqualTo) | (1L << LessThan) | (1L << LessThanOrEqualTO) | (1L << Equal) | (1L << NotEqual))) != 0))) {
1147          _errHandler.recoverInline(this);
1148        } else {
1149          if (_input.LA(1) == Token.EOF) matchedEOF = true;
1150          _errHandler.reportMatch(this);
1151          consume();
1152        }
1153      }
1154    } catch (RecognitionException re) {
1155      _localctx.exception = re;
1156      _errHandler.reportError(this, re);
1157      _errHandler.recover(this, re);
1158    } finally {
1159      exitRule();
1160    }
1161    return _localctx;
1162  }
1163
1164  public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
1165    switch (ruleIndex) {
1166      case 2:
1167        return expression_sempred((ExpressionContext) _localctx, predIndex);
1168    }
1169    return true;
1170  }
1171
1172  private boolean expression_sempred(ExpressionContext _localctx, int predIndex) {
1173    switch (predIndex) {
1174      case 0:
1175        return precpred(_ctx, 7);
1176      case 1:
1177        return precpred(_ctx, 6);
1178      case 2:
1179        return precpred(_ctx, 5);
1180      case 3:
1181        return precpred(_ctx, 4);
1182      case 4:
1183        return precpred(_ctx, 3);
1184      case 5:
1185        return precpred(_ctx, 8);
1186    }
1187    return true;
1188  }
1189
1190  public static class StartContext extends ParserRuleContext {
1191    public StartContext(ParserRuleContext parent, int invokingState) {
1192      super(parent, invokingState);
1193    }
1194
1195    public BlockContext block() {
1196      return getRuleContext(BlockContext.class, 0);
1197    }
1198
1199    public TerminalNode EOF() {
1200      return getToken(F7Parser.EOF, 0);
1201    }
1202
1203    @Override public int getRuleIndex() {
1204      return RULE_start;
1205    }
1206
1207    @Override
1208    public void enterRule(ParseTreeListener listener) {
1209      if (listener instanceof F7Listener) ((F7Listener) listener).enterStart(this);
1210    }
1211
1212    @Override
1213    public void exitRule(ParseTreeListener listener) {
1214      if (listener instanceof F7Listener) ((F7Listener) listener).exitStart(this);
1215    }
1216
1217    @Override
1218    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1219      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitStart(this);
1220      else return visitor.visitChildren(this);
1221    }
1222  }
1223
1224  public static class BlockContext extends ParserRuleContext {
1225    public BlockContext(ParserRuleContext parent, int invokingState) {
1226      super(parent, invokingState);
1227    }
1228
1229    public ExpressionContext expression() {
1230      return getRuleContext(ExpressionContext.class, 0);
1231    }
1232
1233    @Override public int getRuleIndex() {
1234      return RULE_block;
1235    }
1236
1237    @Override
1238    public void enterRule(ParseTreeListener listener) {
1239      if (listener instanceof F7Listener) ((F7Listener) listener).enterBlock(this);
1240    }
1241
1242    @Override
1243    public void exitRule(ParseTreeListener listener) {
1244      if (listener instanceof F7Listener) ((F7Listener) listener).exitBlock(this);
1245    }
1246
1247    @Override
1248    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1249      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitBlock(this);
1250      else return visitor.visitChildren(this);
1251    }
1252  }
1253
1254  public static class ExpressionContext extends ParserRuleContext {
1255    public ExpressionContext(ParserRuleContext parent, int invokingState) {
1256      super(parent, invokingState);
1257    }
1258
1259    public ExpressionContext() {
1260    }
1261
1262    @Override public int getRuleIndex() {
1263      return RULE_expression;
1264    }
1265
1266    public void copyFrom(ExpressionContext ctx) {
1267      super.copyFrom(ctx);
1268    }
1269  }
1270
1271  public static class UnaryPercentExpressionContext extends ExpressionContext {
1272    public UnaryPercentExpressionContext(ExpressionContext ctx) {
1273      copyFrom(ctx);
1274    }
1275
1276    public ExpressionContext expression() {
1277      return getRuleContext(ExpressionContext.class, 0);
1278    }
1279
1280    public List<TerminalNode> Percent() {
1281      return getTokens(F7Parser.Percent);
1282    }
1283
1284    public TerminalNode Percent(int i) {
1285      return getToken(F7Parser.Percent, i);
1286    }
1287
1288    @Override
1289    public void enterRule(ParseTreeListener listener) {
1290      if (listener instanceof F7Listener) ((F7Listener) listener).enterUnaryPercentExpression(this);
1291    }
1292
1293    @Override
1294    public void exitRule(ParseTreeListener listener) {
1295      if (listener instanceof F7Listener) ((F7Listener) listener).exitUnaryPercentExpression(this);
1296    }
1297
1298    @Override
1299    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1300      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitUnaryPercentExpression(this);
1301      else return visitor.visitChildren(this);
1302    }
1303  }
1304
1305  public static class UnaryMinusExpressionContext extends ExpressionContext {
1306    public UnaryMinusExpressionContext(ExpressionContext ctx) {
1307      copyFrom(ctx);
1308    }
1309
1310    public TerminalNode Minus() {
1311      return getToken(F7Parser.Minus, 0);
1312    }
1313
1314    public ExpressionContext expression() {
1315      return getRuleContext(ExpressionContext.class, 0);
1316    }
1317
1318    @Override
1319    public void enterRule(ParseTreeListener listener) {
1320      if (listener instanceof F7Listener) ((F7Listener) listener).enterUnaryMinusExpression(this);
1321    }
1322
1323    @Override
1324    public void exitRule(ParseTreeListener listener) {
1325      if (listener instanceof F7Listener) ((F7Listener) listener).exitUnaryMinusExpression(this);
1326    }
1327
1328    @Override
1329    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1330      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitUnaryMinusExpression(this);
1331      else return visitor.visitChildren(this);
1332    }
1333  }
1334
1335  public static class PowerExpressionContext extends ExpressionContext {
1336    public ExpressionContext left;
1337    public Token op;
1338    public ExpressionContext right;
1339
1340    public PowerExpressionContext(ExpressionContext ctx) {
1341      copyFrom(ctx);
1342    }
1343
1344    public List<ExpressionContext> expression() {
1345      return getRuleContexts(ExpressionContext.class);
1346    }
1347
1348    public ExpressionContext expression(int i) {
1349      return getRuleContext(ExpressionContext.class, i);
1350    }
1351
1352    public TerminalNode Power() {
1353      return getToken(F7Parser.Power, 0);
1354    }
1355
1356    @Override
1357    public void enterRule(ParseTreeListener listener) {
1358      if (listener instanceof F7Listener) ((F7Listener) listener).enterPowerExpression(this);
1359    }
1360
1361    @Override
1362    public void exitRule(ParseTreeListener listener) {
1363      if (listener instanceof F7Listener) ((F7Listener) listener).exitPowerExpression(this);
1364    }
1365
1366    @Override
1367    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1368      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitPowerExpression(this);
1369      else return visitor.visitChildren(this);
1370    }
1371  }
1372
1373  public static class UnaryPlusExpressionContext extends ExpressionContext {
1374    public UnaryPlusExpressionContext(ExpressionContext ctx) {
1375      copyFrom(ctx);
1376    }
1377
1378    public TerminalNode Plus() {
1379      return getToken(F7Parser.Plus, 0);
1380    }
1381
1382    public ExpressionContext expression() {
1383      return getRuleContext(ExpressionContext.class, 0);
1384    }
1385
1386    @Override
1387    public void enterRule(ParseTreeListener listener) {
1388      if (listener instanceof F7Listener) ((F7Listener) listener).enterUnaryPlusExpression(this);
1389    }
1390
1391    @Override
1392    public void exitRule(ParseTreeListener listener) {
1393      if (listener instanceof F7Listener) ((F7Listener) listener).exitUnaryPlusExpression(this);
1394    }
1395
1396    @Override
1397    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1398      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitUnaryPlusExpression(this);
1399      else return visitor.visitChildren(this);
1400    }
1401  }
1402
1403  public static class AtomExpressionContext extends ExpressionContext {
1404    public AtomExpressionContext(ExpressionContext ctx) {
1405      copyFrom(ctx);
1406    }
1407
1408    public AtomContext atom() {
1409      return getRuleContext(AtomContext.class, 0);
1410    }
1411
1412    @Override
1413    public void enterRule(ParseTreeListener listener) {
1414      if (listener instanceof F7Listener) ((F7Listener) listener).enterAtomExpression(this);
1415    }
1416
1417    @Override
1418    public void exitRule(ParseTreeListener listener) {
1419      if (listener instanceof F7Listener) ((F7Listener) listener).exitAtomExpression(this);
1420    }
1421
1422    @Override
1423    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1424      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitAtomExpression(this);
1425      else return visitor.visitChildren(this);
1426    }
1427  }
1428
1429  public static class AdditiveExpressionContext extends ExpressionContext {
1430    public ExpressionContext left;
1431    public Token op;
1432    public ExpressionContext right;
1433
1434    public AdditiveExpressionContext(ExpressionContext ctx) {
1435      copyFrom(ctx);
1436    }
1437
1438    public List<ExpressionContext> expression() {
1439      return getRuleContexts(ExpressionContext.class);
1440    }
1441
1442    public ExpressionContext expression(int i) {
1443      return getRuleContext(ExpressionContext.class, i);
1444    }
1445
1446    public TerminalNode Plus() {
1447      return getToken(F7Parser.Plus, 0);
1448    }
1449
1450    public TerminalNode Minus() {
1451      return getToken(F7Parser.Minus, 0);
1452    }
1453
1454    @Override
1455    public void enterRule(ParseTreeListener listener) {
1456      if (listener instanceof F7Listener) ((F7Listener) listener).enterAdditiveExpression(this);
1457    }
1458
1459    @Override
1460    public void exitRule(ParseTreeListener listener) {
1461      if (listener instanceof F7Listener) ((F7Listener) listener).exitAdditiveExpression(this);
1462    }
1463
1464    @Override
1465    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1466      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitAdditiveExpression(this);
1467      else return visitor.visitChildren(this);
1468    }
1469  }
1470
1471  public static class RelationalExpressionContext extends ExpressionContext {
1472    public ExpressionContext left;
1473    public ComparisonOperatorContext op;
1474    public ExpressionContext right;
1475
1476    public RelationalExpressionContext(ExpressionContext ctx) {
1477      copyFrom(ctx);
1478    }
1479
1480    public List<ExpressionContext> expression() {
1481      return getRuleContexts(ExpressionContext.class);
1482    }
1483
1484    public ExpressionContext expression(int i) {
1485      return getRuleContext(ExpressionContext.class, i);
1486    }
1487
1488    public ComparisonOperatorContext comparisonOperator() {
1489      return getRuleContext(ComparisonOperatorContext.class, 0);
1490    }
1491
1492    @Override
1493    public void enterRule(ParseTreeListener listener) {
1494      if (listener instanceof F7Listener) ((F7Listener) listener).enterRelationalExpression(this);
1495    }
1496
1497    @Override
1498    public void exitRule(ParseTreeListener listener) {
1499      if (listener instanceof F7Listener) ((F7Listener) listener).exitRelationalExpression(this);
1500    }
1501
1502    @Override
1503    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1504      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitRelationalExpression(this);
1505      else return visitor.visitChildren(this);
1506    }
1507  }
1508
1509  public static class RangeExpressionContext extends ExpressionContext {
1510    public Token separator;
1511
1512    public RangeExpressionContext(ExpressionContext ctx) {
1513      copyFrom(ctx);
1514    }
1515
1516    public List<AtomContext> atom() {
1517      return getRuleContexts(AtomContext.class);
1518    }
1519
1520    public AtomContext atom(int i) {
1521      return getRuleContext(AtomContext.class, i);
1522    }
1523
1524    public List<TerminalNode> Colon() {
1525      return getTokens(F7Parser.Colon);
1526    }
1527
1528    public TerminalNode Colon(int i) {
1529      return getToken(F7Parser.Colon, i);
1530    }
1531
1532    @Override
1533    public void enterRule(ParseTreeListener listener) {
1534      if (listener instanceof F7Listener) ((F7Listener) listener).enterRangeExpression(this);
1535    }
1536
1537    @Override
1538    public void exitRule(ParseTreeListener listener) {
1539      if (listener instanceof F7Listener) ((F7Listener) listener).exitRangeExpression(this);
1540    }
1541
1542    @Override
1543    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1544      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitRangeExpression(this);
1545      else return visitor.visitChildren(this);
1546    }
1547  }
1548
1549  public static class MultiplicationExpressionContext extends ExpressionContext {
1550    public ExpressionContext left;
1551    public Token op;
1552    public ExpressionContext right;
1553
1554    public MultiplicationExpressionContext(ExpressionContext ctx) {
1555      copyFrom(ctx);
1556    }
1557
1558    public List<ExpressionContext> expression() {
1559      return getRuleContexts(ExpressionContext.class);
1560    }
1561
1562    public ExpressionContext expression(int i) {
1563      return getRuleContext(ExpressionContext.class, i);
1564    }
1565
1566    public TerminalNode Multiply() {
1567      return getToken(F7Parser.Multiply, 0);
1568    }
1569
1570    public TerminalNode Divide() {
1571      return getToken(F7Parser.Divide, 0);
1572    }
1573
1574    @Override
1575    public void enterRule(ParseTreeListener listener) {
1576      if (listener instanceof F7Listener) ((F7Listener) listener).enterMultiplicationExpression(this);
1577    }
1578
1579    @Override
1580    public void exitRule(ParseTreeListener listener) {
1581      if (listener instanceof F7Listener) ((F7Listener) listener).exitMultiplicationExpression(this);
1582    }
1583
1584    @Override
1585    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1586      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitMultiplicationExpression(this);
1587      else return visitor.visitChildren(this);
1588    }
1589  }
1590
1591  public static class ConcatExpressionContext extends ExpressionContext {
1592    public ExpressionContext left;
1593    public Token op;
1594    public ExpressionContext right;
1595
1596    public ConcatExpressionContext(ExpressionContext ctx) {
1597      copyFrom(ctx);
1598    }
1599
1600    public List<ExpressionContext> expression() {
1601      return getRuleContexts(ExpressionContext.class);
1602    }
1603
1604    public ExpressionContext expression(int i) {
1605      return getRuleContext(ExpressionContext.class, i);
1606    }
1607
1608    public TerminalNode Ampersand() {
1609      return getToken(F7Parser.Ampersand, 0);
1610    }
1611
1612    @Override
1613    public void enterRule(ParseTreeListener listener) {
1614      if (listener instanceof F7Listener) ((F7Listener) listener).enterConcatExpression(this);
1615    }
1616
1617    @Override
1618    public void exitRule(ParseTreeListener listener) {
1619      if (listener instanceof F7Listener) ((F7Listener) listener).exitConcatExpression(this);
1620    }
1621
1622    @Override
1623    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1624      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitConcatExpression(this);
1625      else return visitor.visitChildren(this);
1626    }
1627  }
1628
1629  public static class AtomContext extends ParserRuleContext {
1630    public AtomContext(ParserRuleContext parent, int invokingState) {
1631      super(parent, invokingState);
1632    }
1633
1634    public AtomContext() {
1635    }
1636
1637    @Override public int getRuleIndex() {
1638      return RULE_atom;
1639    }
1640
1641    public void copyFrom(AtomContext ctx) {
1642      super.copyFrom(ctx);
1643    }
1644  }
1645
1646  public static class NamedAtomContext extends AtomContext {
1647    public NamedAtomContext(AtomContext ctx) {
1648      copyFrom(ctx);
1649    }
1650
1651    public IdentifierContext identifier() {
1652      return getRuleContext(IdentifierContext.class, 0);
1653    }
1654
1655    @Override
1656    public void enterRule(ParseTreeListener listener) {
1657      if (listener instanceof F7Listener) ((F7Listener) listener).enterNamedAtom(this);
1658    }
1659
1660    @Override
1661    public void exitRule(ParseTreeListener listener) {
1662      if (listener instanceof F7Listener) ((F7Listener) listener).exitNamedAtom(this);
1663    }
1664
1665    @Override
1666    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1667      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitNamedAtom(this);
1668      else return visitor.visitChildren(this);
1669    }
1670  }
1671
1672  public static class ErrorAtomContext extends AtomContext {
1673    public ErrorAtomContext(AtomContext ctx) {
1674      copyFrom(ctx);
1675    }
1676
1677    public TerminalNode Error() {
1678      return getToken(F7Parser.Error, 0);
1679    }
1680
1681    @Override
1682    public void enterRule(ParseTreeListener listener) {
1683      if (listener instanceof F7Listener) ((F7Listener) listener).enterErrorAtom(this);
1684    }
1685
1686    @Override
1687    public void exitRule(ParseTreeListener listener) {
1688      if (listener instanceof F7Listener) ((F7Listener) listener).exitErrorAtom(this);
1689    }
1690
1691    @Override
1692    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1693      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitErrorAtom(this);
1694      else return visitor.visitChildren(this);
1695    }
1696  }
1697
1698  public static class ListAtomContext extends AtomContext {
1699    public Token separator;
1700
1701    public ListAtomContext(AtomContext ctx) {
1702      copyFrom(ctx);
1703    }
1704
1705    public TerminalNode LeftBrace() {
1706      return getToken(F7Parser.LeftBrace, 0);
1707    }
1708
1709    public TerminalNode RightBrace() {
1710      return getToken(F7Parser.RightBrace, 0);
1711    }
1712
1713    public List<ExpressionContext> expression() {
1714      return getRuleContexts(ExpressionContext.class);
1715    }
1716
1717    public ExpressionContext expression(int i) {
1718      return getRuleContext(ExpressionContext.class, i);
1719    }
1720
1721    public List<TerminalNode> Comma() {
1722      return getTokens(F7Parser.Comma);
1723    }
1724
1725    public TerminalNode Comma(int i) {
1726      return getToken(F7Parser.Comma, i);
1727    }
1728
1729    public List<TerminalNode> SemiColon() {
1730      return getTokens(F7Parser.SemiColon);
1731    }
1732
1733    public TerminalNode SemiColon(int i) {
1734      return getToken(F7Parser.SemiColon, i);
1735    }
1736
1737    @Override
1738    public void enterRule(ParseTreeListener listener) {
1739      if (listener instanceof F7Listener) ((F7Listener) listener).enterListAtom(this);
1740    }
1741
1742    @Override
1743    public void exitRule(ParseTreeListener listener) {
1744      if (listener instanceof F7Listener) ((F7Listener) listener).exitListAtom(this);
1745    }
1746
1747    @Override
1748    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1749      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitListAtom(this);
1750      else return visitor.visitChildren(this);
1751    }
1752  }
1753
1754  public static class ParentheticalAtomContext extends AtomContext {
1755    public ParentheticalAtomContext(AtomContext ctx) {
1756      copyFrom(ctx);
1757    }
1758
1759    public TerminalNode LeftParen() {
1760      return getToken(F7Parser.LeftParen, 0);
1761    }
1762
1763    public ExpressionContext expression() {
1764      return getRuleContext(ExpressionContext.class, 0);
1765    }
1766
1767    public TerminalNode RightParen() {
1768      return getToken(F7Parser.RightParen, 0);
1769    }
1770
1771    @Override
1772    public void enterRule(ParseTreeListener listener) {
1773      if (listener instanceof F7Listener) ((F7Listener) listener).enterParentheticalAtom(this);
1774    }
1775
1776    @Override
1777    public void exitRule(ParseTreeListener listener) {
1778      if (listener instanceof F7Listener) ((F7Listener) listener).exitParentheticalAtom(this);
1779    }
1780
1781    @Override
1782    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1783      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitParentheticalAtom(this);
1784      else return visitor.visitChildren(this);
1785    }
1786  }
1787
1788  public static class CellAtomContext extends AtomContext {
1789    public CellAtomContext(AtomContext ctx) {
1790      copyFrom(ctx);
1791    }
1792
1793    public RangeContext range() {
1794      return getRuleContext(RangeContext.class, 0);
1795    }
1796
1797    @Override
1798    public void enterRule(ParseTreeListener listener) {
1799      if (listener instanceof F7Listener) ((F7Listener) listener).enterCellAtom(this);
1800    }
1801
1802    @Override
1803    public void exitRule(ParseTreeListener listener) {
1804      if (listener instanceof F7Listener) ((F7Listener) listener).exitCellAtom(this);
1805    }
1806
1807    @Override
1808    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1809      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitCellAtom(this);
1810      else return visitor.visitChildren(this);
1811    }
1812  }
1813
1814  public static class StringAtomContext extends AtomContext {
1815    public StringAtomContext(AtomContext ctx) {
1816      copyFrom(ctx);
1817    }
1818
1819    public TerminalNode String() {
1820      return getToken(F7Parser.String, 0);
1821    }
1822
1823    @Override
1824    public void enterRule(ParseTreeListener listener) {
1825      if (listener instanceof F7Listener) ((F7Listener) listener).enterStringAtom(this);
1826    }
1827
1828    @Override
1829    public void exitRule(ParseTreeListener listener) {
1830      if (listener instanceof F7Listener) ((F7Listener) listener).exitStringAtom(this);
1831    }
1832
1833    @Override
1834    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1835      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitStringAtom(this);
1836      else return visitor.visitChildren(this);
1837    }
1838  }
1839
1840  public static class FormulaAtomContext extends AtomContext {
1841    public IdentifierContext name;
1842
1843    public FormulaAtomContext(AtomContext ctx) {
1844      copyFrom(ctx);
1845    }
1846
1847    public TerminalNode LeftParen() {
1848      return getToken(F7Parser.LeftParen, 0);
1849    }
1850
1851    public ArgumentsContext arguments() {
1852      return getRuleContext(ArgumentsContext.class, 0);
1853    }
1854
1855    public TerminalNode RightParen() {
1856      return getToken(F7Parser.RightParen, 0);
1857    }
1858
1859    public IdentifierContext identifier() {
1860      return getRuleContext(IdentifierContext.class, 0);
1861    }
1862
1863    @Override
1864    public void enterRule(ParseTreeListener listener) {
1865      if (listener instanceof F7Listener) ((F7Listener) listener).enterFormulaAtom(this);
1866    }
1867
1868    @Override
1869    public void exitRule(ParseTreeListener listener) {
1870      if (listener instanceof F7Listener) ((F7Listener) listener).exitFormulaAtom(this);
1871    }
1872
1873    @Override
1874    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1875      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitFormulaAtom(this);
1876      else return visitor.visitChildren(this);
1877    }
1878  }
1879
1880  public static class NumberAtomContext extends AtomContext {
1881    public NumberAtomContext(AtomContext ctx) {
1882      copyFrom(ctx);
1883    }
1884
1885    public TerminalNode Int() {
1886      return getToken(F7Parser.Int, 0);
1887    }
1888
1889    public TerminalNode Number() {
1890      return getToken(F7Parser.Number, 0);
1891    }
1892
1893    @Override
1894    public void enterRule(ParseTreeListener listener) {
1895      if (listener instanceof F7Listener) ((F7Listener) listener).enterNumberAtom(this);
1896    }
1897
1898    @Override
1899    public void exitRule(ParseTreeListener listener) {
1900      if (listener instanceof F7Listener) ((F7Listener) listener).exitNumberAtom(this);
1901    }
1902
1903    @Override
1904    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1905      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitNumberAtom(this);
1906      else return visitor.visitChildren(this);
1907    }
1908  }
1909
1910  public static class RangeContext extends ParserRuleContext {
1911    public RangeContext(ParserRuleContext parent, int invokingState) {
1912      super(parent, invokingState);
1913    }
1914
1915    public RangeContext() {
1916    }
1917
1918    @Override public int getRuleIndex() {
1919      return RULE_range;
1920    }
1921
1922    public void copyFrom(RangeContext ctx) {
1923      super.copyFrom(ctx);
1924    }
1925  }
1926
1927  public static class ColumnWiseWithRowOffsetFirstBiRangeContext extends RangeContext {
1928    public IdentifierContext grid;
1929    public Token absoFirstColumn;
1930    public Token firstColumn;
1931    public Token absoFirstRow;
1932    public Token firstRow;
1933    public Token absoLastColumn;
1934    public Token lastColumn;
1935
1936    public ColumnWiseWithRowOffsetFirstBiRangeContext(RangeContext ctx) {
1937      copyFrom(ctx);
1938    }
1939
1940    public TerminalNode Colon() {
1941      return getToken(F7Parser.Colon, 0);
1942    }
1943
1944    public List<TerminalNode> NCharacters() {
1945      return getTokens(F7Parser.NCharacters);
1946    }
1947
1948    public TerminalNode NCharacters(int i) {
1949      return getToken(F7Parser.NCharacters, i);
1950    }
1951
1952    public TerminalNode Int() {
1953      return getToken(F7Parser.Int, 0);
1954    }
1955
1956    public TerminalNode Bang() {
1957      return getToken(F7Parser.Bang, 0);
1958    }
1959
1960    public IdentifierContext identifier() {
1961      return getRuleContext(IdentifierContext.class, 0);
1962    }
1963
1964    public List<TerminalNode> Dollar() {
1965      return getTokens(F7Parser.Dollar);
1966    }
1967
1968    public TerminalNode Dollar(int i) {
1969      return getToken(F7Parser.Dollar, i);
1970    }
1971
1972    @Override
1973    public void enterRule(ParseTreeListener listener) {
1974      if (listener instanceof F7Listener) ((F7Listener) listener).enterColumnWiseWithRowOffsetFirstBiRange(this);
1975    }
1976
1977    @Override
1978    public void exitRule(ParseTreeListener listener) {
1979      if (listener instanceof F7Listener) ((F7Listener) listener).exitColumnWiseWithRowOffsetFirstBiRange(this);
1980    }
1981
1982    @Override
1983    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
1984      if (visitor instanceof F7Visitor)
1985        return ((F7Visitor<? extends T>) visitor).visitColumnWiseWithRowOffsetFirstBiRange(this);
1986      else return visitor.visitChildren(this);
1987    }
1988  }
1989
1990  public static class ColumnWiseWithRowOffsetLastBiRangeContext extends RangeContext {
1991    public IdentifierContext grid;
1992    public Token absoFirstColumn;
1993    public Token firstColumn;
1994    public Token absoLastColumn;
1995    public Token lastColumn;
1996    public Token absoLastRow;
1997    public Token lastRow;
1998
1999    public ColumnWiseWithRowOffsetLastBiRangeContext(RangeContext ctx) {
2000      copyFrom(ctx);
2001    }
2002
2003    public TerminalNode Colon() {
2004      return getToken(F7Parser.Colon, 0);
2005    }
2006
2007    public List<TerminalNode> NCharacters() {
2008      return getTokens(F7Parser.NCharacters);
2009    }
2010
2011    public TerminalNode NCharacters(int i) {
2012      return getToken(F7Parser.NCharacters, i);
2013    }
2014
2015    public TerminalNode Int() {
2016      return getToken(F7Parser.Int, 0);
2017    }
2018
2019    public TerminalNode Bang() {
2020      return getToken(F7Parser.Bang, 0);
2021    }
2022
2023    public IdentifierContext identifier() {
2024      return getRuleContext(IdentifierContext.class, 0);
2025    }
2026
2027    public List<TerminalNode> Dollar() {
2028      return getTokens(F7Parser.Dollar);
2029    }
2030
2031    public TerminalNode Dollar(int i) {
2032      return getToken(F7Parser.Dollar, i);
2033    }
2034
2035    @Override
2036    public void enterRule(ParseTreeListener listener) {
2037      if (listener instanceof F7Listener) ((F7Listener) listener).enterColumnWiseWithRowOffsetLastBiRange(this);
2038    }
2039
2040    @Override
2041    public void exitRule(ParseTreeListener listener) {
2042      if (listener instanceof F7Listener) ((F7Listener) listener).exitColumnWiseWithRowOffsetLastBiRange(this);
2043    }
2044
2045    @Override
2046    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2047      if (visitor instanceof F7Visitor)
2048        return ((F7Visitor<? extends T>) visitor).visitColumnWiseWithRowOffsetLastBiRange(this);
2049      else return visitor.visitChildren(this);
2050    }
2051  }
2052
2053  public static class RowWiseBiRangeContext extends RangeContext {
2054    public IdentifierContext grid;
2055    public Token absoFirstRow;
2056    public Token firstRow;
2057    public Token absoLastRow;
2058    public Token lastRow;
2059
2060    public RowWiseBiRangeContext(RangeContext ctx) {
2061      copyFrom(ctx);
2062    }
2063
2064    public TerminalNode Colon() {
2065      return getToken(F7Parser.Colon, 0);
2066    }
2067
2068    public List<TerminalNode> Int() {
2069      return getTokens(F7Parser.Int);
2070    }
2071
2072    public TerminalNode Int(int i) {
2073      return getToken(F7Parser.Int, i);
2074    }
2075
2076    public TerminalNode Bang() {
2077      return getToken(F7Parser.Bang, 0);
2078    }
2079
2080    public IdentifierContext identifier() {
2081      return getRuleContext(IdentifierContext.class, 0);
2082    }
2083
2084    public List<TerminalNode> Dollar() {
2085      return getTokens(F7Parser.Dollar);
2086    }
2087
2088    public TerminalNode Dollar(int i) {
2089      return getToken(F7Parser.Dollar, i);
2090    }
2091
2092    @Override
2093    public void enterRule(ParseTreeListener listener) {
2094      if (listener instanceof F7Listener) ((F7Listener) listener).enterRowWiseBiRange(this);
2095    }
2096
2097    @Override
2098    public void exitRule(ParseTreeListener listener) {
2099      if (listener instanceof F7Listener) ((F7Listener) listener).exitRowWiseBiRange(this);
2100    }
2101
2102    @Override
2103    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2104      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitRowWiseBiRange(this);
2105      else return visitor.visitChildren(this);
2106    }
2107  }
2108
2109  public static class BiRangeContext extends RangeContext {
2110    public IdentifierContext grid;
2111    public Token absoFirstColumn;
2112    public Token firstColumn;
2113    public Token absoRow;
2114    public Token firstRow;
2115    public Token absoLastColumn;
2116    public Token lastColumn;
2117    public Token absoLastRow;
2118    public Token lastRow;
2119
2120    public BiRangeContext(RangeContext ctx) {
2121      copyFrom(ctx);
2122    }
2123
2124    public TerminalNode Colon() {
2125      return getToken(F7Parser.Colon, 0);
2126    }
2127
2128    public List<TerminalNode> NCharacters() {
2129      return getTokens(F7Parser.NCharacters);
2130    }
2131
2132    public TerminalNode NCharacters(int i) {
2133      return getToken(F7Parser.NCharacters, i);
2134    }
2135
2136    public List<TerminalNode> Int() {
2137      return getTokens(F7Parser.Int);
2138    }
2139
2140    public TerminalNode Int(int i) {
2141      return getToken(F7Parser.Int, i);
2142    }
2143
2144    public TerminalNode Bang() {
2145      return getToken(F7Parser.Bang, 0);
2146    }
2147
2148    public IdentifierContext identifier() {
2149      return getRuleContext(IdentifierContext.class, 0);
2150    }
2151
2152    public List<TerminalNode> Dollar() {
2153      return getTokens(F7Parser.Dollar);
2154    }
2155
2156    public TerminalNode Dollar(int i) {
2157      return getToken(F7Parser.Dollar, i);
2158    }
2159
2160    @Override
2161    public void enterRule(ParseTreeListener listener) {
2162      if (listener instanceof F7Listener) ((F7Listener) listener).enterBiRange(this);
2163    }
2164
2165    @Override
2166    public void exitRule(ParseTreeListener listener) {
2167      if (listener instanceof F7Listener) ((F7Listener) listener).exitBiRange(this);
2168    }
2169
2170    @Override
2171    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2172      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitBiRange(this);
2173      else return visitor.visitChildren(this);
2174    }
2175  }
2176
2177  public static class UniRangeContext extends RangeContext {
2178    public IdentifierContext grid;
2179    public Token absoFirstColumn;
2180    public Token firstColumn;
2181    public Token absoFirstRow;
2182    public Token firstRow;
2183
2184    public UniRangeContext(RangeContext ctx) {
2185      copyFrom(ctx);
2186    }
2187
2188    public TerminalNode NCharacters() {
2189      return getToken(F7Parser.NCharacters, 0);
2190    }
2191
2192    public TerminalNode Int() {
2193      return getToken(F7Parser.Int, 0);
2194    }
2195
2196    public TerminalNode Bang() {
2197      return getToken(F7Parser.Bang, 0);
2198    }
2199
2200    public IdentifierContext identifier() {
2201      return getRuleContext(IdentifierContext.class, 0);
2202    }
2203
2204    public List<TerminalNode> Dollar() {
2205      return getTokens(F7Parser.Dollar);
2206    }
2207
2208    public TerminalNode Dollar(int i) {
2209      return getToken(F7Parser.Dollar, i);
2210    }
2211
2212    @Override
2213    public void enterRule(ParseTreeListener listener) {
2214      if (listener instanceof F7Listener) ((F7Listener) listener).enterUniRange(this);
2215    }
2216
2217    @Override
2218    public void exitRule(ParseTreeListener listener) {
2219      if (listener instanceof F7Listener) ((F7Listener) listener).exitUniRange(this);
2220    }
2221
2222    @Override
2223    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2224      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitUniRange(this);
2225      else return visitor.visitChildren(this);
2226    }
2227  }
2228
2229  public static class ColumnWiseBiRangeContext extends RangeContext {
2230    public IdentifierContext grid;
2231    public Token absoFirstColumn;
2232    public Token firstColumn;
2233    public Token absoLastColumn;
2234    public Token lastColumn;
2235
2236    public ColumnWiseBiRangeContext(RangeContext ctx) {
2237      copyFrom(ctx);
2238    }
2239
2240    public TerminalNode Colon() {
2241      return getToken(F7Parser.Colon, 0);
2242    }
2243
2244    public List<TerminalNode> NCharacters() {
2245      return getTokens(F7Parser.NCharacters);
2246    }
2247
2248    public TerminalNode NCharacters(int i) {
2249      return getToken(F7Parser.NCharacters, i);
2250    }
2251
2252    public TerminalNode Bang() {
2253      return getToken(F7Parser.Bang, 0);
2254    }
2255
2256    public IdentifierContext identifier() {
2257      return getRuleContext(IdentifierContext.class, 0);
2258    }
2259
2260    public List<TerminalNode> Dollar() {
2261      return getTokens(F7Parser.Dollar);
2262    }
2263
2264    public TerminalNode Dollar(int i) {
2265      return getToken(F7Parser.Dollar, i);
2266    }
2267
2268    @Override
2269    public void enterRule(ParseTreeListener listener) {
2270      if (listener instanceof F7Listener) ((F7Listener) listener).enterColumnWiseBiRange(this);
2271    }
2272
2273    @Override
2274    public void exitRule(ParseTreeListener listener) {
2275      if (listener instanceof F7Listener) ((F7Listener) listener).exitColumnWiseBiRange(this);
2276    }
2277
2278    @Override
2279    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2280      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitColumnWiseBiRange(this);
2281      else return visitor.visitChildren(this);
2282    }
2283  }
2284
2285  public static class RowWiseWithColumnOffsetFirstBiRangeContext extends RangeContext {
2286    public IdentifierContext grid;
2287    public Token absoFirstColumn;
2288    public Token firstColumn;
2289    public Token absoFirstRow;
2290    public Token firstRow;
2291    public Token absoLastRow;
2292    public Token lastRow;
2293
2294    public RowWiseWithColumnOffsetFirstBiRangeContext(RangeContext ctx) {
2295      copyFrom(ctx);
2296    }
2297
2298    public TerminalNode Colon() {
2299      return getToken(F7Parser.Colon, 0);
2300    }
2301
2302    public TerminalNode NCharacters() {
2303      return getToken(F7Parser.NCharacters, 0);
2304    }
2305
2306    public List<TerminalNode> Int() {
2307      return getTokens(F7Parser.Int);
2308    }
2309
2310    public TerminalNode Int(int i) {
2311      return getToken(F7Parser.Int, i);
2312    }
2313
2314    public TerminalNode Bang() {
2315      return getToken(F7Parser.Bang, 0);
2316    }
2317
2318    public IdentifierContext identifier() {
2319      return getRuleContext(IdentifierContext.class, 0);
2320    }
2321
2322    public List<TerminalNode> Dollar() {
2323      return getTokens(F7Parser.Dollar);
2324    }
2325
2326    public TerminalNode Dollar(int i) {
2327      return getToken(F7Parser.Dollar, i);
2328    }
2329
2330    @Override
2331    public void enterRule(ParseTreeListener listener) {
2332      if (listener instanceof F7Listener) ((F7Listener) listener).enterRowWiseWithColumnOffsetFirstBiRange(this);
2333    }
2334
2335    @Override
2336    public void exitRule(ParseTreeListener listener) {
2337      if (listener instanceof F7Listener) ((F7Listener) listener).exitRowWiseWithColumnOffsetFirstBiRange(this);
2338    }
2339
2340    @Override
2341    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2342      if (visitor instanceof F7Visitor)
2343        return ((F7Visitor<? extends T>) visitor).visitRowWiseWithColumnOffsetFirstBiRange(this);
2344      else return visitor.visitChildren(this);
2345    }
2346  }
2347
2348  public static class RowWiseWithColumnOffsetLastBiRangeContext extends RangeContext {
2349    public IdentifierContext grid;
2350    public Token absoFirstRow;
2351    public Token firstRow;
2352    public Token absLastColumn;
2353    public Token lastColumn;
2354    public Token absoLastRow;
2355    public Token lastRow;
2356
2357    public RowWiseWithColumnOffsetLastBiRangeContext(RangeContext ctx) {
2358      copyFrom(ctx);
2359    }
2360
2361    public TerminalNode Colon() {
2362      return getToken(F7Parser.Colon, 0);
2363    }
2364
2365    public List<TerminalNode> Int() {
2366      return getTokens(F7Parser.Int);
2367    }
2368
2369    public TerminalNode Int(int i) {
2370      return getToken(F7Parser.Int, i);
2371    }
2372
2373    public TerminalNode NCharacters() {
2374      return getToken(F7Parser.NCharacters, 0);
2375    }
2376
2377    public TerminalNode Bang() {
2378      return getToken(F7Parser.Bang, 0);
2379    }
2380
2381    public IdentifierContext identifier() {
2382      return getRuleContext(IdentifierContext.class, 0);
2383    }
2384
2385    public List<TerminalNode> Dollar() {
2386      return getTokens(F7Parser.Dollar);
2387    }
2388
2389    public TerminalNode Dollar(int i) {
2390      return getToken(F7Parser.Dollar, i);
2391    }
2392
2393    @Override
2394    public void enterRule(ParseTreeListener listener) {
2395      if (listener instanceof F7Listener) ((F7Listener) listener).enterRowWiseWithColumnOffsetLastBiRange(this);
2396    }
2397
2398    @Override
2399    public void exitRule(ParseTreeListener listener) {
2400      if (listener instanceof F7Listener) ((F7Listener) listener).exitRowWiseWithColumnOffsetLastBiRange(this);
2401    }
2402
2403    @Override
2404    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2405      if (visitor instanceof F7Visitor)
2406        return ((F7Visitor<? extends T>) visitor).visitRowWiseWithColumnOffsetLastBiRange(this);
2407      else return visitor.visitChildren(this);
2408    }
2409  }
2410
2411  public static class ArgumentsContext extends ParserRuleContext {
2412    public ArgumentsContext(ParserRuleContext parent, int invokingState) {
2413      super(parent, invokingState);
2414    }
2415
2416    public List<ExpressionContext> expression() {
2417      return getRuleContexts(ExpressionContext.class);
2418    }
2419
2420    public ExpressionContext expression(int i) {
2421      return getRuleContext(ExpressionContext.class, i);
2422    }
2423
2424    public List<TerminalNode> Comma() {
2425      return getTokens(F7Parser.Comma);
2426    }
2427
2428    public TerminalNode Comma(int i) {
2429      return getToken(F7Parser.Comma, i);
2430    }
2431
2432    @Override public int getRuleIndex() {
2433      return RULE_arguments;
2434    }
2435
2436    @Override
2437    public void enterRule(ParseTreeListener listener) {
2438      if (listener instanceof F7Listener) ((F7Listener) listener).enterArguments(this);
2439    }
2440
2441    @Override
2442    public void exitRule(ParseTreeListener listener) {
2443      if (listener instanceof F7Listener) ((F7Listener) listener).exitArguments(this);
2444    }
2445
2446    @Override
2447    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2448      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitArguments(this);
2449      else return visitor.visitChildren(this);
2450    }
2451  }
2452
2453  public static class IdentifierContext extends ParserRuleContext {
2454    public IdentifierContext(ParserRuleContext parent, int invokingState) {
2455      super(parent, invokingState);
2456    }
2457
2458    public List<TerminalNode> NCharacters() {
2459      return getTokens(F7Parser.NCharacters);
2460    }
2461
2462    public TerminalNode NCharacters(int i) {
2463      return getToken(F7Parser.NCharacters, i);
2464    }
2465
2466    public List<TerminalNode> Dot() {
2467      return getTokens(F7Parser.Dot);
2468    }
2469
2470    public TerminalNode Dot(int i) {
2471      return getToken(F7Parser.Dot, i);
2472    }
2473
2474    public List<TerminalNode> Underscore() {
2475      return getTokens(F7Parser.Underscore);
2476    }
2477
2478    public TerminalNode Underscore(int i) {
2479      return getToken(F7Parser.Underscore, i);
2480    }
2481
2482    public List<TerminalNode> Int() {
2483      return getTokens(F7Parser.Int);
2484    }
2485
2486    public TerminalNode Int(int i) {
2487      return getToken(F7Parser.Int, i);
2488    }
2489
2490    @Override public int getRuleIndex() {
2491      return RULE_identifier;
2492    }
2493
2494    @Override
2495    public void enterRule(ParseTreeListener listener) {
2496      if (listener instanceof F7Listener) ((F7Listener) listener).enterIdentifier(this);
2497    }
2498
2499    @Override
2500    public void exitRule(ParseTreeListener listener) {
2501      if (listener instanceof F7Listener) ((F7Listener) listener).exitIdentifier(this);
2502    }
2503
2504    @Override
2505    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2506      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitIdentifier(this);
2507      else return visitor.visitChildren(this);
2508    }
2509  }
2510
2511  public static class ComparisonOperatorContext extends ParserRuleContext {
2512    public ComparisonOperatorContext(ParserRuleContext parent, int invokingState) {
2513      super(parent, invokingState);
2514    }
2515
2516    public TerminalNode LessThanOrEqualTO() {
2517      return getToken(F7Parser.LessThanOrEqualTO, 0);
2518    }
2519
2520    public TerminalNode GreaterThanOrEqualTo() {
2521      return getToken(F7Parser.GreaterThanOrEqualTo, 0);
2522    }
2523
2524    public TerminalNode LessThan() {
2525      return getToken(F7Parser.LessThan, 0);
2526    }
2527
2528    public TerminalNode GreaterThan() {
2529      return getToken(F7Parser.GreaterThan, 0);
2530    }
2531
2532    public TerminalNode Equal() {
2533      return getToken(F7Parser.Equal, 0);
2534    }
2535
2536    public TerminalNode NotEqual() {
2537      return getToken(F7Parser.NotEqual, 0);
2538    }
2539
2540    @Override public int getRuleIndex() {
2541      return RULE_comparisonOperator;
2542    }
2543
2544    @Override
2545    public void enterRule(ParseTreeListener listener) {
2546      if (listener instanceof F7Listener) ((F7Listener) listener).enterComparisonOperator(this);
2547    }
2548
2549    @Override
2550    public void exitRule(ParseTreeListener listener) {
2551      if (listener instanceof F7Listener) ((F7Listener) listener).exitComparisonOperator(this);
2552    }
2553
2554    @Override
2555    public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
2556      if (visitor instanceof F7Visitor) return ((F7Visitor<? extends T>) visitor).visitComparisonOperator(this);
2557      else return visitor.visitChildren(this);
2558    }
2559  }
2560}