2012-01-19 13 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はNolnの代わりに大文字のIの代わりに小文字のlを使用しています。

inを式から削除することは、forステートメントのinの特殊な使用のあいまいさを避けるために重要です。

ご質問は、ご提供いただいたリンクが仕様書であることを意味します。そうではない。 ANTLR文法の例へのリンクです。公式の標準は、ここで見つけることができます:http://www.ecma-international.org/publications/standards/Ecma-262.htm

0

私はそれぞれの行を想像では、次のfor秒を表します

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