ecmascript 产品中的混乱

confusion in ecmascript productions

我最近对 ​​ecma262 规范中的产品感到困惑。

根据我的假设有一些作品可以是其他作品。

例如,声明

Statement 可以是 Block 也可以是 IfStatement.

我的困惑始于看起来像那样的算法

a. Let stmtCompletion be the result of evaluating the first Statement.

评估声明?这是什么意思?

如果一个语句,例如,是一个IfStatement,它会转到14.6 The if Statement 14.6 .2 运行时语义:评估 ?

我很困惑,因为有些作品有 RS: Evaluation,比如 IfStatement,有些则没有 RS:评估声明声明等...

If a Statement, for example, is an IfStatement will it go to the 14.6 The if Statement 14.6.2 Runtime Semantics: Evaluation ?

是的。

I'm mostly confused because there are productions that have their RS: Evaluation like IfStatement and some don't have the RS: Evaluation like Statement,Declaration, etc...

What does it mean?

这(在最近的规范修订版中)甚至在 §5.2.2 Syntax-Directed Operations 中进行了解释。特别是,

除非另有明确规定,否则所有链产生式都有一个隐式定义,用于每个可能应用于该产生式左侧非终结符的操作。隐式定义只是将具有相同参数(如果有)的相同操作重新应用于链产生式唯一的右侧非终结符,然后 returns 结果。例如,假设某些算法具有以下形式的步骤:“Return 评估 Block 的结果”,并且有一个产生式:

Block : { StatementList }

但求值操作并未将算法与该产生式相关联。在这种情况下,求值操作隐式包含以下形式的关联:

运行时语义:求值

Block : { StatementList }

  1. Return 计算结果 StatementList.

因此,由于 Statement production 没有“运行时语义:求值”,它获得隐式语义,将简单地求值相应的语句类型。