ParseTreeVisitor或ParseTreeListener

时间:2013-11-11 23:26:21

标签: java antlr

我正在尝试编写AST解释器/ REPL。 ANTLRv4提供两个非常相似的接口(ParseTreeVisitorParseTreeListener)来遍历解析树。我似乎无法找到它们之间的任何重大差异,并且文档相当稀疏。一个界面比另一个更好吗?

1 个答案:

答案 0 :(得分:6)

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

ParseTreeListener

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

ParseTreeVisitor

  • 提供一个方法,该方法负责每个解析树节点的所有分析/行为。
  • 每个方法都返回泛型类型参数T,如果访问者方法没有返回值,则可能为Void
  • 检查哪些树节点是内部(通过visitChildren和/或针对特定孩子调用visit