Javascript 如何将附加输入传递给jison中的'parse'?

Javascript 如何将附加输入传递给jison中的'parse'?,javascript,node.js,parsing,jison,Javascript,Node.js,Parsing,Jison,我想解析一个字符串,但这个字符串可能包含对在运行时解析的变量的引用。理想情况下,我希望将这些变量及其值的散列作为第二个参数传递给parse函数 目前,在从grammar.jison构建my grammar.js之后,我正在运行sed-I''s/parse:function parse(input){/parse:function parse(input,in_data){data=in_data;/'grammar.js,但这似乎不是一个最佳的解决方案。建议使用什么方法来实现这一点 在我的jis

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

目前,在从grammar.jison构建my 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;
}
我希望在运行时传入
数据
散列,如下所示:

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

您试图做的事情应该可以通过本指令实现:

%parse-param data
在我的
.jison
文件中,我将此指令放在我的
%start
指令之后,
%%
行之前。
%parse param
之后的名称是解析器应该期望的参数的名称。上面的这个指令将使它成为一个
数据
变量,在您的arser,它将作为传递给
parse
的第二个参数的值。因此,当您执行以下操作时:

parse = require("./grammar").parse;
parse("is 'something'", {attrs: ['something', 'else']})
然后
数据
应该具有值
{attrs:['something','else']}