【问题标题】:JavaScript Grammar: for/for-in loop rules?JavaScript 语法:for/for-in 循环规则?
【发布时间】:2012-01-19 01:20:13
【问题描述】:

我正在编写一个 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 运算符。

我说对了吗,还是我只是糊涂了?

【问题讨论】:

    标签: javascript grammar


    【解决方案1】:

    你是对的。我认为您很困惑,因为 ANTLR 语法的标识符拼写错误。它应该是variableDeclarationListNoIn 表示“禁止进入”。 ANTLR 将其拼写为 Noln,使用小写的 l 而不是大写的 I

    从表达式中删除in 很重要,以避免在for 语句中对in 的特殊用途产生歧义。

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

    【讨论】:

      【解决方案2】:

      我想每一行代表以下fors:

      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
      

      【讨论】:

        猜你喜欢
        • 2011-07-12
        • 2012-11-18
        • 2015-02-25
        • 2018-09-09
        • 2016-03-30
        • 2018-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多