我正在尝试编写AST解释器/ REPL。 ANTLRv4提供了两个非常相似的接口(ParseTreeVisitor和ParseTreeListener)来遍历解析树。我似乎找不到它们之间的主要区别,并且文档相当稀疏。一个接口优于另一个接口吗?
最佳答案
接口用于不同的目的。主要区别如下:ParseTreeListener
void
。侦听器为“返回”收集的任何值都必须保存在字段或其他地方。 ParseTreeWalker
或派生类)。 ParseTreeVisitor
T
,如果访问者方法未返回值,则该类型参数可以为Void
。 visitChildren
和/或特定子项对visit
的调用)。