JavaScript语法:for / for-in循环规则?

时间:2012-01-19 01:20:14

标签: javascript grammar

我正在编写JavaScript解析器,但for循环的语法规则有点令人困惑。 From the specs

'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运算符。

我做对了,还是只是困惑?

2 个答案:

答案 0 :(得分:1)

你是对的。我认为你很困惑,因为ANTLR语法的标识符拼写错误。对于“不在”,它应该是variableDeclarationListNoIn。 ANTLR使用小写Noln而不是大写l拼写I

从表达式中删除in非常重要,可避免在in语句中特殊使用for时出现歧义。

顺便说一句,你的问题暗示你给出的链接是规范。它不是。它是一个示例ANTLR语法的链接。官方标准可以在这里找到:http://www.ecma-international.org/publications/standards/Ecma-262.htm

答案 1 :(得分: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