如何转换Perl语句$ age = 25; BNF或EBNF语法?
答案 0 :(得分:3)
我可能会写一个语法
<statement> ::= <assignment> ";"
<assignment> ::= <lhs> "=" <rhs>
<lhs> ::= <var>
<rhs> ::= <expr>
<var> ::= ("@" | "$" | "%" | "*") <name>
<expr> ::= <var> | <number>
这将匹配一系列Perl-ish分配(为<name>
和<number>
提供了适当的定义);不只是您写的那个,还有
$age = 25;
@foo = $bar;
%baz = 9999999;
Perl具有一些语法上的复杂性,因此很难在此级别进行全面检查(考虑表达式$foo
,$foo{bar}
和$foo->{bar}
之间的差异),但是如果您愿意的话进行第二次类型检查,而不是典型的声明和表达语法。