8

我正在尝试编写一个 AST 解释器/REPL。ANTLRv4 提供了两个非常相似的接口(ParseTreeVisitorParseTreeListener)来遍历解析树。我似乎找不到它们之间的任何主要区别,并且文档相当稀疏。一个界面优于另一个界面吗?

4

1 回答 1

7

这些接口用于不同的目的。主要区别如下:

ParseTreeListener

  • 为检查分析树节点的子节点之前/之后提供单独的进入/退出方法。
  • 所有方法都返回void。侦听器为“返回”收集的任何值都必须保存在字段或其他地方。
  • 检查哪些树节点的控制是外部的(通过ParseTreeWalker或派生类)。

ParseTreeVisitor

  • 提供一种负责每个解析树节点的所有分析/行为的方法。
  • 每个方法都返回泛型类型参数T,这可能是Void在访问者方法不返回值的情况下。
  • 检查哪些树节点的控制是内部的(通过visitChildren和/或调用visit特定子节点)。
于 2013-11-12T00:29:13.230 回答