forked from mirrors/gecko-dev
Differential Revision: https://phabricator.services.mozilla.com/D64170 --HG-- extra : moz-landing-system : lando
1668 lines
45 KiB
Text
1668 lines
45 KiB
Text
|
|
StringNumericLiteral :::
|
|
StrWhiteSpace?
|
|
StrWhiteSpace? StrNumericLiteral StrWhiteSpace?
|
|
|
|
StrWhiteSpace :::
|
|
StrWhiteSpaceChar StrWhiteSpace?
|
|
|
|
StrWhiteSpaceChar :::
|
|
WhiteSpace
|
|
LineTerminator
|
|
|
|
StrNumericLiteral :::
|
|
StrDecimalLiteral
|
|
BinaryIntegerLiteral
|
|
OctalIntegerLiteral
|
|
HexIntegerLiteral
|
|
|
|
StrDecimalLiteral :::
|
|
StrUnsignedDecimalLiteral
|
|
`+` StrUnsignedDecimalLiteral
|
|
`-` StrUnsignedDecimalLiteral
|
|
|
|
StrUnsignedDecimalLiteral :::
|
|
`Infinity`
|
|
DecimalDigits `.` DecimalDigits? ExponentPart?
|
|
`.` DecimalDigits ExponentPart?
|
|
DecimalDigits ExponentPart?
|
|
|
|
|
|
SourceCharacter ::
|
|
> any Unicode code point
|
|
|
|
|
|
InputElementDiv ::
|
|
WhiteSpace
|
|
LineTerminator
|
|
Comment
|
|
CommonToken
|
|
DivPunctuator
|
|
RightBracePunctuator
|
|
|
|
InputElementRegExp ::
|
|
WhiteSpace
|
|
LineTerminator
|
|
Comment
|
|
CommonToken
|
|
RightBracePunctuator
|
|
RegularExpressionLiteral
|
|
|
|
InputElementRegExpOrTemplateTail ::
|
|
WhiteSpace
|
|
LineTerminator
|
|
Comment
|
|
CommonToken
|
|
RegularExpressionLiteral
|
|
TemplateSubstitutionTail
|
|
|
|
InputElementTemplateTail ::
|
|
WhiteSpace
|
|
LineTerminator
|
|
Comment
|
|
CommonToken
|
|
DivPunctuator
|
|
TemplateSubstitutionTail
|
|
|
|
|
|
WhiteSpace ::
|
|
<TAB>
|
|
<VT>
|
|
<FF>
|
|
<SP>
|
|
<NBSP>
|
|
<ZWNBSP>
|
|
<USP>
|
|
|
|
|
|
LineTerminator ::
|
|
<LF>
|
|
<CR>
|
|
<LS>
|
|
<PS>
|
|
|
|
LineTerminatorSequence ::
|
|
<LF>
|
|
<CR> [lookahead != <LF> ]
|
|
<LS>
|
|
<PS>
|
|
<CR> <LF>
|
|
|
|
|
|
Comment ::
|
|
MultiLineComment
|
|
SingleLineComment
|
|
|
|
MultiLineComment ::
|
|
`/*` MultiLineCommentChars? `*/`
|
|
|
|
MultiLineCommentChars ::
|
|
MultiLineNotAsteriskChar MultiLineCommentChars?
|
|
`*` PostAsteriskCommentChars?
|
|
|
|
PostAsteriskCommentChars ::
|
|
MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentChars?
|
|
`*` PostAsteriskCommentChars?
|
|
|
|
MultiLineNotAsteriskChar ::
|
|
SourceCharacter but not `*`
|
|
|
|
MultiLineNotForwardSlashOrAsteriskChar ::
|
|
SourceCharacter but not one of `/` or `*`
|
|
|
|
SingleLineComment ::
|
|
`//` SingleLineCommentChars?
|
|
|
|
SingleLineCommentChars ::
|
|
SingleLineCommentChar SingleLineCommentChars?
|
|
|
|
SingleLineCommentChar ::
|
|
SourceCharacter but not LineTerminator
|
|
|
|
|
|
CommonToken ::
|
|
IdentifierName
|
|
Punctuator
|
|
NumericLiteral
|
|
StringLiteral
|
|
Template
|
|
|
|
|
|
IdentifierName ::
|
|
IdentifierStart
|
|
IdentifierName IdentifierPart
|
|
|
|
IdentifierStart ::
|
|
UnicodeIDStart
|
|
`$`
|
|
`_`
|
|
`\` UnicodeEscapeSequence
|
|
|
|
IdentifierPart ::
|
|
UnicodeIDContinue
|
|
`$`
|
|
`\` UnicodeEscapeSequence
|
|
<ZWNJ>
|
|
<ZWJ>
|
|
|
|
UnicodeIDStart ::
|
|
> any Unicode code point with the Unicode property “ID_Start”
|
|
|
|
UnicodeIDContinue ::
|
|
> any Unicode code point with the Unicode property “ID_Continue”
|
|
|
|
|
|
ReservedWord ::
|
|
Keyword
|
|
FutureReservedWord
|
|
NullLiteral
|
|
BooleanLiteral
|
|
|
|
|
|
Keyword :: one of
|
|
`await`
|
|
`break`
|
|
`case` `catch` `class` `const` `continue`
|
|
`debugger` `default` `delete` `do`
|
|
`else` `export` `extends`
|
|
`finally` `for` `function`
|
|
`if` `import` `in` `instanceof`
|
|
`new`
|
|
`return`
|
|
`super` `switch`
|
|
`this` `throw` `try` `typeof`
|
|
`var` `void`
|
|
`while` `with`
|
|
`yield`
|
|
|
|
|
|
FutureReservedWord ::
|
|
`enum`
|
|
|
|
|
|
Punctuator :: one of
|
|
`{` `(` `)` `[` `]`
|
|
`.` `...` `;` `,`
|
|
`<` `>` `<=` `>=`
|
|
`==` `!=` `===` `!==`
|
|
`+` `-` `*` `%` `**`
|
|
`++` `--`
|
|
`<<` `>>` `>>>`
|
|
`&` `|` `^`
|
|
`!` `~`
|
|
`&&` `||`
|
|
`?` `:`
|
|
`=` `+=` `-=` `*=` `%=` `**=` `<<=` `>>=` `>>>=` `&=` `|=` `^=`
|
|
`=>`
|
|
|
|
DivPunctuator ::
|
|
`/`
|
|
`/=`
|
|
|
|
RightBracePunctuator ::
|
|
`}`
|
|
|
|
|
|
NullLiteral ::
|
|
`null`
|
|
|
|
|
|
BooleanLiteral ::
|
|
`true`
|
|
`false`
|
|
|
|
|
|
NumericLiteral ::
|
|
DecimalLiteral
|
|
BinaryIntegerLiteral
|
|
OctalIntegerLiteral
|
|
HexIntegerLiteral
|
|
|
|
DecimalLiteral ::
|
|
DecimalIntegerLiteral `.` DecimalDigits? ExponentPart?
|
|
`.` DecimalDigits ExponentPart?
|
|
DecimalIntegerLiteral ExponentPart?
|
|
|
|
DecimalIntegerLiteral ::
|
|
`0`
|
|
NonZeroDigit DecimalDigits?
|
|
|
|
DecimalDigits ::
|
|
DecimalDigit
|
|
DecimalDigits DecimalDigit
|
|
|
|
DecimalDigit :: one of
|
|
`0` `1` `2` `3` `4` `5` `6` `7` `8` `9`
|
|
|
|
NonZeroDigit :: one of
|
|
`1` `2` `3` `4` `5` `6` `7` `8` `9`
|
|
|
|
ExponentPart ::
|
|
ExponentIndicator SignedInteger
|
|
|
|
ExponentIndicator :: one of
|
|
`e` `E`
|
|
|
|
SignedInteger ::
|
|
DecimalDigits
|
|
`+` DecimalDigits
|
|
`-` DecimalDigits
|
|
|
|
BinaryIntegerLiteral ::
|
|
`0b` BinaryDigits
|
|
`0B` BinaryDigits
|
|
|
|
BinaryDigits ::
|
|
BinaryDigit
|
|
BinaryDigits BinaryDigit
|
|
|
|
BinaryDigit :: one of
|
|
`0` `1`
|
|
|
|
OctalIntegerLiteral ::
|
|
`0o` OctalDigits
|
|
`0O` OctalDigits
|
|
|
|
OctalDigits ::
|
|
OctalDigit
|
|
OctalDigits OctalDigit
|
|
|
|
OctalDigit :: one of
|
|
`0` `1` `2` `3` `4` `5` `6` `7`
|
|
|
|
HexIntegerLiteral ::
|
|
`0x` HexDigits
|
|
`0X` HexDigits
|
|
|
|
HexDigits ::
|
|
HexDigit
|
|
HexDigits HexDigit
|
|
|
|
HexDigit :: one of
|
|
`0` `1` `2` `3` `4` `5` `6` `7` `8` `9` `a` `b` `c` `d` `e` `f` `A` `B` `C` `D` `E` `F`
|
|
|
|
|
|
StringLiteral ::
|
|
`"` DoubleStringCharacters? `"`
|
|
`'` SingleStringCharacters? `'`
|
|
|
|
DoubleStringCharacters ::
|
|
DoubleStringCharacter DoubleStringCharacters?
|
|
|
|
SingleStringCharacters ::
|
|
SingleStringCharacter SingleStringCharacters?
|
|
|
|
DoubleStringCharacter ::
|
|
SourceCharacter but not one of `"` or `\` or LineTerminator
|
|
<LS>
|
|
<PS>
|
|
`\` EscapeSequence
|
|
LineContinuation
|
|
|
|
SingleStringCharacter ::
|
|
SourceCharacter but not one of `'` or `\` or LineTerminator
|
|
<LS>
|
|
<PS>
|
|
`\` EscapeSequence
|
|
LineContinuation
|
|
|
|
LineContinuation ::
|
|
`\` LineTerminatorSequence
|
|
|
|
EscapeSequence ::
|
|
CharacterEscapeSequence
|
|
`0` [lookahead <! DecimalDigit]
|
|
HexEscapeSequence
|
|
UnicodeEscapeSequence
|
|
|
|
|
|
CharacterEscapeSequence ::
|
|
SingleEscapeCharacter
|
|
NonEscapeCharacter
|
|
|
|
SingleEscapeCharacter :: one of
|
|
`'` `"` `\` `b` `f` `n` `r` `t` `v`
|
|
|
|
NonEscapeCharacter ::
|
|
SourceCharacter but not one of EscapeCharacter or LineTerminator
|
|
|
|
EscapeCharacter ::
|
|
SingleEscapeCharacter
|
|
DecimalDigit
|
|
`x`
|
|
`u`
|
|
|
|
HexEscapeSequence ::
|
|
`x` HexDigit HexDigit
|
|
|
|
UnicodeEscapeSequence ::
|
|
`u` Hex4Digits
|
|
`u{` CodePoint `}`
|
|
|
|
Hex4Digits ::
|
|
HexDigit HexDigit HexDigit HexDigit
|
|
|
|
|
|
RegularExpressionLiteral ::
|
|
`/` RegularExpressionBody `/` RegularExpressionFlags
|
|
|
|
RegularExpressionBody ::
|
|
RegularExpressionFirstChar RegularExpressionChars
|
|
|
|
RegularExpressionChars ::
|
|
[empty]
|
|
RegularExpressionChars RegularExpressionChar
|
|
|
|
RegularExpressionFirstChar ::
|
|
RegularExpressionNonTerminator but not one of `*` or `\` or `/` or `[`
|
|
RegularExpressionBackslashSequence
|
|
RegularExpressionClass
|
|
|
|
RegularExpressionChar ::
|
|
RegularExpressionNonTerminator but not one of `\` or `/` or `[`
|
|
RegularExpressionBackslashSequence
|
|
RegularExpressionClass
|
|
|
|
RegularExpressionBackslashSequence ::
|
|
`\` RegularExpressionNonTerminator
|
|
|
|
RegularExpressionNonTerminator ::
|
|
SourceCharacter but not LineTerminator
|
|
|
|
RegularExpressionClass ::
|
|
`[` RegularExpressionClassChars `]`
|
|
|
|
RegularExpressionClassChars ::
|
|
[empty]
|
|
RegularExpressionClassChars RegularExpressionClassChar
|
|
|
|
RegularExpressionClassChar ::
|
|
RegularExpressionNonTerminator but not one of `]` or `\`
|
|
RegularExpressionBackslashSequence
|
|
|
|
RegularExpressionFlags ::
|
|
[empty]
|
|
RegularExpressionFlags IdentifierPart
|
|
|
|
|
|
Template ::
|
|
NoSubstitutionTemplate
|
|
TemplateHead
|
|
|
|
NoSubstitutionTemplate ::
|
|
``` TemplateCharacters? ```
|
|
|
|
TemplateHead ::
|
|
``` TemplateCharacters? `${`
|
|
|
|
TemplateSubstitutionTail ::
|
|
TemplateMiddle
|
|
TemplateTail
|
|
|
|
TemplateMiddle ::
|
|
`}` TemplateCharacters? `${`
|
|
|
|
TemplateTail ::
|
|
`}` TemplateCharacters? ```
|
|
|
|
TemplateCharacters ::
|
|
TemplateCharacter TemplateCharacters?
|
|
|
|
TemplateCharacter ::
|
|
`$` [lookahead != `{` ]
|
|
`\` EscapeSequence
|
|
`\` NotEscapeSequence
|
|
LineContinuation
|
|
LineTerminatorSequence
|
|
SourceCharacter but not one of ``` or `\` or `$` or LineTerminator
|
|
|
|
NotEscapeSequence ::
|
|
`0` DecimalDigit
|
|
DecimalDigit but not `0`
|
|
`x` [lookahead <! HexDigit]
|
|
`x` HexDigit [lookahead <! HexDigit]
|
|
`u` [lookahead <! HexDigit] [lookahead != `{`]
|
|
`u` HexDigit [lookahead <! HexDigit]
|
|
`u` HexDigit HexDigit [lookahead <! HexDigit]
|
|
`u` HexDigit HexDigit HexDigit [lookahead <! HexDigit]
|
|
`u` `{` [lookahead <! HexDigit]
|
|
`u` `{` NotCodePoint [lookahead <! HexDigit]
|
|
`u` `{` CodePoint [lookahead <! HexDigit] [lookahead != `}`]
|
|
|
|
NotCodePoint ::
|
|
HexDigits [> but only if MV of |HexDigits| > 0x10FFFF ]
|
|
|
|
CodePoint ::
|
|
HexDigits [> but only if MV of |HexDigits| ≤ 0x10FFFF ]
|
|
|
|
|
|
IdentifierReference[Yield, Await] :
|
|
Identifier
|
|
[~Yield] `yield`
|
|
[~Await] `await`
|
|
|
|
BindingIdentifier[Yield, Await] :
|
|
Identifier
|
|
`yield`
|
|
`await`
|
|
|
|
LabelIdentifier[Yield, Await] :
|
|
Identifier
|
|
[~Yield] `yield`
|
|
[~Await] `await`
|
|
|
|
Identifier :
|
|
IdentifierName but not ReservedWord
|
|
|
|
|
|
PrimaryExpression[Yield, Await] :
|
|
`this`
|
|
IdentifierReference[?Yield, ?Await]
|
|
Literal
|
|
ArrayLiteral[?Yield, ?Await]
|
|
ObjectLiteral[?Yield, ?Await]
|
|
FunctionExpression
|
|
ClassExpression[?Yield, ?Await]
|
|
GeneratorExpression
|
|
AsyncFunctionExpression
|
|
AsyncGeneratorExpression
|
|
RegularExpressionLiteral
|
|
TemplateLiteral[?Yield, ?Await, ~Tagged]
|
|
CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await] #parencover
|
|
|
|
CoverParenthesizedExpressionAndArrowParameterList[Yield, Await] :
|
|
`(` Expression[+In, ?Yield, ?Await] `)`
|
|
`(` Expression[+In, ?Yield, ?Await] `,` `)`
|
|
`(` `)`
|
|
`(` `...` BindingIdentifier[?Yield, ?Await] `)`
|
|
`(` `...` BindingPattern[?Yield, ?Await] `)`
|
|
`(` Expression[+In, ?Yield, ?Await] `,` `...` BindingIdentifier[?Yield, ?Await] `)`
|
|
`(` Expression[+In, ?Yield, ?Await] `,` `...` BindingPattern[?Yield, ?Await] `)`
|
|
|
|
|
|
ParenthesizedExpression[Yield, Await] :
|
|
`(` Expression[+In, ?Yield, ?Await] `)`
|
|
|
|
|
|
Literal :
|
|
NullLiteral
|
|
BooleanLiteral
|
|
NumericLiteral
|
|
StringLiteral
|
|
|
|
|
|
ArrayLiteral[Yield, Await] :
|
|
`[` Elision? `]`
|
|
`[` ElementList[?Yield, ?Await] `]`
|
|
`[` ElementList[?Yield, ?Await] `,` Elision? `]`
|
|
|
|
ElementList[Yield, Await] :
|
|
Elision? AssignmentExpression[+In, ?Yield, ?Await]
|
|
Elision? SpreadElement[?Yield, ?Await]
|
|
ElementList[?Yield, ?Await] `,` Elision? AssignmentExpression[+In, ?Yield, ?Await]
|
|
ElementList[?Yield, ?Await] `,` Elision? SpreadElement[?Yield, ?Await]
|
|
|
|
Elision :
|
|
`,`
|
|
Elision `,`
|
|
|
|
SpreadElement[Yield, Await] :
|
|
`...` AssignmentExpression[+In, ?Yield, ?Await]
|
|
|
|
|
|
ObjectLiteral[Yield, Await] :
|
|
`{` `}`
|
|
`{` PropertyDefinitionList[?Yield, ?Await] `}`
|
|
`{` PropertyDefinitionList[?Yield, ?Await] `,` `}`
|
|
|
|
PropertyDefinitionList[Yield, Await] :
|
|
PropertyDefinition[?Yield, ?Await]
|
|
PropertyDefinitionList[?Yield, ?Await] `,` PropertyDefinition[?Yield, ?Await]
|
|
|
|
PropertyDefinition[Yield, Await] :
|
|
IdentifierReference[?Yield, ?Await]
|
|
CoverInitializedName[?Yield, ?Await]
|
|
PropertyName[?Yield, ?Await] `:` AssignmentExpression[+In, ?Yield, ?Await]
|
|
MethodDefinition[?Yield, ?Await]
|
|
`...` AssignmentExpression[+In, ?Yield, ?Await]
|
|
|
|
PropertyName[Yield, Await] :
|
|
LiteralPropertyName
|
|
ComputedPropertyName[?Yield, ?Await]
|
|
|
|
LiteralPropertyName :
|
|
IdentifierName
|
|
StringLiteral
|
|
NumericLiteral
|
|
|
|
ComputedPropertyName[Yield, Await] :
|
|
`[` AssignmentExpression[+In, ?Yield, ?Await] `]`
|
|
|
|
CoverInitializedName[Yield, Await] :
|
|
IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]
|
|
|
|
Initializer[In, Yield, Await] :
|
|
`=` AssignmentExpression[?In, ?Yield, ?Await]
|
|
|
|
|
|
TemplateLiteral[Yield, Await, Tagged] :
|
|
NoSubstitutionTemplate
|
|
SubstitutionTemplate[?Yield, ?Await, ?Tagged]
|
|
|
|
SubstitutionTemplate[Yield, Await, Tagged] :
|
|
TemplateHead Expression[+In, ?Yield, ?Await] TemplateSpans[?Yield, ?Await, ?Tagged]
|
|
|
|
TemplateSpans[Yield, Await, Tagged] :
|
|
TemplateTail
|
|
TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateTail
|
|
|
|
TemplateMiddleList[Yield, Await, Tagged] :
|
|
TemplateMiddle Expression[+In, ?Yield, ?Await]
|
|
TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateMiddle Expression[+In, ?Yield, ?Await]
|
|
|
|
|
|
MemberExpression[Yield, Await] :
|
|
PrimaryExpression[?Yield, ?Await]
|
|
MemberExpression[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]`
|
|
MemberExpression[?Yield, ?Await] `.` IdentifierName
|
|
MemberExpression[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]
|
|
SuperProperty[?Yield, ?Await]
|
|
MetaProperty
|
|
`new` MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
|
|
|
|
SuperProperty[Yield, Await] :
|
|
`super` `[` Expression[+In, ?Yield, ?Await] `]`
|
|
`super` `.` IdentifierName
|
|
|
|
MetaProperty :
|
|
NewTarget
|
|
|
|
NewTarget :
|
|
`new` `.` `target`
|
|
|
|
NewExpression[Yield, Await] :
|
|
MemberExpression[?Yield, ?Await]
|
|
`new` NewExpression[?Yield, ?Await]
|
|
|
|
CallExpression[Yield, Await] :
|
|
CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] #callcover
|
|
SuperCall[?Yield, ?Await]
|
|
ImportCall[?Yield, ?Await]
|
|
CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
|
|
CallExpression[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]`
|
|
CallExpression[?Yield, ?Await] `.` IdentifierName
|
|
CallExpression[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]
|
|
|
|
SuperCall[Yield, Await] :
|
|
`super` Arguments[?Yield, ?Await]
|
|
|
|
ImportCall[Yield, Await] :
|
|
`import` `(` AssignmentExpression[+In, ?Yield, ?Await] `)`
|
|
|
|
Arguments[Yield, Await] :
|
|
`(` `)`
|
|
`(` ArgumentList[?Yield, ?Await] `)`
|
|
`(` ArgumentList[?Yield, ?Await] `,` `)`
|
|
|
|
ArgumentList[Yield, Await] :
|
|
AssignmentExpression[+In, ?Yield, ?Await]
|
|
`...` AssignmentExpression[+In, ?Yield, ?Await]
|
|
ArgumentList[?Yield, ?Await] `,` AssignmentExpression[+In, ?Yield, ?Await]
|
|
ArgumentList[?Yield, ?Await] `,` `...` AssignmentExpression[+In, ?Yield, ?Await]
|
|
|
|
LeftHandSideExpression[Yield, Await] :
|
|
NewExpression[?Yield, ?Await]
|
|
CallExpression[?Yield, ?Await]
|
|
|
|
|
|
CallMemberExpression[Yield, Await] :
|
|
MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
|
|
|
|
|
|
UpdateExpression[Yield, Await] :
|
|
LeftHandSideExpression[?Yield, ?Await]
|
|
LeftHandSideExpression[?Yield, ?Await] [no LineTerminator here] `++`
|
|
LeftHandSideExpression[?Yield, ?Await] [no LineTerminator here] `--`
|
|
`++` UnaryExpression[?Yield, ?Await]
|
|
`--` UnaryExpression[?Yield, ?Await]
|
|
|
|
|
|
UnaryExpression[Yield, Await] :
|
|
UpdateExpression[?Yield, ?Await]
|
|
`delete` UnaryExpression[?Yield, ?Await]
|
|
`void` UnaryExpression[?Yield, ?Await]
|
|
`typeof` UnaryExpression[?Yield, ?Await]
|
|
`+` UnaryExpression[?Yield, ?Await]
|
|
`-` UnaryExpression[?Yield, ?Await]
|
|
`~` UnaryExpression[?Yield, ?Await]
|
|
`!` UnaryExpression[?Yield, ?Await]
|
|
[+Await] AwaitExpression[?Yield]
|
|
|
|
|
|
ExponentiationExpression[Yield, Await] :
|
|
UnaryExpression[?Yield, ?Await]
|
|
UpdateExpression[?Yield, ?Await] `**` ExponentiationExpression[?Yield, ?Await]
|
|
|
|
|
|
MultiplicativeExpression[Yield, Await] :
|
|
ExponentiationExpression[?Yield, ?Await]
|
|
MultiplicativeExpression[?Yield, ?Await] MultiplicativeOperator ExponentiationExpression[?Yield, ?Await]
|
|
|
|
MultiplicativeOperator : one of
|
|
`*` `/` `%`
|
|
|
|
|
|
AdditiveExpression[Yield, Await] :
|
|
MultiplicativeExpression[?Yield, ?Await]
|
|
AdditiveExpression[?Yield, ?Await] `+` MultiplicativeExpression[?Yield, ?Await]
|
|
AdditiveExpression[?Yield, ?Await] `-` MultiplicativeExpression[?Yield, ?Await]
|
|
|
|
|
|
ShiftExpression[Yield, Await] :
|
|
AdditiveExpression[?Yield, ?Await]
|
|
ShiftExpression[?Yield, ?Await] `<<` AdditiveExpression[?Yield, ?Await]
|
|
ShiftExpression[?Yield, ?Await] `>>` AdditiveExpression[?Yield, ?Await]
|
|
ShiftExpression[?Yield, ?Await] `>>>` AdditiveExpression[?Yield, ?Await]
|
|
|
|
|
|
RelationalExpression[In, Yield, Await] :
|
|
ShiftExpression[?Yield, ?Await]
|
|
RelationalExpression[?In, ?Yield, ?Await] `<` ShiftExpression[?Yield, ?Await]
|
|
RelationalExpression[?In, ?Yield, ?Await] `>` ShiftExpression[?Yield, ?Await]
|
|
RelationalExpression[?In, ?Yield, ?Await] `<=` ShiftExpression[?Yield, ?Await]
|
|
RelationalExpression[?In, ?Yield, ?Await] `>=` ShiftExpression[?Yield, ?Await]
|
|
RelationalExpression[?In, ?Yield, ?Await] `instanceof` ShiftExpression[?Yield, ?Await]
|
|
[+In] RelationalExpression[+In, ?Yield, ?Await] `in` ShiftExpression[?Yield, ?Await]
|
|
|
|
|
|
EqualityExpression[In, Yield, Await] :
|
|
RelationalExpression[?In, ?Yield, ?Await]
|
|
EqualityExpression[?In, ?Yield, ?Await] `==` RelationalExpression[?In, ?Yield, ?Await]
|
|
EqualityExpression[?In, ?Yield, ?Await] `!=` RelationalExpression[?In, ?Yield, ?Await]
|
|
EqualityExpression[?In, ?Yield, ?Await] `===` RelationalExpression[?In, ?Yield, ?Await]
|
|
EqualityExpression[?In, ?Yield, ?Await] `!==` RelationalExpression[?In, ?Yield, ?Await]
|
|
|
|
|
|
BitwiseANDExpression[In, Yield, Await] :
|
|
EqualityExpression[?In, ?Yield, ?Await]
|
|
BitwiseANDExpression[?In, ?Yield, ?Await] `&` EqualityExpression[?In, ?Yield, ?Await]
|
|
|
|
BitwiseXORExpression[In, Yield, Await] :
|
|
BitwiseANDExpression[?In, ?Yield, ?Await]
|
|
BitwiseXORExpression[?In, ?Yield, ?Await] `^` BitwiseANDExpression[?In, ?Yield, ?Await]
|
|
|
|
BitwiseORExpression[In, Yield, Await] :
|
|
BitwiseXORExpression[?In, ?Yield, ?Await]
|
|
BitwiseORExpression[?In, ?Yield, ?Await] `|` BitwiseXORExpression[?In, ?Yield, ?Await]
|
|
|
|
|
|
LogicalANDExpression[In, Yield, Await] :
|
|
BitwiseORExpression[?In, ?Yield, ?Await]
|
|
LogicalANDExpression[?In, ?Yield, ?Await] `&&` BitwiseORExpression[?In, ?Yield, ?Await]
|
|
|
|
LogicalORExpression[In, Yield, Await] :
|
|
LogicalANDExpression[?In, ?Yield, ?Await]
|
|
LogicalORExpression[?In, ?Yield, ?Await] `||` LogicalANDExpression[?In, ?Yield, ?Await]
|
|
|
|
|
|
ConditionalExpression[In, Yield, Await] :
|
|
LogicalORExpression[?In, ?Yield, ?Await]
|
|
LogicalORExpression[?In, ?Yield, ?Await] `?` AssignmentExpression[+In, ?Yield, ?Await] `:` AssignmentExpression[?In, ?Yield, ?Await]
|
|
|
|
|
|
AssignmentExpression[In, Yield, Await] :
|
|
ConditionalExpression[?In, ?Yield, ?Await]
|
|
[+Yield] YieldExpression[?In, ?Await]
|
|
ArrowFunction[?In, ?Yield, ?Await]
|
|
AsyncArrowFunction[?In, ?Yield, ?Await]
|
|
LeftHandSideExpression[?Yield, ?Await] `=` AssignmentExpression[?In, ?Yield, ?Await] #assignment
|
|
LeftHandSideExpression[?Yield, ?Await] AssignmentOperator AssignmentExpression[?In, ?Yield, ?Await]
|
|
|
|
AssignmentOperator : one of
|
|
`*=` `/=` `%=` `+=` `-=` `<<=` `>>=` `>>>=` `&=` `^=` `|=` `**=`
|
|
|
|
|
|
AssignmentPattern[Yield, Await] :
|
|
ObjectAssignmentPattern[?Yield, ?Await]
|
|
ArrayAssignmentPattern[?Yield, ?Await]
|
|
|
|
ObjectAssignmentPattern[Yield, Await] :
|
|
`{` `}`
|
|
`{` AssignmentRestProperty[?Yield, ?Await] `}`
|
|
`{` AssignmentPropertyList[?Yield, ?Await] `}`
|
|
`{` AssignmentPropertyList[?Yield, ?Await] `,` AssignmentRestProperty[?Yield, ?Await]? `}`
|
|
|
|
ArrayAssignmentPattern[Yield, Await] :
|
|
`[` Elision? AssignmentRestElement[?Yield, ?Await]? `]`
|
|
`[` AssignmentElementList[?Yield, ?Await] `]`
|
|
`[` AssignmentElementList[?Yield, ?Await] `,` Elision? AssignmentRestElement[?Yield, ?Await]? `]`
|
|
|
|
AssignmentRestProperty[Yield, Await] :
|
|
`...` DestructuringAssignmentTarget[?Yield, ?Await]
|
|
|
|
AssignmentPropertyList[Yield, Await] :
|
|
AssignmentProperty[?Yield, ?Await]
|
|
AssignmentPropertyList[?Yield, ?Await] `,` AssignmentProperty[?Yield, ?Await]
|
|
|
|
AssignmentElementList[Yield, Await] :
|
|
AssignmentElisionElement[?Yield, ?Await]
|
|
AssignmentElementList[?Yield, ?Await] `,` AssignmentElisionElement[?Yield, ?Await]
|
|
|
|
AssignmentElisionElement[Yield, Await] :
|
|
Elision? AssignmentElement[?Yield, ?Await]
|
|
|
|
AssignmentProperty[Yield, Await] :
|
|
IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]?
|
|
PropertyName[?Yield, ?Await] `:` AssignmentElement[?Yield, ?Await]
|
|
|
|
AssignmentElement[Yield, Await] :
|
|
DestructuringAssignmentTarget[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]?
|
|
|
|
AssignmentRestElement[Yield, Await] :
|
|
`...` DestructuringAssignmentTarget[?Yield, ?Await]
|
|
|
|
DestructuringAssignmentTarget[Yield, Await] :
|
|
LeftHandSideExpression[?Yield, ?Await]
|
|
|
|
|
|
Expression[In, Yield, Await] :
|
|
AssignmentExpression[?In, ?Yield, ?Await]
|
|
Expression[?In, ?Yield, ?Await] `,` AssignmentExpression[?In, ?Yield, ?Await]
|
|
|
|
|
|
Statement[Yield, Await, Return] :
|
|
BlockStatement[?Yield, ?Await, ?Return]
|
|
VariableStatement[?Yield, ?Await]
|
|
EmptyStatement
|
|
ExpressionStatement[?Yield, ?Await]
|
|
IfStatement[?Yield, ?Await, ?Return]
|
|
BreakableStatement[?Yield, ?Await, ?Return]
|
|
ContinueStatement[?Yield, ?Await]
|
|
BreakStatement[?Yield, ?Await]
|
|
[+Return] ReturnStatement[?Yield, ?Await]
|
|
WithStatement[?Yield, ?Await, ?Return]
|
|
LabelledStatement[?Yield, ?Await, ?Return]
|
|
ThrowStatement[?Yield, ?Await]
|
|
TryStatement[?Yield, ?Await, ?Return]
|
|
DebuggerStatement
|
|
|
|
Declaration[Yield, Await] :
|
|
HoistableDeclaration[?Yield, ?Await, ~Default]
|
|
ClassDeclaration[?Yield, ?Await, ~Default]
|
|
LexicalDeclaration[+In, ?Yield, ?Await]
|
|
|
|
HoistableDeclaration[Yield, Await, Default] :
|
|
FunctionDeclaration[?Yield, ?Await, ?Default]
|
|
GeneratorDeclaration[?Yield, ?Await, ?Default]
|
|
AsyncFunctionDeclaration[?Yield, ?Await, ?Default]
|
|
AsyncGeneratorDeclaration[?Yield, ?Await, ?Default]
|
|
|
|
BreakableStatement[Yield, Await, Return] :
|
|
IterationStatement[?Yield, ?Await, ?Return]
|
|
SwitchStatement[?Yield, ?Await, ?Return]
|
|
|
|
|
|
BlockStatement[Yield, Await, Return] :
|
|
Block[?Yield, ?Await, ?Return]
|
|
|
|
Block[Yield, Await, Return] :
|
|
`{` StatementList[?Yield, ?Await, ?Return]? `}`
|
|
|
|
StatementList[Yield, Await, Return] :
|
|
StatementListItem[?Yield, ?Await, ?Return]
|
|
StatementList[?Yield, ?Await, ?Return] StatementListItem[?Yield, ?Await, ?Return]
|
|
|
|
StatementListItem[Yield, Await, Return] :
|
|
Statement[?Yield, ?Await, ?Return]
|
|
Declaration[?Yield, ?Await]
|
|
|
|
|
|
LexicalDeclaration[In, Yield, Await] :
|
|
LetOrConst BindingList[?In, ?Yield, ?Await] `;`
|
|
|
|
LetOrConst :
|
|
`let`
|
|
`const`
|
|
|
|
BindingList[In, Yield, Await] :
|
|
LexicalBinding[?In, ?Yield, ?Await]
|
|
BindingList[?In, ?Yield, ?Await] `,` LexicalBinding[?In, ?Yield, ?Await]
|
|
|
|
LexicalBinding[In, Yield, Await] :
|
|
BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]?
|
|
BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]
|
|
|
|
|
|
VariableStatement[Yield, Await] :
|
|
`var` VariableDeclarationList[+In, ?Yield, ?Await] `;`
|
|
|
|
VariableDeclarationList[In, Yield, Await] :
|
|
VariableDeclaration[?In, ?Yield, ?Await]
|
|
VariableDeclarationList[?In, ?Yield, ?Await] `,` VariableDeclaration[?In, ?Yield, ?Await]
|
|
|
|
VariableDeclaration[In, Yield, Await] :
|
|
BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]?
|
|
BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]
|
|
|
|
|
|
BindingPattern[Yield, Await] :
|
|
ObjectBindingPattern[?Yield, ?Await]
|
|
ArrayBindingPattern[?Yield, ?Await]
|
|
|
|
ObjectBindingPattern[Yield, Await] :
|
|
`{` `}`
|
|
`{` BindingRestProperty[?Yield, ?Await] `}`
|
|
`{` BindingPropertyList[?Yield, ?Await] `}`
|
|
`{` BindingPropertyList[?Yield, ?Await] `,` BindingRestProperty[?Yield, ?Await]? `}`
|
|
|
|
ArrayBindingPattern[Yield, Await] :
|
|
`[` Elision? BindingRestElement[?Yield, ?Await]? `]`
|
|
`[` BindingElementList[?Yield, ?Await] `]`
|
|
`[` BindingElementList[?Yield, ?Await] `,` Elision? BindingRestElement[?Yield, ?Await]? `]`
|
|
|
|
BindingRestProperty[Yield, Await] :
|
|
`...` BindingIdentifier[?Yield, ?Await]
|
|
|
|
BindingPropertyList[Yield, Await] :
|
|
BindingProperty[?Yield, ?Await]
|
|
BindingPropertyList[?Yield, ?Await] `,` BindingProperty[?Yield, ?Await]
|
|
|
|
BindingElementList[Yield, Await] :
|
|
BindingElisionElement[?Yield, ?Await]
|
|
BindingElementList[?Yield, ?Await] `,` BindingElisionElement[?Yield, ?Await]
|
|
|
|
BindingElisionElement[Yield, Await] :
|
|
Elision? BindingElement[?Yield, ?Await]
|
|
|
|
BindingProperty[Yield, Await] :
|
|
SingleNameBinding[?Yield, ?Await]
|
|
PropertyName[?Yield, ?Await] `:` BindingElement[?Yield, ?Await]
|
|
|
|
BindingElement[Yield, Await] :
|
|
SingleNameBinding[?Yield, ?Await]
|
|
BindingPattern[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]?
|
|
|
|
SingleNameBinding[Yield, Await] :
|
|
BindingIdentifier[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]?
|
|
|
|
BindingRestElement[Yield, Await] :
|
|
`...` BindingIdentifier[?Yield, ?Await]
|
|
`...` BindingPattern[?Yield, ?Await]
|
|
|
|
|
|
EmptyStatement :
|
|
`;`
|
|
|
|
|
|
ExpressionStatement[Yield, Await] :
|
|
[lookahead <! {`{`, `function`, `async` [no |LineTerminator| here] `function`, `class`, `let` `[`}] Expression[+In, ?Yield, ?Await] `;`
|
|
|
|
|
|
IfStatement[Yield, Await, Return] :
|
|
`if` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] `else` Statement[?Yield, ?Await, ?Return]
|
|
`if` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
|
|
|
|
IterationStatement[Yield, Await, Return] :
|
|
`do` Statement[?Yield, ?Await, ?Return] `while` `(` Expression[+In, ?Yield, ?Await] `)` `;`
|
|
`while` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
`for` `(` [lookahead != `let` `[`] Expression[~In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `)` Statement[?Yield, ?Await, ?Return]
|
|
`for` `(` `var` VariableDeclarationList[~In, ?Yield, ?Await] `;` Expression[+In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `)` Statement[?Yield, ?Await, ?Return]
|
|
`for` `(` LexicalDeclaration[~In, ?Yield, ?Await] Expression[+In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `)` Statement[?Yield, ?Await, ?Return]
|
|
`for` `(` [lookahead != `let` `[`] LeftHandSideExpression[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
`for` `(` `var` ForBinding[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
`for` `(` ForDeclaration[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
`for` `(` [lookahead != `let` ] LeftHandSideExpression[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
`for` `(` `var` ForBinding[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
`for` `(` ForDeclaration[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
[+Await] `for` `await` `(` [lookahead != `let` ] LeftHandSideExpression[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
[+Await] `for` `await` `(` `var` ForBinding[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
[+Await] `for` `await` `(` ForDeclaration[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
|
|
ForDeclaration[Yield, Await] :
|
|
LetOrConst ForBinding[?Yield, ?Await]
|
|
|
|
ForBinding[Yield, Await] :
|
|
BindingIdentifier[?Yield, ?Await]
|
|
BindingPattern[?Yield, ?Await]
|
|
|
|
|
|
ContinueStatement[Yield, Await] :
|
|
`continue` `;`
|
|
`continue` [no LineTerminator here] LabelIdentifier[?Yield, ?Await] `;`
|
|
|
|
|
|
BreakStatement[Yield, Await] :
|
|
`break` `;`
|
|
`break` [no LineTerminator here] LabelIdentifier[?Yield, ?Await] `;`
|
|
|
|
|
|
ReturnStatement[Yield, Await] :
|
|
`return` `;`
|
|
`return` [no LineTerminator here] Expression[+In, ?Yield, ?Await] `;`
|
|
|
|
|
|
WithStatement[Yield, Await, Return] :
|
|
`with` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
|
|
|
|
SwitchStatement[Yield, Await, Return] :
|
|
`switch` `(` Expression[+In, ?Yield, ?Await] `)` CaseBlock[?Yield, ?Await, ?Return]
|
|
|
|
CaseBlock[Yield, Await, Return] :
|
|
`{` CaseClauses[?Yield, ?Await, ?Return]? `}`
|
|
`{` CaseClauses[?Yield, ?Await, ?Return]? DefaultClause[?Yield, ?Await, ?Return] CaseClauses[?Yield, ?Await, ?Return]? `}`
|
|
|
|
CaseClauses[Yield, Await, Return] :
|
|
CaseClause[?Yield, ?Await, ?Return]
|
|
CaseClauses[?Yield, ?Await, ?Return] CaseClause[?Yield, ?Await, ?Return]
|
|
|
|
CaseClause[Yield, Await, Return] :
|
|
`case` Expression[+In, ?Yield, ?Await] `:` StatementList[?Yield, ?Await, ?Return]?
|
|
|
|
DefaultClause[Yield, Await, Return] :
|
|
`default` `:` StatementList[?Yield, ?Await, ?Return]?
|
|
|
|
|
|
LabelledStatement[Yield, Await, Return] :
|
|
LabelIdentifier[?Yield, ?Await] `:` LabelledItem[?Yield, ?Await, ?Return]
|
|
|
|
LabelledItem[Yield, Await, Return] :
|
|
Statement[?Yield, ?Await, ?Return]
|
|
FunctionDeclaration[?Yield, ?Await, ~Default]
|
|
|
|
|
|
ThrowStatement[Yield, Await] :
|
|
`throw` [no LineTerminator here] Expression[+In, ?Yield, ?Await] `;`
|
|
|
|
|
|
TryStatement[Yield, Await, Return] :
|
|
`try` Block[?Yield, ?Await, ?Return] Catch[?Yield, ?Await, ?Return]
|
|
`try` Block[?Yield, ?Await, ?Return] Finally[?Yield, ?Await, ?Return]
|
|
`try` Block[?Yield, ?Await, ?Return] Catch[?Yield, ?Await, ?Return] Finally[?Yield, ?Await, ?Return]
|
|
|
|
Catch[Yield, Await, Return] :
|
|
`catch` `(` CatchParameter[?Yield, ?Await] `)` Block[?Yield, ?Await, ?Return]
|
|
`catch` Block[?Yield, ?Await, ?Return]
|
|
|
|
Finally[Yield, Await, Return] :
|
|
`finally` Block[?Yield, ?Await, ?Return]
|
|
|
|
CatchParameter[Yield, Await] :
|
|
BindingIdentifier[?Yield, ?Await]
|
|
BindingPattern[?Yield, ?Await]
|
|
|
|
|
|
DebuggerStatement :
|
|
`debugger` `;`
|
|
|
|
|
|
FunctionDeclaration[Yield, Await, Default] :
|
|
`function` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}`
|
|
[+Default] `function` `(` FormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}`
|
|
|
|
FunctionExpression :
|
|
`function` BindingIdentifier[~Yield, ~Await]? `(` FormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}`
|
|
|
|
UniqueFormalParameters[Yield, Await] :
|
|
FormalParameters[?Yield, ?Await]
|
|
|
|
FormalParameters[Yield, Await] :
|
|
[empty]
|
|
FunctionRestParameter[?Yield, ?Await]
|
|
FormalParameterList[?Yield, ?Await]
|
|
FormalParameterList[?Yield, ?Await] `,`
|
|
FormalParameterList[?Yield, ?Await] `,` FunctionRestParameter[?Yield, ?Await]
|
|
|
|
FormalParameterList[Yield, Await] :
|
|
FormalParameter[?Yield, ?Await]
|
|
FormalParameterList[?Yield, ?Await] `,` FormalParameter[?Yield, ?Await]
|
|
|
|
FunctionRestParameter[Yield, Await] :
|
|
BindingRestElement[?Yield, ?Await]
|
|
|
|
FormalParameter[Yield, Await] :
|
|
BindingElement[?Yield, ?Await]
|
|
|
|
FunctionBody[Yield, Await] :
|
|
FunctionStatementList[?Yield, ?Await]
|
|
|
|
FunctionStatementList[Yield, Await] :
|
|
StatementList[?Yield, ?Await, +Return]?
|
|
|
|
|
|
ArrowFunction[In, Yield, Await] :
|
|
ArrowParameters[?Yield, ?Await] [no LineTerminator here] `=>` ConciseBody[?In]
|
|
|
|
ArrowParameters[Yield, Await] :
|
|
BindingIdentifier[?Yield, ?Await]
|
|
CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await] #parencover
|
|
|
|
ConciseBody[In] :
|
|
[lookahead != `{` ] AssignmentExpression[?In, ~Yield, ~Await]
|
|
`{` FunctionBody[~Yield, ~Await] `}`
|
|
|
|
|
|
ArrowFormalParameters[Yield, Await] :
|
|
`(` UniqueFormalParameters[?Yield, ?Await] `)`
|
|
|
|
|
|
MethodDefinition[Yield, Await] :
|
|
PropertyName[?Yield, ?Await] `(` UniqueFormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}`
|
|
GeneratorMethod[?Yield, ?Await]
|
|
AsyncMethod[?Yield, ?Await]
|
|
AsyncGeneratorMethod[?Yield, ?Await]
|
|
`get` PropertyName[?Yield, ?Await] `(` `)` `{` FunctionBody[~Yield, ~Await] `}`
|
|
`set` PropertyName[?Yield, ?Await] `(` PropertySetParameterList `)` `{` FunctionBody[~Yield, ~Await] `}`
|
|
|
|
PropertySetParameterList :
|
|
FormalParameter[~Yield, ~Await]
|
|
|
|
|
|
GeneratorMethod[Yield, Await] :
|
|
`*` PropertyName[?Yield, ?Await] `(` UniqueFormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}`
|
|
|
|
GeneratorDeclaration[Yield, Await, Default] :
|
|
`function` `*` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}`
|
|
[+Default] `function` `*` `(` FormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}`
|
|
|
|
GeneratorExpression :
|
|
`function` `*` BindingIdentifier[+Yield, ~Await]? `(` FormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}`
|
|
|
|
GeneratorBody :
|
|
FunctionBody[+Yield, ~Await]
|
|
|
|
YieldExpression[In, Await] :
|
|
`yield`
|
|
`yield` [no LineTerminator here] AssignmentExpression[?In, +Yield, ?Await]
|
|
`yield` [no LineTerminator here] `*` AssignmentExpression[?In, +Yield, ?Await]
|
|
|
|
|
|
AsyncGeneratorMethod[Yield, Await] :
|
|
`async` [no LineTerminator here] `*` PropertyName[?Yield, ?Await] `(` UniqueFormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}`
|
|
|
|
AsyncGeneratorDeclaration[Yield, Await, Default] :
|
|
`async` [no LineTerminator here] `function` `*` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}`
|
|
[+Default] `async` [no LineTerminator here] `function` `*` `(` FormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}`
|
|
|
|
AsyncGeneratorExpression :
|
|
`async` [no LineTerminator here] `function` `*` BindingIdentifier[+Yield, +Await]? `(` FormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}`
|
|
|
|
AsyncGeneratorBody :
|
|
FunctionBody[+Yield, +Await]
|
|
|
|
|
|
ClassDeclaration[Yield, Await, Default] :
|
|
`class` BindingIdentifier[?Yield, ?Await] ClassTail[?Yield, ?Await]
|
|
[+Default] `class` ClassTail[?Yield, ?Await]
|
|
|
|
ClassExpression[Yield, Await] :
|
|
`class` BindingIdentifier[?Yield, ?Await]? ClassTail[?Yield, ?Await]
|
|
|
|
ClassTail[Yield, Await] :
|
|
ClassHeritage[?Yield, ?Await]? `{` ClassBody[?Yield, ?Await]? `}`
|
|
|
|
ClassHeritage[Yield, Await] :
|
|
`extends` LeftHandSideExpression[?Yield, ?Await]
|
|
|
|
ClassBody[Yield, Await] :
|
|
ClassElementList[?Yield, ?Await]
|
|
|
|
ClassElementList[Yield, Await] :
|
|
ClassElement[?Yield, ?Await]
|
|
ClassElementList[?Yield, ?Await] ClassElement[?Yield, ?Await]
|
|
|
|
ClassElement[Yield, Await] :
|
|
MethodDefinition[?Yield, ?Await]
|
|
`static` MethodDefinition[?Yield, ?Await]
|
|
`;`
|
|
|
|
|
|
AsyncFunctionDeclaration[Yield, Await, Default] :
|
|
`async` [no LineTerminator here] `function` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
|
|
[+Default] `async` [no LineTerminator here] `function` `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
|
|
|
|
AsyncFunctionExpression :
|
|
`async` [no LineTerminator here] `function` `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
|
|
`async` [no LineTerminator here] `function` BindingIdentifier[~Yield, +Await] `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
|
|
|
|
AsyncMethod[Yield, Await] :
|
|
`async` [no LineTerminator here] PropertyName[?Yield, ?Await] `(` UniqueFormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
|
|
|
|
AsyncFunctionBody :
|
|
FunctionBody[~Yield, +Await]
|
|
|
|
AwaitExpression[Yield] :
|
|
`await` UnaryExpression[?Yield, +Await]
|
|
|
|
|
|
AsyncArrowFunction[In, Yield, Await] :
|
|
`async` [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] `=>` AsyncConciseBody[?In]
|
|
CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] [no LineTerminator here] `=>` AsyncConciseBody[?In] #callcover
|
|
|
|
AsyncConciseBody[In] :
|
|
[lookahead != `{`] AssignmentExpression[?In, ~Yield, +Await]
|
|
`{` AsyncFunctionBody `}`
|
|
|
|
AsyncArrowBindingIdentifier[Yield] :
|
|
BindingIdentifier[?Yield, +Await]
|
|
|
|
CoverCallExpressionAndAsyncArrowHead[Yield, Await] :
|
|
MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
|
|
|
|
|
|
AsyncArrowHead :
|
|
`async` [no LineTerminator here] ArrowFormalParameters[~Yield, +Await]
|
|
|
|
|
|
Script :
|
|
ScriptBody?
|
|
|
|
ScriptBody :
|
|
StatementList[~Yield, ~Await, ~Return]
|
|
|
|
|
|
Module :
|
|
ModuleBody?
|
|
|
|
ModuleBody :
|
|
ModuleItemList
|
|
|
|
ModuleItemList :
|
|
ModuleItem
|
|
ModuleItemList ModuleItem
|
|
|
|
ModuleItem :
|
|
ImportDeclaration
|
|
ExportDeclaration
|
|
StatementListItem[~Yield, ~Await, ~Return]
|
|
|
|
|
|
ImportDeclaration :
|
|
`import` ImportClause FromClause `;`
|
|
`import` ModuleSpecifier `;`
|
|
|
|
ImportClause :
|
|
ImportedDefaultBinding
|
|
NameSpaceImport
|
|
NamedImports
|
|
ImportedDefaultBinding `,` NameSpaceImport
|
|
ImportedDefaultBinding `,` NamedImports
|
|
|
|
ImportedDefaultBinding :
|
|
ImportedBinding
|
|
|
|
NameSpaceImport :
|
|
`*` `as` ImportedBinding
|
|
|
|
NamedImports :
|
|
`{` `}`
|
|
`{` ImportsList `}`
|
|
`{` ImportsList `,` `}`
|
|
|
|
FromClause :
|
|
`from` ModuleSpecifier
|
|
|
|
ImportsList :
|
|
ImportSpecifier
|
|
ImportsList `,` ImportSpecifier
|
|
|
|
ImportSpecifier :
|
|
ImportedBinding
|
|
IdentifierName `as` ImportedBinding
|
|
|
|
ModuleSpecifier :
|
|
StringLiteral
|
|
|
|
ImportedBinding :
|
|
BindingIdentifier[~Yield, ~Await]
|
|
|
|
|
|
ExportDeclaration :
|
|
`export` `*` FromClause `;`
|
|
`export` ExportClause FromClause `;`
|
|
`export` ExportClause `;`
|
|
`export` VariableStatement[~Yield, ~Await]
|
|
`export` Declaration[~Yield, ~Await]
|
|
`export` `default` HoistableDeclaration[~Yield, ~Await, +Default]
|
|
`export` `default` ClassDeclaration[~Yield, ~Await, +Default]
|
|
`export` `default` [lookahead <! {`function`, `async` [no |LineTerminator| here] `function`, `class`}] AssignmentExpression[+In, ~Yield, ~Await] `;`
|
|
|
|
ExportClause :
|
|
`{` `}`
|
|
`{` ExportsList `}`
|
|
`{` ExportsList `,` `}`
|
|
|
|
ExportsList :
|
|
ExportSpecifier
|
|
ExportsList `,` ExportSpecifier
|
|
|
|
ExportSpecifier :
|
|
IdentifierName
|
|
IdentifierName `as` IdentifierName
|
|
|
|
|
|
uri :::
|
|
uriCharacters?
|
|
|
|
uriCharacters :::
|
|
uriCharacter uriCharacters?
|
|
|
|
uriCharacter :::
|
|
uriReserved
|
|
uriUnescaped
|
|
uriEscaped
|
|
|
|
uriReserved ::: one of
|
|
`;` `/` `?` `:` `@` `&` `=` `+` `$` `,`
|
|
|
|
uriUnescaped :::
|
|
uriAlpha
|
|
DecimalDigit
|
|
uriMark
|
|
|
|
uriEscaped :::
|
|
`%` HexDigit HexDigit
|
|
|
|
uriAlpha ::: one of
|
|
`a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m` `n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`
|
|
`A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M` `N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`
|
|
|
|
uriMark ::: one of
|
|
`-` `_` `.` `!` `~` `*` `'` `(` `)`
|
|
|
|
|
|
NativeFunction :
|
|
`function` PropertyName[~Yield, ~Await]? `(` FormalParameters[~Yield, ~Await] `)` `{` `[` `native` `code` `]` `}`
|
|
|
|
|
|
Pattern[U, N] ::
|
|
Disjunction[?U, ?N]
|
|
|
|
Disjunction[U, N] ::
|
|
Alternative[?U, ?N]
|
|
Alternative[?U, ?N] `|` Disjunction[?U, ?N]
|
|
|
|
Alternative[U, N] ::
|
|
[empty]
|
|
Alternative[?U, ?N] Term[?U, ?N]
|
|
|
|
Term[U, N] ::
|
|
Assertion[?U, ?N]
|
|
Atom[?U, ?N]
|
|
Atom[?U, ?N] Quantifier
|
|
|
|
Assertion[U, N] ::
|
|
`^`
|
|
`$`
|
|
`\` `b`
|
|
`\` `B`
|
|
`(` `?` `=` Disjunction[?U, ?N] `)`
|
|
`(` `?` `!` Disjunction[?U, ?N] `)`
|
|
`(` `?` `<=` Disjunction[?U, ?N] `)`
|
|
`(` `?` `<!` Disjunction[?U, ?N] `)`
|
|
|
|
Quantifier ::
|
|
QuantifierPrefix
|
|
QuantifierPrefix `?`
|
|
|
|
QuantifierPrefix ::
|
|
`*`
|
|
`+`
|
|
`?`
|
|
`{` DecimalDigits `}`
|
|
`{` DecimalDigits `,` `}`
|
|
`{` DecimalDigits `,` DecimalDigits `}`
|
|
|
|
Atom[U, N] ::
|
|
PatternCharacter
|
|
`.`
|
|
`\` AtomEscape[?U, ?N]
|
|
CharacterClass[?U]
|
|
`(` GroupSpecifier[?U] Disjunction[?U, ?N] `)`
|
|
`(` `?` `:` Disjunction[?U, ?N] `)`
|
|
|
|
SyntaxCharacter :: one of
|
|
`^` `$` `\` `.` `*` `+` `?` `(` `)` `[` `]` `{` `}` `|`
|
|
|
|
PatternCharacter ::
|
|
SourceCharacter but not SyntaxCharacter
|
|
|
|
AtomEscape[U, N] ::
|
|
DecimalEscape
|
|
CharacterClassEscape[?U]
|
|
CharacterEscape[?U]
|
|
[+N] `k` GroupName[?U]
|
|
|
|
CharacterEscape[U] ::
|
|
ControlEscape
|
|
`c` ControlLetter
|
|
`0` [lookahead <! DecimalDigit]
|
|
HexEscapeSequence
|
|
RegExpUnicodeEscapeSequence[?U]
|
|
IdentityEscape[?U]
|
|
|
|
ControlEscape :: one of
|
|
`f` `n` `r` `t` `v`
|
|
|
|
ControlLetter :: one of
|
|
`a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m` `n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`
|
|
`A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M` `N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z`
|
|
|
|
GroupSpecifier[U] ::
|
|
[empty]
|
|
`?` GroupName[?U]
|
|
|
|
GroupName[U] ::
|
|
`<` RegExpIdentifierName[?U] `>`
|
|
|
|
RegExpIdentifierName[U] ::
|
|
RegExpIdentifierStart[?U]
|
|
RegExpIdentifierName[?U] RegExpIdentifierPart[?U]
|
|
|
|
RegExpIdentifierStart[U] ::
|
|
UnicodeIDStart
|
|
`$`
|
|
`_`
|
|
`\` RegExpUnicodeEscapeSequence[?U]
|
|
|
|
RegExpIdentifierPart[U] ::
|
|
UnicodeIDContinue
|
|
`$`
|
|
`\` RegExpUnicodeEscapeSequence[?U]
|
|
<ZWNJ>
|
|
<ZWJ>
|
|
|
|
RegExpUnicodeEscapeSequence[U] ::
|
|
[+U] `u` LeadSurrogate `\u` TrailSurrogate
|
|
[+U] `u` LeadSurrogate
|
|
[+U] `u` TrailSurrogate
|
|
[+U] `u` NonSurrogate
|
|
[~U] `u` Hex4Digits
|
|
[+U] `u{` CodePoint `}`
|
|
|
|
|
|
LeadSurrogate ::
|
|
Hex4Digits [> but only if the SV of |Hex4Digits| is in the inclusive range 0xD800 to 0xDBFF]
|
|
|
|
TrailSurrogate ::
|
|
Hex4Digits [> but only if the SV of |Hex4Digits| is in the inclusive range 0xDC00 to 0xDFFF]
|
|
|
|
NonSurrogate ::
|
|
Hex4Digits [> but only if the SV of |Hex4Digits| is not in the inclusive range 0xD800 to 0xDFFF]
|
|
|
|
IdentityEscape[U] ::
|
|
[+U] SyntaxCharacter
|
|
[+U] `/`
|
|
[~U] SourceCharacter but not UnicodeIDContinue
|
|
|
|
DecimalEscape ::
|
|
NonZeroDigit DecimalDigits? [lookahead <! DecimalDigit]
|
|
|
|
CharacterClassEscape[U] ::
|
|
`d`
|
|
`D`
|
|
`s`
|
|
`S`
|
|
`w`
|
|
`W`
|
|
[+U] `p{` UnicodePropertyValueExpression `}`
|
|
[+U] `P{` UnicodePropertyValueExpression `}`
|
|
|
|
UnicodePropertyValueExpression ::
|
|
UnicodePropertyName `=` UnicodePropertyValue
|
|
LoneUnicodePropertyNameOrValue
|
|
|
|
UnicodePropertyName ::
|
|
UnicodePropertyNameCharacters
|
|
|
|
UnicodePropertyNameCharacters ::
|
|
UnicodePropertyNameCharacter UnicodePropertyNameCharacters?
|
|
|
|
UnicodePropertyValue ::
|
|
UnicodePropertyValueCharacters
|
|
|
|
LoneUnicodePropertyNameOrValue ::
|
|
UnicodePropertyValueCharacters
|
|
|
|
UnicodePropertyValueCharacters ::
|
|
UnicodePropertyValueCharacter UnicodePropertyValueCharacters?
|
|
|
|
UnicodePropertyValueCharacter ::
|
|
UnicodePropertyNameCharacter
|
|
`0`
|
|
`1`
|
|
`2`
|
|
`3`
|
|
`4`
|
|
`5`
|
|
`6`
|
|
`7`
|
|
`8`
|
|
`9`
|
|
|
|
UnicodePropertyNameCharacter ::
|
|
ControlLetter
|
|
`_`
|
|
|
|
CharacterClass[U] ::
|
|
`[` [lookahead != `^`] ClassRanges[?U] `]`
|
|
`[` `^` ClassRanges[?U] `]`
|
|
|
|
ClassRanges[U] ::
|
|
[empty]
|
|
NonemptyClassRanges[?U]
|
|
|
|
NonemptyClassRanges[U] ::
|
|
ClassAtom[?U]
|
|
ClassAtom[?U] NonemptyClassRangesNoDash[?U]
|
|
ClassAtom[?U] `-` ClassAtom[?U] ClassRanges[?U]
|
|
|
|
NonemptyClassRangesNoDash[U] ::
|
|
ClassAtom[?U]
|
|
ClassAtomNoDash[?U] NonemptyClassRangesNoDash[?U]
|
|
ClassAtomNoDash[?U] `-` ClassAtom[?U] ClassRanges[?U]
|
|
|
|
ClassAtom[U] ::
|
|
`-`
|
|
ClassAtomNoDash[?U]
|
|
|
|
ClassAtomNoDash[U] ::
|
|
SourceCharacter but not one of `\` or `]` or `-`
|
|
`\` ClassEscape[?U]
|
|
|
|
ClassEscape[U] ::
|
|
`b`
|
|
[+U] `-`
|
|
CharacterClassEscape[?U]
|
|
CharacterEscape[?U]
|
|
|
|
|
|
NumericLiteral ::
|
|
DecimalLiteral
|
|
BinaryIntegerLiteral
|
|
OctalIntegerLiteral
|
|
HexIntegerLiteral
|
|
LegacyOctalIntegerLiteral
|
|
|
|
LegacyOctalIntegerLiteral ::
|
|
`0` OctalDigit
|
|
LegacyOctalIntegerLiteral OctalDigit
|
|
|
|
DecimalIntegerLiteral ::
|
|
`0`
|
|
NonZeroDigit DecimalDigits?
|
|
NonOctalDecimalIntegerLiteral
|
|
|
|
NonOctalDecimalIntegerLiteral ::
|
|
`0` NonOctalDigit
|
|
LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit
|
|
NonOctalDecimalIntegerLiteral DecimalDigit
|
|
|
|
LegacyOctalLikeDecimalIntegerLiteral ::
|
|
`0` OctalDigit
|
|
LegacyOctalLikeDecimalIntegerLiteral OctalDigit
|
|
|
|
NonOctalDigit :: one of
|
|
`8` `9`
|
|
|
|
|
|
EscapeSequence ::
|
|
CharacterEscapeSequence
|
|
LegacyOctalEscapeSequence
|
|
HexEscapeSequence
|
|
UnicodeEscapeSequence
|
|
|
|
LegacyOctalEscapeSequence ::
|
|
OctalDigit [lookahead <! OctalDigit]
|
|
ZeroToThree OctalDigit [lookahead <! OctalDigit]
|
|
FourToSeven OctalDigit
|
|
ZeroToThree OctalDigit OctalDigit
|
|
|
|
ZeroToThree :: one of
|
|
`0` `1` `2` `3`
|
|
|
|
FourToSeven :: one of
|
|
`4` `5` `6` `7`
|
|
|
|
|
|
Comment ::
|
|
MultiLineComment
|
|
SingleLineComment
|
|
SingleLineHTMLOpenComment
|
|
SingleLineHTMLCloseComment
|
|
SingleLineDelimitedComment
|
|
|
|
MultiLineComment ::
|
|
`/*` FirstCommentLine? LineTerminator MultiLineCommentChars? `*/` HTMLCloseComment?
|
|
|
|
FirstCommentLine ::
|
|
SingleLineDelimitedCommentChars
|
|
|
|
SingleLineHTMLOpenComment ::
|
|
`<!--` SingleLineCommentChars?
|
|
|
|
SingleLineHTMLCloseComment ::
|
|
LineTerminatorSequence HTMLCloseComment
|
|
|
|
SingleLineDelimitedComment ::
|
|
`/*` SingleLineDelimitedCommentChars? `*/`
|
|
|
|
HTMLCloseComment ::
|
|
WhiteSpaceSequence? SingleLineDelimitedCommentSequence? `-->` SingleLineCommentChars?
|
|
|
|
SingleLineDelimitedCommentChars ::
|
|
SingleLineNotAsteriskChar SingleLineDelimitedCommentChars?
|
|
`*` SingleLinePostAsteriskCommentChars?
|
|
|
|
SingleLineNotAsteriskChar ::
|
|
SourceCharacter but not one of `*` or LineTerminator
|
|
|
|
SingleLinePostAsteriskCommentChars ::
|
|
SingleLineNotForwardSlashOrAsteriskChar SingleLineDelimitedCommentChars?
|
|
`*` SingleLinePostAsteriskCommentChars?
|
|
|
|
SingleLineNotForwardSlashOrAsteriskChar ::
|
|
SourceCharacter but not one of `/` or `*` or LineTerminator
|
|
|
|
WhiteSpaceSequence ::
|
|
WhiteSpace WhiteSpaceSequence?
|
|
|
|
SingleLineDelimitedCommentSequence ::
|
|
SingleLineDelimitedComment WhiteSpaceSequence? SingleLineDelimitedCommentSequence?
|
|
|
|
|
|
Term[U, N] ::
|
|
[+U] Assertion[+U, ?N]
|
|
[+U] Atom[+U, ?N]
|
|
[+U] Atom[+U, ?N] Quantifier
|
|
[~U] QuantifiableAssertion[?N] Quantifier
|
|
[~U] Assertion[~U, ?N]
|
|
[~U] ExtendedAtom[?N] Quantifier
|
|
[~U] ExtendedAtom[?N]
|
|
|
|
Assertion[U, N] ::
|
|
`^`
|
|
`$`
|
|
`\` `b`
|
|
`\` `B`
|
|
[+U] `(` `?` `=` Disjunction[+U, ?N] `)`
|
|
[+U] `(` `?` `!` Disjunction[+U, ?N] `)`
|
|
[~U] QuantifiableAssertion[?N]
|
|
`(` `?` `<=` Disjunction[?U, ?N] `)`
|
|
`(` `?` `<!` Disjunction[?U, ?N] `)`
|
|
|
|
QuantifiableAssertion[N] ::
|
|
`(` `?` `=` Disjunction[~U, ?N] `)`
|
|
`(` `?` `!` Disjunction[~U, ?N] `)`
|
|
|
|
ExtendedAtom[N] ::
|
|
`.`
|
|
`\` AtomEscape[~U, ?N]
|
|
`\` [lookahead == `c`]
|
|
CharacterClass[~U]
|
|
`(` Disjunction[~U, ?N] `)`
|
|
`(` `?` `:` Disjunction[~U, ?N] `)`
|
|
InvalidBracedQuantifier
|
|
ExtendedPatternCharacter
|
|
|
|
InvalidBracedQuantifier ::
|
|
`{` DecimalDigits `}`
|
|
`{` DecimalDigits `,` `}`
|
|
`{` DecimalDigits `,` DecimalDigits `}`
|
|
|
|
ExtendedPatternCharacter ::
|
|
SourceCharacter but not one of `^` `$` `\` `.` `*` `+` `?` `(` `)` `[` `|`
|
|
|
|
AtomEscape[U, N] ::
|
|
[+U] DecimalEscape
|
|
[~U] DecimalEscape [> but only if the CapturingGroupNumber of |DecimalEscape| is <= _NcapturingParens_]
|
|
CharacterClassEscape[?U]
|
|
CharacterEscape[~U, ?N]
|
|
[+N] `k` GroupName[?U]
|
|
|
|
CharacterEscape[U, N] ::
|
|
ControlEscape
|
|
`c` ControlLetter
|
|
`0` [lookahead <! DecimalDigit]
|
|
HexEscapeSequence
|
|
RegExpUnicodeEscapeSequence[?U]
|
|
[~U] LegacyOctalEscapeSequence
|
|
IdentityEscape[?U, ?N]
|
|
|
|
IdentityEscape[U, N] ::
|
|
[+U] SyntaxCharacter
|
|
[+U] `/`
|
|
[~U] SourceCharacterIdentityEscape[?N]
|
|
|
|
SourceCharacterIdentityEscape[N] ::
|
|
[~N] SourceCharacter but not `c`
|
|
[+N] SourceCharacter but not one of `c` or `k`
|
|
|
|
ClassAtomNoDash[U, N] ::
|
|
SourceCharacter but not one of `\` or `]` or `-`
|
|
`\` ClassEscape[?U, ?N]
|
|
`\` [lookahead == `c`]
|
|
|
|
ClassEscape[U, N] ::
|
|
`b`
|
|
[+U] `-`
|
|
[~U] `c` ClassControlLetter
|
|
CharacterClassEscape[?U]
|
|
CharacterEscape[?U, ?N]
|
|
|
|
ClassControlLetter ::
|
|
DecimalDigit
|
|
`_`
|
|
|
|
|
|
IfStatement[Yield, Await, Return] :
|
|
`if` `(` Expression[+In, ?Yield, ?Await] `)` FunctionDeclaration[?Yield, ?Await, ~Default] `else` Statement[?Yield, ?Await, ?Return]
|
|
`if` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] `else` FunctionDeclaration[?Yield, ?Await, ~Default]
|
|
`if` `(` Expression[+In, ?Yield, ?Await] `)` FunctionDeclaration[?Yield, ?Await, ~Default] `else` FunctionDeclaration[?Yield, ?Await, ~Default]
|
|
`if` `(` Expression[+In, ?Yield, ?Await] `)` FunctionDeclaration[?Yield, ?Await, ~Default]
|
|
|
|
|
|
IterationStatement[Yield, Await, Return] :
|
|
`for` `(` `var` BindingIdentifier[?Yield, ?Await] Initializer[~In, ?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
|
|
|