Added if statement
This commit is contained in:
@@ -19,9 +19,9 @@ public class Klang {
|
||||
KlangParser parser = new KlangParser(tokens);
|
||||
|
||||
ParseTree tree = parser.parse(); // begin parsing at init rule
|
||||
StringBuilder sb = new StringBuilder();
|
||||
JSVisitor visitor = new JSVisitor(sb);
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
Visitor visitor = new Visitor();
|
||||
visitor.visit(tree);
|
||||
System.out.println(sb.toString());
|
||||
// System.out.println(sb.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,17 @@ public class Visitor extends KlangBaseVisitor<Value> {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value visitIf_statement(KlangParser.If_statementContext ctx) {
|
||||
Value cond = this.visit(ctx.expression());
|
||||
if (cond.asInteger() != 0) {
|
||||
this.visit(ctx.braced_block(0));
|
||||
} else if (ctx.braced_block().size() > 1) {
|
||||
this.visit(ctx.braced_block(1));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value visitMultiplicationExpression(KlangParser.MultiplicationExpressionContext ctx) {
|
||||
Value left = this.visit(ctx.atom(0));
|
||||
@@ -27,7 +38,8 @@ public class Visitor extends KlangBaseVisitor<Value> {
|
||||
case KlangParser.SUB:
|
||||
return new Value(left.asInteger() - right.asInteger());
|
||||
default:
|
||||
throw new RuntimeException("Unknown operator for additive expression: "+ KlangParser.VOCABULARY.getDisplayName(ctx.op.getType()));
|
||||
throw new RuntimeException(
|
||||
"Unknown operator for additive expression: " + KlangParser.VOCABULARY.getDisplayName(ctx.op.getType()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +56,11 @@ public class Visitor extends KlangBaseVisitor<Value> {
|
||||
return new Value(-value.asInteger());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value visitAtomExpression(KlangParser.AtomExpressionContext ctx) {
|
||||
return this.visit(ctx.atom());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value visitIntAtom(KlangParser.IntAtomContext ctx) {
|
||||
return new Value(Integer.parseInt(ctx.getText()));
|
||||
|
||||
Reference in New Issue
Block a user