diff --git a/src/pp/s1184725/boppi/Basic.g4 b/src/pp/s1184725/boppi/Basic.g4
index 118f08b..824e2e3 100644
--- a/src/pp/s1184725/boppi/Basic.g4
+++ b/src/pp/s1184725/boppi/Basic.g4
@@ -1,23 +1,26 @@
grammar Basic;
-program: expr;
+program: expr EOF;
expr
+ : singleExpr (COMPOUND singleExpr?)*
+ ;
+
+singleExpr
: PAROPEN expr PARCLOSE #parens
| BRAOPEN expr BRACLOSE #block
| IN PAROPEN variable (LISTDELIM variable)* PARCLOSE #read
| OUT PAROPEN expr (LISTDELIM expr)* PARCLOSE #write
| IFOPEN cond=expr IFTRUE onTrue=expr (IFFALSE onFalse=expr)? IFCLOSE #if
| WHILEOPEN cond=expr WHILETRUE onTrue=expr WHILECLOSE #while
- | op=(PLUS|MINUS|NOT) expr #prefix1
- | lhs=expr op=(MULTIPLY|DIVIDE|MODULO) rhs=expr #infix1
- | lhs=expr op=(PLUS|MINUS) rhs=expr #infix2
- | lhs=expr op=(LT|LEQ|GTE|GT|EQ|NEQ) rhs=expr #infix3
- | lhs=expr AND rhs=expr #infix4
- | lhs=expr OR rhs=expr #infix5
+ | op=(PLUS|MINUS|NOT) singleExpr #prefix1
+ | lhs=singleExpr op=(MULTIPLY|DIVIDE|MODULO) rhs=singleExpr #infix1
+ | lhs=singleExpr op=(PLUS|MINUS) rhs=singleExpr #infix2
+ | lhs=singleExpr op=(LT|LEQ|GTE|GT|EQ|NEQ) rhs=singleExpr #infix3
+ | lhs=singleExpr AND rhs=singleExpr #infix4
+ | lhs=singleExpr OR rhs=singleExpr #infix5
| DECLARE type IDENTIFIER #declare
- | variable ASSIGN expr #assign
- | expr (COMPOUND expr?)+ #compound
+ | variable ASSIGN singleExpr #assign
| variable #var
| LITERAL10 #number
| CHAR #char
diff --git a/src/pp/s1184725/boppi/BasicBaseVisitor.java b/src/pp/s1184725/boppi/BasicBaseVisitor.java
index d109159..d1b5539 100644
--- a/src/pp/s1184725/boppi/BasicBaseVisitor.java
+++ b/src/pp/s1184725/boppi/BasicBaseVisitor.java
@@ -18,6 +18,13 @@ public class BasicBaseVisitor extends AbstractParseTreeVisitor implements
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitProgram(BasicParser.ProgramContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitExpr(BasicParser.ExprContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -81,13 +88,6 @@ public class BasicBaseVisitor extends AbstractParseTreeVisitor implements
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitWhile(BasicParser.WhileContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitCompound(BasicParser.CompoundContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/src/pp/s1184725/boppi/BasicParser.java b/src/pp/s1184725/boppi/BasicParser.java
index 7d57337..bee716c 100644
--- a/src/pp/s1184725/boppi/BasicParser.java
+++ b/src/pp/s1184725/boppi/BasicParser.java
@@ -24,9 +24,9 @@ public class BasicParser extends Parser {
CHARTYPE=31, ASSIGN=32, COMPOUND=33, LISTDELIM=34, CHAR=35, TRUE=36, FALSE=37,
IDENTIFIER=38, LITERAL10=39, WHITESPACE=40, LINECOMMENT=41, BLOCKCOMMENT=42;
public static final int
- RULE_program = 0, RULE_expr = 1, RULE_type = 2, RULE_variable = 3;
+ RULE_program = 0, RULE_expr = 1, RULE_singleExpr = 2, RULE_type = 3, RULE_variable = 4;
public static final String[] ruleNames = {
- "program", "expr", "type", "variable"
+ "program", "expr", "singleExpr", "type", "variable"
};
private static final String[] _LITERAL_NAMES = {
@@ -97,6 +97,7 @@ public class BasicParser extends Parser {
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
}
+ public TerminalNode EOF() { return getToken(BasicParser.EOF, 0); }
public ProgramContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@@ -114,8 +115,10 @@ public class BasicParser extends Parser {
try {
enterOuterAlt(_localctx, 1);
{
- setState(8);
- expr(0);
+ setState(10);
+ expr();
+ setState(11);
+ match(EOF);
}
}
catch (RecognitionException re) {
@@ -130,30 +133,98 @@ public class BasicParser extends Parser {
}
public static class ExprContext extends ParserRuleContext {
+ public List singleExpr() {
+ return getRuleContexts(SingleExprContext.class);
+ }
+ public SingleExprContext singleExpr(int i) {
+ return getRuleContext(SingleExprContext.class,i);
+ }
+ public List COMPOUND() { return getTokens(BasicParser.COMPOUND); }
+ public TerminalNode COMPOUND(int i) {
+ return getToken(BasicParser.COMPOUND, i);
+ }
public ExprContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
@Override public int getRuleIndex() { return RULE_expr; }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitExpr(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final ExprContext expr() throws RecognitionException {
+ ExprContext _localctx = new ExprContext(_ctx, getState());
+ enterRule(_localctx, 2, RULE_expr);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(13);
+ singleExpr(0);
+ setState(20);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMPOUND) {
+ {
+ {
+ setState(14);
+ match(COMPOUND);
+ setState(16);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PAROPEN) | (1L << BRAOPEN) | (1L << IN) | (1L << OUT) | (1L << IFOPEN) | (1L << WHILEOPEN) | (1L << PLUS) | (1L << MINUS) | (1L << NOT) | (1L << DECLARE) | (1L << CHAR) | (1L << TRUE) | (1L << FALSE) | (1L << IDENTIFIER) | (1L << LITERAL10))) != 0)) {
+ {
+ setState(15);
+ singleExpr(0);
+ }
+ }
+
+ }
+ }
+ setState(22);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class SingleExprContext extends ParserRuleContext {
+ public SingleExprContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_singleExpr; }
- public ExprContext() { }
- public void copyFrom(ExprContext ctx) {
+ public SingleExprContext() { }
+ public void copyFrom(SingleExprContext ctx) {
super.copyFrom(ctx);
}
}
- public static class ParensContext extends ExprContext {
+ public static class ParensContext extends SingleExprContext {
public TerminalNode PAROPEN() { return getToken(BasicParser.PAROPEN, 0); }
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
}
public TerminalNode PARCLOSE() { return getToken(BasicParser.PARCLOSE, 0); }
- public ParensContext(ExprContext ctx) { copyFrom(ctx); }
+ public ParensContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitParens(this);
else return visitor.visitChildren(this);
}
}
- public static class ReadContext extends ExprContext {
+ public static class ReadContext extends SingleExprContext {
public TerminalNode IN() { return getToken(BasicParser.IN, 0); }
public TerminalNode PAROPEN() { return getToken(BasicParser.PAROPEN, 0); }
public List variable() {
@@ -167,75 +238,75 @@ public class BasicParser extends Parser {
public TerminalNode LISTDELIM(int i) {
return getToken(BasicParser.LISTDELIM, i);
}
- public ReadContext(ExprContext ctx) { copyFrom(ctx); }
+ public ReadContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitRead(this);
else return visitor.visitChildren(this);
}
}
- public static class DeclareContext extends ExprContext {
+ public static class DeclareContext extends SingleExprContext {
public TerminalNode DECLARE() { return getToken(BasicParser.DECLARE, 0); }
public TypeContext type() {
return getRuleContext(TypeContext.class,0);
}
public TerminalNode IDENTIFIER() { return getToken(BasicParser.IDENTIFIER, 0); }
- public DeclareContext(ExprContext ctx) { copyFrom(ctx); }
+ public DeclareContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitDeclare(this);
else return visitor.visitChildren(this);
}
}
- public static class BoolContext extends ExprContext {
+ public static class BoolContext extends SingleExprContext {
public TerminalNode TRUE() { return getToken(BasicParser.TRUE, 0); }
public TerminalNode FALSE() { return getToken(BasicParser.FALSE, 0); }
- public BoolContext(ExprContext ctx) { copyFrom(ctx); }
+ public BoolContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitBool(this);
else return visitor.visitChildren(this);
}
}
- public static class VarContext extends ExprContext {
+ public static class VarContext extends SingleExprContext {
public VariableContext variable() {
return getRuleContext(VariableContext.class,0);
}
- public VarContext(ExprContext ctx) { copyFrom(ctx); }
+ public VarContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitVar(this);
else return visitor.visitChildren(this);
}
}
- public static class Infix2Context extends ExprContext {
- public ExprContext lhs;
+ public static class Infix2Context extends SingleExprContext {
+ public SingleExprContext lhs;
public Token op;
- public ExprContext rhs;
- public List expr() {
- return getRuleContexts(ExprContext.class);
+ public SingleExprContext rhs;
+ public List singleExpr() {
+ return getRuleContexts(SingleExprContext.class);
}
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
+ public SingleExprContext singleExpr(int i) {
+ return getRuleContext(SingleExprContext.class,i);
}
public TerminalNode PLUS() { return getToken(BasicParser.PLUS, 0); }
public TerminalNode MINUS() { return getToken(BasicParser.MINUS, 0); }
- public Infix2Context(ExprContext ctx) { copyFrom(ctx); }
+ public Infix2Context(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitInfix2(this);
else return visitor.visitChildren(this);
}
}
- public static class Infix3Context extends ExprContext {
- public ExprContext lhs;
+ public static class Infix3Context extends SingleExprContext {
+ public SingleExprContext lhs;
public Token op;
- public ExprContext rhs;
- public List expr() {
- return getRuleContexts(ExprContext.class);
+ public SingleExprContext rhs;
+ public List singleExpr() {
+ return getRuleContexts(SingleExprContext.class);
}
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
+ public SingleExprContext singleExpr(int i) {
+ return getRuleContext(SingleExprContext.class,i);
}
public TerminalNode LT() { return getToken(BasicParser.LT, 0); }
public TerminalNode LEQ() { return getToken(BasicParser.LEQ, 0); }
@@ -243,34 +314,34 @@ public class BasicParser extends Parser {
public TerminalNode GT() { return getToken(BasicParser.GT, 0); }
public TerminalNode EQ() { return getToken(BasicParser.EQ, 0); }
public TerminalNode NEQ() { return getToken(BasicParser.NEQ, 0); }
- public Infix3Context(ExprContext ctx) { copyFrom(ctx); }
+ public Infix3Context(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitInfix3(this);
else return visitor.visitChildren(this);
}
}
- public static class Infix1Context extends ExprContext {
- public ExprContext lhs;
+ public static class Infix1Context extends SingleExprContext {
+ public SingleExprContext lhs;
public Token op;
- public ExprContext rhs;
- public List expr() {
- return getRuleContexts(ExprContext.class);
+ public SingleExprContext rhs;
+ public List singleExpr() {
+ return getRuleContexts(SingleExprContext.class);
}
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
+ public SingleExprContext singleExpr(int i) {
+ return getRuleContext(SingleExprContext.class,i);
}
public TerminalNode MULTIPLY() { return getToken(BasicParser.MULTIPLY, 0); }
public TerminalNode DIVIDE() { return getToken(BasicParser.DIVIDE, 0); }
public TerminalNode MODULO() { return getToken(BasicParser.MODULO, 0); }
- public Infix1Context(ExprContext ctx) { copyFrom(ctx); }
+ public Infix1Context(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitInfix1(this);
else return visitor.visitChildren(this);
}
}
- public static class WhileContext extends ExprContext {
+ public static class WhileContext extends SingleExprContext {
public ExprContext cond;
public ExprContext onTrue;
public TerminalNode WHILEOPEN() { return getToken(BasicParser.WHILEOPEN, 0); }
@@ -282,97 +353,79 @@ public class BasicParser extends Parser {
public ExprContext expr(int i) {
return getRuleContext(ExprContext.class,i);
}
- public WhileContext(ExprContext ctx) { copyFrom(ctx); }
+ public WhileContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitWhile(this);
else return visitor.visitChildren(this);
}
}
- public static class CompoundContext extends ExprContext {
- public List expr() {
- return getRuleContexts(ExprContext.class);
- }
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
- }
- public List COMPOUND() { return getTokens(BasicParser.COMPOUND); }
- public TerminalNode COMPOUND(int i) {
- return getToken(BasicParser.COMPOUND, i);
- }
- public CompoundContext(ExprContext ctx) { copyFrom(ctx); }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitCompound(this);
- else return visitor.visitChildren(this);
- }
- }
- public static class Infix4Context extends ExprContext {
- public ExprContext lhs;
- public ExprContext rhs;
+ public static class Infix4Context extends SingleExprContext {
+ public SingleExprContext lhs;
+ public SingleExprContext rhs;
public TerminalNode AND() { return getToken(BasicParser.AND, 0); }
- public List expr() {
- return getRuleContexts(ExprContext.class);
+ public List singleExpr() {
+ return getRuleContexts(SingleExprContext.class);
}
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
+ public SingleExprContext singleExpr(int i) {
+ return getRuleContext(SingleExprContext.class,i);
}
- public Infix4Context(ExprContext ctx) { copyFrom(ctx); }
+ public Infix4Context(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitInfix4(this);
else return visitor.visitChildren(this);
}
}
- public static class Infix5Context extends ExprContext {
- public ExprContext lhs;
- public ExprContext rhs;
+ public static class Infix5Context extends SingleExprContext {
+ public SingleExprContext lhs;
+ public SingleExprContext rhs;
public TerminalNode OR() { return getToken(BasicParser.OR, 0); }
- public List expr() {
- return getRuleContexts(ExprContext.class);
+ public List singleExpr() {
+ return getRuleContexts(SingleExprContext.class);
}
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
+ public SingleExprContext singleExpr(int i) {
+ return getRuleContext(SingleExprContext.class,i);
}
- public Infix5Context(ExprContext ctx) { copyFrom(ctx); }
+ public Infix5Context(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitInfix5(this);
else return visitor.visitChildren(this);
}
}
- public static class NumberContext extends ExprContext {
+ public static class NumberContext extends SingleExprContext {
public TerminalNode LITERAL10() { return getToken(BasicParser.LITERAL10, 0); }
- public NumberContext(ExprContext ctx) { copyFrom(ctx); }
+ public NumberContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitNumber(this);
else return visitor.visitChildren(this);
}
}
- public static class CharContext extends ExprContext {
+ public static class CharContext extends SingleExprContext {
public TerminalNode CHAR() { return getToken(BasicParser.CHAR, 0); }
- public CharContext(ExprContext ctx) { copyFrom(ctx); }
+ public CharContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitChar(this);
else return visitor.visitChildren(this);
}
}
- public static class BlockContext extends ExprContext {
+ public static class BlockContext extends SingleExprContext {
public TerminalNode BRAOPEN() { return getToken(BasicParser.BRAOPEN, 0); }
public ExprContext expr() {
return getRuleContext(ExprContext.class,0);
}
public TerminalNode BRACLOSE() { return getToken(BasicParser.BRACLOSE, 0); }
- public BlockContext(ExprContext ctx) { copyFrom(ctx); }
+ public BlockContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitBlock(this);
else return visitor.visitChildren(this);
}
}
- public static class WriteContext extends ExprContext {
+ public static class WriteContext extends SingleExprContext {
public TerminalNode OUT() { return getToken(BasicParser.OUT, 0); }
public TerminalNode PAROPEN() { return getToken(BasicParser.PAROPEN, 0); }
public List expr() {
@@ -386,14 +439,14 @@ public class BasicParser extends Parser {
public TerminalNode LISTDELIM(int i) {
return getToken(BasicParser.LISTDELIM, i);
}
- public WriteContext(ExprContext ctx) { copyFrom(ctx); }
+ public WriteContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitWrite(this);
else return visitor.visitChildren(this);
}
}
- public static class IfContext extends ExprContext {
+ public static class IfContext extends SingleExprContext {
public ExprContext cond;
public ExprContext onTrue;
public ExprContext onFalse;
@@ -407,37 +460,37 @@ public class BasicParser extends Parser {
return getRuleContext(ExprContext.class,i);
}
public TerminalNode IFFALSE() { return getToken(BasicParser.IFFALSE, 0); }
- public IfContext(ExprContext ctx) { copyFrom(ctx); }
+ public IfContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitIf(this);
else return visitor.visitChildren(this);
}
}
- public static class Prefix1Context extends ExprContext {
+ public static class Prefix1Context extends SingleExprContext {
public Token op;
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
+ public SingleExprContext singleExpr() {
+ return getRuleContext(SingleExprContext.class,0);
}
public TerminalNode PLUS() { return getToken(BasicParser.PLUS, 0); }
public TerminalNode MINUS() { return getToken(BasicParser.MINUS, 0); }
public TerminalNode NOT() { return getToken(BasicParser.NOT, 0); }
- public Prefix1Context(ExprContext ctx) { copyFrom(ctx); }
+ public Prefix1Context(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitPrefix1(this);
else return visitor.visitChildren(this);
}
}
- public static class AssignContext extends ExprContext {
+ public static class AssignContext extends SingleExprContext {
public VariableContext variable() {
return getRuleContext(VariableContext.class,0);
}
public TerminalNode ASSIGN() { return getToken(BasicParser.ASSIGN, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
+ public SingleExprContext singleExpr() {
+ return getRuleContext(SingleExprContext.class,0);
}
- public AssignContext(ExprContext ctx) { copyFrom(ctx); }
+ public AssignContext(SingleExprContext ctx) { copyFrom(ctx); }
@Override
public T accept(ParseTreeVisitor extends T> visitor) {
if ( visitor instanceof BasicVisitor ) return ((BasicVisitor extends T>)visitor).visitAssign(this);
@@ -445,36 +498,36 @@ public class BasicParser extends Parser {
}
}
- public final ExprContext expr() throws RecognitionException {
- return expr(0);
+ public final SingleExprContext singleExpr() throws RecognitionException {
+ return singleExpr(0);
}
- private ExprContext expr(int _p) throws RecognitionException {
+ private SingleExprContext singleExpr(int _p) throws RecognitionException {
ParserRuleContext _parentctx = _ctx;
int _parentState = getState();
- ExprContext _localctx = new ExprContext(_ctx, _parentState);
- ExprContext _prevctx = _localctx;
- int _startState = 2;
- enterRecursionRule(_localctx, 2, RULE_expr, _p);
+ SingleExprContext _localctx = new SingleExprContext(_ctx, _parentState);
+ SingleExprContext _prevctx = _localctx;
+ int _startState = 4;
+ enterRecursionRule(_localctx, 4, RULE_singleExpr, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(73);
+ setState(86);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) {
case 1:
{
_localctx = new ParensContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(11);
+ setState(24);
match(PAROPEN);
- setState(12);
- expr(0);
- setState(13);
+ setState(25);
+ expr();
+ setState(26);
match(PARCLOSE);
}
break;
@@ -483,11 +536,11 @@ public class BasicParser extends Parser {
_localctx = new BlockContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(15);
+ setState(28);
match(BRAOPEN);
- setState(16);
- expr(0);
- setState(17);
+ setState(29);
+ expr();
+ setState(30);
match(BRACLOSE);
}
break;
@@ -496,29 +549,29 @@ public class BasicParser extends Parser {
_localctx = new ReadContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(19);
+ setState(32);
match(IN);
- setState(20);
+ setState(33);
match(PAROPEN);
- setState(21);
+ setState(34);
variable();
- setState(26);
+ setState(39);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==LISTDELIM) {
{
{
- setState(22);
+ setState(35);
match(LISTDELIM);
- setState(23);
+ setState(36);
variable();
}
}
- setState(28);
+ setState(41);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(29);
+ setState(42);
match(PARCLOSE);
}
break;
@@ -527,29 +580,29 @@ public class BasicParser extends Parser {
_localctx = new WriteContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(31);
+ setState(44);
match(OUT);
- setState(32);
+ setState(45);
match(PAROPEN);
- setState(33);
- expr(0);
- setState(38);
+ setState(46);
+ expr();
+ setState(51);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==LISTDELIM) {
{
{
- setState(34);
+ setState(47);
match(LISTDELIM);
- setState(35);
- expr(0);
+ setState(48);
+ expr();
}
}
- setState(40);
+ setState(53);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(41);
+ setState(54);
match(PARCLOSE);
}
break;
@@ -558,27 +611,27 @@ public class BasicParser extends Parser {
_localctx = new IfContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(43);
+ setState(56);
match(IFOPEN);
- setState(44);
- ((IfContext)_localctx).cond = expr(0);
- setState(45);
+ setState(57);
+ ((IfContext)_localctx).cond = expr();
+ setState(58);
match(IFTRUE);
- setState(46);
- ((IfContext)_localctx).onTrue = expr(0);
- setState(49);
+ setState(59);
+ ((IfContext)_localctx).onTrue = expr();
+ setState(62);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IFFALSE) {
{
- setState(47);
+ setState(60);
match(IFFALSE);
- setState(48);
- ((IfContext)_localctx).onFalse = expr(0);
+ setState(61);
+ ((IfContext)_localctx).onFalse = expr();
}
}
- setState(51);
+ setState(64);
match(IFCLOSE);
}
break;
@@ -587,15 +640,15 @@ public class BasicParser extends Parser {
_localctx = new WhileContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(53);
+ setState(66);
match(WHILEOPEN);
- setState(54);
- ((WhileContext)_localctx).cond = expr(0);
- setState(55);
+ setState(67);
+ ((WhileContext)_localctx).cond = expr();
+ setState(68);
match(WHILETRUE);
- setState(56);
- ((WhileContext)_localctx).onTrue = expr(0);
- setState(57);
+ setState(69);
+ ((WhileContext)_localctx).onTrue = expr();
+ setState(70);
match(WHILECLOSE);
}
break;
@@ -604,7 +657,7 @@ public class BasicParser extends Parser {
_localctx = new Prefix1Context(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(59);
+ setState(72);
((Prefix1Context)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << MINUS) | (1L << NOT))) != 0)) ) {
@@ -615,8 +668,8 @@ public class BasicParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(60);
- expr(13);
+ setState(73);
+ singleExpr(12);
}
break;
case 8:
@@ -624,11 +677,11 @@ public class BasicParser extends Parser {
_localctx = new DeclareContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(61);
+ setState(74);
match(DECLARE);
- setState(62);
+ setState(75);
type();
- setState(63);
+ setState(76);
match(IDENTIFIER);
}
break;
@@ -637,12 +690,12 @@ public class BasicParser extends Parser {
_localctx = new AssignContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(65);
+ setState(78);
variable();
- setState(66);
+ setState(79);
match(ASSIGN);
- setState(67);
- expr(6);
+ setState(80);
+ singleExpr(5);
}
break;
case 10:
@@ -650,7 +703,7 @@ public class BasicParser extends Parser {
_localctx = new VarContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(69);
+ setState(82);
variable();
}
break;
@@ -659,7 +712,7 @@ public class BasicParser extends Parser {
_localctx = new NumberContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(70);
+ setState(83);
match(LITERAL10);
}
break;
@@ -668,7 +721,7 @@ public class BasicParser extends Parser {
_localctx = new CharContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(71);
+ setState(84);
match(CHAR);
}
break;
@@ -677,7 +730,7 @@ public class BasicParser extends Parser {
_localctx = new BoolContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(72);
+ setState(85);
_la = _input.LA(1);
if ( !(_la==TRUE || _la==FALSE) ) {
_errHandler.recoverInline(this);
@@ -691,7 +744,7 @@ public class BasicParser extends Parser {
break;
}
_ctx.stop = _input.LT(-1);
- setState(101);
+ setState(105);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,7,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -699,17 +752,17 @@ public class BasicParser extends Parser {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(99);
+ setState(103);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
case 1:
{
- _localctx = new Infix1Context(new ExprContext(_parentctx, _parentState));
+ _localctx = new Infix1Context(new SingleExprContext(_parentctx, _parentState));
((Infix1Context)_localctx).lhs = _prevctx;
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(75);
- if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
- setState(76);
+ pushNewRecursionContext(_localctx, _startState, RULE_singleExpr);
+ setState(88);
+ if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
+ setState(89);
((Infix1Context)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << MULTIPLY) | (1L << DIVIDE) | (1L << MODULO))) != 0)) ) {
@@ -720,18 +773,18 @@ public class BasicParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(77);
- ((Infix1Context)_localctx).rhs = expr(13);
+ setState(90);
+ ((Infix1Context)_localctx).rhs = singleExpr(12);
}
break;
case 2:
{
- _localctx = new Infix2Context(new ExprContext(_parentctx, _parentState));
+ _localctx = new Infix2Context(new SingleExprContext(_parentctx, _parentState));
((Infix2Context)_localctx).lhs = _prevctx;
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(78);
- if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
- setState(79);
+ pushNewRecursionContext(_localctx, _startState, RULE_singleExpr);
+ setState(91);
+ if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
+ setState(92);
((Infix2Context)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==PLUS || _la==MINUS) ) {
@@ -742,18 +795,18 @@ public class BasicParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(80);
- ((Infix2Context)_localctx).rhs = expr(12);
+ setState(93);
+ ((Infix2Context)_localctx).rhs = singleExpr(11);
}
break;
case 3:
{
- _localctx = new Infix3Context(new ExprContext(_parentctx, _parentState));
+ _localctx = new Infix3Context(new SingleExprContext(_parentctx, _parentState));
((Infix3Context)_localctx).lhs = _prevctx;
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(81);
- if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
- setState(82);
+ pushNewRecursionContext(_localctx, _startState, RULE_singleExpr);
+ setState(94);
+ if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
+ setState(95);
((Infix3Context)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LEQ) | (1L << GTE) | (1L << NEQ) | (1L << EQ) | (1L << LT) | (1L << GT))) != 0)) ) {
@@ -764,78 +817,40 @@ public class BasicParser extends Parser {
_errHandler.reportMatch(this);
consume();
}
- setState(83);
- ((Infix3Context)_localctx).rhs = expr(11);
+ setState(96);
+ ((Infix3Context)_localctx).rhs = singleExpr(10);
}
break;
case 4:
{
- _localctx = new Infix4Context(new ExprContext(_parentctx, _parentState));
+ _localctx = new Infix4Context(new SingleExprContext(_parentctx, _parentState));
((Infix4Context)_localctx).lhs = _prevctx;
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(84);
- if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
- setState(85);
+ pushNewRecursionContext(_localctx, _startState, RULE_singleExpr);
+ setState(97);
+ if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
+ setState(98);
match(AND);
- setState(86);
- ((Infix4Context)_localctx).rhs = expr(10);
+ setState(99);
+ ((Infix4Context)_localctx).rhs = singleExpr(9);
}
break;
case 5:
{
- _localctx = new Infix5Context(new ExprContext(_parentctx, _parentState));
+ _localctx = new Infix5Context(new SingleExprContext(_parentctx, _parentState));
((Infix5Context)_localctx).lhs = _prevctx;
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(87);
- if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
- setState(88);
+ pushNewRecursionContext(_localctx, _startState, RULE_singleExpr);
+ setState(100);
+ if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
+ setState(101);
match(OR);
- setState(89);
- ((Infix5Context)_localctx).rhs = expr(9);
- }
- break;
- case 6:
- {
- _localctx = new CompoundContext(new ExprContext(_parentctx, _parentState));
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(90);
- if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
- setState(95);
- _errHandler.sync(this);
- _alt = 1;
- do {
- switch (_alt) {
- case 1:
- {
- {
- setState(91);
- match(COMPOUND);
- setState(93);
- _errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
- case 1:
- {
- setState(92);
- expr(0);
- }
- break;
- }
- }
- }
- break;
- default:
- throw new NoViableAltException(this);
- }
- setState(97);
- _errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,5,_ctx);
- } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
+ setState(102);
+ ((Infix5Context)_localctx).rhs = singleExpr(8);
}
break;
}
}
}
- setState(103);
+ setState(107);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,7,_ctx);
}
@@ -873,10 +888,10 @@ public class BasicParser extends Parser {
public final TypeContext type() throws RecognitionException {
TypeContext _localctx = new TypeContext(_ctx, getState());
- enterRule(_localctx, 4, RULE_type);
+ enterRule(_localctx, 6, RULE_type);
int _la;
try {
- setState(106);
+ setState(110);
_errHandler.sync(this);
switch (_input.LA(1)) {
case INTTYPE:
@@ -884,7 +899,7 @@ public class BasicParser extends Parser {
case CHARTYPE:
enterOuterAlt(_localctx, 1);
{
- setState(104);
+ setState(108);
((TypeContext)_localctx).staticType = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << INTTYPE) | (1L << BOOLTYPE) | (1L << CHARTYPE))) != 0)) ) {
@@ -900,7 +915,7 @@ public class BasicParser extends Parser {
case IDENTIFIER:
enterOuterAlt(_localctx, 2);
{
- setState(105);
+ setState(109);
variable();
}
break;
@@ -934,11 +949,11 @@ public class BasicParser extends Parser {
public final VariableContext variable() throws RecognitionException {
VariableContext _localctx = new VariableContext(_ctx, getState());
- enterRule(_localctx, 6, RULE_variable);
+ enterRule(_localctx, 8, RULE_variable);
try {
enterOuterAlt(_localctx, 1);
{
- setState(108);
+ setState(112);
match(IDENTIFIER);
}
}
@@ -955,60 +970,59 @@ public class BasicParser extends Parser {
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
- case 1:
- return expr_sempred((ExprContext)_localctx, predIndex);
+ case 2:
+ return singleExpr_sempred((SingleExprContext)_localctx, predIndex);
}
return true;
}
- private boolean expr_sempred(ExprContext _localctx, int predIndex) {
+ private boolean singleExpr_sempred(SingleExprContext _localctx, int predIndex) {
switch (predIndex) {
case 0:
- return precpred(_ctx, 12);
- case 1:
return precpred(_ctx, 11);
- case 2:
+ case 1:
return precpred(_ctx, 10);
- case 3:
+ case 2:
return precpred(_ctx, 9);
- case 4:
+ case 3:
return precpred(_ctx, 8);
- case 5:
- return precpred(_ctx, 5);
+ case 4:
+ return precpred(_ctx, 7);
}
return true;
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3,q\4\2\t\2\4\3\t\3"+
- "\4\4\t\4\4\5\t\5\3\2\3\2\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\7\3\33\n\3\f\3\16\3\36\13\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\7\3"+
- "\'\n\3\f\3\16\3*\13\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\5\3\64\n\3\3\3\3"+
- "\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3"+
- "\3\3\3\3\3\3\5\3L\n\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3"+
- "\3\3\3\3\3\3\3\3\3\3\3\3\5\3`\n\3\6\3b\n\3\r\3\16\3c\7\3f\n\3\f\3\16\3"+
- "i\13\3\3\4\3\4\5\4m\n\4\3\5\3\5\3\5\2\3\4\6\2\4\6\b\2\b\3\2\20\22\3\2"+
- "&\'\3\2\23\25\3\2\20\21\3\2\26\33\3\2\37!\2\u0084\2\n\3\2\2\2\4K\3\2\2"+
- "\2\6l\3\2\2\2\bn\3\2\2\2\n\13\5\4\3\2\13\3\3\2\2\2\f\r\b\3\1\2\r\16\7"+
- "\3\2\2\16\17\5\4\3\2\17\20\7\4\2\2\20L\3\2\2\2\21\22\7\5\2\2\22\23\5\4"+
- "\3\2\23\24\7\6\2\2\24L\3\2\2\2\25\26\7\7\2\2\26\27\7\3\2\2\27\34\5\b\5"+
- "\2\30\31\7$\2\2\31\33\5\b\5\2\32\30\3\2\2\2\33\36\3\2\2\2\34\32\3\2\2"+
- "\2\34\35\3\2\2\2\35\37\3\2\2\2\36\34\3\2\2\2\37 \7\4\2\2 L\3\2\2\2!\""+
- "\7\b\2\2\"#\7\3\2\2#(\5\4\3\2$%\7$\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+,\7\4\2\2,L\3\2\2\2-.\7\t\2\2"+
- "./\5\4\3\2/\60\7\n\2\2\60\63\5\4\3\2\61\62\7\13\2\2\62\64\5\4\3\2\63\61"+
- "\3\2\2\2\63\64\3\2\2\2\64\65\3\2\2\2\65\66\7\f\2\2\66L\3\2\2\2\678\7\r"+
- "\2\289\5\4\3\29:\7\16\2\2:;\5\4\3\2;<\7\17\2\2\t\2\2\2>L\5"+
- "\4\3\17?@\7\36\2\2@A\5\6\4\2AB\7(\2\2BL\3\2\2\2CD\5\b\5\2DE\7\"\2\2EF"+
- "\5\4\3\bFL\3\2\2\2GL\5\b\5\2HL\7)\2\2IL\7%\2\2JL\t\3\2\2K\f\3\2\2\2K\21"+
- "\3\2\2\2K\25\3\2\2\2K!\3\2\2\2K-\3\2\2\2K\67\3\2\2\2K=\3\2\2\2K?\3\2\2"+
- "\2KC\3\2\2\2KG\3\2\2\2KH\3\2\2\2KI\3\2\2\2KJ\3\2\2\2Lg\3\2\2\2MN\f\16"+
- "\2\2NO\t\4\2\2Of\5\4\3\17PQ\f\r\2\2QR\t\5\2\2Rf\5\4\3\16ST\f\f\2\2TU\t"+
- "\6\2\2Uf\5\4\3\rVW\f\13\2\2WX\7\34\2\2Xf\5\4\3\fYZ\f\n\2\2Z[\7\35\2\2"+
- "[f\5\4\3\13\\a\f\7\2\2]_\7#\2\2^`\5\4\3\2_^\3\2\2\2_`\3\2\2\2`b\3\2\2"+
- "\2a]\3\2\2\2bc\3\2\2\2ca\3\2\2\2cd\3\2\2\2df\3\2\2\2eM\3\2\2\2eP\3\2\2"+
- "\2eS\3\2\2\2eV\3\2\2\2eY\3\2\2\2e\\\3\2\2\2fi\3\2\2\2ge\3\2\2\2gh\3\2"+
- "\2\2h\5\3\2\2\2ig\3\2\2\2jm\t\7\2\2km\5\b\5\2lj\3\2\2\2lk\3\2\2\2m\7\3"+
- "\2\2\2no\7(\2\2o\t\3\2\2\2\13\34(\63K_cegl";
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3,u\4\2\t\2\4\3\t\3"+
+ "\4\4\t\4\4\5\t\5\4\6\t\6\3\2\3\2\3\2\3\3\3\3\3\3\5\3\23\n\3\7\3\25\n\3"+
+ "\f\3\16\3\30\13\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4"+
+ "\3\4\7\4(\n\4\f\4\16\4+\13\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\64\n\4\f"+
+ "\4\16\4\67\13\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4A\n\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\4\3\4\3\4\3\4\3\4"+
+ "\3\4\5\4Y\n\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\7\4j\n\4\f\4\16\4m\13\4\3\5\3\5\5\5q\n\5\3\6\3\6\3\6\2\3\6\7\2\4"+
+ "\6\b\n\2\b\3\2\20\22\3\2&\'\3\2\23\25\3\2\20\21\3\2\26\33\3\2\37!\2\u0086"+
+ "\2\f\3\2\2\2\4\17\3\2\2\2\6X\3\2\2\2\bp\3\2\2\2\nr\3\2\2\2\f\r\5\4\3\2"+
+ "\r\16\7\2\2\3\16\3\3\2\2\2\17\26\5\6\4\2\20\22\7#\2\2\21\23\5\6\4\2\22"+
+ "\21\3\2\2\2\22\23\3\2\2\2\23\25\3\2\2\2\24\20\3\2\2\2\25\30\3\2\2\2\26"+
+ "\24\3\2\2\2\26\27\3\2\2\2\27\5\3\2\2\2\30\26\3\2\2\2\31\32\b\4\1\2\32"+
+ "\33\7\3\2\2\33\34\5\4\3\2\34\35\7\4\2\2\35Y\3\2\2\2\36\37\7\5\2\2\37 "+
+ "\5\4\3\2 !\7\6\2\2!Y\3\2\2\2\"#\7\7\2\2#$\7\3\2\2$)\5\n\6\2%&\7$\2\2&"+
+ "(\5\n\6\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\4\2\2-Y\3\2\2\2./\7\b\2\2/\60\7\3\2\2\60\65\5\4\3\2\61\62\7$\2"+
+ "\2\62\64\5\4\3\2\63\61\3\2\2\2\64\67\3\2\2\2\65\63\3\2\2\2\65\66\3\2\2"+
+ "\2\668\3\2\2\2\67\65\3\2\2\289\7\4\2\29Y\3\2\2\2:;\7\t\2\2;<\5\4\3\2<"+
+ "=\7\n\2\2=@\5\4\3\2>?\7\13\2\2?A\5\4\3\2@>\3\2\2\2@A\3\2\2\2AB\3\2\2\2"+
+ "BC\7\f\2\2CY\3\2\2\2DE\7\r\2\2EF\5\4\3\2FG\7\16\2\2GH\5\4\3\2HI\7\17\2"+
+ "\2IY\3\2\2\2JK\t\2\2\2KY\5\6\4\16LM\7\36\2\2MN\5\b\5\2NO\7(\2\2OY\3\2"+
+ "\2\2PQ\5\n\6\2QR\7\"\2\2RS\5\6\4\7SY\3\2\2\2TY\5\n\6\2UY\7)\2\2VY\7%\2"+
+ "\2WY\t\3\2\2X\31\3\2\2\2X\36\3\2\2\2X\"\3\2\2\2X.\3\2\2\2X:\3\2\2\2XD"+
+ "\3\2\2\2XJ\3\2\2\2XL\3\2\2\2XP\3\2\2\2XT\3\2\2\2XU\3\2\2\2XV\3\2\2\2X"+
+ "W\3\2\2\2Yk\3\2\2\2Z[\f\r\2\2[\\\t\4\2\2\\j\5\6\4\16]^\f\f\2\2^_\t\5\2"+
+ "\2_j\5\6\4\r`a\f\13\2\2ab\t\6\2\2bj\5\6\4\fcd\f\n\2\2de\7\34\2\2ej\5\6"+
+ "\4\13fg\f\t\2\2gh\7\35\2\2hj\5\6\4\niZ\3\2\2\2i]\3\2\2\2i`\3\2\2\2ic\3"+
+ "\2\2\2if\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l\7\3\2\2\2mk\3\2\2\2nq"+
+ "\t\7\2\2oq\5\n\6\2pn\3\2\2\2po\3\2\2\2q\t\3\2\2\2rs\7(\2\2s\13\3\2\2\2"+
+ "\13\22\26)\65@Xikp";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/pp/s1184725/boppi/BasicVisitor.java b/src/pp/s1184725/boppi/BasicVisitor.java
index 06729fa..14f34c5 100644
--- a/src/pp/s1184725/boppi/BasicVisitor.java
+++ b/src/pp/s1184725/boppi/BasicVisitor.java
@@ -16,135 +16,134 @@ public interface BasicVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitProgram(BasicParser.ProgramContext ctx);
+ /**
+ * Visit a parse tree produced by {@link BasicParser#expr}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitExpr(BasicParser.ExprContext ctx);
/**
* Visit a parse tree produced by the {@code parens}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitParens(BasicParser.ParensContext ctx);
/**
* Visit a parse tree produced by the {@code read}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitRead(BasicParser.ReadContext ctx);
/**
* Visit a parse tree produced by the {@code declare}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitDeclare(BasicParser.DeclareContext ctx);
/**
* Visit a parse tree produced by the {@code bool}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBool(BasicParser.BoolContext ctx);
/**
* Visit a parse tree produced by the {@code var}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitVar(BasicParser.VarContext ctx);
/**
* Visit a parse tree produced by the {@code infix2}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInfix2(BasicParser.Infix2Context ctx);
/**
* Visit a parse tree produced by the {@code infix3}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInfix3(BasicParser.Infix3Context ctx);
/**
* Visit a parse tree produced by the {@code infix1}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInfix1(BasicParser.Infix1Context ctx);
/**
* Visit a parse tree produced by the {@code while}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitWhile(BasicParser.WhileContext ctx);
- /**
- * Visit a parse tree produced by the {@code compound}
- * labeled alternative in {@link BasicParser#expr}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitCompound(BasicParser.CompoundContext ctx);
/**
* Visit a parse tree produced by the {@code infix4}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInfix4(BasicParser.Infix4Context ctx);
/**
* Visit a parse tree produced by the {@code infix5}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitInfix5(BasicParser.Infix5Context ctx);
/**
* Visit a parse tree produced by the {@code number}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitNumber(BasicParser.NumberContext ctx);
/**
* Visit a parse tree produced by the {@code char}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitChar(BasicParser.CharContext ctx);
/**
* Visit a parse tree produced by the {@code block}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitBlock(BasicParser.BlockContext ctx);
/**
* Visit a parse tree produced by the {@code write}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitWrite(BasicParser.WriteContext ctx);
/**
* Visit a parse tree produced by the {@code if}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitIf(BasicParser.IfContext ctx);
/**
* Visit a parse tree produced by the {@code prefix1}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitPrefix1(BasicParser.Prefix1Context ctx);
/**
* Visit a parse tree produced by the {@code assign}
- * labeled alternative in {@link BasicParser#expr}.
+ * labeled alternative in {@link BasicParser#singleExpr}.
* @param ctx the parse tree
* @return the visitor result
*/