The ProgramPrinter
is used for string serialization of a given Program
.
package printer;
import interpreter.Visitor;
import program.*;
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) + " }";
}
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);
}
}