首页 > 解决方案 > ecmascript 制作中的混乱

问题描述

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

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

例如,声明

Statement可以是Block它也可以是IfStatement

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

一个。让 stmtCompletion 成为评估第一个Statement的结果。

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

例如,如果一个Statement是一个IfStatement,它将转到14.6 if 语句 14.6.2 运行时语义:评估

我很困惑,因为有些作品有他们的RS: 评估之类的IfStatement而有些没有RS: 评估之类的StatementDeclaration等...

标签: javascriptecma262

解决方案


例如,如果Statement是IfStatement,它将转到14.6 if 语句 14.6.2 运行时语义:评估

是的。

我很困惑,因为有些作品有他们的RS: 评估之类的IfStatement而有些没有RS: 评估之类的StatementDeclaration等...

这是什么意思?

这(在规范的最新版本中)甚至在§5.2.2 Syntax-Directed Operations中进行了解释。尤其是,

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

Block : { StatementList }

但评估操作不会将算法与该产品相关联。在这种情况下,评估操作隐含地包括以下形式的关联:

运行时语义:评估

Block : { StatementList }

  1. 返回评估的结果StatementList

Statement因此,由于生产没有“运行时语义:评估” ,它会获得隐式语义,只会评估相应的语句类型。


推荐阅读