2012-01-19 319 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