我想解析一个字符串,但是这个字符串可能包含对在运行时解析的变量的引用。理想情况下,我希望传入这些变量及其值的散列作为解析函数的第二个参数。
目前,我从语法构建我的grammar.js后运行sed -i '' 's/parse: function parse(input) {/parse: function parse(input, in_data) { data = in_data;/' grammar.js
。杰森,但这似乎不是最优方案。推荐的方法是什么?
在我的jison语法中,我有这样的东西:
start : 'IS' string {$$ = is($2);} ;
和在模块部分:
function is(a) {
data.attrs && data.attrs.indexOf(a) >= 0;
}
我想在运行时传递data
散列,所以像:
parse = require("./grammar").parse;
parse("is 'something'", {attrs: ['something', 'else']})
你想做的应该是可以实现的这个指令:
%parse-param data
在我的.jison
文件中,我把这个指令就在我的%start
指令之后,就在%%
行之前。%parse-param
后面的名称是解析器应该期望的参数名称。上面的指令将使解析器中有一个可用的data
变量,该变量将接受传递给parse
的第二个参数的值。所以当你这样做的时候:
parse = require("./grammar").parse;
parse("is 'something'", {attrs: ['something', 'else']})
那么data
的值应该是{attrs: ['something', 'else']}