有人可以解释或指出我正在使用的ANTLR4 Javascript 访客实施的工作示例吗? this的文档显示了如何实现监听器,而不是访客。
这个问题不是关于ANTLR语法,甚至不是工具本身。我可以使用该工具愉快地生成访问者JS文件。我根本不知道如何调用它。
答案 0 :(得分:5)
监听器是您实现并由ANTLR walker 调用的。你必须设置walker,给它你的解析树和你的监听器实现。
访客只是一个你自称的课程。您调用的函数与相关的AST节点对应,其名称类似于visitStatement
或visitProgram
。如果您已经给出了子规则名称(使用#alternativeNameForThisSubrule
语法),则该名称基于ANTLR语法分析器规则或,它基于您提供的名称。但它会有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