访问者背后的基本思想是,您必须自己处理所有逻辑。为此,我使用antlr生成了访客。我自己的访问者会覆盖实现逻辑所需的所有功能。
- 创建词法分析器,令牌,…
var antlr4 = require('antlr4/index'); var SimpleJavaLexer = require('generated/GrammarLexer'); var SimpleJavaParser = require('generated/GrammarParser'); var SimpleJavaVisitor = require('generated/GrammarVisitor'); var Visitor = require('./Visitor'); var input = "TestInput"; var chars = new antlr4.InputStream(input); var lexer = new GrammarLexer.GrammarLexer(chars); var tokens = new antlr4.CommonTokenStream(lexer); var parser = new GrammarParser.GrammarParser(tokens); var visitor = new Visitor.Visitor(); parser.buildParseTrees = true; var tree = parser.parse();并调用您的输入函数
visitor.visitTest(tree);
在新访客内部,您需要实现新逻辑,以确定下一步要调用哪个函数(正确的上下文作为参数很重要)
var GrammarVisitor = require('generated/GrammarVisitor').GrammarVisitor; function Visitor () { SimpleJavaVisitor.call(this); return this; }; Visitor.prototype = Object.create(GrammarVisitor.prototype); Visitor.prototype.constructor = Visitor; Visitor.prototype.visitTest = function(ctx) { // implement logic to determine which function to visit // then call next function and with the right context this.visitBlock(ctx.block()); };希望您能理解我的基本想法。如果有人有任何疑问,请发表评论。



