ProgramPrinter

The ProgramPrinter is used for string serialization of a given Program.

------------------Show Header Code ( lines)------------------
package printer;

import interpreter.Visitor;
import program.*;
1

The ProgramPrinter implements the string serialization with the help of the Visitor.

public class ProgramPrinter extends Visitor<String> {
    private final ExpressionPrinter printer = new ExpressionPrinter();

    public String visitAssignment(Assignment assignment) {
        return printer.print(assignment.identifier) + " := " + printer.print(assignment.expression);
    }

    public String visitComposition(Composition composition) {
        return visit(composition.first) + " ; " + visit(composition.second);
    }

    public String visitConditional(Conditional conditional) {
        return "if (" + printer.print(conditional.condition) + ") then { " + visit(conditional.thenCase) +  " } else { " + visit(conditional.elseCase) + " }";
    }

    public String visitLoop(Loop loop) {
        return "while (" + printer.print(loop.condition) + ") { " + visit(loop.program) +  " }";
    }
2

The print function takes a Program instance as an argument and returns the string serialization of the given program.

    public String print(Program program) {
        return visit(program);
    }
}