是否可以在JS代码中以编程方式设置Jison解析器的状态?



我正在用JS编写一个脚本,该脚本使用Jison(https://zaa.ch/jison/(作为解析器生成器;我在其文档中找不到如下所示的任何内容:

// index.js - the script using the jison parser 
let myParser = require('/path/to/parser').parser; 
// some logic here to determine what the state should be 
myParser.setState('someState');
myParser.parser('someInput'); 
myParser.popState(); 
// etc.

我有一些逻辑可以清理来自服务器的响应,并在将其发送到我的解析器之前确定有关该输出的一些信息。是否可以在.jison文件本身之外设置解析器的状态?

谢谢!


编辑:在下面添加更多信息:

我注意到在 Jison 生成的代码中,正在导出的解析器函数/对象有一个lexer字段。词法分析器有方法pushState()popState()。我尝试调用它,但出现以下错误:

例:

let myParser = require('/path/to/parser').parser; 
myParser.lexer.pushState('someState');
myParser.parse('someInput');
myParser.lexer.popState();

输出:

node index.js
C:pathtomyscriptTheParser.js:608
this.conditionStack.push(condition);
^
TypeError: Cannot read property 'push' of undefined

在初始化词法分析器之前,不能使用begin/pushState,这发生在调用其setInput方法时。我想你可以自己调用该方法,尽管解析器无论如何都会再次调用它。

相关内容

  • 没有找到相关文章

最新更新