解析中に参照できるように Jison にデータを渡す方法はありますか? 最初のケースとして、 を使用していて、calculator.jison
それにオブジェクトを渡したいとしましょう。
var parser = new jison.Parser(bnf);
var data = `{m: 4, b: 2, x: 10};
parser.parse("m*x + b", data);
VARIABLE { $$ = data[text]; }
これは、提供されたデータ オブジェクトを使用して変数を解決する、新しいケースが追加されたcalculator.jisonです。
%start expressions
%% /* language grammar */
expressions : e EOF { return $1; };
e
: e '+' e
{$$ = $1+$3;}
| e '-' e
{$$ = $1-$3;}
| e '*' e
{$$ = $1*$3;}
| e '/' e
{$$ = $1/$3;}
| e '^' e
{$$ = Math.pow($1, $3);}
| e '!'
{{
$$ = (function fact (n) { return n==0 ? 1 : fact(n-1) * n })($1);
}}
| e '%'
{$$ = $1/100;}
| '-' e %prec UMINUS
{$$ = -$2;}
| '(' e ')'
{$$ = $2;}
| VARIABLE
{ $$ = data[text]; }
| NUMBER
{$$ = Number(yytext);}
| E
{$$ = Math.E;}
| PI
{$$ = Math.PI;}
;