You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
1.3 KiB

  1. package printer;
  2. import interpreter.Visitor;
  3. import program.*;
  4. public class ProgramPrinter extends Visitor<String> {
  5. private final String value;
  6. public ProgramPrinter(Program program) {
  7. value = visit(program);
  8. }
  9. public String visitAssignment(Assignment assignment) {
  10. ExpressionPrinter identifierPrinter = new ExpressionPrinter(assignment.identifier);
  11. ExpressionPrinter expressionPrinter = new ExpressionPrinter(assignment.expression);
  12. return identifierPrinter.getValue() + " := " + expressionPrinter.getValue();
  13. }
  14. public String visitComposition(Composition composition) {
  15. return visit(composition.first) + " ; " + visit(composition.second);
  16. }
  17. public String visitConditional(Conditional conditional) {
  18. ExpressionPrinter conditionPrinter = new ExpressionPrinter(conditional.condition);
  19. return "if (" + conditionPrinter.getValue() + ") then { " + visit(conditional.thenCase) + " } else { " + visit(conditional.elseCase) + " }";
  20. }
  21. public String visitLoop(Loop loop) {
  22. ExpressionPrinter conditionPrinter = new ExpressionPrinter(loop.condition);
  23. return "while (" + conditionPrinter.getValue() + ") { " + visit(loop.program) + " }";
  24. }
  25. public String getValue() {
  26. return value;
  27. }
  28. }