有没有办法将数据传递给 Jison,以便它可以在解析期间引用它?作为一个开始的例子,假设我们正在使用calculator.jison
并想要传递一个对象,比如说
var parser = new jison.Parser(bnf);
var data = `{m: 4, b: 2, x: 10};
parser.parse("m*x + b", data);
这是添加了新案例的calculator.jison VARIABLE { $$ = data[text]; }
,它使用提供的数据对象解析变量:
%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;}
;