0

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

目前,我正在sed -i '' 's/parse: function parse(input) {/parse: function parse(input, in_data) { data = in_data;/' grammar.js从grammar.jison 构建我的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']})
4

1 回答 1

2

您尝试执行的操作应该可以通过此指令实现:

%parse-param data

在我的.jison文件中,我将此指令放在我的%start指令之后和行之前%%。后面%parse-param的名称是解析器应该期望的参数名称。上面的这个指令将使得data解析器中有一个可用的变量,它将把传递给的第二个参数作为值parse。所以当你这样做时:

parse = require("./grammar").parse;
parse("is 'something'", {attrs: ['something', 'else']})

那么data应该有值{attrs: ['something', 'else']}

于 2014-06-11T12:04:26.200 回答