谁能解释一下为什么for, while, do-while语句的语法定义为头中的条件部分是一个 "Expression"?

问题描述 投票:1回答:1

谁能给我解释一下,为啥 "我 "的语法是 "我"?对于, , 忙里偷闲 语句的定义,头中的条件部分是一个 "表达" 谁能给我解释一下下面的事情是什么意思?

Expression[In, Yield, Await] :
      AssignmentExpression[?In, ?Yield, ?Await]
      Expression[?In, ?Yield, ?Await] , AssignmentExpression[?In, ?Yield, ?Await]

如你所见,没有 字面意思 右边 非终端 Expression[In, Yield, Await] : 但还是可以写 字数 头内 for-statement, while-statement, do-while statement

for (var i = 0; null; i ++) {
             /* ^^^^ */
             /* null */   
}

while (null) {
    /* ^^^^ */
    /* null */
}

do {} while (null) ; 
          /* ^^^^ */
          /* null */

而且还可以写 函数表达式 在这些语句的标题中,即使是在 函数表达式 的右侧没有出现 非终端 Expression[In, Yield, Await] :

for (var i = 0; function () {}; i ++) ;
             /* ^^^^^^^^^^^^^^ */
             /*  functionExpr  */

while (function () {}) ;
    /* ^^^^^^^^^^^^^^ */
    /*  functionExpr  */
    
do ; while (function () {}) ;
         /* ^^^^^^^^^^^^^^ */
         /*  functionExpr  */
         
javascript context-free-grammar ecmascript-2020
1个回答
3
投票

我花了一些时间在文档中搜索,但我发现的是(总结)。

Expression: 
    AssignmentExpression

然后,在其他方面。

AssignmentExpression: 
    LeftHandSideExpression

所以我们可以深入嵌套。

LeftHandSideExpression: 
    NewExpression

NewExpression: 
    MemberExpression

MemberExpression: 
    PrimaryExpression

并发现PrimaryExpression包含了许多其他的项目,但同时也是 字面意思函数表达式:

PrimaryExpression[Yield, Await]:
     this
     IdentifierReference[?Yield, ?Await]
     Literal
     ArrayLiteral[?Yield, ?Await]
     ObjectLiteral[?Yield, ?Await]
     FunctionExpression
     ClassExpression[?Yield, ?Await]
     GeneratorExpression
     AsyncFunctionExpression
     AsyncGeneratorExpression
     RegularExpressionLiteral
     TemplateLiteral[?Yield, ?Await, ~Tagged]
     CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]

我希望我的回答足够清楚,并澄清你的疑惑。

© www.soinside.com 2019 - 2024. All rights reserved.