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

前端 未结 1 444
庸人自扰
庸人自扰 2020-12-06 20:34

Many productions in EcmaScript are given with the following \"modifiers\":

[Yield, Await, In, Return]

Here are a few examples:



        
相关标签:
1条回答
  • 2020-12-06 21:04

    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.

    0 讨论(0)
提交回复
热议问题