什么是EcmaScript语法中的[Yield,Await,In,Return]

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

EcmaScript中的许多作品都带有以下“修饰符”:

[Yield, Await, In, Return]

这里有一些例子:

ArrayLiteral[Yield, Await]:
  ...

ElementList[Yield, Await]:
 ... AssignmentExpression[+In, ?Yield, ?Await]

我已经通过规范搜索了解释,特别是Grammar Notation部分,但找不到它。应该在那里。有人可以请我指出相关段落并提供一个简短的解释吗?

javascript ecmascript-6 compiler-construction context-free-grammar
1个回答
2
投票

Section 5.1.5: Grammar Notation -

可以通过“[参数]”形式的下标注释来参数化生成,其可以作为由生产定义的非终结符号的后缀。 “参数”可以是单个名称,也可以是逗号分隔的名称列表。参数化生产是一组生产的简写,这些生产定义参数名称的所有组合,前面带有下划线,附加到参数化的非终结符号。这意味着:

StatementList[Return]:
   ReturnStatement
   ExpressionStatement

是一个方便的缩写:

StatementList:
   ReturnStatement
   ExpressionStatement
StatementList_Return:
   ReturnStatement
   ExpressionStatement

然后:

StatementList[Return, In]:
   ReturnStatement
   ExpressionStatement

是以下内容的缩写:

StatementList:
   ReturnStatement
   ExpressionStatement
StatementList_Return:
   ReturnStatement
   ExpressionStatement
StatementList_In:
   ReturnStatement
   ExpressionStatement
StatementList_Return_In:
   ReturnStatement
   ExpressionStatement

多个参数产生组合数量的产品,并非所有产品都必须在完整的语法中引用。

它继续谈论有关参数化右侧,添加“选择”等。

(搜索时,不要只是寻找[Return],特别是这样,因为它们可以并且通常会出现在像[Yield, Await, Return][?Yield, ?Await, ?Return]这样的组中,就像Block的语法一样。)

Section 12.1.1: Identifiers - Static Semantics: Early Errors -

如果此生产具有[Yield]参数且Identifier的StringValue为“yield”,则为语法错误。

如果此生产具有[Await]参数且Identifier的StringValue为“await”,则为语法错误。

Section 12.10: Relational Operators -

需要[In]语法参数以避免在in语句中将in运算符与for运算符中的qazxswpoi运算符混淆。

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