0

文字列を解析したいのですが、この文字列には、実行時に解決される変数への参照が含まれている可能性があります。理想的には、これらの変数とその値のハッシュを parse 関数の 2 番目の引数として渡したいと思います。

現在、sed -i '' 's/parse: function parse(input) {/parse: function parse(input, in_data) { data = in_data;/' grammar.jsgrammar.jison から grammar.js をビルドして実行していますが、これは最適なソリューションとは言えません。これを行うための推奨される方法は何ですか?

私のジソン文法では、次のようなものがあります。

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変数は、渡された 2 番目のパラメーターを値として受け取りますparse。だからあなたがするとき:

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

data値を持つ必要があります{attrs: ['something', 'else']}

于 2014-06-11T12:04:26.200 に答える