【发布时间】:2021-07-03 10:32:18
【问题描述】:
我正在尝试使用递归下降解析方法和访问者模式构建一个编译器,以便使用 Java 进行语义检查。让我困惑的是使用访问者模式,我们必须创建不同的子类型。但是,Java 不会通过引用传递。这导致我无法为每个语义记录找到正确的子类型。这是我要实现的目标
Node node = new ExprNode();
changeNodeType(node);
public void changeNodeType(Node node) {
node = new AddOpNode();
}
那么最终我的节点类型将以 AddOpNode() 结束。有什么方法可以最终在 Java 中实现吗?
【问题讨论】:
-
您可以返回新对象并将其分配给适当位置的节点
-
我不清楚你为什么认为你需要这个
changeNodeType。您的措辞表明您可能认为使用访问者模式需要这种方法。事实并非如此。 -
在一个不相关的注释上:当您为不同的表达式类型使用子类时,创建
ExprNode对我来说似乎很奇怪。在这样的类型层次结构中,我希望ExprNode是抽象的。
标签: java compiler-construction visitor-pattern