Lexical Grammar
InputElementDiv:
WhiteSpace
LineTerminator
Comment
Token
DivPunctuator
RightBracePunctuator
InputElementRegExp:
WhiteSpace
LineTerminator
Comment
Token
RightBracePunctuator
RegularExpressionLiteral
InputElementTemplateTail:
WhiteSpace
LineTerminator
Comment
Token
DivPunctuator
TemplateSubstitutionTail
Unicode Format-Control Characters
Format-Control Character Usage
Code Point Name Formal Name Usage
U+200C Zero width non-joiner <ZWNJ> IdentifierPart
U+200D Zero width joiner <ZWJ> IdentifierPart
U+FEFF Byte Order Mark <BOM> Whitespace
White Space
Whitespace Characters
Code Point Name Formal Name
U+0009 Tab <Tab>
U+000B Vartical Tab <VT>
U+000C Form Feed <FF>
U+0020 Space <SP>
U+00A0 No-break space <NBSP>
U+FEFF Byte Order Mark <BOM>
Other category "Zs" Any other Unicode "space-separator" <USP>
WhiteSpace:
<Tab>
<VT>
<FF>
<SP>
<NBSP>
<BOM>
<USP>
Line Terminators
Line Terminator Characters
Code Point
Name
Formal Name
U+000A
Line Feed
<LF>
U+000D
Carriage Return
<CR>
U+2028
Line separator
<LS>
U+2029
Paragraph separator
<PS>
LineTerminator:
<LF>
<CR>
<LS>
<PS>
LineTerminatorSequence:
<LF>
<CR> [lookahead ∉ <LF>]
<LS>
<PS>
<CR> <LF>
Comments
Comment:
MultiLineComment
SingleLineComment
MultiLineComment:
/* MultiLineCommentCharsopt */
MultiLineCommentChars:
MultiLineNotAsteriskChar MultiLineCommentCharsopt
* PostAsteriskCommentCharsopt
PostAsteriskCommentChars:
MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentCharsopt
* PostAsteriskCommentCharsopt
MultiLineNotAsteriskChar:
SourceCharacter but not *
MultiLineNotForwardSlashOrAsteriskChar:
SourceCharacter but not one of / or *
SingleLineComment:
// SingleLineCommentCharsopt
SingleLineCommentChars:
SingleLineCommentChar SingleLineCommentCharsopt
SingleLineCommentChar:
SourceCharacter but not LineTerminator
Tokens
Token:
IdentifierName
Punctuator
NumericLiteral
StringLiteral
Template
The DivPunctuator
, RegularExpressionLiteral
, RightBracePunctuator
and TemplateSubstitutionTail
productions define tokens, but are not included in the Token
production.
Names and Keywords
Identifier:
IdentifierName but not ReservedWord
IdentifierName:
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart:
UnicodeIDStart
$
_
\ UnicodeEscapeSequence
IdentifierPart:
UnicodeIDContinue
$
_
\ UnicodeEscapeSequence
<ZWNJ>
<ZWJ>
UnicodeIDStart:
any Unicode character with the Unicode property "ID_Start".
UnicodeIDContinue:
any Unicode character with the Unicode property "ID_Continue".
Reserved Words
ReservedWord:
Keyword
FutureReservedWord
NullLiteral
BooleanLiteral
Keywords
Keyword: one of
break do instanceof typeof
case else let var
catch export new void
class finally return while
const for super with
continue function switch yield
debugger if this
default import throw
delete in try
Future Reserved Words
FutureReservedWord: one of
enum extends
The following tokens are also considered to be FutureReservedWord
when they occure within strict mode code
implements package protected static
interface private public
Punctuators
Punctuator: one of
{ ( ) [ ] .
... ; , < > <=
>= == != === !==
+ - * % ++ --
<< >> >>> & | ^
! ~ && || ? :
= += -= *= %= <<=
>>= >>>= &= |= ^= =>
DivPunctuator: one of
/ /=
RightBracePunctuator:
}
Literals
Null Literals
NullLiteral:
null
Boolean Literals
BooleanLiteral:
true
false
Numeric Literals
NumericLiteral:
DecimalLiteral
BinaryIntegerLiteral
OctalIntegerLiteral
HexIntegerLiteral
DecimalLiteral:
DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt
. DecimalDigits ExponentPartopt
DecimalIntegerLiteral ExponentPartopt
DecimalIntegerLiteral:
0
NonZeroDigit DecimalDigitsopt
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
String Literals
StringLiteral:
" DoubleStringCharactersopt "
' SingleStringCharactersopt '
DoubleStringCharacters:
DoubleStringCharacter DoubleStringCharactersopt
SingleStringCharacters:
SingleStringCharacter SingleStringCharactersopt
DoubleStringCharacter:
SourceCharacter but not one of " or \ or LineTerminator
\ EscapeSequence
LineContinuation
SingleStringCharacter:
SourceCharacter but not one of ' or \ or LineTerminator
\ 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 HexDigit HexDigit HexDigit HexDigit
u{ HexDigits }
String Single Character Escape Sequences
Escape Sequence
Code Unit Value
Name
Symbol
\b
0x0008
backspace
<BS>
\t
0x0009
horizontal tab
<HT>
\n
0x000A
line feed(new line)
<LF>
\v
0x000B
vertical tab
<VT>
\f
0x000C
form feed
<FF>
\r
0x000D
carriage return
<CR>
\"
0x0022
double quote
"
\'
0x0027
single quote
'
\\
0x005C
backslash
\
Regular Expression Literals
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
Regular expression literals may not be empty; instead of representing an empty regular expression literal, the characters // start a single-line comment. To specify an empty regular expression, use: /(?:)/ .
Template Literal Lexical Components
Template:
NoSubstitutionTemplate
TemplateHead
NoSubstitutionTemplate:
` TemplateCharactersopt `
TemplateHead:
` TemplateCharactersopt ${
TemplateSubstitutionTail:
TemplateMiddle
TemplateTail
TemplateMiddle:
} TemplateCharactersopt ${
TemplateTail:
} TemplateCharactersopt `
TemplateCharacters:
TemplateCharacter TemplateCharactersopt
TemplateCharacter:
SourceCharacter but not one of ` or \ or $ or LineTerminatorSequence
$ [lookahead ∉ { ]
\ EscapeSequence
LineContinuation
LineTerminatorSequence
Expressions
Primary Expressions
PrimaryExpression:
this
IdentifierReference
Literal
ArrayInitialiser
ObjectLiteral
FunctionExpression
ClassExpression
GeneratorExpression
GeneratorComprehension
RegularExpressionLiteral
TemplateLiteral
CoverParenthesisedExpressionAndArrowParametersList
CoverParenthesisedExpressionAndArrowParametersList:
( Expression )
( )
( ... Identifier )
( Expression , ... Identifier )
Supplemental Syntax
When processing the production PrimaryExpression
: CoverParenthesisedExpressionAndArrowParametersList
the following grammar is used to refine the interpretation of CoverParenthesisedExpressionAndArrowParametersList
.
ParenthesizedExpression:
( FormalParameterList )
Identifier Reference
IdentifierReference:
Identifier
[Only match if not within the FunctionBody of a GeneratorMethod, GeneratorDeclaration or GeneratorExpression] yield
Literals
Literal:
NullLiteral
ValueLiteral
ValueLiteral:
BooleanLiteral
NumericLiteral
StringLiteral
Array Initialiser
ArrayInitialiser:
ArrayLiteral
ArrayComprehension
Array Literal
ArrayLiteral:
[ Elisionopt ]
[ ElementList ]
[ ElementList , Elisionopt ]
ElementList:
Elisionopt AssignmentExpression
Elisionopt SpreadElement
ElementList , Elisionopt AssignmentExpression
ElementList , Elisionopt SpreadElement
Elision:
,
Elision ,
SpreadElement:
... AssignmentExpression
Array Comprehension
ArrayComprehension:
[ Comprehension ]
Comprehension:
ComprehensionFor ComprehensionTail
ComprehensionTail:
AssignmentExpression
ComprehensionFor ComprehensionTail
ComprehensionIf ComprehensionTail
ComprehensionFor:
for ( ForBinding of AssignmentExpression )
ComprehensionIf:
if ( AssignmentExpression )
ForBinding:
BindingIdentifier
BindingPattern
Object Initialiser
ObjectLiteral:
{ }
{ PropertyDefinitionList }
{ PropertyDefinitionList , }
PropertyDefinitionList:
PropertyDefinition
PropertyDefinitionList , PropertyDefinition
PropertyDefinition:
IdentifierName
CoverInitialisedName
PropertyName : AssignmentExpression
MethodDefinition
PropertyName:
LiteralPropertyName
ComputedPropertyName
LiteralPropertyName:
IdentifierName
StringLiteral
NumericLiteral
ComputedPropertyName:
[ AssignmentExpression ]
CoverInitialisedName:
IdentifierName Initialiser
Initialiser:
= AssignmentExpression
Generator Comprehensions
GeneratorComprehension:
( Comprehension )
Template Literals
TemplateLiteral:
NoSubstitutionTemplate
TemplateHead Expression [Lexical goal InputElementTemplateTail] TemplateSpans
TemplateSpans:
TemplateTail
TemplateMiddleList [Lexical goal InputElementTemplateTail] TemplateTail
TemplateMiddleList:
TemplateMiddle Expression
TemplateMiddleList [Lexical goal InputElementTemplateTail] TemplateMiddle Expression
Left-Hand-Side Expressions
MemberExpression:
[Lexical goal InputElementRegExp] PrimaryExpression
MemberExpression [ Expression ]
MemberExpression . IdentifierName
MemberExpression TemplateLiteral
super [ Expression ]
super . IdentifierName
new super Argumentsopt
new MemberExpression Arguments
NewExpression:
MemberExpression
new NewExpression
CallExpression:
MemberExpression Arguments
super Arguments
CallExpression Arguments
CallExpression [ Expression ]
CallExpression . IdentifierName
CallExpression TemplateLiteral
Arguments:
( )
( ArgumentList )
ArgumentList:
AssignmentExpression
... AssignmentExpression
ArgumentList , AssignmentExpression
ArgumentList , ... AssignmentExpression
LeftHandSideExpression:
NewExpression
CallExpression
Postfix Expressions
PostfixExpression:
LeftHandSideExpression
LeftHandSideExpression [no LineTerminator here] ++
LeftHandSideExpression [no LineTerminator here] --
Unary Operators
UnaryExpression:
PostfixExpression
delete UnaryExpression
void UnaryExpression
typeof UnaryExpression
++ UnaryExpression
-- UnaryExpression
+ UnaryExpression
- UnaryExpression
~ UnaryExpression
! UnaryExpression
Multiplicative Operators
MultiplicativeExpression:
UnaryExpression
MultiplicativeExpression * UnaryExpression
MultiplicativeExpression / UnaryExpression
MultiplicativeExpression % UnaryExpression
Additive Operators
AdditiveExpression:
MultiplicativeExpression
AdditiveExpression + MultiplicativeExpression
AdditiveExpression - MultiplicativeExpression
Bitwise Shift Operators
ShiftExpression:
AdditiveExpression
ShiftExpression << AdditiveExpression
ShiftExpression >> AdditiveExpression
ShiftExpression <<< AdditiveExpression
Relational Operators
RelationalExpression:
ShiftExpression
RelationalExpression < ShiftExpression
RelationalExpression > ShiftExpression
RelationalExpression <= ShiftExpression
RelationalExpression >= ShiftExpression
RelationalExpression instanceof ShiftExpression
RelationalExpression in ShiftExpression
RelationalExpressionNoIn:
ShiftExpression
RelationalExpressionNoIn < ShiftExpression
RelationalExpressionNoIn > ShiftExpression
RelationalExpressionNoIn <= ShiftExpression
RelationalExpressionNoIn >= ShiftExpression
RelationalExpressionNoIn instanceof ShiftExpression
The "NoIn" variants are needed to avoid confusing the in operator in a relational expression with in operator in a for statement.
Equality Operators
EqualityExpression:
RelationalExpression
EqualityExpression == RelationalExpression
EqualityExpression != RelationalExpression
EqualityExpression === RelationalExpression
EqualityExpression !== RelationalExpression
EqualityExpressionNoIn:
RelationalExpressionNoIn
EqualityExpressionNoIn == RelationalExpressionNoIn
EqualityExpressionNoIn != RelationalExpressionNoIn
EqualityExpressionNoIn === RelationalExpressionNoIn
EqualityExpressionNoIn !== RelationalExpressionNoIn
Binary Bitwise Operators
BitwiseANDExpression:
EqualityExpression
BitwiseANDExpression & EqualityExpression
BitwiseANDExpressionNoIn:
EqualityExpressionNoIn
BitwiseANDExpressionNoIn & EqualityExpressionNoIn
BitwiseXORExpression:
BitwiseANDExpression
BitwiseXORExpression ^ BitwiseANDExpression
BitwiseXORExpressionNoIn:
BitwiseANDExpressionNoIn
BitwiseXORExpressionNoIn ^ BitwiseANDExpressionNoIn
BitwiseORExpression:
BitwiseXORExpression
BitwiseORExpression | BitwiseXORExpression
BitwiseORExpressionNoIn:
BitwiseXORExpressionNoIn
BitwiseORExpressionNoIn | BitwiseXORExpressionNoIn
Binary Logical Operators
LogicalANDExpression:
BitwiseXORExpression
LogicalANDExpression && BitwiseORExpression
LogicalANDExpressionNoIn:
BitwiseXORExpressionNoIn
LogicalANDExpressionNoIn && BitwiseORExpressionNoIn
LogicalORExpression:
LogicalANDExpression
LogicalORExpression || LogicalANDExpression
LogicalORExpressionNoIn:
LogicalANDExpressionNoIn
LogicalORExpressionNoIn || LogicalANDExpressionNoIn
Conditional Operator
ConditionalExpression:
LogicalORExpression
LogicalORExpression ? AssignmentExpression : AssignmentExpression
ConditionalExpressionNoIn:
LogicalORExpressionNoIn
LogicalORExpressionNoIn ? AssignmentExpression : AssignmentExpressionNoIn
Assignment Operators
AssignmentExpression:
ConditionalExpression
[Only match if within the FunctionBody of a GeneratorMethod, GeneratorDeclaration or GeneratorExpression] YieldExpression
ArrowFunction
LeftHandSideExpression = AssignmentExpression
LeftHandSideExpression AssignmentOperator AssignmentExpression
AssignmentExpressionNoIn:
ConditionalExpressionNoIn
YieldExpressionNoIn
ArrowFunctionNoIn
LeftHandSideExpression = AssignmentExpressionNoIn
LeftHandSideExpression AssignmentOperator AssignmentExpressionNoIn
AssignmentOperator: one of
*= /= %= += -= <<= >>= >>>= &= ^= |=
Destructuring Assingment
AssignmentPattern:
ObjectAssignmentPattern
ArrayAssignmentPattern
ObjectAssignmentPattern:
{ }
{ AssignmentPropertyList }
{ AssignmentPropertyList , }
ArrayAssignmentPattern:
[ Elisionopt AssignmentRestElementopt ]
[ AssignmentElementList ]
[ AssignmentElementList , Elisionopt AssignmentRestElementopt ]
AssignmentPropertyList:
AssignmentProperty
AssignmentPropertyList , AssignmentProperty
AssignmentElementList:
Elisionopt AssignmentElement
AssignmentElementList , Elisionopt AssignmentElement
AssignmentProperty:
Identifier Initialiseropt
PropertyName : AssignmentElement
AssignmentElement:
DestructuringAssignmentTarget Initialiseropt
AssignmentRestElement:
... DestructuringAssignmentTarget
DestructuringAssignmentTarget:
LeftHandSideExpression
Comma Operator
Expression:
AssignmentExpression
Expression , AssignmentExpression
ExpressionNoIn:
AssignmentExpressionNoIn
ExpressionNoIn , AssignmentExpressionNoIn
Statements and Declarations
Statement:
BlockStatement
VariableStatement
EmptyStatement
ExpressionStatement
IfStatement
BreakableStatement
ContinueStatement
BreakStatement
ReturnStatement
WithStatement
LabelledStatement
ThrowStatement
TryStatement
DebuggerStatement
Declaration:
FunctionDeclaration
GeneratorDeclaration
ClassDeclaration
LexicalDeclaration
BreakableStatement:
IterationStatement
SwitchStatement
Block
BlockStatement:
Block
Block:
{ StatementListopt }
StatementList:
StatementListItem
StatementList StatementListItem
StatementListItem:
Statement
Declaration
Declarations and the Variable Statement
Let and Const Declarations
LexicalDeclaration:
LetOrConst BindingList ;
LexicalDeclarationNoIn:
LetOrConst BindingListNoIn
LetOrConst:
let
const
BindingList:
LexicalBinding
BindingList , LexicalBinding
BindingListNoIn:
LexicalBindingNoIn
BindingListNoIn , LexicalBindingNoIn
LexicalBinding:
BindingIdentifier Initialiseropt
BindingPattern Initialiser
LexicalBindingNoIn:
BindingIdentifier InitialiserNoInopt
BindingPattern InitialiserNoIn
BindingIdentifier:
default
yield
Identifier
InitialiserNoIn:
= AssignmentExpressionNoIn
Variable Statement
VariableStatement:
var VariableDeclarationList ;
VariableDeclarationList:
VariableDeclaration
VariableDeclarationList , VariableDeclaration
VariableDeclarationListNoIn:
VariableDeclarationNoIn
VariableDeclarationListNoIn , VariableDeclarationNoIn
VariableDeclaration:
BindingIdentifier Initialiseropt
BindingPattern Initialiser
VariableDeclarationNoIn:
BindingIdentifier InitialiserNoInopt
BindingPattern InitialiserNoIn
Destructuring Binding Patterns
BindingPattern:
ObjectBindingPattern
ArrayBindingPattern
ObjectBindingPattern:
{ }
{ BindingPropertyList }
{ BindingPropertyList , }
ArrayBindingPattern:
[ Elisionopt BindingRestElementopt ]
[ BindingElementList ]
[ BindingElementList , Elisionopt BindingRestElementopt ]
BindingPropertyList:
BindingProperty
BindingPropertyList , BindingProperty
BindingElementList:
Elisionopt BindingElement
BindingElementList , Elisionopt BindingElement
BindingProperty:
SingleNameBinding
PropertyName : BindingElement
BindingElement:
SingleNameBinding
BindingPattern Initialiseropt
SingleNameBinding:
BindingIdentifier Initialiseropt
BindingRestElement:
... BindingIdentifier
Empty Statement
EmptyStatement:
;
Expression Statement
ExpressionStatement:
[lookahead ∉ {{ , function , class }] Expression ;
An ExpressionStatement
cannot start with an opening curly brace because that might make it ambiguous with a Block
. Also, an ExpressionStatement
cannot start with the function or class keywords because that would make it ambiguous with a FunctionDeclaration
, a GeneratorDeclaration
or a ClassDeclaration
.
The if
Statement
IfStatement:
if ( Expression ) Statement else Statement
if ( Expression ) Statement
Iteration Statements
IterationStatement:
do Statement while ( Expression )
while ( Expression ) Statement
for ( ExpressionNoInopt ; Expressionopt ; Expressionopt ) Statement
for ( var VariableDeclarationListNoIn ; Expressionopt ; Expressionopt ) Statement
for ( LexicalDeclarationNoIn ; Expressionopt ; Expressionopt ) Statement
for ( LeftHandSideExpression in Expression ) Statement
for ( var ForBinding in Expression ) Statement
for ( ForDeclaration in Expression ) Statement
for ( LeftHandSideExpression of AssignmentExpression ) Statement
for ( var ForBinding of AssignmentExpression ) Statement
for ( ForDeclaration of AssignmentExpression ) Statement
ForDeclaration:
LetOrConst ForBinding
The continue
Statement
ContinueStatement:
continue ;
continue [no LineTerminator here] Identifier ;
The break
Statement
BreakStatement:
break ;
break [no LineTerminator here] Identifier ;
The return
Statement
ReturnStatement:
return ;
return [no LineTerminator here] Expression ;
The with
Statement
WithStatement:
with ( Expression ) Statement
The with statement adds an object environment record for a compluted object to the lexical environment of the current execution context. It then executes a statement using this argumented lexical environment. Finally, it restores the original lexical environment.
The switch
Statement
SwitchStatement:
switch ( Expression ) CaseBlock
CaseBlock:
{ CaseClausesopt }
{ CaseClausesopt DefaultClause CaseClausesopt }
CaseClauses:
CaseClause
CaseClauses CaseClause
CaseClause:
case Expression : StatementListopt
DefaultClause:
default : StatementListopt
Labelled Statements
LabelledStatement:
Identifier : Statement
The throw
Statement
ThrowStatement:
throw [no LineTerminator here] Expression ;
The try
Statement
TryStatement:
try Block Catch
try Block Finally
try Block Catch Finally
Catch:
catch ( CatchParameter ) Block
Finally:
finally Block
CatchParameter:
BindingIdentifier
BindingPattern
The debugger
Statement
DebuggerStatement:
debugger ;
Functions and Classes
Function Definitions
FunctionDeclaration:
function BindingIdentifier ( FormalParameters ) { FunctionBody }
FunctionExpression:
function BindingIdentifieropt ( FormalParameters ) { FunctionBody }
StrictFormalParameters:
FormalParameters
FormalParameters:
[empty]
FormalParameterList
FormalParameterList:
FunctionRestParameter
FormalsList
FormalsList , FunctionRestParameter
FormalsList:
FormalParameter
FormalsList , FormalParameter
FunctionRestParameter:
... BindingIdentifier
FormalParameter:
BindingElement
FunctionBody:
FunctionStatementList
FunctionStatementList:
StatementListopt
Arrow Function Definitions
ArrowFunction:
ArrowParameters => ConciseBody
ArrowFunctionNoIn:
ArrowParameters => ConciseBodyNoIn
ArrowParameters:
BindingIdentifier
CoverParenthesisedExpressionAndArrowParametersList
ConciseBody:
[lookahead ∉ { { }] AssignmentExpression
{ FunctionBody }
ConciseBodyNoIn:
[lookahead ∉ { { }] AssignmentExpressionNoIn
{ FunctionBody }
Method Definitions
MethodDefinition:
PropertyName ( StrictFormalParameters ) { FunctionBody }
GeneratorMethod
get PropertyName ( ) { FunctionBody }
set PropertyName ( PropertySetParameterList ) { FunctionBody }
PropertySetParameterList:
BindingIdentifier
BindingPattern
Generator Function Definitions
GeneratorMethod:
* PropertyName ( StrictFormalParameters ) { FunctionBody }
GeneratorDeclaration:
function * BindingIdentifier ( FormalParameters ) { FunctionBody }
GeneratorExpression:
function * BindingIdentifieropt ( FormalParameters ) { FunctionBody }
YieldExpression:
yield
yield [no LineTerminator here] [Lexical goal InputElementRegExp] AssignmentExpression
yield * [Lexical goal InputElementRegExp] AssignmentExpression
YieldExpressionNoIn:
yield
yield [no LineTerminator here] [Lexical goal InputElementRegExp] AssignmentExpressionNoIn
yield * [Lexical goal InputElementRegExp] AssignmentExpressionNoIn
Class Definitions
ClassDeclaration:
class BindingIdentifier ClassTail
ClassExpression:
class BindingIdentifieropt ClassTail
ClassTail:
ClassHeritageopt { ClassBodyopt }
ClassHeritage:
extends AssignmentExpression
ClassBody:
ClassElementList
ClassElementList:
ClassElement
ClassElementList ClassElement
ClassElement:
MethodDefinition
static MethodDefinition
;