我正在用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
方法时。我想你可以自己调用该方法,尽管解析器无论如何都会再次调用它。