最近我对 ecma262 规范的制作感到困惑。
有些作品是基于我的假设,也可以是其他作品。
例如,声明
Statement可以是Block,也可以是IfStatement。
我的困惑始于看起来像这样的算法
a. Let stmtCompletion be the result of evaluating the first Statement.
评估声明?这是什么意思?
例如,如果语句是IfStatement,它将转到14.6 The if Statement 14.6.2 Runtime Semantics: Evaluation ?
我主要感到困惑,因为有些作品有 RS:评估,例如 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 中进行了解释。 。特别是,
除非另有明确指定,否则所有链产生式对于可能应用于该产生式左侧非终结符的每个操作都有隐式定义。隐式定义只是将具有相同参数(如果有)的相同操作重新应用于链产生式的唯一右侧非终结符,然后返回结果。例如,假设某个算法具有以下形式的步骤:“返回评估Block
的结果”并且存在一个产生式:
block :{ StatementList }
但是求值操作并不将算法与该产生式关联起来。在这种情况下,评估操作隐式包含以下形式的关联:
运行时语义:评估
block :{ StatementList }
- 返回
StatementList
的计算结果。
因此,由于 Statement
production 没有“运行时语义:评估” ,它获得隐式语义,将简单地评估相应的语句类型。
关于javascript - ecmascript 制作中的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69596172/