Как вы пишете Perl оператор $ age = 25; в BNF или EBNF - PullRequest
0 голосов
/ 07 сентября 2018

Как мне преобразовать оператор Perl $ age = 25; в грамматику BNF или EBNF?

1 Ответ

0 голосов
/ 07 сентября 2018

Я бы написал грамматику, возможно, что-то вроде

<statement> ::= <assignment> ";"
<assignment> ::= <lhs> "=" <rhs>
<lhs> ::= <var>
<rhs> ::= <expr>
<var> ::= ("@" | "$" | "%" | "*") <name>
<expr> ::= <var> | <number>

Это будет соответствовать диапазону Perl-ih присваиваний (с учетом подходящих определений для <name> и <number>); не только тот, который вы написали, но и

$age = 25;
@foo = $bar;
%baz = 9999999;

Perl имеет некоторые синтаксические сложности, которые затрудняют полную проверку на этом уровне (рассмотрите различия между выражениями $foo, $foo{bar} и $foo->{bar}), но если вы готовы сделать второй проход проверка типов, чем должна быть довольно типичная грамматика выражения и выражения.

...