// Generated from grammar/Form.g4 by ANTLR 4.2
package Form;
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 FormParser extends Parser {
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
T__18=1, T__17=2, T__16=3, T__15=4, T__14=5, T__13=6, T__12=7, T__11=8,
T__10=9, T__9=10, T__8=11, T__7=12, T__6=13, T__5=14, T__4=15, T__3=16,
T__2=17, T__1=18, T__0=19, TYPE=20, IF=21, IDENTIFIER=22, STRING=23, INT=24,
WS=25;
public static final String[] tokenNames = {
"<INVALID>", "')'", "'+'", "'-'", "'*'", "'('", "':'", "'<'", "'!='",
"';'", "'<='", "'&&'", "'||'", "'{'", "'>'", "'/'", "'=='", "'}'", "'>='",
"'!'", "TYPE", "'if'", "IDENTIFIER", "STRING", "INT", "WS"
};
public static final int
RULE_form = 0, RULE_construct = 1, RULE_condition = 2, RULE_question = 3,
RULE_expression = 4, RULE_label = 5;
public static final String[] ruleNames = {
"form", "construct", "condition", "question", "expression", "label"
};
@Override
public String getGrammarFileName() { return "Form.g4"; }
@Override
public String[] getTokenNames() { return tokenNames; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public ATN getATN() { return _ATN; }
public FormParser(TokenStream input) {
super(input);
_interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
public static class FormContext extends ParserRuleContext {
public List<ConstructContext> construct() {
return getRuleContexts(ConstructContext.class);
}
public QuestionContext question(int i) {
return getRuleContext(QuestionContext.class,i);
}
public List<QuestionContext> question() {
return getRuleContexts(QuestionContext.class);
}
public ConstructContext construct(int i) {
return getRuleContext(ConstructContext.class,i);
}
public FormContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_form; }
@Override
public void enterRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).enterForm(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).exitForm(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(14);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
setState(14);
switch (_input.LA(1)) {
case IDENTIFIER:
{
setState(12); question();
}
break;
case IF:
{
setState(13); construct();
}
break;
default:
throw new NoViableAltException(this);
}
}
setState(16);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==IF || _la==IDENTIFIER );
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
exitRule();
}
return _localctx;
}
public static class ConstructContext extends ParserRuleContext {
public ConditionContext condition() {
return getRuleContext(ConditionContext.class,0);
}
public List<ConstructContext> construct() {
return getRuleContexts(ConstructContext.class);
}
public QuestionContext question(int i) {
return getRuleContext(QuestionContext.class,i);
}
public List<QuestionContext> question() {
return getRuleContexts(QuestionContext.class);
}
public ConstructContext construct(int i) {
return getRuleContext(ConstructContext.class,i);
}
public ConstructContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_construct; }
@Override
public void enterRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).enterConstruct(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).exitConstruct(this);
}
}
public final ConstructContext construct() throws RecognitionException {
ConstructContext _localctx = new ConstructContext(_ctx, getState());
enterRule(_localctx, 2, RULE_construct);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
setState(18); condition();
setState(19); match(13);
setState(22);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
setState(22);
switch (_input.LA(1)) {
case IDENTIFIER:
{
setState(20); question();
}
break;
case IF:
{
setState(21); construct();
}
break;
default:
throw new NoViableAltException(this);
}
}
setState(24);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==IF || _la==IDENTIFIER );
setState(26); match(17);
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
exitRule();
}
return _localctx;
}
public static class ConditionContext extends ParserRuleContext {
public TerminalNode IF() { return getToken(FormParser.IF, 0); }
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
public ConditionContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_condition; }
@Override
public void enterRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).enterCondition(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).exitCondition(this);
}
}
public final ConditionContext condition() throws RecognitionException {
ConditionContext _localctx = new ConditionContext(_ctx, getState());
enterRule(_localctx, 4, RULE_condition);
try {
enterOuterAlt(_localctx, 1);
{
setState(28); match(IF);
setState(29); expression(0);
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
exitRule();
}
return _localctx;
}
public static class QuestionContext extends ParserRuleContext {
public TerminalNode IDENTIFIER() { return getToken(FormParser.IDENTIFIER, 0); }
public LabelContext label() {
return getRuleContext(LabelContext.class,0);
}
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
public TerminalNode TYPE() { return getToken(FormParser.TYPE, 0); }
public QuestionContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_question; }
@Override
public void enterRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).enterQuestion(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).exitQuestion(this);
}
}
public final QuestionContext question() throws RecognitionException {
QuestionContext _localctx = new QuestionContext(_ctx, getState());
enterRule(_localctx, 6, RULE_question);
try {
setState(48);
switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
setState(31); match(IDENTIFIER);
setState(32); match(6);
setState(33); label();
setState(34); match(6);
setState(35); match(TYPE);
setState(36); match(9);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
setState(38); match(IDENTIFIER);
setState(39); match(6);
setState(40); label();
setState(41); match(6);
setState(42); match(TYPE);
setState(43); match(5);
setState(44); expression(0);
setState(45); match(1);
setState(46); match(9);
}
break;
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
exitRule();
}
return _localctx;
}
public static class ExpressionContext extends ParserRuleContext {
public ExpressionContext expression(int i) {
return getRuleContext(ExpressionContext.class,i);
}
public TerminalNode INT() { return getToken(FormParser.INT, 0); }
public TerminalNode IDENTIFIER() { return getToken(FormParser.IDENTIFIER, 0); }
public List<ExpressionContext> expression() {
return getRuleContexts(ExpressionContext.class);
}
public ExpressionContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_expression; }
@Override
public void enterRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).enterExpression(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).exitExpression(this);
}
}
public final ExpressionContext expression() throws RecognitionException {
return expression(0);
}
private ExpressionContext expression(int _p) throws RecognitionException {
ParserRuleContext _parentctx = _ctx;
int _parentState = getState();
ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
ExpressionContext _prevctx = _localctx;
int _startState = 8;
enterRecursionRule(_localctx, 8, RULE_expression, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
setState(59);
switch (_input.LA(1)) {
case 19:
{
setState(51); match(19);
setState(52); expression(5);
}
break;
case 5:
{
setState(53); match(5);
setState(54); expression(0);
setState(55); match(1);
}
break;
case INT:
{
setState(57); match(INT);
}
break;
case IDENTIFIER:
{
setState(58); match(IDENTIFIER);
}
break;
default:
throw new NoViableAltException(this);
}
_ctx.stop = _input.LT(-1);
setState(75);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,7,_ctx);
while ( _alt!=2 && _alt!=-1 ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
setState(73);
switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
case 1:
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(61);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
setState(62);
_la = _input.LA(1);
if ( !(_la==4 || _la==15) ) {
_errHandler.recoverInline(this);
}
consume();
setState(63); expression(8);
}
break;
case 2:
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(64);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
setState(65);
_la = _input.LA(1);
if ( !(_la==2 || _la==3) ) {
_errHandler.recoverInline(this);
}
consume();
setState(66); expression(7);
}
break;
case 3:
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(67);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
setState(68);
_la = _input.LA(1);
if ( !(_la==11 || _la==12) ) {
_errHandler.recoverInline(this);
}
consume();
setState(69); expression(5);
}
break;
case 4:
{
_localctx = new ExpressionContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(70);
if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
setState(71);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << 7) | (1L << 8) | (1L << 10) | (1L << 14) | (1L << 16) | (1L << 18))) != 0)) ) {
_errHandler.recoverInline(this);
}
consume();
setState(72); expression(4);
}
break;
}
}
}
setState(77);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,7,_ctx);
}
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
unrollRecursionContexts(_parentctx);
}
return _localctx;
}
public static class LabelContext extends ParserRuleContext {
public TerminalNode STRING() { return getToken(FormParser.STRING, 0); }
public LabelContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_label; }
@Override
public void enterRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).enterLabel(this);
}
@Override
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof FormListener ) ((FormListener)listener).exitLabel(this);
}
}
public final LabelContext label() throws RecognitionException {
LabelContext _localctx = new LabelContext(_ctx, getState());
enterRule(_localctx, 10, RULE_label);
try {
enterOuterAlt(_localctx, 1);
{
setState(78); match(STRING);
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
exitRule();
}
return _localctx;
}
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
case 4: return expression_sempred((ExpressionContext)_localctx, predIndex);
}
return true;
}
private boolean expression_sempred(ExpressionContext _localctx, int predIndex) {
switch (predIndex) {
case 0: return precpred(_ctx, 7);
case 1: return precpred(_ctx, 6);
case 2: return precpred(_ctx, 4);
case 3: return precpred(_ctx, 3);
}
return true;
}
public static final String _serializedATN =
"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\33S\4\2\t\2\4\3\t"+
"\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\3\2\3\2\6\2\21\n\2\r\2\16\2\22\3\3"+
"\3\3\3\3\3\3\6\3\31\n\3\r\3\16\3\32\3\3\3\3\3\4\3\4\3\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\3\5\3\5\3\5\3\5\5\5\63\n\5\3\6"+
"\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\5\6>\n\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6"+
"\3\6\3\6\3\6\3\6\3\6\7\6L\n\6\f\6\16\6O\13\6\3\7\3\7\3\7\2\3\n\b\2\4\6"+
"\b\n\f\2\6\4\2\6\6\21\21\3\2\4\5\3\2\r\16\7\2\t\n\f\f\20\20\22\22\24\24"+
"X\2\20\3\2\2\2\4\24\3\2\2\2\6\36\3\2\2\2\b\62\3\2\2\2\n=\3\2\2\2\fP\3"+
"\2\2\2\16\21\5\b\5\2\17\21\5\4\3\2\20\16\3\2\2\2\20\17\3\2\2\2\21\22\3"+
"\2\2\2\22\20\3\2\2\2\22\23\3\2\2\2\23\3\3\2\2\2\24\25\5\6\4\2\25\30\7"+
"\17\2\2\26\31\5\b\5\2\27\31\5\4\3\2\30\26\3\2\2\2\30\27\3\2\2\2\31\32"+
"\3\2\2\2\32\30\3\2\2\2\32\33\3\2\2\2\33\34\3\2\2\2\34\35\7\23\2\2\35\5"+
"\3\2\2\2\36\37\7\27\2\2\37 \5\n\6\2 \7\3\2\2\2!\"\7\30\2\2\"#\7\b\2\2"+
"#$\5\f\7\2$%\7\b\2\2%&\7\26\2\2&\'\7\13\2\2\'\63\3\2\2\2()\7\30\2\2)*"+
"\7\b\2\2*+\5\f\7\2+,\7\b\2\2,-\7\26\2\2-.\7\7\2\2./\5\n\6\2/\60\7\3\2"+
"\2\60\61\7\13\2\2\61\63\3\2\2\2\62!\3\2\2\2\62(\3\2\2\2\63\t\3\2\2\2\64"+
"\65\b\6\1\2\65\66\7\25\2\2\66>\5\n\6\7\678\7\7\2\289\5\n\6\29:\7\3\2\2"+
":>\3\2\2\2;>\7\32\2\2<>\7\30\2\2=\64\3\2\2\2=\67\3\2\2\2=;\3\2\2\2=<\3"+
"\2\2\2>M\3\2\2\2?@\f\t\2\2@A\t\2\2\2AL\5\n\6\nBC\f\b\2\2CD\t\3\2\2DL\5"+
"\n\6\tEF\f\6\2\2FG\t\4\2\2GL\5\n\6\7HI\f\5\2\2IJ\t\5\2\2JL\5\n\6\6K?\3"+
"\2\2\2KB\3\2\2\2KE\3\2\2\2KH\3\2\2\2LO\3\2\2\2MK\3\2\2\2MN\3\2\2\2N\13"+
"\3\2\2\2OM\3\2\2\2PQ\7\31\2\2Q\r\3\2\2\2\n\20\22\30\32\62=KM";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}