What are [Yield, Await, In, Return] in EcmaScript grammar

本秂侑毒 提交于 2019-11-28 02:20:19

Section 5.1.5: Grammar Notation -

A production may be parameterized by a subscripted annotation of the form “[parameters]”, which may appear as a suffix to the nonterminal symbol defined by the production. “parameters” may be either a single name or a comma separated list of names. A parameterized production is shorthand for a set of productions defining all combinations of the parameter names, preceded by an underscore, appended to the parameterized nonterminal symbol. This means that:

StatementList[Return]:
   ReturnStatement
   ExpressionStatement

is a convenient abbreviation for:

StatementList:
   ReturnStatement
   ExpressionStatement
StatementList_Return:
   ReturnStatement
   ExpressionStatement

and that:

StatementList[Return, In]:
   ReturnStatement
   ExpressionStatement

is an abbreviation for:

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

Multiple parameters produce a combinatory number of productions, not all of which are necessarily referenced in a complete grammar.

It continues from there talking about parameterizing right-hand sides, adding "opt", etc.

(When searching, don't just look for [Return] and such specifically, as they can and usually do appear in groups like [Yield, Await, Return] and [?Yield, ?Await, ?Return] as in the syntax for Block.)

Section 12.1.1: Identifiers - Static Semantics: Early Errors -

It is a Syntax Error if this production has a [Yield] parameter and StringValue of Identifier is "yield".

It is a Syntax Error if this production has an [Await] parameter and StringValue of Identifier is "await".

Section 12.10: Relational Operators -

The [In] grammar parameter is needed to avoid confusing the in operator in a relational expression with the in operator in a for statement.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!