package parser; import ast.statement.Block; import ast.statement.ComputedQuestion; import ast.statement.Form; import ast.statement.IfStatement; import ast.statement.IfelseStatement; import ast.statement.Question; import ast.statement.Statement; import ast.statement.StatementList; import ast.visitors.StatementVisitor; public class StatementParser implements StatementVisitor<String>{ private ExprParser exprParser = new ExprParser(); private TypeParser typeParser = new TypeParser(); public StatementParser() { } @Override public String visit(StatementList node) { String str= ""; for (Statement e : node.getList()) { str += e.accept(this) + "\n"; } return str; } @Override public String visit(Question node) { return node.getId().accept(exprParser) + ":" + node.getLabel().accept(exprParser)+ " " + node.getType().accept(typeParser); } @Override public String visit(ComputedQuestion node) { return node.getId().accept(exprParser) + ":" + node.getLabel().accept(exprParser)+ " " + node.getType().accept(typeParser) + " "+ node.getExpr().accept(exprParser); } @Override public String visit(Block node) { return (visit(node.getStatements())); } @Override public String visit(IfStatement node) { return "if " + node.getExpr().accept(exprParser) + "{\n" + visit(node.getStatements()) +"}"; } @Override public String visit(Form node) { String str = "form " + node.getId().accept(exprParser) + "{\n" + node.getStatements().accept(this) + "}"; return str; } @Override public String visit(IfelseStatement node){ return "\nif " + node.getExpr().accept(exprParser) + "{\n" + visit(node.getStatements()) + "}\nelse{\n" + visit(node.getElseStatements()) + "}"; } }