2009-05-01 116 views
0

我寫的BNF的JavaScript將被用來生成詞法分析器和語言分析器。不過,我想了解如何設計for循環的一些想法。這裏是我目前的BNF的簡化版本:JavaScript的for循環BNF

[...] 
VarDecl. Statement ::= "var" Identifier "=" Expr ";" 
ForLoop. Statement ::= "for" "(" Expr ";" Expr ";" Expr ")" 
[...] 

所以,您可以看到,示例中有兩個語句,變量聲明和for循環。有很多不同的表達,但表達的沒有也報表。現在

的問題是,這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,表達,空函數調用等)的存在。通過簡單的我的意思是什麼,是不是一個複合語句(即額外的大括號,如的if/else /爲/功能等)。