Я бы написал грамматику, возможно, что-то вроде
<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}
), но если вы готовы сделать второй проход проверка типов, чем должна быть довольно типичная грамматика выражения и выражения.