add context analysis and custom visitors
This commit is contained in:
19
src/main/java/de/hsrm/compiler/Klang/nodes/Block.java
Normal file
19
src/main/java/de/hsrm/compiler/Klang/nodes/Block.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package de.hsrm.compiler.Klang.nodes;
|
||||
|
||||
import de.hsrm.compiler.Klang.nodes.statements.Statement;
|
||||
import de.hsrm.compiler.Klang.visitors.Visitor;
|
||||
|
||||
public class Block extends Node {
|
||||
|
||||
public Statement[] statements;
|
||||
|
||||
public Block(Statement[] statements) {
|
||||
this.statements = statements;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R> R welcome(Visitor<R> v) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
9
src/main/java/de/hsrm/compiler/Klang/nodes/Node.java
Normal file
9
src/main/java/de/hsrm/compiler/Klang/nodes/Node.java
Normal file
@@ -0,0 +1,9 @@
|
||||
package de.hsrm.compiler.Klang.nodes;
|
||||
|
||||
import de.hsrm.compiler.Klang.types.*;
|
||||
import de.hsrm.compiler.Klang.visitors.*;
|
||||
|
||||
public abstract class Node {
|
||||
public Type type;
|
||||
public abstract <R> R welcome(Visitor<R> v);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package de.hsrm.compiler.Klang.nodes.expressions;
|
||||
|
||||
import de.hsrm.compiler.Klang.nodes.*;
|
||||
|
||||
public abstract class Expression extends Node {
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package de.hsrm.compiler.Klang.nodes.statements;
|
||||
|
||||
import de.hsrm.compiler.Klang.nodes.Block;
|
||||
import de.hsrm.compiler.Klang.nodes.expressions.Expression;
|
||||
import de.hsrm.compiler.Klang.visitors.Visitor;
|
||||
|
||||
public class IfStatement extends Statement {
|
||||
|
||||
public Expression cond;
|
||||
public Block then;
|
||||
public Block alt;
|
||||
|
||||
public IfStatement(Expression cond, Block then, Block alt) {
|
||||
this.cond = cond;
|
||||
this.then = then;
|
||||
this.alt = alt;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R> R welcome(Visitor<R> v) {
|
||||
return v.visit(this);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package de.hsrm.compiler.Klang.nodes.statements;
|
||||
|
||||
import de.hsrm.compiler.Klang.nodes.expressions.Expression;
|
||||
import de.hsrm.compiler.Klang.visitors.Visitor;
|
||||
|
||||
public class PrintStatement extends Statement {
|
||||
public Expression expression;
|
||||
|
||||
public PrintStatement(Expression expression) {
|
||||
this.expression = expression;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R> R welcome(Visitor<R> v) {
|
||||
return v.visit(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package de.hsrm.compiler.Klang.nodes.statements;
|
||||
|
||||
import de.hsrm.compiler.Klang.nodes.Node;
|
||||
|
||||
public abstract class Statement extends Node {
|
||||
}
|
||||
Reference in New Issue
Block a user