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

最佳答案

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

  • 为检查语法分析树节点的子级之前/之后提供单独的enter / exit方法。
  • 所有方法都返回void。侦听器为“返回”收集的任何值都必须保存在字段或其他地方。
  • 控制检查哪些树节点是外部的(通过ParseTreeWalker或派生类)。
  • ParseTreeVisitor
  • 提供一种方法,负责每个解析树节点的所有分析/行为。
  • 每个方法都返回通用类型参数T,如果访问者方法未返回值,则该类型参数可以为Void
  • 控制内部检查哪些树节点(通过visitChildren和/或特定子项对visit的调用)。
  • 08-05 17:35