如何设置和调用ANTLR4 Javascript Visitor

How to set up and invoke ANTLR4 Javascript Visitor

本文关键字:调用 ANTLR4 Javascript Visitor 何设置 设置      更新时间:2023-09-26

谁能解释或指出我使用ANTLR4 Javascript Visiter实现的工作示例?ANTLR4 Javascript Target 的文档展示了如何实现侦听器,而不是访问者。

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

侦听器是你实现的东西,由ANTLR步行者调用。你必须设置步行者,给它你的解析树,以及你的侦听器实现。

访客只是您称呼自己的一个类。您调用的函数与相关的 AST 节点相对应,并命名为 visitStatementvisitProgram 。该名称基于 ANTLR 语法分析器规则,或者如果您已指定子规则名称(使用 #alternativeNameForThisSubrule 语法(,则基于您为其指定的名称。但它将visit预先添加。

这就是让我绊倒的原因,因为我看到的例子轻率地使用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