2009-05-01 3 views
0

Я пишу 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; [...]; [...]) 

Это потому, что объявление переменной не является выражением.

Что вы думаете о том, как это решить? Я могу думать о нескольких путях, но я не хочу мешать вашим собственным мыслям, поэтому я не буду упоминать их здесь.

ответ

1

Есть несколько примеров над сеткой, в ANTLR ECMAScript grammar вы можете найти эту структуру:

iterationStatement: 
'do' statement 'while' LPAREN expression RPAREN SEMI 
| 'while' LPAREN expression RPAREN statement 
| 'for' LPAREN (
    (expressionNoln)? SEMI (expression)? SEMI (expression)? RPAREN statement 
    | 'var' variableDeclarationListNoln SEMI (expression)? SEMI (expression)? RPAREN statement 
    | leftHandSideExpression 'in' expression RPAREN statement 
    | 'var' variableDeclarationNoln 'in' expression RPAREN statement 
    ) 
; 
0

Здесь вы можете разместить любое «простое» заявление (например, vardecl, выражение, вызов функции void и т. Д.). Простым я имею в виду все, что не является составным утверждением (т. Е. С дополнительными фигурными фигурными скобками, такими как if/else/for/function и т. Д.).

 Смежные вопросы

  • Нет связанных вопросов^_^