刚刚在最新的antlr上构建了一个语法,编译到java并经过测试,工作正常。
编译为 javascript 并尝试对其进行测试,但我在 Lexer 的第 111 行收到错误.js表明 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();
是最终调用词法分析器并在运行时产生错误的内容。
我已经在 JavaScript 运行时的 4.7.2 和 4.7.1 版本上进行了测试,并且都在同一行上产生了相同的错误,即 Lexer.js 的 111。
不知道这里还能尝试什么...
好的,在第 5 次查看我的代码后,我意识到我忘记了这一行的new
语句:var chars = antlr4.InputStream(script);
.
该行应修改为var chars = new antlr4.InputStream(script);
,然后解决错误。