浏览代码

Use visitor for printing program

pull/1/head
nils 9 年前
父节点
当前提交
d2cc050cb1
共有 2 个文件被更改,包括 68 次插入0 次删除
  1. +32
    -0
      src/main/java/printer/ExpressionPrinter.java
  2. +36
    -0
      src/main/java/printer/ProgramPrinter.java

+ 32
- 0
src/main/java/printer/ExpressionPrinter.java 查看文件

@@ -0,0 +1,32 @@
package printer;

import expression.*;
import interpreter.Visitor;

public class ExpressionPrinter extends Visitor<String> {
private final String value;

public ExpressionPrinter(Expression expression) {
value = visit(expression);
}

public String visitAddition(Addition addition) {
return "(" + visit(addition.leftHandSide) + " + " + visit(addition.rightHandSide) + ")";
}

public String visitIdentifier(Identifier identifier) {
return identifier.name;
}

public String visitInt(Int integer) {
return Integer.toString(integer.value);
}

public String visitSubtraction(Subtraction subtraction) {
return "(" + visit(subtraction.leftHandSide) + " - " + visit(subtraction.rightHandSide) + ")";
}

public String getValue() {
return value;
}
}

+ 36
- 0
src/main/java/printer/ProgramPrinter.java 查看文件

@@ -0,0 +1,36 @@
package printer;

import interpreter.Visitor;
import program.*;

public class ProgramPrinter extends Visitor<String> {
private final String value;

public ProgramPrinter(Program program) {
value = visit(program);
}

public String visitAssignment(Assignment assignment) {
ExpressionPrinter identifierPrinter = new ExpressionPrinter(assignment.identifier);
ExpressionPrinter expressionPrinter = new ExpressionPrinter(assignment.expression);
return identifierPrinter.getValue() + " := " + expressionPrinter.getValue();
}

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

public String visitConditional(Conditional conditional) {
ExpressionPrinter conditionPrinter = new ExpressionPrinter(conditional.condition);
return "if (" + conditionPrinter.getValue() + ") then { " + visit(conditional.thenCase) + " } else { " + visit(conditional.elseCase) + " }";
}

public String visitLoop(Loop loop) {
ExpressionPrinter conditionPrinter = new ExpressionPrinter(loop.condition);
return "while (" + conditionPrinter.getValue() + ") { " + visit(loop.program) + " }";
}

public String getValue() {
return value;
}
}

正在加载...
取消
保存