Many productions in EcmaScript are given with the following "modifiers":
[Yield, Await, In, Return]
Here are a few examples:
ArrayLiteral[Yield, Await]:
...
ElementList[Yield, Await]:
... AssignmentExpression[+In, ?Yield, ?Await]
I've searched through the spec for the explanation, specifically Grammar Notation
section, but can't find it. It should be there. Can someone please point me to the relevant paragraph and maybe provide a short explanation?
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 ExpressionStatementis a convenient abbreviation for:
StatementList: ReturnStatement ExpressionStatement StatementList_Return: ReturnStatement ExpressionStatementand that:
StatementList[Return, In]: ReturnStatement ExpressionStatementis an abbreviation for:
StatementList: ReturnStatement ExpressionStatement StatementList_Return: ReturnStatement ExpressionStatement StatementList_In: ReturnStatement ExpressionStatement StatementList_Return_In: ReturnStatement ExpressionStatementMultiple 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 thein
operator in afor
statement.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With