我想解析一个字符串,但是这个字符串可能包含对在运行时解析的变量的引用。理想情况下,我想将这些变量的散列及其值作为解析函数的第二个参数传递。
目前,我在从grammar.jison构建我的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']})
答案 0 :(得分:1)
使用此指令应该可以实现您想要做的事情:
%parse-param data
在我的.jison
文件中,我将此指令放在%start
指令之后且恰好位于%%
行之前。 %parse-param
之后的名称是解析器应该期望的参数的名称。上面的这个指令将使得解析器中有一个data
变量可用于传递给parse
的第二个参数的值。所以当你这样做时:
parse = require("./grammar").parse;
parse("is 'something'", {attrs: ['something', 'else']})
然后data
的值应为{attrs: ['something', 'else']}
。