package Compiler; import java.util.List; abstract class Statement { static class ExpressionStatement extends Statement{ ExpressionStatement(Expression expr){ this.expr = expr; } final Expression expr; @Override public String getStatmentType() { return "exprStmt"; } } static class IfStatement extends Statement{ IfStatement(Expression condition, List statements,List elseStatements){ this.condition=condition; this.statements=statements; this.elseStatements=elseStatements; } final Expression condition; final List statements; final List elseStatements; @Override public String getStatmentType() { return "ifStmt"; } } static class VariableDeclaration extends Statement{ VariableDeclaration(Token name,String type){ this.name=name; this.type=type; } final Token name; final String type; @Override public String getStatmentType() { return "varDec"; } } static class StringDeclaration extends Statement{ StringDeclaration(Token name,Expression length){ this.name=name; this.length=length; } final Token name; final Expression length; @Override public String getStatmentType() { return "stringDec"; } } static class PrintStatement extends Statement{ PrintStatement(List exprList){ this.exprList=exprList; } final List exprList; @Override public String getStatmentType() { return "print"; } } public abstract String getStatmentType(); }