2012-01-19 326 views
0

我在寫一個JavaScript解析器,但for循環的語法規則有點混亂。 From the specsJavaScript語法:for/for-in循環規則?

'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 
    ) 

我試圖找出expressionNoln,只是一個普通expression之間的差異。並且,在此過程中,請找出variableDeclartionNolnvariableDeclartionListNoln發生了什麼。

我發現的唯一區別是在relationalExpressionrelationalExpressionNoln之間進一步下降。後者的規則是缺少in運營商。

我說得對嗎,還是我感到困惑?

回答

1

你是對的。我覺得你很困惑,因爲ANTLR語法的拼寫錯誤。對於「否」,應該是variableDeclarationListNoIn。 ANTLR使用小寫l來代替Noln,而不是大寫I

從表達式中刪除in對於避免for語句中in的特殊用法不明確是很重要的。

順便說一句,你的問題意味着你給的鏈接是規範。不是這樣。它是一個示例ANTLR語法的鏈接。官方標配可以在這裏找到:http://www.ecma-international.org/publications/standards/Ecma-262.htm

0

我想象每一行代表以下for S:

for (i = 0; i < 10; i++) console.log(i); 
for (var i = 0; i < 10; i++) console.log(i); 
for (i in obj) console.log(i + ': ' + obj[i]); 
for (var i in obj) console.log(i + ': ' + obj[i]); 

我不知道什麼No Line(這是我想象它代表)表示,雖然。

SEMI = ';' LPAREN = '(' RPAREN = ')'  ? = optional  | = or