我正在为 JavaScript 编写 BNF,它将用于生成该语言的词法分析器和解析器。但是,我想要一些关于如何设计 for 循环的想法。这是我当前 BNF 的简化版本:
[...]
VarDecl. Statement ::= "var" Identifier "=" Expr ";"
ForLoop. Statement ::= "for" "(" Expr ";" Expr ";" Expr ")"
[...]
如您所见,示例中有两个语句,变量声明和 for 循环。有很多不同的表达式,但没有一个表达式也是语句。
现在的问题是这段 JavaScript 代码不会通过解析器:
for (var x = 3; [...]; [...])
这是因为变量声明不是表达式。
你对如何解决这个问题有什么想法?我可以想到几个方法,但我不想妨碍你自己的想法,所以在此不提。