2
Есть ли способ передать данные в Jison таким образом, чтобы он мог ссылаться на него во время разбора? В качестве исходного случая, скажем, мы используем calculator.jison
и хотим, чтобы передать ему объект, скажетПередача данных в парсер 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;}
;
Doh, теперь, когда я написал этот вопрос я могу, наконец, понять документы. Ответ здесь https://zaach.github.io/jison/docs/#sharing-scope – prototype