如何在jison中将其他输入传递给`parse`?

时间:2014-06-11 11:27:51

标签: javascript node.js parsing jison

我想解析一个字符串,但是这个字符串可能包含对在运行时解析的变量的引用。理想情况下,我想将这些变量的散列及其值作为解析函数的第二个参数传递。

目前,我在从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']})

1 个答案:

答案 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']}