package com.klq.ast; import com.klq.ast.impl.expr.IdentifierNode; import com.klq.ast.impl.expr.literal.*; import com.klq.ast.impl.stmt.*; import com.klq.ast.impl.expr.ABinaryExprNode; import com.klq.ast.impl.expr.bool.*; import com.klq.ast.impl.expr.math.AddNode; import com.klq.ast.impl.expr.math.DivideNode; import com.klq.ast.impl.expr.math.MultiplyNode; import com.klq.ast.impl.expr.math.SubtractNode; /** * Created by Juriaan on 21-2-2015. */ public class ASTPrinter implements IStatementVisitor<Void>, IExpressionVisitor<Void> { @Override public Void visit(QuestionnaireNode node) { System.out.println("Questionnaire Node"); System.out.printf("children count: %s", node.getChildren().size()); System.out.println(); printLine(); for(AStatementNode child : node.getChildren()){ child.accept(this); } return null; } @Override public Void visit(QuestionNode node) { System.out.println("Question Node"); node.printSelf(); printLine(); return null; } @Override public Void visit(ComputedQuestionNode node) { System.out.println("Computed Question Node"); node.printSelf(); printLine(); node.getComputedAnswer().accept(this); return null; } @Override public Void visit(GreaterThanNode node) { System.out.println("Greater Than Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(GreaterEqualsNode node) { System.out.println("Greater Than or Equals Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(LessThanNode node) { System.out.println("Less Than Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(LessEqualsNode node) { System.out.println("Less Than or Equals Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(EqualsNode node) { System.out.println("Equals Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(NotEqualsNode node) { System.out.println("Not Equals Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(AndNode node) { System.out.println("And Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(OrNode node) { System.out.println("Or Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(IdentifierNode node) { System.out.println("Identifier Node"); //System.out.println(node.getIdentifier()); printLine(); return null; } @Override public Void visit(ConditionalNode node) { System.out.println("Conditional Node"); node.printSelf(); printLine(); node.getCondition().accept(this); for(AStatementNode child : node.getChildren()){ child.accept(this); } return null; } @Override public Void visit(StringNode node) { System.out.println("String Node"); //System.out.printf("Value: %s", node.getString()); System.out.println(); printLine(); return null; } @Override public Void visit(BooleanNode node) { System.out.println("Boolean Node"); //System.out.printf("Value: %s", node.getString()); System.out.println(); printLine(); return null; } @Override public Void visit(NumberNode node) { System.out.println("Number Node"); //System.out.printf("Value: %s", node.getNumber()); System.out.println(); printLine(); return null; } @Override public Void visit(DateNode node) { System.out.println("Date Node"); //System.out.printf("Value: %s", node.getDate()); System.out.println(); printLine(); return null; } @Override public Void visit(MultiplyNode node) { System.out.println("Multiply Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(AddNode node) { System.out.println("Add Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } @Override public Void visit(SubtractNode node) { System.out.println("Subtract Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } public Void visit(DivideNode node){ System.out.println("Divide Node"); node.printChildren(); printLine(); visitBinaryChildren(node); return null; } private void printLine(){ System.out.println("--------------------------------------------"); } private void visitBinaryChildren(ABinaryExprNode node){ node.getLeftChild().accept(this); node.getRightChild().accept(this); } }