Dilbilgisi Özeti
A.1 Sözcüksel Dilbilgisi
SourceCharacter SourceCharacter :: herhangi bir Unicode kod noktası
InputElementDiv InputElementDiv :: WhiteSpace LineTerminator Comment CommonToken DivPunctuator RightBracePunctuator
InputElementRegExp InputElementRegExp :: WhiteSpace LineTerminator Comment CommonToken RightBracePunctuator RegularExpressionLiteral
InputElementRegExpOrTemplateTail InputElementRegExpOrTemplateTail :: WhiteSpace LineTerminator Comment CommonToken RegularExpressionLiteral TemplateSubstitutionTail
InputElementTemplateTail InputElementTemplateTail :: WhiteSpace LineTerminator Comment CommonToken DivPunctuator TemplateSubstitutionTail
InputElementHashbangOrRegExp InputElementHashbangOrRegExp :: WhiteSpace LineTerminator Comment CommonToken HashbangComment RegularExpressionLiteral
WhiteSpace WhiteSpace ::
LineTerminator LineTerminator ::
LineTerminatorSequence LineTerminatorSequence ::
Comment Comment :: MultiLineComment SingleLineComment
MultiLineComment MultiLineComment :: /* MultiLineCommentCharsopt ***/**
MultiLineCommentChars MultiLineCommentChars :: MultiLineNotAsteriskChar MultiLineCommentCharsopt ***** PostAsteriskCommentCharsopt
PostAsteriskCommentChars PostAsteriskCommentChars :: MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentCharsopt ***** PostAsteriskCommentCharsopt
MultiLineNotAsteriskChar MultiLineNotAsteriskChar :: SourceCharacter but not *****
MultiLineNotForwardSlashOrAsteriskChar MultiLineNotForwardSlashOrAsteriskChar :: SourceCharacter but not one of / or *****
SingleLineComment SingleLineComment :: // SingleLineCommentCharsopt
SingleLineCommentChars SingleLineCommentChars :: SingleLineCommentChar SingleLineCommentCharsopt
SingleLineCommentChar SingleLineCommentChar :: SourceCharacter but not LineTerminator
HashbangComment HashbangComment :: #! SingleLineCommentCharsopt
CommonToken CommonToken :: IdentifierName PrivateIdentifier Punctuator NumericLiteral StringLiteral Template
PrivateIdentifier PrivateIdentifier :: # IdentifierName
IdentifierName IdentifierName :: IdentifierStart IdentifierName IdentifierPart
IdentifierStart IdentifierStart :: IdentifierStartChar **** UnicodeEscapeSequence
IdentifierPart IdentifierPart :: IdentifierPartChar **** UnicodeEscapeSequence
IdentifierStartChar IdentifierStartChar :: UnicodeIDStart $ _
IdentifierPartChar IdentifierPartChar :: UnicodeIDContinue $
AsciiLetter AsciiLetter :: 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
UnicodeIDStart UnicodeIDStart :: "ID_Start" Unicode özelliğine sahip herhangi bir Unicode kod noktası
UnicodeIDContinue UnicodeIDContinue :: "ID_Continue" Unicode özelliğine sahip herhangi bir Unicode kod noktası
ReservedWord ReservedWord :: one of await break case catch class const continue debugger default delete do else enum export extends false finally for function if import in instanceof new null return super switch this throw true try typeof var void while with yield
Punctuator Punctuator :: OptionalChainingPunctuator OtherPunctuator
OptionalChainingPunctuator OptionalChainingPunctuator :: ?. [lookahead ∉ DecimalDigit]
OtherPunctuator OtherPunctuator :: one of { ( ) [ ] . ... ; , <** **> <=** **>= == != === !== + - ***** % ****** ++ -- <<** **>> >>> & | ^ ! ~ && || ?? ? : = += -= ***=** %= ****=** <<=** **>>= >>>= &= |= ^= &&= ||= ??= =>
DivPunctuator DivPunctuator :: / /=
RightBracePunctuator RightBracePunctuator :: }
NullLiteral NullLiteral :: null
BooleanLiteral BooleanLiteral :: true false
NumericLiteralSeparator NumericLiteralSeparator :: _
NumericLiteral NumericLiteral :: DecimalLiteral DecimalBigIntegerLiteral NonDecimalIntegerLiteral[+Sep] NonDecimalIntegerLiteral[+Sep] BigIntLiteralSuffix LegacyOctalIntegerLiteral
DecimalBigIntegerLiteral DecimalBigIntegerLiteral :: 0 BigIntLiteralSuffix NonZeroDigit DecimalDigits[+Sep]opt BigIntLiteralSuffix NonZeroDigit NumericLiteralSeparator DecimalDigits[+Sep] BigIntLiteralSuffix
NonDecimalIntegerLiteral NonDecimalIntegerLiteral[Sep] :: BinaryIntegerLiteral[?Sep] OctalIntegerLiteral[?Sep] HexIntegerLiteral[?Sep]
BigIntLiteralSuffix BigIntLiteralSuffix :: n
DecimalLiteral DecimalLiteral :: DecimalIntegerLiteral . DecimalDigits[+Sep]opt ExponentPart[+Sep]opt . DecimalDigits[+Sep] ExponentPart[+Sep]opt DecimalIntegerLiteral ExponentPart[+Sep]opt
DecimalIntegerLiteral DecimalIntegerLiteral :: 0 NonZeroDigit NonZeroDigit NumericLiteralSeparatoropt DecimalDigits[+Sep] NonOctalDecimalIntegerLiteral
DecimalDigits DecimalDigits[Sep] :: DecimalDigit DecimalDigits[?Sep] DecimalDigit [+Sep] DecimalDigits[+Sep] NumericLiteralSeparator DecimalDigit
DecimalDigit DecimalDigit :: one of 0 1 2 3 4 5 6 7 8 9
NonZeroDigit NonZeroDigit :: one of 1 2 3 4 5 6 7 8 9
ExponentPart ExponentPart[Sep] :: ExponentIndicator SignedInteger[?Sep]
ExponentIndicator ExponentIndicator :: one of e E
SignedInteger SignedInteger[Sep] :: DecimalDigits[?Sep] + DecimalDigits[?Sep] - DecimalDigits[?Sep]
BinaryIntegerLiteral BinaryIntegerLiteral[Sep] :: 0b BinaryDigits[?Sep] 0B BinaryDigits[?Sep]
BinaryDigits BinaryDigits[Sep] :: BinaryDigit BinaryDigits[?Sep] BinaryDigit [+Sep] BinaryDigits[+Sep] NumericLiteralSeparator BinaryDigit
BinaryDigit BinaryDigit :: one of 0 1
OctalIntegerLiteral OctalIntegerLiteral[Sep] :: 0o OctalDigits[?Sep] 0O OctalDigits[?Sep]
OctalDigits OctalDigits[Sep] :: OctalDigit OctalDigits[?Sep] OctalDigit [+Sep] OctalDigits[+Sep] NumericLiteralSeparator OctalDigit
LegacyOctalIntegerLiteral LegacyOctalIntegerLiteral :: 0 OctalDigit LegacyOctalIntegerLiteral OctalDigit
NonOctalDecimalIntegerLiteral NonOctalDecimalIntegerLiteral :: 0 NonOctalDigit LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit NonOctalDecimalIntegerLiteral DecimalDigit
LegacyOctalLikeDecimalIntegerLiteral LegacyOctalLikeDecimalIntegerLiteral :: 0 OctalDigit LegacyOctalLikeDecimalIntegerLiteral OctalDigit
OctalDigit OctalDigit :: one of 0 1 2 3 4 5 6 7
NonOctalDigit NonOctalDigit :: one of 8 9
HexIntegerLiteral HexIntegerLiteral[Sep] :: 0x HexDigits[?Sep] 0X HexDigits[?Sep]
HexDigits HexDigits[Sep] :: HexDigit HexDigits[?Sep] HexDigit [+Sep] HexDigits[+Sep] NumericLiteralSeparator HexDigit
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 StringLiteral :: " DoubleStringCharactersopt " ' SingleStringCharactersopt '
DoubleStringCharacters DoubleStringCharacters :: DoubleStringCharacter DoubleStringCharactersopt
SingleStringCharacters SingleStringCharacters :: SingleStringCharacter SingleStringCharactersopt
DoubleStringCharacter DoubleStringCharacter :: SourceCharacter but not one of " or **** or LineTerminator
SingleStringCharacter SingleStringCharacter :: SourceCharacter but not one of ' or **** or LineTerminator
LineContinuation LineContinuation :: **** LineTerminatorSequence
EscapeSequence EscapeSequence :: CharacterEscapeSequence 0 [lookahead ∉ DecimalDigit] LegacyOctalEscapeSequence NonOctalDecimalEscapeSequence HexEscapeSequence UnicodeEscapeSequence
CharacterEscapeSequence CharacterEscapeSequence :: SingleEscapeCharacter NonEscapeCharacter
SingleEscapeCharacter SingleEscapeCharacter :: one of ' " **** b f n r t v
NonEscapeCharacter NonEscapeCharacter :: SourceCharacter but not one of EscapeCharacter or LineTerminator
EscapeCharacter EscapeCharacter :: SingleEscapeCharacter DecimalDigit x u
LegacyOctalEscapeSequence LegacyOctalEscapeSequence :: 0 [lookahead ∈ { 8, 9 }] NonZeroOctalDigit [lookahead ∉ OctalDigit] ZeroToThree OctalDigit [lookahead ∉ OctalDigit] FourToSeven OctalDigit ZeroToThree OctalDigit OctalDigit
NonZeroOctalDigit NonZeroOctalDigit :: OctalDigit but not 0
ZeroToThree ZeroToThree :: one of 0 1 2 3
FourToSeven FourToSeven :: one of 4 5 6 7
NonOctalDecimalEscapeSequence NonOctalDecimalEscapeSequence :: one of 8 9
HexEscapeSequence HexEscapeSequence :: x HexDigit HexDigit
UnicodeEscapeSequence UnicodeEscapeSequence :: u Hex4Digits u{ CodePoint }
Hex4Digits Hex4Digits :: HexDigit HexDigit HexDigit HexDigit
RegularExpressionLiteral RegularExpressionLiteral :: / RegularExpressionBody / RegularExpressionFlags
RegularExpressionBody RegularExpressionBody :: RegularExpressionFirstChar RegularExpressionChars
RegularExpressionChars RegularExpressionChars :: [empty] RegularExpressionChars RegularExpressionChar
RegularExpressionFirstChar RegularExpressionFirstChar :: RegularExpressionNonTerminator but not one of ***** or **** or / or [ RegularExpressionBackslashSequence RegularExpressionClass
RegularExpressionChar RegularExpressionChar :: RegularExpressionNonTerminator but not one of **** or / or [ RegularExpressionBackslashSequence RegularExpressionClass
RegularExpressionBackslashSequence RegularExpressionBackslashSequence :: **** RegularExpressionNonTerminator
RegularExpressionNonTerminator RegularExpressionNonTerminator :: SourceCharacter but not LineTerminator
RegularExpressionClass RegularExpressionClass :: [ RegularExpressionClassChars ]
RegularExpressionClassChars RegularExpressionClassChars :: [empty] RegularExpressionClassChars RegularExpressionClassChar
RegularExpressionClassChar RegularExpressionClassChar :: RegularExpressionNonTerminator but not one of ] or **** RegularExpressionBackslashSequence
RegularExpressionFlags RegularExpressionFlags :: [empty] RegularExpressionFlags IdentifierPartChar
Template Template :: NoSubstitutionTemplate TemplateHead
NoSubstitutionTemplate NoSubstitutionTemplate :: ** *[TemplateCharacters](13_sec-ecmascript-language-lexical-grammar.md#prod-TemplateCharacters)opt* **
TemplateHead TemplateHead :: ` TemplateCharactersopt ${
TemplateSubstitutionTail TemplateSubstitutionTail :: TemplateMiddle TemplateTail
TemplateMiddle TemplateMiddle :: } TemplateCharactersopt ${
TemplateTail TemplateTail :: } TemplateCharactersopt `
TemplateCharacters TemplateCharacters :: TemplateCharacter TemplateCharactersopt
TemplateCharacter TemplateCharacter :: $ [lookahead ≠ {] **** TemplateEscapeSequence **** NotEscapeSequence LineContinuation LineTerminatorSequence SourceCharacter but not one of ` or **** or $ or LineTerminator
TemplateEscapeSequence TemplateEscapeSequence :: CharacterEscapeSequence 0 [lookahead ∉ DecimalDigit] HexEscapeSequence UnicodeEscapeSequence
NotEscapeSequence 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 NotCodePoint :: HexDigits[~Sep] but only if the MV of HexDigits > 0x10FFFF
CodePoint CodePoint :: HexDigits[~Sep] but only if the MV of HexDigits ≤ 0x10FFFF
A.2 İfadeler
IdentifierReference IdentifierReference[Yield, Await] : Identifier [~Yield] yield [~Await] await
BindingIdentifier BindingIdentifier[Yield, Await] : Identifier yield await
LabelIdentifier LabelIdentifier[Yield, Await] : Identifier [~Yield] yield [~Await] await
Identifier Identifier : IdentifierName but not ReservedWord
PrimaryExpression 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]
CoverParenthesizedExpressionAndArrowParameterList 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] )
Şu üretimin bir örneği işlenirken
PrimaryExpression PrimaryExpression[Yield, Await] : CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await] CoverParenthesizedExpressionAndArrowParameterList yorumu aşağıdaki dilbilgisi kullanılarak iyileştirilir:
ParenthesizedExpression ParenthesizedExpression[Yield, Await] : ( Expression[+In, ?Yield, ?Await] )
Literal Literal : NullLiteral BooleanLiteral NumericLiteral StringLiteral
ArrayLiteral ArrayLiteral[Yield, Await] : [ Elisionopt ] [ ElementList[?Yield, ?Await] ] [ ElementList[?Yield, ?Await] , Elisionopt ]
ElementList ElementList[Yield, Await] : Elisionopt AssignmentExpression[+In, ?Yield, ?Await] Elisionopt SpreadElement[?Yield, ?Await] ElementList[?Yield, ?Await] , Elisionopt AssignmentExpression[+In, ?Yield, ?Await] ElementList[?Yield, ?Await] , Elisionopt SpreadElement[?Yield, ?Await]
SpreadElement SpreadElement[Yield, Await] : ... AssignmentExpression[+In, ?Yield, ?Await]
ObjectLiteral ObjectLiteral[Yield, Await] : { } { PropertyDefinitionList[?Yield, ?Await] } { PropertyDefinitionList[?Yield, ?Await] , }
PropertyDefinitionList PropertyDefinitionList[Yield, Await] : PropertyDefinition[?Yield, ?Await] PropertyDefinitionList[?Yield, ?Await] , PropertyDefinition[?Yield, ?Await]
PropertyDefinition PropertyDefinition[Yield, Await] : IdentifierReference[?Yield, ?Await] CoverInitializedName[?Yield, ?Await] PropertyName[?Yield, ?Await] : AssignmentExpression[+In, ?Yield, ?Await] MethodDefinition[?Yield, ?Await] ... AssignmentExpression[+In, ?Yield, ?Await]
PropertyName PropertyName[Yield, Await] : LiteralPropertyName ComputedPropertyName[?Yield, ?Await]
LiteralPropertyName LiteralPropertyName : IdentifierName StringLiteral NumericLiteral
ComputedPropertyName ComputedPropertyName[Yield, Await] : [ AssignmentExpression[+In, ?Yield, ?Await] ]
CoverInitializedName CoverInitializedName[Yield, Await] : IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]
Initializer Initializer[In, Yield, Await] : = AssignmentExpression[?In, ?Yield, ?Await]
TemplateLiteral TemplateLiteral[Yield, Await, Tagged] : NoSubstitutionTemplate SubstitutionTemplate[?Yield, ?Await, ?Tagged]
SubstitutionTemplate SubstitutionTemplate[Yield, Await, Tagged] : TemplateHead Expression[+In, ?Yield, ?Await] TemplateSpans[?Yield, ?Await, ?Tagged]
TemplateSpans TemplateSpans[Yield, Await, Tagged] : TemplateTail TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateTail
TemplateMiddleList TemplateMiddleList[Yield, Await, Tagged] : TemplateMiddle Expression[+In, ?Yield, ?Await] TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateMiddle Expression[+In, ?Yield, ?Await]
MemberExpression 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] MemberExpression[?Yield, ?Await] . PrivateIdentifier
SuperProperty SuperProperty[Yield, Await] : super [ Expression[+In, ?Yield, ?Await] ] super . IdentifierName
MetaProperty MetaProperty : NewTarget ImportMeta
NewTarget NewTarget : new . target
ImportMeta ImportMeta : import . meta
NewExpression NewExpression[Yield, Await] : MemberExpression[?Yield, ?Await] new NewExpression[?Yield, ?Await]
CallExpression CallExpression[Yield, Await] : CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] 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] CallExpression[?Yield, ?Await] . PrivateIdentifier
Şu üretimin bir örneği işlenirken
CallExpression CallExpression[Yield, Await] : CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] CoverCallExpressionAndAsyncArrowHead yorumu aşağıdaki dilbilgisi kullanılarak iyileştirilir:
CallMemberExpression CallMemberExpression[Yield, Await] : MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
SuperCall SuperCall[Yield, Await] : super Arguments[?Yield, ?Await]
ImportCall ImportCall[Yield, Await] : import ( AssignmentExpression[+In, ?Yield, ?Await] ,opt ) import ( AssignmentExpression[+In, ?Yield, ?Await] , AssignmentExpression[+In, ?Yield, ?Await] ,opt )
Arguments Arguments[Yield, Await] : ( ) ( ArgumentList[?Yield, ?Await] ) ( ArgumentList[?Yield, ?Await] , )
ArgumentList 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]
OptionalExpression OptionalExpression[Yield, Await] : MemberExpression[?Yield, ?Await] OptionalChain[?Yield, ?Await] CallExpression[?Yield, ?Await] OptionalChain[?Yield, ?Await] OptionalExpression[?Yield, ?Await] OptionalChain[?Yield, ?Await]
OptionalChain OptionalChain[Yield, Await] : ?. Arguments[?Yield, ?Await] ?. [ Expression[+In, ?Yield, ?Await] ] ?. IdentifierName ?. TemplateLiteral[?Yield, ?Await, +Tagged] ?. PrivateIdentifier OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await] OptionalChain[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ] OptionalChain[?Yield, ?Await] . IdentifierName OptionalChain[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged] OptionalChain[?Yield, ?Await] . PrivateIdentifier
LeftHandSideExpression LeftHandSideExpression[Yield, Await] : NewExpression[?Yield, ?Await] CallExpression[?Yield, ?Await] OptionalExpression[?Yield, ?Await]
UpdateExpression 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 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 ExponentiationExpression[Yield, Await] : UnaryExpression[?Yield, ?Await] UpdateExpression[?Yield, ?Await] ****** ExponentiationExpression[?Yield, ?Await]
MultiplicativeExpression MultiplicativeExpression[Yield, Await] : ExponentiationExpression[?Yield, ?Await] MultiplicativeExpression[?Yield, ?Await] MultiplicativeOperator ExponentiationExpression[?Yield, ?Await]
MultiplicativeOperator MultiplicativeOperator : one of ***** / %
AdditiveExpression AdditiveExpression[Yield, Await] : MultiplicativeExpression[?Yield, ?Await] AdditiveExpression[?Yield, ?Await] + MultiplicativeExpression[?Yield, ?Await] AdditiveExpression[?Yield, ?Await] - MultiplicativeExpression[?Yield, ?Await]
ShiftExpression 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 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] [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]
EqualityExpression 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 BitwiseANDExpression[In, Yield, Await] : EqualityExpression[?In, ?Yield, ?Await] BitwiseANDExpression[?In, ?Yield, ?Await] & EqualityExpression[?In, ?Yield, ?Await]
BitwiseXORExpression BitwiseXORExpression[In, Yield, Await] : BitwiseANDExpression[?In, ?Yield, ?Await] BitwiseXORExpression[?In, ?Yield, ?Await] ^ BitwiseANDExpression[?In, ?Yield, ?Await]
BitwiseORExpression BitwiseORExpression[In, Yield, Await] : BitwiseXORExpression[?In, ?Yield, ?Await] BitwiseORExpression[?In, ?Yield, ?Await] | BitwiseXORExpression[?In, ?Yield, ?Await]
LogicalANDExpression LogicalANDExpression[In, Yield, Await] : BitwiseORExpression[?In, ?Yield, ?Await] LogicalANDExpression[?In, ?Yield, ?Await] && BitwiseORExpression[?In, ?Yield, ?Await]
LogicalORExpression LogicalORExpression[In, Yield, Await] : LogicalANDExpression[?In, ?Yield, ?Await] LogicalORExpression[?In, ?Yield, ?Await] || LogicalANDExpression[?In, ?Yield, ?Await]
CoalesceExpression CoalesceExpression[In, Yield, Await] : CoalesceExpressionHead[?In, ?Yield, ?Await] ?? BitwiseORExpression[?In, ?Yield, ?Await]
CoalesceExpressionHead CoalesceExpressionHead[In, Yield, Await] : CoalesceExpression[?In, ?Yield, ?Await] BitwiseORExpression[?In, ?Yield, ?Await]
ShortCircuitExpression ShortCircuitExpression[In, Yield, Await] : LogicalORExpression[?In, ?Yield, ?Await] CoalesceExpression[?In, ?Yield, ?Await]
ConditionalExpression ConditionalExpression[In, Yield, Await] : ShortCircuitExpression[?In, ?Yield, ?Await] ShortCircuitExpression[?In, ?Yield, ?Await] ? AssignmentExpression[+In, ?Yield, ?Await] : AssignmentExpression[?In, ?Yield, ?Await]
AssignmentExpression 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] LeftHandSideExpression[?Yield, ?Await] AssignmentOperator AssignmentExpression[?In, ?Yield, ?Await] LeftHandSideExpression[?Yield, ?Await] &&= AssignmentExpression[?In, ?Yield, ?Await] LeftHandSideExpression[?Yield, ?Await] ||= AssignmentExpression[?In, ?Yield, ?Await] LeftHandSideExpression[?Yield, ?Await] ??= AssignmentExpression[?In, ?Yield, ?Await]
AssignmentOperator AssignmentOperator : one of ***=** /= %= += -= <<=** **>>= >>>= &= ^= |= ****=**
Belirli durumlarda, şu üretimin bir örneği işlenirken
AssignmentExpression AssignmentExpression[In, Yield, Await] : LeftHandSideExpression[?Yield, ?Await] = AssignmentExpression[?In, ?Yield, ?Await] LeftHandSideExpression yorumu aşağıdaki dilbilgisi kullanılarak iyileştirilir:
AssignmentPattern AssignmentPattern[Yield, Await] : ObjectAssignmentPattern[?Yield, ?Await] ArrayAssignmentPattern[?Yield, ?Await]
ObjectAssignmentPattern ObjectAssignmentPattern[Yield, Await] : { } { AssignmentRestProperty[?Yield, ?Await] } { AssignmentPropertyList[?Yield, ?Await] } { AssignmentPropertyList[?Yield, ?Await] , AssignmentRestProperty[?Yield, ?Await]opt }
ArrayAssignmentPattern ArrayAssignmentPattern[Yield, Await] : [ Elisionopt AssignmentRestElement[?Yield, ?Await]opt ] [ AssignmentElementList[?Yield, ?Await] ] [ AssignmentElementList[?Yield, ?Await] , Elisionopt AssignmentRestElement[?Yield, ?Await]opt ]
AssignmentRestProperty AssignmentRestProperty[Yield, Await] : ... DestructuringAssignmentTarget[?Yield, ?Await]
AssignmentPropertyList AssignmentPropertyList[Yield, Await] : AssignmentProperty[?Yield, ?Await] AssignmentPropertyList[?Yield, ?Await] , AssignmentProperty[?Yield, ?Await]
AssignmentElementList AssignmentElementList[Yield, Await] : AssignmentElisionElement[?Yield, ?Await] AssignmentElementList[?Yield, ?Await] , AssignmentElisionElement[?Yield, ?Await]
AssignmentElisionElement AssignmentElisionElement[Yield, Await] : Elisionopt AssignmentElement[?Yield, ?Await]
AssignmentProperty AssignmentProperty[Yield, Await] : IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt PropertyName[?Yield, ?Await] : AssignmentElement[?Yield, ?Await]
AssignmentElement AssignmentElement[Yield, Await] : DestructuringAssignmentTarget[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt
AssignmentRestElement AssignmentRestElement[Yield, Await] : ... DestructuringAssignmentTarget[?Yield, ?Await]
DestructuringAssignmentTarget DestructuringAssignmentTarget[Yield, Await] : LeftHandSideExpression[?Yield, ?Await]
Expression Expression[In, Yield, Await] : AssignmentExpression[?In, ?Yield, ?Await] Expression[?In, ?Yield, ?Await] , AssignmentExpression[?In, ?Yield, ?Await]
A.3 Deyimler
Statement 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 Declaration[Yield, Await] : HoistableDeclaration[?Yield, ?Await, ~Default] ClassDeclaration[?Yield, ?Await, ~Default] LexicalDeclaration[+In, ?Yield, ?Await]
HoistableDeclaration HoistableDeclaration[Yield, Await, Default] : FunctionDeclaration[?Yield, ?Await, ?Default] GeneratorDeclaration[?Yield, ?Await, ?Default] AsyncFunctionDeclaration[?Yield, ?Await, ?Default] AsyncGeneratorDeclaration[?Yield, ?Await, ?Default]
BreakableStatement BreakableStatement[Yield, Await, Return] : IterationStatement[?Yield, ?Await, ?Return] SwitchStatement[?Yield, ?Await, ?Return]
BlockStatement BlockStatement[Yield, Await, Return] : Block[?Yield, ?Await, ?Return]
Block Block[Yield, Await, Return] : { StatementList[?Yield, ?Await, ?Return]opt }
StatementList StatementList[Yield, Await, Return] : StatementListItem[?Yield, ?Await, ?Return] StatementList[?Yield, ?Await, ?Return] StatementListItem[?Yield, ?Await, ?Return]
StatementListItem StatementListItem[Yield, Await, Return] : Statement[?Yield, ?Await, ?Return] Declaration[?Yield, ?Await]
LexicalDeclaration LexicalDeclaration[In, Yield, Await] : LetOrConst BindingList[?In, ?Yield, ?Await] ;
LetOrConst LetOrConst : let const
BindingList BindingList[In, Yield, Await] : LexicalBinding[?In, ?Yield, ?Await] BindingList[?In, ?Yield, ?Await] , LexicalBinding[?In, ?Yield, ?Await]
LexicalBinding LexicalBinding[In, Yield, Await] : BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]opt BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]
VariableStatement VariableStatement[Yield, Await] : var VariableDeclarationList[+In, ?Yield, ?Await] ;
VariableDeclarationList VariableDeclarationList[In, Yield, Await] : VariableDeclaration[?In, ?Yield, ?Await] VariableDeclarationList[?In, ?Yield, ?Await] , VariableDeclaration[?In, ?Yield, ?Await]
VariableDeclaration VariableDeclaration[In, Yield, Await] : BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]opt BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]
BindingPattern BindingPattern[Yield, Await] : ObjectBindingPattern[?Yield, ?Await] ArrayBindingPattern[?Yield, ?Await]
ObjectBindingPattern ObjectBindingPattern[Yield, Await] : { } { BindingRestProperty[?Yield, ?Await] } { BindingPropertyList[?Yield, ?Await] } { BindingPropertyList[?Yield, ?Await] , BindingRestProperty[?Yield, ?Await]opt }
ArrayBindingPattern ArrayBindingPattern[Yield, Await] : [ Elisionopt BindingRestElement[?Yield, ?Await]opt ] [ BindingElementList[?Yield, ?Await] ] [ BindingElementList[?Yield, ?Await] , Elisionopt BindingRestElement[?Yield, ?Await]opt ]
BindingRestProperty BindingRestProperty[Yield, Await] : ... BindingIdentifier[?Yield, ?Await]
BindingPropertyList BindingPropertyList[Yield, Await] : BindingProperty[?Yield, ?Await] BindingPropertyList[?Yield, ?Await] , BindingProperty[?Yield, ?Await]
BindingElementList BindingElementList[Yield, Await] : BindingElisionElement[?Yield, ?Await] BindingElementList[?Yield, ?Await] , BindingElisionElement[?Yield, ?Await]
BindingElisionElement BindingElisionElement[Yield, Await] : Elisionopt BindingElement[?Yield, ?Await]
BindingProperty BindingProperty[Yield, Await] : SingleNameBinding[?Yield, ?Await] PropertyName[?Yield, ?Await] : BindingElement[?Yield, ?Await]
BindingElement BindingElement[Yield, Await] : SingleNameBinding[?Yield, ?Await] BindingPattern[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt
SingleNameBinding SingleNameBinding[Yield, Await] : BindingIdentifier[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt
BindingRestElement BindingRestElement[Yield, Await] : ... BindingIdentifier[?Yield, ?Await] ... BindingPattern[?Yield, ?Await]
EmptyStatement EmptyStatement : ;
ExpressionStatement ExpressionStatement[Yield, Await] : [lookahead ∉ { {, function, async [no LineTerminator here] function, class, let [ }] Expression[+In, ?Yield, ?Await] ;
IfStatement 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] [lookahead ≠ else]
IterationStatement IterationStatement[Yield, Await, Return] : DoWhileStatement[?Yield, ?Await, ?Return] WhileStatement[?Yield, ?Await, ?Return] ForStatement[?Yield, ?Await, ?Return] ForInOfStatement[?Yield, ?Await, ?Return]
DoWhileStatement DoWhileStatement[Yield, Await, Return] : do Statement[?Yield, ?Await, ?Return] while ( Expression[+In, ?Yield, ?Await] ) ;
WhileStatement WhileStatement[Yield, Await, Return] : while ( Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return]
ForStatement ForStatement[Yield, Await, Return] : for ( [lookahead ≠ let [] Expression[~In, ?Yield, ?Await]opt ; Expression[+In, ?Yield, ?Await]opt ; Expression[+In, ?Yield, ?Await]opt ) Statement[?Yield, ?Await, ?Return] for ( var VariableDeclarationList[~In, ?Yield, ?Await] ; Expression[+In, ?Yield, ?Await]opt ; Expression[+In, ?Yield, ?Await]opt ) Statement[?Yield, ?Await, ?Return] for ( LexicalDeclaration[~In, ?Yield, ?Await] Expression[+In, ?Yield, ?Await]opt ; Expression[+In, ?Yield, ?Await]opt ) Statement[?Yield, ?Await, ?Return]
ForInOfStatement ForInOfStatement[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, async of }] 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 ForDeclaration[Yield, Await] : LetOrConst ForBinding[?Yield, ?Await]
ForBinding ForBinding[Yield, Await] : BindingIdentifier[?Yield, ?Await] BindingPattern[?Yield, ?Await]
ContinueStatement ContinueStatement[Yield, Await] : continue ; continue [no LineTerminator here] LabelIdentifier[?Yield, ?Await] ;
BreakStatement BreakStatement[Yield, Await] : break ; break [no LineTerminator here] LabelIdentifier[?Yield, ?Await] ;
ReturnStatement ReturnStatement[Yield, Await] : return ; return [no LineTerminator here] Expression[+In, ?Yield, ?Await] ;
WithStatement WithStatement[Yield, Await, Return] : with ( Expression[+In, ?Yield, ?Await] ) Statement[?Yield, ?Await, ?Return]
SwitchStatement SwitchStatement[Yield, Await, Return] : switch ( Expression[+In, ?Yield, ?Await] ) CaseBlock[?Yield, ?Await, ?Return]
CaseBlock CaseBlock[Yield, Await, Return] : { CaseClauses[?Yield, ?Await, ?Return]opt } { CaseClauses[?Yield, ?Await, ?Return]opt DefaultClause[?Yield, ?Await, ?Return] CaseClauses[?Yield, ?Await, ?Return]opt }
CaseClauses CaseClauses[Yield, Await, Return] : CaseClause[?Yield, ?Await, ?Return] CaseClauses[?Yield, ?Await, ?Return] CaseClause[?Yield, ?Await, ?Return]
CaseClause CaseClause[Yield, Await, Return] : case Expression[+In, ?Yield, ?Await] : StatementList[?Yield, ?Await, ?Return]opt
DefaultClause DefaultClause[Yield, Await, Return] : default : StatementList[?Yield, ?Await, ?Return]opt
LabelledStatement LabelledStatement[Yield, Await, Return] : LabelIdentifier[?Yield, ?Await] : LabelledItem[?Yield, ?Await, ?Return]
LabelledItem LabelledItem[Yield, Await, Return] : Statement[?Yield, ?Await, ?Return] FunctionDeclaration[?Yield, ?Await, ~Default]
ThrowStatement ThrowStatement[Yield, Await] : throw [no LineTerminator here] Expression[+In, ?Yield, ?Await] ;
TryStatement 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 Catch[Yield, Await, Return] : catch ( CatchParameter[?Yield, ?Await] ) Block[?Yield, ?Await, ?Return] catch Block[?Yield, ?Await, ?Return]
Finally Finally[Yield, Await, Return] : finally Block[?Yield, ?Await, ?Return]
CatchParameter CatchParameter[Yield, Await] : BindingIdentifier[?Yield, ?Await] BindingPattern[?Yield, ?Await]
DebuggerStatement DebuggerStatement : debugger ;
A.4 Fonksiyonlar ve Sınıflar
UniqueFormalParameters UniqueFormalParameters[Yield, Await] : FormalParameters[?Yield, ?Await]
FormalParameters FormalParameters[Yield, Await] : [empty] FunctionRestParameter[?Yield, ?Await] FormalParameterList[?Yield, ?Await] FormalParameterList[?Yield, ?Await] , FormalParameterList[?Yield, ?Await] , FunctionRestParameter[?Yield, ?Await]
FormalParameterList FormalParameterList[Yield, Await] : FormalParameter[?Yield, ?Await] FormalParameterList[?Yield, ?Await] , FormalParameter[?Yield, ?Await]
FunctionRestParameter FunctionRestParameter[Yield, Await] : BindingRestElement[?Yield, ?Await]
FormalParameter FormalParameter[Yield, Await] : BindingElement[?Yield, ?Await]
FunctionDeclaration FunctionDeclaration[Yield, Await, Default] : function BindingIdentifier[?Yield, ?Await] ( FormalParameters[~Yield, ~Await] ) { FunctionBody[~Yield, ~Await] } [+Default] function ( FormalParameters[~Yield, ~Await] ) { FunctionBody[~Yield, ~Await] }
FunctionExpression FunctionExpression : function BindingIdentifier[~Yield, ~Await]opt ( FormalParameters[~Yield, ~Await] ) { FunctionBody[~Yield, ~Await] }
FunctionBody FunctionBody[Yield, Await] : FunctionStatementList[?Yield, ?Await]
FunctionStatementList FunctionStatementList[Yield, Await] : StatementList[?Yield, ?Await, +Return]opt
ArrowFunction ArrowFunction[In, Yield, Await] : ArrowParameters[?Yield, ?Await] [no LineTerminator here] => ConciseBody[?In]
ArrowParameters ArrowParameters[Yield, Await] : BindingIdentifier[?Yield, ?Await] CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]
ConciseBody ConciseBody[In] : [lookahead ≠ {] ExpressionBody[?In, ~Await] { FunctionBody[~Yield, ~Await] }
ExpressionBody ExpressionBody[In, Await] : AssignmentExpression[?In, ~Yield, ?Await]
Şu üretimin bir örneği işlenirken
ArrowParameters ArrowParameters[Yield, Await] : CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await] CoverParenthesizedExpressionAndArrowParameterList yorumu aşağıdaki dilbilgisi kullanılarak iyileştirilir:
ArrowFormalParameters ArrowFormalParameters[Yield, Await] : ( UniqueFormalParameters[?Yield, ?Await] )
AsyncArrowFunction AsyncArrowFunction[In, Yield, Await] : async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In] CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] [no LineTerminator here] => AsyncConciseBody[?In]
AsyncConciseBody AsyncConciseBody[In] : [lookahead ≠ {] ExpressionBody[?In, +Await] { AsyncFunctionBody }
AsyncArrowBindingIdentifier AsyncArrowBindingIdentifier[Yield] : BindingIdentifier[?Yield, +Await]
CoverCallExpressionAndAsyncArrowHead CoverCallExpressionAndAsyncArrowHead[Yield, Await] : MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
Şu üretimin bir örneği işlenirken
AsyncArrowFunction AsyncArrowFunction[In, Yield, Await] : CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] [no LineTerminator here] => AsyncConciseBody[?In] CoverCallExpressionAndAsyncArrowHead yorumu aşağıdaki dilbilgisi kullanılarak iyileştirilir:
AsyncArrowHead AsyncArrowHead : async [no LineTerminator here] ArrowFormalParameters[~Yield, +Await]
MethodDefinition MethodDefinition[Yield, Await] : ClassElementName[?Yield, ?Await] ( UniqueFormalParameters[~Yield, ~Await] ) { FunctionBody[~Yield, ~Await] } GeneratorMethod[?Yield, ?Await] AsyncMethod[?Yield, ?Await] AsyncGeneratorMethod[?Yield, ?Await] get ClassElementName[?Yield, ?Await] ( ) { FunctionBody[~Yield, ~Await] } set ClassElementName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }
PropertySetParameterList PropertySetParameterList : FormalParameter[~Yield, ~Await]
GeneratorDeclaration GeneratorDeclaration[Yield, Await, Default] : function ***** BindingIdentifier[?Yield, ?Await] ( FormalParameters[+Yield, ~Await] ) { GeneratorBody } [+Default] function ***** ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
GeneratorExpression GeneratorExpression : function ***** BindingIdentifier[+Yield, ~Await]opt ( FormalParameters[+Yield, ~Await] ) { GeneratorBody }
GeneratorMethod GeneratorMethod[Yield, Await] : ***** ClassElementName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, ~Await] ) { GeneratorBody }
GeneratorBody GeneratorBody : FunctionBody[+Yield, ~Await]
YieldExpression YieldExpression[In, Await] : yield yield [no LineTerminator here] AssignmentExpression[?In, +Yield, ?Await] yield [no LineTerminator here] ***** AssignmentExpression[?In, +Yield, ?Await]
AsyncGeneratorDeclaration 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 AsyncGeneratorExpression : async [no LineTerminator here] function ***** BindingIdentifier[+Yield, +Await]opt ( FormalParameters[+Yield, +Await] ) { AsyncGeneratorBody }
AsyncGeneratorMethod AsyncGeneratorMethod[Yield, Await] : async [no LineTerminator here] ***** ClassElementName[?Yield, ?Await] ( UniqueFormalParameters[+Yield, +Await] ) { AsyncGeneratorBody }
AsyncGeneratorBody AsyncGeneratorBody : FunctionBody[+Yield, +Await]
AsyncFunctionDeclaration 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 AsyncFunctionExpression : async [no LineTerminator here] function BindingIdentifier[~Yield, +Await]opt ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }
AsyncMethod AsyncMethod[Yield, Await] : async [no LineTerminator here] ClassElementName[?Yield, ?Await] ( UniqueFormalParameters[~Yield, +Await] ) { AsyncFunctionBody }
AsyncFunctionBody AsyncFunctionBody : FunctionBody[~Yield, +Await]
AwaitExpression AwaitExpression[Yield] : await UnaryExpression[?Yield, +Await]
ClassDeclaration ClassDeclaration[Yield, Await, Default] : class BindingIdentifier[?Yield, ?Await] ClassTail[?Yield, ?Await] [+Default] class ClassTail[?Yield, ?Await]
ClassExpression ClassExpression[Yield, Await] : class BindingIdentifier[?Yield, ?Await]opt ClassTail[?Yield, ?Await]
ClassTail ClassTail[Yield, Await] : ClassHeritage[?Yield, ?Await]opt { ClassBody[?Yield, ?Await]opt }
ClassHeritage ClassHeritage[Yield, Await] : extends LeftHandSideExpression[?Yield, ?Await]
ClassBody ClassBody[Yield, Await] : ClassElementList[?Yield, ?Await]
ClassElementList ClassElementList[Yield, Await] : ClassElement[?Yield, ?Await] ClassElementList[?Yield, ?Await] ClassElement[?Yield, ?Await]
ClassElement ClassElement[Yield, Await] : MethodDefinition[?Yield, ?Await] static MethodDefinition[?Yield, ?Await] FieldDefinition[?Yield, ?Await] ; static FieldDefinition[?Yield, ?Await] ; ClassStaticBlock ;
FieldDefinition FieldDefinition[Yield, Await] : ClassElementName[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]opt
ClassElementName ClassElementName[Yield, Await] : PropertyName[?Yield, ?Await] PrivateIdentifier
ClassStaticBlock ClassStaticBlock : static { ClassStaticBlockBody }
ClassStaticBlockBody ClassStaticBlockBody : ClassStaticBlockStatementList
ClassStaticBlockStatementList ClassStaticBlockStatementList : StatementList[~Yield, +Await, ~Return]opt
A.5 Betikler ve Modüller
Script Script : ScriptBodyopt
ScriptBody ScriptBody : StatementList[~Yield, ~Await, ~Return]
Module Module : ModuleBodyopt
ModuleBody ModuleBody : ModuleItemList
ModuleItemList ModuleItemList : ModuleItem ModuleItemList ModuleItem
ModuleItem ModuleItem : ImportDeclaration ExportDeclaration StatementListItem[~Yield, +Await, ~Return]
ModuleExportName ModuleExportName : IdentifierName StringLiteral
ImportDeclaration ImportDeclaration : import ImportClause FromClause WithClauseopt ; import ModuleSpecifier WithClauseopt ;
ImportClause ImportClause : ImportedDefaultBinding NameSpaceImport NamedImports ImportedDefaultBinding , NameSpaceImport ImportedDefaultBinding , NamedImports
ImportedDefaultBinding ImportedDefaultBinding : ImportedBinding
NameSpaceImport NameSpaceImport : ***** as ImportedBinding
NamedImports NamedImports : { } { ImportsList } { ImportsList , }
FromClause FromClause : from ModuleSpecifier
ImportsList ImportsList : ImportSpecifier ImportsList , ImportSpecifier
ImportSpecifier ImportSpecifier : ImportedBinding ModuleExportName as ImportedBinding
ModuleSpecifier ModuleSpecifier : StringLiteral
ImportedBinding ImportedBinding : BindingIdentifier[~Yield, +Await]
WithClause WithClause : with { } with { WithEntries ,opt }
WithEntries WithEntries : AttributeKey : StringLiteral AttributeKey : StringLiteral , WithEntries
AttributeKey AttributeKey : IdentifierName StringLiteral
ExportDeclaration ExportDeclaration : export ExportFromClause FromClause WithClauseopt ; export NamedExports ; 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] ;
ExportFromClause ExportFromClause : ***** ***** as ModuleExportName NamedExports
NamedExports NamedExports : { } { ExportsList } { ExportsList , }
ExportsList ExportsList : ExportSpecifier ExportsList , ExportSpecifier
ExportSpecifier ExportSpecifier : ModuleExportName ModuleExportName as ModuleExportName
A.6 Sayı Dönüşümleri
StringNumericLiteral StringNumericLiteral ::: StrWhiteSpaceopt StrWhiteSpaceopt StrNumericLiteral StrWhiteSpaceopt
StrWhiteSpace StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpaceopt
StrWhiteSpaceChar StrWhiteSpaceChar ::: WhiteSpace LineTerminator
StrNumericLiteral StrNumericLiteral ::: StrDecimalLiteral NonDecimalIntegerLiteral[~Sep]
StrDecimalLiteral StrDecimalLiteral ::: StrUnsignedDecimalLiteral + StrUnsignedDecimalLiteral - StrUnsignedDecimalLiteral
StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: Infinity DecimalDigits[~Sep] . DecimalDigits[~Sep]opt ExponentPart[~Sep]opt . DecimalDigits[~Sep] ExponentPart[~Sep]opt DecimalDigits[~Sep] ExponentPart[~Sep]opt
StringNumericLiteral dilbilgisi tarafından açıkça tanımlanmayan tüm dilbilgisi sembolleri, Sayısal değişmezler için Sözcüksel Dilbilgisinde kullanılan tanımlara sahiptir.
StringIntegerLiteral StringIntegerLiteral ::: StrWhiteSpaceopt StrWhiteSpaceopt StrIntegerLiteral StrWhiteSpaceopt
StrIntegerLiteral StrIntegerLiteral ::: SignedInteger[~Sep] NonDecimalIntegerLiteral[~Sep]
A.7 Saat Dilimi Sapması Dize Biçimi
UTCOffset UTCOffset ::: ASCIISign Hour ASCIISign Hour HourSubcomponents[+Extended] ASCIISign Hour HourSubcomponents[~Extended]
ASCIISign ASCIISign ::: one of + -
Hour Hour ::: 0 DecimalDigit 1 DecimalDigit 20 21 22 23
HourSubcomponents HourSubcomponents[Extended] ::: TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond TemporalDecimalFractionopt
TimeSeparator TimeSeparator[Extended] ::: [+Extended] : [~Extended] [empty]
MinuteSecond MinuteSecond ::: 0 DecimalDigit 1 DecimalDigit 2 DecimalDigit 3 DecimalDigit 4 DecimalDigit 5 DecimalDigit
TemporalDecimalFraction TemporalDecimalFraction ::: TemporalDecimalSeparator DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit
TemporalDecimalSeparator TemporalDecimalSeparator ::: one of . ,
A.8 Düzenli İfadeler
Pattern Pattern[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]
Disjunction Disjunction[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: Alternative[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Alternative[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] | Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]
Alternative Alternative[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: [empty] Alternative[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Term[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups]
Term Term[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: Assertion[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Atom[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Atom[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] Quantifier
Assertion Assertion[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: ^ $ \b \B (?= Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?! Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?<= Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (?<! Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] )
Quantifier Quantifier :: QuantifierPrefix QuantifierPrefix ?
QuantifierPrefix QuantifierPrefix :: ***** + ? { DecimalDigits[~Sep] } { DecimalDigits[~Sep] ,} { DecimalDigits[~Sep] , DecimalDigits[~Sep] }
Atom Atom[UnicodeMode, UnicodeSetsMode, NamedCaptureGroups] :: PatternCharacter . **** AtomEscape[?UnicodeMode, ?NamedCaptureGroups] CharacterClass[?UnicodeMode, ?UnicodeSetsMode] ( GroupSpecifier[?UnicodeMode]opt Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers : Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] ) (? RegularExpressionModifiers - RegularExpressionModifiers : Disjunction[?UnicodeMode, ?UnicodeSetsMode, ?NamedCaptureGroups] )
RegularExpressionModifiers RegularExpressionModifiers :: [empty] RegularExpressionModifiers RegularExpressionModifier
RegularExpressionModifier RegularExpressionModifier :: one of i m s
SyntaxCharacter SyntaxCharacter :: one of ^ $ **** . ***** + ? ( ) [ ] { } |
PatternCharacter PatternCharacter :: SourceCharacter but not SyntaxCharacter
AtomEscape AtomEscape[UnicodeMode, NamedCaptureGroups] :: DecimalEscape CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode] [+NamedCaptureGroups] k GroupName[?UnicodeMode]
CharacterEscape CharacterEscape[UnicodeMode] :: ControlEscape c AsciiLetter 0 [lookahead ∉ DecimalDigit] HexEscapeSequence RegExpUnicodeEscapeSequence[?UnicodeMode] IdentityEscape[?UnicodeMode]
ControlEscape ControlEscape :: one of f n r t v
GroupSpecifier GroupSpecifier[UnicodeMode] :: ? GroupName[?UnicodeMode]
GroupName GroupName[UnicodeMode] :: <** *RegExpIdentifierName[?UnicodeMode]* **>
RegExpIdentifierName RegExpIdentifierName[UnicodeMode] :: RegExpIdentifierStart[?UnicodeMode] RegExpIdentifierName[?UnicodeMode] RegExpIdentifierPart[?UnicodeMode]
RegExpIdentifierStart RegExpIdentifierStart[UnicodeMode] :: IdentifierStartChar **** RegExpUnicodeEscapeSequence[+UnicodeMode] [~UnicodeMode] UnicodeLeadSurrogate UnicodeTrailSurrogate
RegExpIdentifierPart RegExpIdentifierPart[UnicodeMode] :: IdentifierPartChar **** RegExpUnicodeEscapeSequence[+UnicodeMode] [~UnicodeMode] UnicodeLeadSurrogate UnicodeTrailSurrogate
RegExpUnicodeEscapeSequence RegExpUnicodeEscapeSequence[UnicodeMode] :: [+UnicodeMode] u HexLeadSurrogate \u HexTrailSurrogate [+UnicodeMode] u HexLeadSurrogate [+UnicodeMode] u HexTrailSurrogate [+UnicodeMode] u HexNonSurrogate [~UnicodeMode] u Hex4Digits [+UnicodeMode] u{ CodePoint }
UnicodeLeadSurrogate UnicodeLeadSurrogate :: U+D800 ile U+DBFF arasındaki dahil aralıkta yer alan herhangi bir Unicode kod noktası
UnicodeTrailSurrogate UnicodeTrailSurrogate :: U+DC00 ile U+DFFF arasındaki dahil aralıkta yer alan herhangi bir Unicode kod noktası
İlişkili u HexLeadSurrogate seçimi belirsiz olan her \u HexTrailSurrogate, aksi takdirde karşılık gelen bir \u HexTrailSurrogate'ı olmayacak olan en yakın olası u HexLeadSurrogate ile ilişkilendirilecektir.
HexLeadSurrogate HexLeadSurrogate :: Hex4Digits but only if the MV of Hex4Digits is in the inclusive interval from 0xD800 to 0xDBFF
HexTrailSurrogate HexTrailSurrogate :: Hex4Digits but only if the MV of Hex4Digits is in the inclusive interval from 0xDC00 to 0xDFFF
HexNonSurrogate HexNonSurrogate :: Hex4Digits but only if the MV of Hex4Digits is not in the inclusive interval from 0xD800 to 0xDFFF
IdentityEscape IdentityEscape[UnicodeMode] :: [+UnicodeMode] SyntaxCharacter [+UnicodeMode] / [~UnicodeMode] SourceCharacter but not UnicodeIDContinue
DecimalEscape DecimalEscape :: NonZeroDigit DecimalDigits[~Sep]opt [lookahead ∉ DecimalDigit]
CharacterClassEscape CharacterClassEscape[UnicodeMode] :: d D s S w W [+UnicodeMode] p{ UnicodePropertyValueExpression } [+UnicodeMode] P{ UnicodePropertyValueExpression }
UnicodePropertyValueExpression UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue LoneUnicodePropertyNameOrValue
UnicodePropertyName UnicodePropertyName :: UnicodePropertyNameCharacters
UnicodePropertyNameCharacters UnicodePropertyNameCharacters :: UnicodePropertyNameCharacter UnicodePropertyNameCharactersopt
UnicodePropertyValue UnicodePropertyValue :: UnicodePropertyValueCharacters
LoneUnicodePropertyNameOrValue LoneUnicodePropertyNameOrValue :: UnicodePropertyValueCharacters
UnicodePropertyValueCharacters UnicodePropertyValueCharacters :: UnicodePropertyValueCharacter UnicodePropertyValueCharactersopt
UnicodePropertyValueCharacter UnicodePropertyValueCharacter :: UnicodePropertyNameCharacter DecimalDigit
UnicodePropertyNameCharacter UnicodePropertyNameCharacter :: AsciiLetter _
CharacterClass CharacterClass[UnicodeMode, UnicodeSetsMode] :: [ [lookahead ≠ ^] ClassContents[?UnicodeMode, ?UnicodeSetsMode] ] [^ ClassContents[?UnicodeMode, ?UnicodeSetsMode] ]
ClassContents ClassContents[UnicodeMode, UnicodeSetsMode] :: [empty] [~UnicodeSetsMode] NonemptyClassRanges[?UnicodeMode] [+UnicodeSetsMode] ClassSetExpression
NonemptyClassRanges NonemptyClassRanges[UnicodeMode] :: ClassAtom[?UnicodeMode] ClassAtom[?UnicodeMode] NonemptyClassRangesNoDash[?UnicodeMode] ClassAtom[?UnicodeMode] - ClassAtom[?UnicodeMode] ClassContents[?UnicodeMode, ~UnicodeSetsMode]
NonemptyClassRangesNoDash NonemptyClassRangesNoDash[UnicodeMode] :: ClassAtom[?UnicodeMode] ClassAtomNoDash[?UnicodeMode] NonemptyClassRangesNoDash[?UnicodeMode] ClassAtomNoDash[?UnicodeMode] - ClassAtom[?UnicodeMode] ClassContents[?UnicodeMode, ~UnicodeSetsMode]
ClassAtom ClassAtom[UnicodeMode] :: - ClassAtomNoDash[?UnicodeMode]
ClassAtomNoDash ClassAtomNoDash[UnicodeMode] :: SourceCharacter but not one of **** or ] or - **** ClassEscape[?UnicodeMode]
ClassEscape ClassEscape[UnicodeMode] :: b [+UnicodeMode] - CharacterClassEscape[?UnicodeMode] CharacterEscape[?UnicodeMode]
ClassSetExpression ClassSetExpression :: ClassUnion ClassIntersection ClassSubtraction
ClassUnion ClassUnion :: ClassSetRange ClassUnionopt ClassSetOperand ClassUnionopt
ClassIntersection ClassIntersection :: ClassSetOperand && [lookahead ≠ &] ClassSetOperand ClassIntersection && [lookahead ≠ &] ClassSetOperand
ClassSubtraction ClassSubtraction :: ClassSetOperand -- ClassSetOperand ClassSubtraction -- ClassSetOperand
ClassSetRange ClassSetRange :: ClassSetCharacter - ClassSetCharacter
ClassSetOperand ClassSetOperand :: NestedClass ClassStringDisjunction ClassSetCharacter
NestedClass NestedClass :: [ [lookahead ≠ ^] ClassContents[+UnicodeMode, +UnicodeSetsMode] ] [^ ClassContents[+UnicodeMode, +UnicodeSetsMode] ] **** CharacterClassEscape[+UnicodeMode]
ClassStringDisjunction ClassStringDisjunction :: \q{ ClassStringDisjunctionContents }
ClassStringDisjunctionContents ClassStringDisjunctionContents :: ClassString ClassString | ClassStringDisjunctionContents
ClassString ClassString :: [empty] NonEmptyClassString
NonEmptyClassString NonEmptyClassString :: ClassSetCharacter NonEmptyClassStringopt
ClassSetCharacter ClassSetCharacter :: [lookahead ∉ ClassSetReservedDoublePunctuator] SourceCharacter but not ClassSetSyntaxCharacter **** CharacterEscape[+UnicodeMode] **** ClassSetReservedPunctuator \b
ClassSetReservedDoublePunctuator ClassSetReservedDoublePunctuator :: one of && !! ## $$ %% ****** ++ ,, .. :: ;; <<** **==** **>> ?? @@ ^^ `` ~~
ClassSetSyntaxCharacter ClassSetSyntaxCharacter :: one of ( ) [ ] { } / - **** |
ClassSetReservedPunctuator ClassSetReservedPunctuator :: one of & - ! # % , : ; <** **=** **> @ ` ~