Implemented pretty printing and evaluating of boolean expressions
This commit is contained in:
@@ -97,6 +97,31 @@ public class ContextAnalysis extends KlangBaseVisitor<Node> {
|
|||||||
return new AdditionExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
|
return new AdditionExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Node visitEqualityExpression(KlangParser.EqualityExpressionContext ctx) {
|
||||||
|
return new EqualityExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Node visitLessThanExpression(KlangParser.LessThanExpressionContext ctx) {
|
||||||
|
return new LTExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Node visitGreaterThanExpression(KlangParser.GreaterThanExpressionContext ctx) {
|
||||||
|
return new GTExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Node visitLessThanOrEqualToExpression(KlangParser.LessThanOrEqualToExpressionContext ctx) {
|
||||||
|
return new LTEExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Node visitGreaterThanOrEqualToExpression(KlangParser.GreaterThanOrEqualToExpressionContext ctx) {
|
||||||
|
return new GTEExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Node visitSubstractionExpression(KlangParser.SubstractionExpressionContext ctx) {
|
public Node visitSubstractionExpression(KlangParser.SubstractionExpressionContext ctx) {
|
||||||
return new SubstractionExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
|
return new SubstractionExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
|
||||||
|
|||||||
@@ -20,6 +20,56 @@ public class EvalVisitor implements Visitor<Value> {
|
|||||||
return new Value(e.value);
|
return new Value(e.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value visit(EqualityExpression e) {
|
||||||
|
Value lhs = e.lhs.welcome(this);
|
||||||
|
Value rhs = e.rhs.welcome(this);
|
||||||
|
if (lhs.asInteger() == rhs.asInteger()) {
|
||||||
|
return new Value(1);
|
||||||
|
}
|
||||||
|
return new Value(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value visit(GTExpression e) {
|
||||||
|
Value lhs = e.lhs.welcome(this);
|
||||||
|
Value rhs = e.rhs.welcome(this);
|
||||||
|
if (lhs.asInteger() > rhs.asInteger()) {
|
||||||
|
return new Value(1);
|
||||||
|
}
|
||||||
|
return new Value(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value visit(GTEExpression e) {
|
||||||
|
Value lhs = e.lhs.welcome(this);
|
||||||
|
Value rhs = e.rhs.welcome(this);
|
||||||
|
if (lhs.asInteger() >= rhs.asInteger()) {
|
||||||
|
return new Value(1);
|
||||||
|
}
|
||||||
|
return new Value(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value visit(LTExpression e) {
|
||||||
|
Value lhs = e.lhs.welcome(this);
|
||||||
|
Value rhs = e.rhs.welcome(this);
|
||||||
|
if (lhs.asInteger() < rhs.asInteger()) {
|
||||||
|
return new Value(1);
|
||||||
|
}
|
||||||
|
return new Value(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value visit(LTEExpression e) {
|
||||||
|
Value lhs = e.lhs.welcome(this);
|
||||||
|
Value rhs = e.rhs.welcome(this);
|
||||||
|
if (lhs.asInteger() <= rhs.asInteger()) {
|
||||||
|
return new Value(1);
|
||||||
|
}
|
||||||
|
return new Value(0);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Value visit(AdditionExpression e) {
|
public Value visit(AdditionExpression e) {
|
||||||
Value lhs = e.lhs.welcome(this);
|
Value lhs = e.lhs.welcome(this);
|
||||||
|
|||||||
@@ -71,6 +71,56 @@ public class PrettyPrintVisitor implements Visitor<Void> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(EqualityExpression e) {
|
||||||
|
ex.write("(");
|
||||||
|
e.lhs.welcome(this);
|
||||||
|
ex.write(" == ");
|
||||||
|
e.rhs.welcome(this);
|
||||||
|
ex.write(")");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(GTExpression e) {
|
||||||
|
ex.write("(");
|
||||||
|
e.lhs.welcome(this);
|
||||||
|
ex.write(" > ");
|
||||||
|
e.rhs.welcome(this);
|
||||||
|
ex.write(")");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(GTEExpression e) {
|
||||||
|
ex.write("(");
|
||||||
|
e.lhs.welcome(this);
|
||||||
|
ex.write(" >= ");
|
||||||
|
e.rhs.welcome(this);
|
||||||
|
ex.write(")");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(LTExpression e) {
|
||||||
|
ex.write("(");
|
||||||
|
e.lhs.welcome(this);
|
||||||
|
ex.write(" < ");
|
||||||
|
e.rhs.welcome(this);
|
||||||
|
ex.write(")");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visit(LTEExpression e) {
|
||||||
|
ex.write("(");
|
||||||
|
e.lhs.welcome(this);
|
||||||
|
ex.write(" <= ");
|
||||||
|
e.rhs.welcome(this);
|
||||||
|
ex.write(")");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visit(AdditionExpression e) {
|
public Void visit(AdditionExpression e) {
|
||||||
ex.write("(");
|
ex.write("(");
|
||||||
@@ -121,7 +171,6 @@ public class PrettyPrintVisitor implements Visitor<Void> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visit(NegateExpression e) {
|
public Void visit(NegateExpression e) {
|
||||||
ex.write(" - ");
|
ex.write(" - ");
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ public interface Visitor<R> {
|
|||||||
R visit(IntegerExpression e);
|
R visit(IntegerExpression e);
|
||||||
R visit(Variable e);
|
R visit(Variable e);
|
||||||
R visit(AdditionExpression e);
|
R visit(AdditionExpression e);
|
||||||
|
R visit(EqualityExpression e);
|
||||||
|
R visit(GTExpression e);
|
||||||
|
R visit(GTEExpression e);
|
||||||
|
R visit(LTExpression e);
|
||||||
|
R visit(LTEExpression e);
|
||||||
R visit(SubstractionExpression e);
|
R visit(SubstractionExpression e);
|
||||||
R visit(MultiplicationExpression e);
|
R visit(MultiplicationExpression e);
|
||||||
R visit(DivisionExpression e);
|
R visit(DivisionExpression e);
|
||||||
|
|||||||
Reference in New Issue
Block a user