如何在jison中传递额外的输入给parse ?



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

目前,我从语法构建我的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']}

相关内容

  • 没有找到相关文章

最新更新