我正在研究如何使用ANTLR的Tree walker构建一个类型检查器。我看到有一种接受方法。在显示类型检查器实现的示例时,有时在编译器书籍中使用此方法
public Type visit(Plus n) {
if (! (n.e1.accept(this) instanceof IntegerType) )
error.complain("Left side of LessThan must be of type integer");
if (! (n.e2.accept(this) instanceof IntegerType) )
error.complain("Right side of LessThan must be of type integer");
return new IntegerType();
}
这段代码来自Java中的Modern Compiler Implementation。但我真的不明白n.e1.accept(this)的作用。树的每个节点在ANTLR中都有这个方法。
我检查过ANTLR v4文档,解释并不是很清楚;
The ParseTreeVisitor needs a double dispatch method.
有人能解释一下这是做什么的吗?
修改
我研究了一点,这不是一个ANTLR特定的问题,我认为这可以被认为是一个重复的问题所以也许删除它是个好主意:
答案 0 :(得分:0)
这是访客模式的内部实现。你可以放心地忽略它。你应该继承YOURGRAMMARBaseVisitor或YOURGRAMMARBaseListener。