如何设置和调用ANTLR4 Javascript访问者

如何设置和调用ANTLR4 Javascript访问者,javascript,antlr4,Javascript,Antlr4,有人能给我解释一下或给我指出一个正在使用的ANTLR4 JavascriptVisitor实现的工作示例吗?的文档显示了如何实现侦听器,而不是访问者 这个问题与ANTLR语法无关,甚至与工具本身无关。我可以使用该工具愉快地生成访问者JS文件。我只是不知道如何调用它。侦听器是您实现的东西,由ANTLR walker调用。您必须设置walker,为其提供解析树和侦听器实现 访问者只是一个你称之为自己的类。您调用的函数与相关的AST节点相对应,其名称类似于visitStatement或visitPro

有人能给我解释一下或给我指出一个正在使用的ANTLR4 JavascriptVisitor实现的工作示例吗?的文档显示了如何实现侦听器,而不是访问者


这个问题与ANTLR语法无关,甚至与工具本身无关。我可以使用该工具愉快地生成访问者JS文件。我只是不知道如何调用它。

侦听器是您实现的东西,由ANTLR walker调用。您必须设置walker,为其提供解析树和侦听器实现

访问者只是一个你称之为自己的类。您调用的函数与相关的AST节点相对应,其名称类似于
visitStatement
visitProgram
。该名称基于ANTLR语法分析器规则,或者如果您已指定子规则名称(使用该子规则的
#AlternativeNameforthis subrule
语法),则它基于您指定的名称。但它将预先设置
访问

这让我大吃一惊,因为我看到的示例愉快地使用了
visit
作为实际函数的替代

无论哪种方式,使用访问者都完全是手动的

var chars = new antlr4.InputStream(input)
var lexer = new FancyLexer(chars)
var tokens  = new antlr4.CommonTokenStream(lexer)
var parser = new FancyParser(tokens)
parser.buildParseTrees = true
var tree = parser.block() // 'block' is the start rule
var visitor = new FancyVisitor()
return visitor.visitBlock(tree) // 'visitBlock' since that was the start rule

看看这是否能帮助你:这能回答你的问题吗?