// Generated from E:\workspace2\qlProject\src\qlProject\grammar\qlGrammar.g4 by ANTLR 4.0
package qlProject.grammar;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.*;
import org.antlr.v4.runtime.tree.*;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class qlGrammarParser extends Parser {
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
T__3=1, T__2=2, T__1=3, T__0=4, BOOL_TYPE=5, STRING_TYPE=6, INT_TYPE=7,
ADD=8, SUB=9, MUL=10, DIV=11, CONCAT=12, NOT=13, LT=14, GT=15, LEQ=16,
GEQ=17, EQ=18, NEQ=19, AND=20, OR=21, IF=22, ELSE=23, TRUE=24, FALSE=25,
ID=26, INT=27, STRING=28, COMMENT=29, MULTYLINE_COMMENT=30, WS=31;
public static final String[] tokenNames = {
"<INVALID>", "'{'", "')'", "'('", "'}'", "'boolean'", "'string'", "'integer'",
"'+'", "'-'", "'*'", "'/'", "'++'", "'!'", "'<'", "'>'", "'<='", "'>='",
"'=='", "'!='", "'&&'", "'||'", "'if'", "'else'", "'true'", "'false'",
"ID", "INT", "STRING", "COMMENT", "MULTYLINE_COMMENT", "WS"
};
public static final int
RULE_form = 0, RULE_statement = 1, RULE_type = 2, RULE_expr = 3;
public static final String[] ruleNames = {
"form", "statement", "type", "expr"
};
@Override
public String getGrammarFileName() { return "qlGrammar.g4"; }
@Override
public String[] getTokenNames() { return tokenNames; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public ATN getATN() { return _ATN; }
public qlGrammarParser(TokenStream input) {
super(input);
_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
public static class FormContext extends ParserRuleContext {
public List<StatementContext> statement() {
return getRuleContexts(StatementContext.class);
}
public StatementContext statement(int i) {
return getRuleContext(StatementContext.class,i);
}
public FormContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_form; }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitForm(this);
else return visitor.visitChildren(this);
}
}
public final FormContext form() throws RecognitionException {
FormContext _localctx = new FormContext(_ctx, getState());
enterRule(_localctx, 0, RULE_form);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
setState(9);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
setState(8); statement();
}
}
setState(11);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==IF || _la==ID );
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
exitRule();
}
return _localctx;
}
public static class StatementContext extends ParserRuleContext {
public StatementContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_statement; }
public StatementContext() { }
public void copyFrom(StatementContext ctx) {
super.copyFrom(ctx);
}
}
public static class BasicQuestionContext extends StatementContext {
public TerminalNode ID() { return getToken(qlGrammarParser.ID, 0); }
public TypeContext type() {
return getRuleContext(TypeContext.class,0);
}
public TerminalNode STRING() { return getToken(qlGrammarParser.STRING, 0); }
public BasicQuestionContext(StatementContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitBasicQuestion(this);
else return visitor.visitChildren(this);
}
}
public static class ComputedQuestionContext extends StatementContext {
public TerminalNode ID() { return getToken(qlGrammarParser.ID, 0); }
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
}
public TypeContext type() {
return getRuleContext(TypeContext.class,0);
}
public TerminalNode STRING() { return getToken(qlGrammarParser.STRING, 0); }
public ComputedQuestionContext(StatementContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitComputedQuestion(this);
else return visitor.visitChildren(this);
}
}
public static class ConditionalQuestionsListContext extends StatementContext {
public StatementContext statement;
public List<StatementContext> ifPart = new ArrayList<StatementContext>();
public List<StatementContext> elsePart = new ArrayList<StatementContext>();
public List<StatementContext> statement() {
return getRuleContexts(StatementContext.class);
}
public StatementContext statement(int i) {
return getRuleContext(StatementContext.class,i);
}
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
}
public TerminalNode ELSE() { return getToken(qlGrammarParser.ELSE, 0); }
public TerminalNode IF() { return getToken(qlGrammarParser.IF, 0); }
public ConditionalQuestionsListContext(StatementContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitConditionalQuestionsList(this);
else return visitor.visitChildren(this);
}
}
public final StatementContext statement() throws RecognitionException {
StatementContext _localctx = new StatementContext(_ctx, getState());
enterRule(_localctx, 2, RULE_statement);
int _la;
try {
setState(43);
switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
case 1:
_localctx = new BasicQuestionContext(_localctx);
enterOuterAlt(_localctx, 1);
{
setState(13); match(ID);
setState(14); match(STRING);
setState(15); type();
}
break;
case 2:
_localctx = new ComputedQuestionContext(_localctx);
enterOuterAlt(_localctx, 2);
{
setState(16); match(ID);
setState(17); match(STRING);
setState(18); type();
setState(19); match(3);
setState(20); expr(0);
setState(21); match(2);
}
break;
case 3:
_localctx = new ConditionalQuestionsListContext(_localctx);
enterOuterAlt(_localctx, 3);
{
setState(23); match(IF);
setState(24); match(3);
setState(25); expr(0);
setState(26); match(2);
setState(27); match(1);
setState(29);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
setState(28); ((ConditionalQuestionsListContext)_localctx).statement = statement();
((ConditionalQuestionsListContext)_localctx).ifPart.add(((ConditionalQuestionsListContext)_localctx).statement);
}
}
setState(31);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==IF || _la==ID );
setState(39);
_la = _input.LA(1);
if (_la==ELSE) {
{
setState(33); match(ELSE);
setState(35);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
setState(34); ((ConditionalQuestionsListContext)_localctx).statement = statement();
((ConditionalQuestionsListContext)_localctx).elsePart.add(((ConditionalQuestionsListContext)_localctx).statement);
}
}
setState(37);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==IF || _la==ID );
}
}
setState(41); match(4);
}
break;
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
exitRule();
}
return _localctx;
}
public static class TypeContext extends ParserRuleContext {
public TypeContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_type; }
public TypeContext() { }
public void copyFrom(TypeContext ctx) {
super.copyFrom(ctx);
}
}
public static class BoolTypeContext extends TypeContext {
public TerminalNode BOOL_TYPE() { return getToken(qlGrammarParser.BOOL_TYPE, 0); }
public BoolTypeContext(TypeContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitBoolType(this);
else return visitor.visitChildren(this);
}
}
public static class IntTypeContext extends TypeContext {
public TerminalNode INT_TYPE() { return getToken(qlGrammarParser.INT_TYPE, 0); }
public IntTypeContext(TypeContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitIntType(this);
else return visitor.visitChildren(this);
}
}
public static class StrTypeContext extends TypeContext {
public TerminalNode STRING_TYPE() { return getToken(qlGrammarParser.STRING_TYPE, 0); }
public StrTypeContext(TypeContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitStrType(this);
else return visitor.visitChildren(this);
}
}
public final TypeContext type() throws RecognitionException {
TypeContext _localctx = new TypeContext(_ctx, getState());
enterRule(_localctx, 4, RULE_type);
try {
setState(48);
switch (_input.LA(1)) {
case BOOL_TYPE:
_localctx = new BoolTypeContext(_localctx);
enterOuterAlt(_localctx, 1);
{
setState(45); match(BOOL_TYPE);
}
break;
case INT_TYPE:
_localctx = new IntTypeContext(_localctx);
enterOuterAlt(_localctx, 2);
{
setState(46); match(INT_TYPE);
}
break;
case STRING_TYPE:
_localctx = new StrTypeContext(_localctx);
enterOuterAlt(_localctx, 3);
{
setState(47); match(STRING_TYPE);
}
break;
default:
throw new NoViableAltException(this);
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
exitRule();
}
return _localctx;
}
public static class ExprContext extends ParserRuleContext {
public int _p;
public ExprContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); }
public ExprContext(ParserRuleContext parent, int invokingState, int _p) {
super(parent, invokingState);
this._p = _p;
}
@Override public int getRuleIndex() { return RULE_expr; }
public ExprContext() { }
public void copyFrom(ExprContext ctx) {
super.copyFrom(ctx);
this._p = ctx._p;
}
}
public static class GreaterOrEqContext extends ExprContext {
public TerminalNode GEQ() { return getToken(qlGrammarParser.GEQ, 0); }
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public GreaterOrEqContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitGreaterOrEq(this);
else return visitor.visitChildren(this);
}
}
public static class NegateContext extends ExprContext {
public TerminalNode SUB() { return getToken(qlGrammarParser.SUB, 0); }
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
}
public NegateContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitNegate(this);
else return visitor.visitChildren(this);
}
}
public static class OrContext extends ExprContext {
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public TerminalNode OR() { return getToken(qlGrammarParser.OR, 0); }
public OrContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitOr(this);
else return visitor.visitChildren(this);
}
}
public static class EqualContext extends ExprContext {
public TerminalNode EQ() { return getToken(qlGrammarParser.EQ, 0); }
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public EqualContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitEqual(this);
else return visitor.visitChildren(this);
}
}
public static class StringLiteralContext extends ExprContext {
public TerminalNode STRING() { return getToken(qlGrammarParser.STRING, 0); }
public StringLiteralContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitStringLiteral(this);
else return visitor.visitChildren(this);
}
}
public static class ParensContext extends ExprContext {
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
}
public ParensContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitParens(this);
else return visitor.visitChildren(this);
}
}
public static class ConcatenationExpressionContext extends ExprContext {
public TerminalNode CONCAT() { return getToken(qlGrammarParser.CONCAT, 0); }
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public ConcatenationExpressionContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitConcatenationExpression(this);
else return visitor.visitChildren(this);
}
}
public static class UnequalContext extends ExprContext {
public TerminalNode NEQ() { return getToken(qlGrammarParser.NEQ, 0); }
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public UnequalContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitUnequal(this);
else return visitor.visitChildren(this);
}
}
public static class AddSubtractContext extends ExprContext {
public Token op;
public TerminalNode SUB() { return getToken(qlGrammarParser.SUB, 0); }
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public TerminalNode ADD() { return getToken(qlGrammarParser.ADD, 0); }
public AddSubtractContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitAddSubtract(this);
else return visitor.visitChildren(this);
}
}
public static class AndContext extends ExprContext {
public TerminalNode AND() { return getToken(qlGrammarParser.AND, 0); }
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public AndContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitAnd(this);
else return visitor.visitChildren(this);
}
}
public static class NotContext extends ExprContext {
public TerminalNode NOT() { return getToken(qlGrammarParser.NOT, 0); }
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
}
public NotContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitNot(this);
else return visitor.visitChildren(this);
}
}
public static class IdContext extends ExprContext {
public TerminalNode ID() { return getToken(qlGrammarParser.ID, 0); }
public IdContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitId(this);
else return visitor.visitChildren(this);
}
}
public static class LessOrEqContext extends ExprContext {
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public TerminalNode LEQ() { return getToken(qlGrammarParser.LEQ, 0); }
public LessOrEqContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitLessOrEq(this);
else return visitor.visitChildren(this);
}
}
public static class MultiplyDivideContext extends ExprContext {
public Token op;
public TerminalNode DIV() { return getToken(qlGrammarParser.DIV, 0); }
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public TerminalNode MUL() { return getToken(qlGrammarParser.MUL, 0); }
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public MultiplyDivideContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitMultiplyDivide(this);
else return visitor.visitChildren(this);
}
}
public static class LessThanContext extends ExprContext {
public TerminalNode LT() { return getToken(qlGrammarParser.LT, 0); }
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public LessThanContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitLessThan(this);
else return visitor.visitChildren(this);
}
}
public static class BoolLiteralContext extends ExprContext {
public Token bLiteral;
public TerminalNode FALSE() { return getToken(qlGrammarParser.FALSE, 0); }
public TerminalNode TRUE() { return getToken(qlGrammarParser.TRUE, 0); }
public BoolLiteralContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitBoolLiteral(this);
else return visitor.visitChildren(this);
}
}
public static class GreaterThanContext extends ExprContext {
public TerminalNode GT() { return getToken(qlGrammarParser.GT, 0); }
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
public List<ExprContext> expr() {
return getRuleContexts(ExprContext.class);
}
public GreaterThanContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitGreaterThan(this);
else return visitor.visitChildren(this);
}
}
public static class IntLiteralContext extends ExprContext {
public TerminalNode INT() { return getToken(qlGrammarParser.INT, 0); }
public IntLiteralContext(ExprContext ctx) { copyFrom(ctx); }
@Override
public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
if ( visitor instanceof qlGrammarVisitor ) return ((qlGrammarVisitor<? extends T>)visitor).visitIntLiteral(this);
else return visitor.visitChildren(this);
}
}
public final ExprContext expr(int _p) throws RecognitionException {
ParserRuleContext _parentctx = _ctx;
int _parentState = getState();
ExprContext _localctx = new ExprContext(_ctx, _parentState, _p);
ExprContext _prevctx = _localctx;
int _startState = 6;
enterRecursionRule(_localctx, RULE_expr);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
setState(63);
switch (_input.LA(1)) {
case SUB:
{
_localctx = new NegateContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(51); match(SUB);
setState(52); expr(18);
}
break;
case NOT:
{
_localctx = new NotContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(53); match(NOT);
setState(54); expr(15);
}
break;
case INT:
{
_localctx = new IntLiteralContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(55); match(INT);
}
break;
case TRUE:
case FALSE:
{
_localctx = new BoolLiteralContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(56);
((BoolLiteralContext)_localctx).bLiteral = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==TRUE || _la==FALSE) ) {
((BoolLiteralContext)_localctx).bLiteral = (Token)_errHandler.recoverInline(this);
}
consume();
}
break;
case STRING:
{
_localctx = new StringLiteralContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(57); match(STRING);
}
break;
case ID:
{
_localctx = new IdContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(58); match(ID);
}
break;
case 3:
{
_localctx = new ParensContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(59); match(3);
setState(60); expr(0);
setState(61); match(2);
}
break;
default:
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
setState(100);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,8,_ctx);
while ( _alt!=2 && _alt!=-1 ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
setState(98);
switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) {
case 1:
{
_localctx = new MultiplyDivideContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(65);
if (!(17 >= _localctx._p)) throw new FailedPredicateException(this, "17 >= $_p");
setState(66);
((MultiplyDivideContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==MUL || _la==DIV) ) {
((MultiplyDivideContext)_localctx).op = (Token)_errHandler.recoverInline(this);
}
consume();
setState(67); expr(18);
}
break;
case 2:
{
_localctx = new AddSubtractContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(68);
if (!(16 >= _localctx._p)) throw new FailedPredicateException(this, "16 >= $_p");
setState(69);
((AddSubtractContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==ADD || _la==SUB) ) {
((AddSubtractContext)_localctx).op = (Token)_errHandler.recoverInline(this);
}
consume();
setState(70); expr(17);
}
break;
case 3:
{
_localctx = new AndContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(71);
if (!(14 >= _localctx._p)) throw new FailedPredicateException(this, "14 >= $_p");
setState(72); match(AND);
setState(73); expr(15);
}
break;
case 4:
{
_localctx = new OrContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(74);
if (!(13 >= _localctx._p)) throw new FailedPredicateException(this, "13 >= $_p");
setState(75); match(OR);
setState(76); expr(14);
}
break;
case 5:
{
_localctx = new GreaterThanContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(77);
if (!(12 >= _localctx._p)) throw new FailedPredicateException(this, "12 >= $_p");
setState(78); match(GT);
setState(79); expr(13);
}
break;
case 6:
{
_localctx = new GreaterOrEqContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(80);
if (!(11 >= _localctx._p)) throw new FailedPredicateException(this, "11 >= $_p");
setState(81); match(GEQ);
setState(82); expr(12);
}
break;
case 7:
{
_localctx = new LessThanContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(83);
if (!(10 >= _localctx._p)) throw new FailedPredicateException(this, "10 >= $_p");
setState(84); match(LT);
setState(85); expr(11);
}
break;
case 8:
{
_localctx = new LessOrEqContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(86);
if (!(9 >= _localctx._p)) throw new FailedPredicateException(this, "9 >= $_p");
setState(87); match(LEQ);
setState(88); expr(10);
}
break;
case 9:
{
_localctx = new EqualContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(89);
if (!(8 >= _localctx._p)) throw new FailedPredicateException(this, "8 >= $_p");
setState(90); match(EQ);
setState(91); expr(9);
}
break;
case 10:
{
_localctx = new UnequalContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(92);
if (!(7 >= _localctx._p)) throw new FailedPredicateException(this, "7 >= $_p");
setState(93); match(NEQ);
setState(94); expr(8);
}
break;
case 11:
{
_localctx = new ConcatenationExpressionContext(new ExprContext(_parentctx, _parentState, _p));
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(95);
if (!(6 >= _localctx._p)) throw new FailedPredicateException(this, "6 >= $_p");
setState(96); match(CONCAT);
setState(97); expr(7);
}
break;
}
}
}
setState(102);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,8,_ctx);
}
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
unrollRecursionContexts(_parentctx);
}
return _localctx;
}
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
case 3: return expr_sempred((ExprContext)_localctx, predIndex);
}
return true;
}
private boolean expr_sempred(ExprContext _localctx, int predIndex) {
switch (predIndex) {
case 0: return 17 >= _localctx._p;
case 1: return 16 >= _localctx._p;
case 2: return 14 >= _localctx._p;
case 3: return 13 >= _localctx._p;
case 4: return 12 >= _localctx._p;
case 5: return 11 >= _localctx._p;
case 6: return 10 >= _localctx._p;
case 7: return 9 >= _localctx._p;
case 8: return 8 >= _localctx._p;
case 9: return 7 >= _localctx._p;
case 10: return 6 >= _localctx._p;
}
return true;
}
public static final String _serializedATN =
"\2\3!j\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\3\2\6\2\f\n\2\r\2\16\2\r\3\3\3"+
"\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\6\3 \n\3\r"+
"\3\16\3!\3\3\3\3\6\3&\n\3\r\3\16\3\'\5\3*\n\3\3\3\3\3\5\3.\n\3\3\4\3\4"+
"\3\4\5\4\63\n\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5"+
"\5B\n\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3"+
"\5\3\5\3\5\3\5\3\5\3\5\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\5e\n\5\f\5\16\5h\13\5\3\5\2\6\2\4\6\b\2\5\3\32\33\3\f\r\3\n\13~\2\13"+
"\3\2\2\2\4-\3\2\2\2\6\62\3\2\2\2\bA\3\2\2\2\n\f\5\4\3\2\13\n\3\2\2\2\f"+
"\r\3\2\2\2\r\13\3\2\2\2\r\16\3\2\2\2\16\3\3\2\2\2\17\20\7\34\2\2\20\21"+
"\7\36\2\2\21.\5\6\4\2\22\23\7\34\2\2\23\24\7\36\2\2\24\25\5\6\4\2\25\26"+
"\7\5\2\2\26\27\5\b\5\2\27\30\7\4\2\2\30.\3\2\2\2\31\32\7\30\2\2\32\33"+
"\7\5\2\2\33\34\5\b\5\2\34\35\7\4\2\2\35\37\7\3\2\2\36 \5\4\3\2\37\36\3"+
"\2\2\2 !\3\2\2\2!\37\3\2\2\2!\"\3\2\2\2\")\3\2\2\2#%\7\31\2\2$&\5\4\3"+
"\2%$\3\2\2\2&\'\3\2\2\2\'%\3\2\2\2\'(\3\2\2\2(*\3\2\2\2)#\3\2\2\2)*\3"+
"\2\2\2*+\3\2\2\2+,\7\6\2\2,.\3\2\2\2-\17\3\2\2\2-\22\3\2\2\2-\31\3\2\2"+
"\2.\5\3\2\2\2/\63\7\7\2\2\60\63\7\t\2\2\61\63\7\b\2\2\62/\3\2\2\2\62\60"+
"\3\2\2\2\62\61\3\2\2\2\63\7\3\2\2\2\64\65\b\5\1\2\65\66\7\13\2\2\66B\5"+
"\b\5\2\678\7\17\2\28B\5\b\5\29B\7\35\2\2:B\t\2\2\2;B\7\36\2\2<B\7\34\2"+
"\2=>\7\5\2\2>?\5\b\5\2?@\7\4\2\2@B\3\2\2\2A\64\3\2\2\2A\67\3\2\2\2A9\3"+
"\2\2\2A:\3\2\2\2A;\3\2\2\2A<\3\2\2\2A=\3\2\2\2Bf\3\2\2\2CD\6\5\2\3DE\t"+
"\3\2\2Ee\5\b\5\2FG\6\5\3\3GH\t\4\2\2He\5\b\5\2IJ\6\5\4\3JK\7\26\2\2Ke"+
"\5\b\5\2LM\6\5\5\3MN\7\27\2\2Ne\5\b\5\2OP\6\5\6\3PQ\7\21\2\2Qe\5\b\5\2"+
"RS\6\5\7\3ST\7\23\2\2Te\5\b\5\2UV\6\5\b\3VW\7\20\2\2We\5\b\5\2XY\6\5\t"+
"\3YZ\7\22\2\2Ze\5\b\5\2[\\\6\5\n\3\\]\7\24\2\2]e\5\b\5\2^_\6\5\13\3_`"+
"\7\25\2\2`e\5\b\5\2ab\6\5\f\3bc\7\16\2\2ce\5\b\5\2dC\3\2\2\2dF\3\2\2\2"+
"dI\3\2\2\2dL\3\2\2\2dO\3\2\2\2dR\3\2\2\2dU\3\2\2\2dX\3\2\2\2d[\3\2\2\2"+
"d^\3\2\2\2da\3\2\2\2eh\3\2\2\2fd\3\2\2\2fg\3\2\2\2g\t\3\2\2\2hf\3\2\2"+
"\2\13\r!\')-\62Adf";
public static final ATN _ATN =
ATNSimulator.deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
}
}