首页 > 解决方案 > Lexer.nextToken() - var tokenStartMarker = this._input.mark(); 不是函数错误

问题描述

刚刚在最新的antlr上构建了一个语法,编译成java并经过测试,工作正常。

编译为 javascript 并尝试对其进行测试,但我在 Lexer.js 的第 111 行收到错误,表明var tokenStartMarker = this._input.mark();<== .mark() 不是函数。

这是我加载和解析语法的javascript代码:

var antlr4 = require('antlr4/index');
var BQLXLexer = require('grammar/BQLXLexer').BQLXLexer;
var BQLXParser = require('grammar/BQLXParser').BQLXParser;

function validatePipeline(script) {
    var chars = antlr4.InputStream(script);
    var lexer = new BQLXLexer(chars);
    var tokens = new antlr4.CommonTokenStream(lexer);
    var parser = new BQLXParser(tokens);
    parser.buildParseTrees = true;
    var ast = parser.pipeline();
    console.log(ast);
}

该行var ast = parser.pipeline();最终调用 Lexer 并在运行时产生错误。

我已经在 4.7.2 和 4.7.1 版本的 javascript 运行时上进行了测试,并且都在 Lexer.js 的 111 的同一行上产生了相同的错误。

不知道还有什么可以在这里尝试...

标签: javascriptantlr4

解决方案


好的,在第五次查看我的代码后,我意识到我忘记了new这一行的声明: var chars = antlr4.InputStream(script);.

该行应修改为 read var chars = new antlr4.InputStream(script);,然后解决错误。


推荐阅读