added boolean operators

This commit is contained in:
Marvin Kaiser
2020-01-20 16:01:25 +01:00
parent 1186bb4550
commit d27df13ec1
11 changed files with 126 additions and 1 deletions

View File

@@ -10,6 +10,7 @@ import de.hsrm.compiler.Klang.nodes.loops.ForLoop;
import de.hsrm.compiler.Klang.nodes.loops.WhileLoop;
import de.hsrm.compiler.Klang.nodes.statements.*;
import de.hsrm.compiler.Klang.types.Type;
import sun.tools.tree.OrExpression;
public class ContextAnalysis extends KlangBaseVisitor<Node> {
Set<String> vars = new HashSet<>();
@@ -126,6 +127,16 @@ public class ContextAnalysis extends KlangBaseVisitor<Node> {
return new ReturnStatement(expression);
}
@Override
public Node visitOrExpression(KlangParser.OrExpressionContext ctx) {
return new OrExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
}
@Override
public Node visitAndExpression(KlangParser.AndExpressionContext ctx) {
return new AndExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
}
@Override
public Node visitAdditionExpression(KlangParser.AdditionExpressionContext ctx) {
return new AdditionExpression((Expression) this.visit(ctx.lhs), (Expression) this.visit(ctx.rhs));
@@ -186,6 +197,11 @@ public class ContextAnalysis extends KlangBaseVisitor<Node> {
return new NegateExpression((Expression) this.visit(ctx.expression()));
}
@Override
public Node visitNotExpression(KlangParser.NotExpressionContext ctx) {
return new NotExpression((Expression) this.visit(ctx.expression()));
}
@Override
public Node visitVariable(KlangParser.VariableContext ctx) {
String name = ctx.IDENT().getText();

View File

@@ -0,0 +1,14 @@
package de.hsrm.compiler.Klang.nodes.expressions;
import de.hsrm.compiler.Klang.visitors.Visitor;
public class AndExpression extends BinaryExpression {
public AndExpression(Expression lhs, Expression rhs) {
super(lhs, rhs);
}
@Override
public <R> R welcome(Visitor<R> v) {
return v.visit(this);
}
}

View File

@@ -0,0 +1,16 @@
package de.hsrm.compiler.Klang.nodes.expressions;
import de.hsrm.compiler.Klang.visitors.Visitor;
public class NotExpression extends UnaryExpression {
public NotExpression(Expression lhs) {
super(lhs);
}
@Override
public <R> R welcome(Visitor<R> v) {
return v.visit(this);
}
}

View File

@@ -0,0 +1,14 @@
package de.hsrm.compiler.Klang.nodes.expressions;
import de.hsrm.compiler.Klang.visitors.Visitor;
public class OrExpression extends BinaryExpression {
public OrExpression(Expression lhs, Expression rhs) {
super(lhs, rhs);
}
@Override
public <R> R welcome(Visitor<R> v) {
return v.visit(this);
}
}

View File

@@ -8,6 +8,9 @@ import de.hsrm.compiler.Klang.nodes.loops.*;
import de.hsrm.compiler.Klang.nodes.statements.*;
public interface Visitor<R> {
R visit(OrExpression e);
R visit(AndExpression e);
R visit (NotExpression e);
R visit(IntegerExpression e);
R visit(BooleanExpression e);
R visit(Variable e);