package Compiler; abstract class Expression { static class Binary extends Expression{ final Expression left; final Expression right; final Token op; Binary(Expression left, Token op, Expression right){ this.left=left; this.op=op; this.right = right; } @Override public String getExpressionType() { return "binary"; } } static class Literal extends Expression{ final Token value; final String type; Literal(Token value,String type){ this.value=value; this.type=type; } @Override public String getExpressionType() { return "literal"; } } static class BracketedExpression extends Expression{ final Expression expr; BracketedExpression(Expression expr){ this.expr=expr; } @Override public String getExpressionType() { return "bracket"; } } static class AssignmentExpression extends Expression{ final Token name; final Expression value; AssignmentExpression(Token name,Expression value){ this.name=name; this.value=value; } @Override public String getExpressionType() { return "assign"; } } static class Variable extends Expression{ Variable(Token name){ this.name=name; } @Override public String getExpressionType() { return "var"; } final Token name; } public abstract String getExpressionType(); }