javascript - 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 的同一行上产生了相同的错误。
不知道还有什么可以在这里尝试...
解决方案
好的,在第五次查看我的代码后,我意识到我忘记了new
这一行的声明: var chars = antlr4.InputStream(script);
.
该行应修改为 read var chars = new antlr4.InputStream(script);
,然后解决错误。
推荐阅读
- java - 基于线性键中的间隙分离数组
- vba - 使用组合框中的值编辑从列表框中选择的记录中的字段
- user-interface - 在 Flutter 中,如何创建像 Uber 这样的 UI 以在中间和 AppBar 中放置地图并导航到不同类型的视图
- r - R在列中用逗号读取csv
- javascript - 只匹配包括小数的数字
- javascript - 在 NodeJS 中修改 `module.paths` 是否合法?
- sql - INNER JOIN 里面的东西的计数?
- python - vec4的多个mat4,然后在Python中使其成为vec3
- arrays - 如何在 Swift 的数组中找到多个峰值和谷值元素?
- cmd - 如何从 Windows 注册表中获取 Windows 的产品名称?