javascript - ecmascript 制作中的混乱
问题描述
我最近对 ecma262 规范中的产品感到困惑。
根据我的假设,有些作品可以是其他作品。
例如,声明
Statement可以是Block它也可以是IfStatement。
我的困惑始于看起来像这样的算法
一个。让 stmtCompletion 成为评估第一个Statement的结果。
评估声明?这是什么意思?
例如,如果一个Statement是一个IfStatement,它将转到14.6 if 语句 14.6.2 运行时语义:评估 ?
我很困惑,因为有些作品有他们的RS: 评估之类的IfStatement而有些没有RS: 评估之类的Statement,Declaration等...
解决方案
例如,如果Statement是IfStatement,它将转到14.6 if 语句 14.6.2 运行时语义:评估 ?
是的。
我很困惑,因为有些作品有他们的RS: 评估之类的IfStatement而有些没有RS: 评估之类的Statement,Declaration等...
这是什么意思?
这(在规范的最新版本中)甚至在§5.2.2 Syntax-Directed Operations中进行了解释。尤其是,
除非另有明确说明,否则所有链式产生式对于可能应用于该产生式左侧非终结符的每个操作都有一个隐式定义。隐式定义只是简单地将具有相同参数的相同操作(如果有)重新应用到链生产的唯一右侧非终结符,然后返回结果。例如,假设某个算法具有以下形式的步骤:“返回评估结果Block
”并且有一个产生式:
Block : { StatementList }
但评估操作不会将算法与该产品相关联。在这种情况下,评估操作隐含地包括以下形式的关联:
运行时语义:评估
Block : { StatementList }
- 返回评估的结果
StatementList
。
Statement
因此,由于生产没有“运行时语义:评估” ,它会获得隐式语义,只会评估相应的语句类型。
推荐阅读
- android - 有没有办法在第一次实例化后使用 Hilt Injection 重新创建房间数据库?
- mysql - 我可以在 MySQL 中为复合/多列索引设置多顺序索引吗?
- sql - ora-00932 不一致的数据类型预期数字得到 char plsql
- vscode-settings - VS 代码找不到 -lgcc 文件
- javascript - 如何在laravel中使用javascript在没有预览对话框的情况下打印
- python - 遍历一个列表并找到所有属性的 ID:
- flutter - 让蓝牙设备自动连接和断开的方法是什么?
- javascript - 如果我要查找的值在数组中的对象中,我想通过 javascript 返回 true
- python - 使用 Python 进行图像比较或分类
- javascript - 如何在 vuejs 中添加标题?