您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Antlr4 Javascript访问者

Antlr4 Javascript访问者

访问者背后的基本思想是,您必须自己处理所有逻辑。为此,我使用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());
    };

希望您能理解我的基本想法。如果有人有任何疑问,请发表评论

javascript 2022/1/1 18:27:27 有322人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶