我正在尝试编写一个 AST 解释器/REPL。ANTLRv4 提供了两个非常相似的接口(ParseTreeVisitor和ParseTreeListener)来遍历解析树。我似乎找不到它们之间的任何主要区别,并且文档相当稀疏。一个界面优于另一个界面吗?
问问题
1173 次
1 回答
7
这些接口用于不同的目的。主要区别如下:
ParseTreeListener
- 为检查分析树节点的子节点之前/之后提供单独的进入/退出方法。
- 所有方法都返回
void
。侦听器为“返回”收集的任何值都必须保存在字段或其他地方。 - 检查哪些树节点的控制是外部的(通过
ParseTreeWalker
或派生类)。
ParseTreeVisitor
- 提供一种负责每个解析树节点的所有分析/行为的方法。
- 每个方法都返回泛型类型参数
T
,这可能是Void
在访问者方法不返回值的情况下。 - 检查哪些树节点的控制是内部的(通过
visitChildren
和/或调用visit
特定子节点)。
于 2013-11-12T00:29:13.230 回答