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