add context analysis and custom visitors

This commit is contained in:
2019-11-04 17:35:15 +01:00
parent bef26434c6
commit c26cb6ddf5
22 changed files with 355 additions and 123 deletions

View File

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

View File

@@ -0,0 +1,12 @@
package de.hsrm.compiler.Klang.nodes.expressions;
public abstract class BinaryExpression extends Expression {
public Expression lhs;
public Expression rhs;
public BinaryExpression(Expression lhs, Expression rhs) {
this.lhs = lhs;
this.rhs = rhs;
}
}

View File

@@ -0,0 +1,6 @@
package de.hsrm.compiler.Klang.nodes.expressions;
import de.hsrm.compiler.Klang.nodes.*;
public abstract class Expression extends Node {
}

View File

@@ -0,0 +1,16 @@
package de.hsrm.compiler.Klang.nodes.expressions;
import de.hsrm.compiler.Klang.visitors.Visitor;
public class IntegerExpression extends Expression {
public int value;
public IntegerExpression(int value) {
this.value = value;
}
@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 ModuloExpression extends BinaryExpression {
public ModuloExpression(Expression lhs, Expression rhs) {
super(lhs, rhs);
}
@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 MultiplicativeExpression extends BinaryExpression {
public MultiplicativeExpression(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 NegateExpression extends UnaryExpression {
public NegateExpression(Expression lhs) {
super(lhs);
}
@Override
public <R> R welcome(Visitor<R> v) {
return v.visit(this);
}
}

View File

@@ -0,0 +1,10 @@
package de.hsrm.compiler.Klang.nodes.expressions;
public abstract class UnaryExpression extends Expression {
public Expression lhs;
public UnaryExpression(Expression lhs) {
this.lhs = lhs;
}
}