Я пишу BNF для JavaScript, который будет использоваться для создания лексера и анализатора для языка. Тем не менее, мне бы хотелось, чтобы некоторые идеи о том, как создать for-loop. Вот упрощенная версия моего текущего BNF:JavaScript for-loop в BNF
[...]
VarDecl. Statement ::= "var" Identifier "=" Expr ";"
ForLoop. Statement ::= "for" "(" Expr ";" Expr ";" Expr ")"
[...]
Так как вы можете видеть, есть два утверждения в примере, объявление переменного и для петель. Есть куча разных выражений, но no выражений также являются утверждениями.
Сейчас проблема заключается в том, что этот код JavaScript не будет проходить через анализатор:
for (var x = 3; [...]; [...])
Это потому, что объявление переменной не является выражением.
Что вы думаете о том, как это решить? Я могу думать о нескольких путях, но я не хочу мешать вашим собственным мыслям, поэтому я не буду упоминать их здесь.