1 2StringNumericLiteral ::: 3 StrWhiteSpace? 4 StrWhiteSpace? StrNumericLiteral StrWhiteSpace? 5 6StrWhiteSpace ::: 7 StrWhiteSpaceChar StrWhiteSpace? 8 9StrWhiteSpaceChar ::: 10 WhiteSpace 11 LineTerminator 12 13StrNumericLiteral ::: 14 StrDecimalLiteral 15 BinaryIntegerLiteral 16 OctalIntegerLiteral 17 HexIntegerLiteral 18 19StrDecimalLiteral ::: 20 StrUnsignedDecimalLiteral 21 `+` StrUnsignedDecimalLiteral 22 `-` StrUnsignedDecimalLiteral 23 24StrUnsignedDecimalLiteral ::: 25 `Infinity` 26 DecimalDigits `.` DecimalDigits? ExponentPart? 27 `.` DecimalDigits ExponentPart? 28 DecimalDigits ExponentPart? 29 30 31SourceCharacter :: 32 {} 33 34 35InputElementDiv :: 36 WhiteSpace 37 LineTerminator 38 Comment 39 CommonToken 40 DivPunctuator 41 RightBracePunctuator 42 43InputElementRegExp :: 44 WhiteSpace 45 LineTerminator 46 Comment 47 CommonToken 48 RightBracePunctuator 49 RegularExpressionLiteral 50 51InputElementRegExpOrTemplateTail :: 52 WhiteSpace 53 LineTerminator 54 Comment 55 CommonToken 56 RegularExpressionLiteral 57 TemplateSubstitutionTail 58 59InputElementTemplateTail :: 60 WhiteSpace 61 LineTerminator 62 Comment 63 CommonToken 64 DivPunctuator 65 TemplateSubstitutionTail 66 67 68WhiteSpace :: 69 <TAB> 70 <VT> 71 <FF> 72 <SP> 73 <NBSP> 74 <ZWNBSP> 75 {Zs} 76 77 78LineTerminator :: 79 <LF> 80 <CR> 81 <LINE SEPARATOR> 82 <PARAGRAPH SEPARATOR> 83 84LineTerminatorSequence :: 85 <LF> 86 <CR> [lookahead != <LF> ] 87 <LINE SEPARATOR> 88 <PARAGRAPH SEPARATOR> 89 <CR> <LF> 90 91 92Comment :: 93 MultiLineComment 94 SingleLineComment 95 96MultiLineComment :: 97 `/*` MultiLineCommentChars? `*/` 98 99MultiLineCommentChars :: 100 MultiLineNotAsteriskChar MultiLineCommentChars? 101 `*` PostAsteriskCommentChars? 102 103PostAsteriskCommentChars :: 104 MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentChars? 105 `*` PostAsteriskCommentChars? 106 107MultiLineNotAsteriskChar :: 108 SourceCharacter but not `*` 109 110MultiLineNotForwardSlashOrAsteriskChar :: 111 SourceCharacter but not one of `/` or `*` 112 113SingleLineComment :: 114 `//` SingleLineCommentChars? 115 116SingleLineCommentChars :: 117 SingleLineCommentChar SingleLineCommentChars? 118 119SingleLineCommentChar :: 120 SourceCharacter but not LineTerminator 121 122 123CommonToken :: 124 IdentifierName 125 Punctuator 126 NumericLiteral 127 StringLiteral 128 Template 129 130 131IdentifierName :: 132 IdentifierStart 133 IdentifierName IdentifierPart 134 135IdentifierStart :: 136 UnicodeIDStart 137 `$` 138 `_` 139 `\` UnicodeEscapeSequence 140 141IdentifierPart :: 142 UnicodeIDContinue 143 `$` 144 `\` UnicodeEscapeSequence 145 <ZWNJ> 146 <ZWJ> 147 148UnicodeIDStart :: 149 {L} 150 {NI} 151 U+2118 152 U+212E 153 U+309B 154 U+309C 155 156UnicodeIDContinue :: 157 UnicodeIDStart 158 {Mn} 159 {Mc} 160 {Nd} 161 {Pc} 162 U+1369 163 U+1370 164 U+1371 165 U+00B7 166 U+0387 167 U+19DA 168 169 170ReservedWord :: 171 Keyword 172 FutureReservedWord 173 NullLiteral 174 BooleanLiteral 175 176 177Keyword :: one of 178 `await` 179 `break` 180 `case` `catch` `class` `const` `continue` 181 `debugger` `default` `delete` `do` 182 `else` `export` `extends` 183 `finally` `for` `function` 184 `if` `import` `in` `instanceof` 185 `new` 186 `return` 187 `super` `switch` 188 `this` `throw` `try` `typeof` 189 `var` `void` 190 `while` `with` 191 `yield` 192 193 194FutureReservedWord :: 195 `enum` 196 197 198Punctuator :: one of 199 `{` `(` `)` `[` `]` 200 `.` `...` `;` `,` 201 `<` `>` `<=` `>=` 202 `==` `!=` `===` `!==` 203 `+` `-` `*` `%` `**` 204 `++` `--` 205 `<<` `>>` `>>>` 206 `&` `|` `^` 207 `!` `~` 208 `&&` `||` 209 `?` `:` 210 `=` `+=` `-=` `*=` `%=` `**=` `<<=` `>>=` `>>>=` `&=` `|=` `^=` 211 `=>` 212 213DivPunctuator :: 214 `/` 215 `/=` 216 217RightBracePunctuator :: 218 `}` 219 220 221NullLiteral :: 222 `null` 223 224 225BooleanLiteral :: 226 `true` 227 `false` 228 229 230NumericLiteral :: 231 DecimalLiteral 232 BinaryIntegerLiteral 233 OctalIntegerLiteral 234 HexIntegerLiteral 235 236DecimalLiteral :: 237 DecimalIntegerLiteral `.` DecimalDigits? ExponentPart? 238 `.` DecimalDigits ExponentPart? 239 DecimalIntegerLiteral ExponentPart? 240 241DecimalIntegerLiteral :: 242 `0` 243 NonZeroDigit DecimalDigits? 244 245DecimalDigits :: 246 DecimalDigit 247 DecimalDigits DecimalDigit 248 249DecimalDigit :: one of 250 `0` `1` `2` `3` `4` `5` `6` `7` `8` `9` 251 252NonZeroDigit :: one of 253 `1` `2` `3` `4` `5` `6` `7` `8` `9` 254 255ExponentPart :: 256 ExponentIndicator SignedInteger 257 258ExponentIndicator :: one of 259 `e` `E` 260 261SignedInteger :: 262 DecimalDigits 263 `+` DecimalDigits 264 `-` DecimalDigits 265 266BinaryIntegerLiteral :: 267 `0b` BinaryDigits 268 `0B` BinaryDigits 269 270BinaryDigits :: 271 BinaryDigit 272 BinaryDigits BinaryDigit 273 274BinaryDigit :: one of 275 `0` `1` 276 277OctalIntegerLiteral :: 278 `0o` OctalDigits 279 `0O` OctalDigits 280 281OctalDigits :: 282 OctalDigit 283 OctalDigits OctalDigit 284 285OctalDigit :: one of 286 `0` `1` `2` `3` `4` `5` `6` `7` 287 288HexIntegerLiteral :: 289 `0x` HexDigits 290 `0X` HexDigits 291 292HexDigits :: 293 HexDigit 294 HexDigits HexDigit 295 296HexDigit :: one of 297 `0` `1` `2` `3` `4` `5` `6` `7` `8` `9` `a` `b` `c` `d` `e` `f` `A` `B` `C` `D` `E` `F` 298 299 300StringLiteral :: 301 `"` DoubleStringCharacters? `"` 302 `'` SingleStringCharacters? `'` 303 304DoubleStringCharacters :: 305 DoubleStringCharacter DoubleStringCharacters? 306 307SingleStringCharacters :: 308 SingleStringCharacter SingleStringCharacters? 309 310DoubleStringCharacter :: 311 SourceCharacter but not one of `"` or `\` or LineTerminator 312 <LINE SEPARATOR> 313 <PARAGRAPH SEPARATOR> 314 `\` EscapeSequence 315 LineContinuation 316 317SingleStringCharacter :: 318 SourceCharacter but not one of `'` or `\` or LineTerminator 319 <LINE SEPARATOR> 320 <PARAGRAPH SEPARATOR> 321 `\` EscapeSequence 322 LineContinuation 323 324LineContinuation :: 325 `\` LineTerminatorSequence 326 327EscapeSequence :: 328 CharacterEscapeSequence 329 `0` [lookahead <! DecimalDigit] 330 HexEscapeSequence 331 UnicodeEscapeSequence 332 333 334CharacterEscapeSequence :: 335 SingleEscapeCharacter 336 NonEscapeCharacter 337 338SingleEscapeCharacter :: one of 339 `'` `"` `\` `b` `f` `n` `r` `t` `v` 340 341NonEscapeCharacter :: 342 SourceCharacter but not one of EscapeCharacter or LineTerminator 343 344EscapeCharacter :: 345 SingleEscapeCharacter 346 DecimalDigit 347 `x` 348 `u` 349 350HexEscapeSequence :: 351 `x` HexDigit HexDigit 352 353UnicodeEscapeSequence :: 354 `u` Hex4Digits 355 `u{` CodePoint `}` 356 357Hex4Digits :: 358 HexDigit HexDigit HexDigit HexDigit 359 360 361RegularExpressionLiteral :: 362 `/` RegularExpressionBody `/` RegularExpressionFlags 363 364RegularExpressionBody :: 365 RegularExpressionFirstChar RegularExpressionChars 366 367RegularExpressionChars :: 368 [empty] 369 RegularExpressionChars RegularExpressionChar 370 371RegularExpressionFirstChar :: 372 RegularExpressionNonTerminator but not one of `*` or `\` or `/` or `[` 373 RegularExpressionBackslashSequence 374 RegularExpressionClass 375 376RegularExpressionChar :: 377 RegularExpressionNonTerminator but not one of `\` or `/` or `[` 378 RegularExpressionBackslashSequence 379 RegularExpressionClass 380 381RegularExpressionBackslashSequence :: 382 `\` RegularExpressionNonTerminator 383 384RegularExpressionNonTerminator :: 385 SourceCharacter but not LineTerminator 386 387RegularExpressionClass :: 388 `[` RegularExpressionClassChars `]` 389 390RegularExpressionClassChars :: 391 [empty] 392 RegularExpressionClassChars RegularExpressionClassChar 393 394RegularExpressionClassChar :: 395 RegularExpressionNonTerminator but not one of `]` or `\` 396 RegularExpressionBackslashSequence 397 398RegularExpressionFlags :: 399 [empty] 400 RegularExpressionFlags IdentifierPart 401 402 403Template :: 404 NoSubstitutionTemplate 405 TemplateHead 406 407NoSubstitutionTemplate :: 408 ``` TemplateCharacters? ``` 409 410TemplateHead :: 411 ``` TemplateCharacters? `${` 412 413TemplateSubstitutionTail :: 414 TemplateMiddle 415 TemplateTail 416 417TemplateMiddle :: 418 `}` TemplateCharacters? `${` 419 420TemplateTail :: 421 `}` TemplateCharacters? ``` 422 423TemplateCharacters :: 424 TemplateCharacter TemplateCharacters? 425 426TemplateCharacter :: 427 `$` [lookahead != `{` ] 428 `\` EscapeSequence 429 `\` NotEscapeSequence 430 LineContinuation 431 LineTerminatorSequence 432 SourceCharacter but not one of ``` or `\` or `$` or LineTerminator 433 434NotEscapeSequence :: 435 `0` DecimalDigit 436 DecimalDigit but not `0` 437 `x` [lookahead <! HexDigit] 438 `x` HexDigit [lookahead <! HexDigit] 439 `u` [lookahead <! HexDigit] [lookahead != `{`] 440 `u` HexDigit [lookahead <! HexDigit] 441 `u` HexDigit HexDigit [lookahead <! HexDigit] 442 `u` HexDigit HexDigit HexDigit [lookahead <! HexDigit] 443 `u` `{` [lookahead <! HexDigit] 444 `u` `{` NotCodePoint [lookahead <! HexDigit] 445 `u` `{` CodePoint [lookahead <! HexDigit] [lookahead != `}`] 446 447NotCodePoint :: 448 HexDigits [> but only if MV of |HexDigits| > 0x10FFFF ] 449 450CodePoint :: 451 HexDigits [> but only if MV of |HexDigits| ≤ 0x10FFFF ] 452 453 454IdentifierReference[Yield, Await] : 455 Identifier 456 [~Yield] `yield` 457 [~Await] `await` 458 459BindingIdentifier[Yield, Await] : 460 Identifier 461 `yield` 462 `await` 463 464LabelIdentifier[Yield, Await] : 465 Identifier 466 [~Yield] `yield` 467 [~Await] `await` 468 469Identifier : 470 IdentifierName but not ReservedWord 471 472 473PrimaryExpression[Yield, Await] : 474 `this` 475 IdentifierReference[?Yield, ?Await] 476 Literal 477 ArrayLiteral[?Yield, ?Await] 478 ObjectLiteral[?Yield, ?Await] 479 FunctionExpression 480 ClassExpression[?Yield, ?Await] 481 GeneratorExpression 482 AsyncFunctionExpression 483 AsyncGeneratorExpression 484 RegularExpressionLiteral 485 TemplateLiteral[?Yield, ?Await, ~Tagged] 486 CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await] #parencover 487 488CoverParenthesizedExpressionAndArrowParameterList[Yield, Await] : 489 `(` Expression[+In, ?Yield, ?Await] `)` 490 `(` Expression[+In, ?Yield, ?Await] `,` `)` 491 `(` `)` 492 `(` `...` BindingIdentifier[?Yield, ?Await] `)` 493 `(` `...` BindingPattern[?Yield, ?Await] `)` 494 `(` Expression[+In, ?Yield, ?Await] `,` `...` BindingIdentifier[?Yield, ?Await] `)` 495 `(` Expression[+In, ?Yield, ?Await] `,` `...` BindingPattern[?Yield, ?Await] `)` 496 497 498ParenthesizedExpression[Yield, Await] : 499 `(` Expression[+In, ?Yield, ?Await] `)` 500 501 502Literal : 503 NullLiteral 504 BooleanLiteral 505 NumericLiteral 506 StringLiteral 507 508 509ArrayLiteral[Yield, Await] : 510 `[` Elision? `]` 511 `[` ElementList[?Yield, ?Await] `]` 512 `[` ElementList[?Yield, ?Await] `,` Elision? `]` 513 514ElementList[Yield, Await] : 515 Elision? AssignmentExpression[+In, ?Yield, ?Await] 516 Elision? SpreadElement[?Yield, ?Await] 517 ElementList[?Yield, ?Await] `,` Elision? AssignmentExpression[+In, ?Yield, ?Await] 518 ElementList[?Yield, ?Await] `,` Elision? SpreadElement[?Yield, ?Await] 519 520Elision : 521 `,` 522 Elision `,` 523 524SpreadElement[Yield, Await] : 525 `...` AssignmentExpression[+In, ?Yield, ?Await] 526 527 528ObjectLiteral[Yield, Await] : 529 `{` `}` 530 `{` PropertyDefinitionList[?Yield, ?Await] `}` 531 `{` PropertyDefinitionList[?Yield, ?Await] `,` `}` 532 533PropertyDefinitionList[Yield, Await] : 534 PropertyDefinition[?Yield, ?Await] 535 PropertyDefinitionList[?Yield, ?Await] `,` PropertyDefinition[?Yield, ?Await] 536 537PropertyDefinition[Yield, Await] : 538 IdentifierReference[?Yield, ?Await] 539 CoverInitializedName[?Yield, ?Await] 540 PropertyName[?Yield, ?Await] `:` AssignmentExpression[+In, ?Yield, ?Await] 541 MethodDefinition[?Yield, ?Await] 542 `...` AssignmentExpression[+In, ?Yield, ?Await] 543 544PropertyName[Yield, Await] : 545 LiteralPropertyName 546 ComputedPropertyName[?Yield, ?Await] 547 548LiteralPropertyName : 549 IdentifierName 550 StringLiteral 551 NumericLiteral 552 553ComputedPropertyName[Yield, Await] : 554 `[` AssignmentExpression[+In, ?Yield, ?Await] `]` 555 556CoverInitializedName[Yield, Await] : 557 IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await] 558 559Initializer[In, Yield, Await] : 560 `=` AssignmentExpression[?In, ?Yield, ?Await] 561 562 563TemplateLiteral[Yield, Await, Tagged] : 564 NoSubstitutionTemplate 565 SubstitutionTemplate[?Yield, ?Await, ?Tagged] 566 567SubstitutionTemplate[Yield, Await, Tagged] : 568 TemplateHead Expression[+In, ?Yield, ?Await] TemplateSpans[?Yield, ?Await, ?Tagged] 569 570TemplateSpans[Yield, Await, Tagged] : 571 TemplateTail 572 TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateTail 573 574TemplateMiddleList[Yield, Await, Tagged] : 575 TemplateMiddle Expression[+In, ?Yield, ?Await] 576 TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateMiddle Expression[+In, ?Yield, ?Await] 577 578 579MemberExpression[Yield, Await] : 580 PrimaryExpression[?Yield, ?Await] 581 MemberExpression[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]` 582 MemberExpression[?Yield, ?Await] `.` IdentifierName 583 MemberExpression[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged] 584 SuperProperty[?Yield, ?Await] 585 MetaProperty 586 `new` MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await] 587 588SuperProperty[Yield, Await] : 589 `super` `[` Expression[+In, ?Yield, ?Await] `]` 590 `super` `.` IdentifierName 591 592MetaProperty : 593 NewTarget 594 595NewTarget : 596 `new` `.` `target` 597 598NewExpression[Yield, Await] : 599 MemberExpression[?Yield, ?Await] 600 `new` NewExpression[?Yield, ?Await] 601 602CallExpression[Yield, Await] : 603 CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] #callcover 604 SuperCall[?Yield, ?Await] 605 ImportCall[?Yield, ?Await] 606 CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await] 607 CallExpression[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]` 608 CallExpression[?Yield, ?Await] `.` IdentifierName 609 CallExpression[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged] 610 611SuperCall[Yield, Await] : 612 `super` Arguments[?Yield, ?Await] 613 614ImportCall[Yield, Await] : 615 `import` `(` AssignmentExpression[+In, ?Yield, ?Await] `)` 616 617Arguments[Yield, Await] : 618 `(` `)` 619 `(` ArgumentList[?Yield, ?Await] `)` 620 `(` ArgumentList[?Yield, ?Await] `,` `)` 621 622ArgumentList[Yield, Await] : 623 AssignmentExpression[+In, ?Yield, ?Await] 624 `...` AssignmentExpression[+In, ?Yield, ?Await] 625 ArgumentList[?Yield, ?Await] `,` AssignmentExpression[+In, ?Yield, ?Await] 626 ArgumentList[?Yield, ?Await] `,` `...` AssignmentExpression[+In, ?Yield, ?Await] 627 628LeftHandSideExpression[Yield, Await] : 629 NewExpression[?Yield, ?Await] 630 CallExpression[?Yield, ?Await] 631 632 633CallMemberExpression[Yield, Await] : 634 MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await] 635 636 637UpdateExpression[Yield, Await] : 638 LeftHandSideExpression[?Yield, ?Await] 639 LeftHandSideExpression[?Yield, ?Await] `++` 640 LeftHandSideExpression[?Yield, ?Await] `--` 641 `++` UnaryExpression[?Yield, ?Await] 642 `--` UnaryExpression[?Yield, ?Await] 643 644 645UnaryExpression[Yield, Await] : 646 UpdateExpression[?Yield, ?Await] 647 `delete` UnaryExpression[?Yield, ?Await] 648 `void` UnaryExpression[?Yield, ?Await] 649 `typeof` UnaryExpression[?Yield, ?Await] 650 `+` UnaryExpression[?Yield, ?Await] 651 `-` UnaryExpression[?Yield, ?Await] 652 `~` UnaryExpression[?Yield, ?Await] 653 `!` UnaryExpression[?Yield, ?Await] 654 [+Await] AwaitExpression[?Yield] 655 656 657ExponentiationExpression[Yield, Await] : 658 UnaryExpression[?Yield, ?Await] 659 UpdateExpression[?Yield, ?Await] `**` ExponentiationExpression[?Yield, ?Await] 660 661 662MultiplicativeExpression[Yield, Await] : 663 ExponentiationExpression[?Yield, ?Await] 664 MultiplicativeExpression[?Yield, ?Await] MultiplicativeOperator ExponentiationExpression[?Yield, ?Await] 665 666MultiplicativeOperator : one of 667 `*` `/` `%` 668 669 670AdditiveExpression[Yield, Await] : 671 MultiplicativeExpression[?Yield, ?Await] 672 AdditiveExpression[?Yield, ?Await] `+` MultiplicativeExpression[?Yield, ?Await] 673 AdditiveExpression[?Yield, ?Await] `-` MultiplicativeExpression[?Yield, ?Await] 674 675 676ShiftExpression[Yield, Await] : 677 AdditiveExpression[?Yield, ?Await] 678 ShiftExpression[?Yield, ?Await] `<<` AdditiveExpression[?Yield, ?Await] 679 ShiftExpression[?Yield, ?Await] `>>` AdditiveExpression[?Yield, ?Await] 680 ShiftExpression[?Yield, ?Await] `>>>` AdditiveExpression[?Yield, ?Await] 681 682 683RelationalExpression[In, Yield, Await] : 684 ShiftExpression[?Yield, ?Await] 685 RelationalExpression[?In, ?Yield, ?Await] `<` ShiftExpression[?Yield, ?Await] 686 RelationalExpression[?In, ?Yield, ?Await] `>` ShiftExpression[?Yield, ?Await] 687 RelationalExpression[?In, ?Yield, ?Await] `<=` ShiftExpression[?Yield, ?Await] 688 RelationalExpression[?In, ?Yield, ?Await] `>=` ShiftExpression[?Yield, ?Await] 689 RelationalExpression[?In, ?Yield, ?Await] `instanceof` ShiftExpression[?Yield, ?Await] 690 [+In] RelationalExpression[+In, ?Yield, ?Await] `in` ShiftExpression[?Yield, ?Await] 691 692 693EqualityExpression[In, Yield, Await] : 694 RelationalExpression[?In, ?Yield, ?Await] 695 EqualityExpression[?In, ?Yield, ?Await] `==` RelationalExpression[?In, ?Yield, ?Await] 696 EqualityExpression[?In, ?Yield, ?Await] `!=` RelationalExpression[?In, ?Yield, ?Await] 697 EqualityExpression[?In, ?Yield, ?Await] `===` RelationalExpression[?In, ?Yield, ?Await] 698 EqualityExpression[?In, ?Yield, ?Await] `!==` RelationalExpression[?In, ?Yield, ?Await] 699 700 701BitwiseANDExpression[In, Yield, Await] : 702 EqualityExpression[?In, ?Yield, ?Await] 703 BitwiseANDExpression[?In, ?Yield, ?Await] `&` EqualityExpression[?In, ?Yield, ?Await] 704 705BitwiseXORExpression[In, Yield, Await] : 706 BitwiseANDExpression[?In, ?Yield, ?Await] 707 BitwiseXORExpression[?In, ?Yield, ?Await] `^` BitwiseANDExpression[?In, ?Yield, ?Await] 708 709BitwiseORExpression[In, Yield, Await] : 710 BitwiseXORExpression[?In, ?Yield, ?Await] 711 BitwiseORExpression[?In, ?Yield, ?Await] `|` BitwiseXORExpression[?In, ?Yield, ?Await] 712 713 714LogicalANDExpression[In, Yield, Await] : 715 BitwiseORExpression[?In, ?Yield, ?Await] 716 LogicalANDExpression[?In, ?Yield, ?Await] `&&` BitwiseORExpression[?In, ?Yield, ?Await] 717 718LogicalORExpression[In, Yield, Await] : 719 LogicalANDExpression[?In, ?Yield, ?Await] 720 LogicalORExpression[?In, ?Yield, ?Await] `||` LogicalANDExpression[?In, ?Yield, ?Await] 721 722 723ConditionalExpression[In, Yield, Await] : 724 LogicalORExpression[?In, ?Yield, ?Await] 725 LogicalORExpression[?In, ?Yield, ?Await] `?` AssignmentExpression[+In, ?Yield, ?Await] `:` AssignmentExpression[?In, ?Yield, ?Await] 726 727 728AssignmentExpression[In, Yield, Await] : 729 ConditionalExpression[?In, ?Yield, ?Await] 730 [+Yield] YieldExpression[?In, ?Await] 731 ArrowFunction[?In, ?Yield, ?Await] 732 AsyncArrowFunction[?In, ?Yield, ?Await] 733 LeftHandSideExpression[?Yield, ?Await] `=` AssignmentExpression[?In, ?Yield, ?Await] #assignment 734 LeftHandSideExpression[?Yield, ?Await] AssignmentOperator AssignmentExpression[?In, ?Yield, ?Await] 735 736AssignmentOperator : one of 737 `*=` `/=` `%=` `+=` `-=` `<<=` `>>=` `>>>=` `&=` `^=` `|=` `**=` 738 739 740AssignmentPattern[Yield, Await] : 741 ObjectAssignmentPattern[?Yield, ?Await] 742 ArrayAssignmentPattern[?Yield, ?Await] 743 744ObjectAssignmentPattern[Yield, Await] : 745 `{` `}` 746 `{` AssignmentRestProperty[?Yield, ?Await] `}` 747 `{` AssignmentPropertyList[?Yield, ?Await] `}` 748 `{` AssignmentPropertyList[?Yield, ?Await] `,` AssignmentRestProperty[?Yield, ?Await]? `}` 749 750ArrayAssignmentPattern[Yield, Await] : 751 `[` Elision? AssignmentRestElement[?Yield, ?Await]? `]` 752 `[` AssignmentElementList[?Yield, ?Await] `]` 753 `[` AssignmentElementList[?Yield, ?Await] `,` Elision? AssignmentRestElement[?Yield, ?Await]? `]` 754 755AssignmentRestProperty[Yield, Await] : 756 `...` DestructuringAssignmentTarget[?Yield, ?Await] 757 758AssignmentPropertyList[Yield, Await] : 759 AssignmentProperty[?Yield, ?Await] 760 AssignmentPropertyList[?Yield, ?Await] `,` AssignmentProperty[?Yield, ?Await] 761 762AssignmentElementList[Yield, Await] : 763 AssignmentElisionElement[?Yield, ?Await] 764 AssignmentElementList[?Yield, ?Await] `,` AssignmentElisionElement[?Yield, ?Await] 765 766AssignmentElisionElement[Yield, Await] : 767 Elision? AssignmentElement[?Yield, ?Await] 768 769AssignmentProperty[Yield, Await] : 770 IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]? 771 PropertyName[?Yield, ?Await] `:` AssignmentElement[?Yield, ?Await] 772 773AssignmentElement[Yield, Await] : 774 DestructuringAssignmentTarget[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]? 775 776AssignmentRestElement[Yield, Await] : 777 `...` DestructuringAssignmentTarget[?Yield, ?Await] 778 779DestructuringAssignmentTarget[Yield, Await] : 780 LeftHandSideExpression[?Yield, ?Await] 781 782 783Expression[In, Yield, Await] : 784 AssignmentExpression[?In, ?Yield, ?Await] 785 Expression[?In, ?Yield, ?Await] `,` AssignmentExpression[?In, ?Yield, ?Await] 786 787 788Statement[Yield, Await, Return] : 789 BlockStatement[?Yield, ?Await, ?Return] 790 VariableStatement[?Yield, ?Await] 791 EmptyStatement 792 ExpressionStatement[?Yield, ?Await] 793 IfStatement[?Yield, ?Await, ?Return] 794 BreakableStatement[?Yield, ?Await, ?Return] 795 ContinueStatement[?Yield, ?Await] 796 BreakStatement[?Yield, ?Await] 797 [+Return] ReturnStatement[?Yield, ?Await] 798 WithStatement[?Yield, ?Await, ?Return] 799 LabelledStatement[?Yield, ?Await, ?Return] 800 ThrowStatement[?Yield, ?Await] 801 TryStatement[?Yield, ?Await, ?Return] 802 DebuggerStatement 803 804Declaration[Yield, Await] : 805 HoistableDeclaration[?Yield, ?Await, ~Default] 806 ClassDeclaration[?Yield, ?Await, ~Default] 807 LexicalDeclaration[+In, ?Yield, ?Await] 808 809HoistableDeclaration[Yield, Await, Default] : 810 FunctionDeclaration[?Yield, ?Await, ?Default] 811 GeneratorDeclaration[?Yield, ?Await, ?Default] 812 AsyncFunctionDeclaration[?Yield, ?Await, ?Default] 813 AsyncGeneratorDeclaration[?Yield, ?Await, ?Default] 814 815BreakableStatement[Yield, Await, Return] : 816 IterationStatement[?Yield, ?Await, ?Return] 817 SwitchStatement[?Yield, ?Await, ?Return] 818 819 820BlockStatement[Yield, Await, Return] : 821 Block[?Yield, ?Await, ?Return] 822 823Block[Yield, Await, Return] : 824 `{` StatementList[?Yield, ?Await, ?Return]? `}` 825 826StatementList[Yield, Await, Return] : 827 StatementListItem[?Yield, ?Await, ?Return] 828 StatementList[?Yield, ?Await, ?Return] StatementListItem[?Yield, ?Await, ?Return] 829 830StatementListItem[Yield, Await, Return] : 831 Statement[?Yield, ?Await, ?Return] 832 Declaration[?Yield, ?Await] 833 834 835LexicalDeclaration[In, Yield, Await] : 836 LetOrConst BindingList[?In, ?Yield, ?Await] `;` 837 838LetOrConst : 839 `let` 840 `const` 841 842BindingList[In, Yield, Await] : 843 LexicalBinding[?In, ?Yield, ?Await] 844 BindingList[?In, ?Yield, ?Await] `,` LexicalBinding[?In, ?Yield, ?Await] 845 846LexicalBinding[In, Yield, Await] : 847 BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]? 848 BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await] 849 850 851VariableStatement[Yield, Await] : 852 `var` VariableDeclarationList[+In, ?Yield, ?Await] `;` 853 854VariableDeclarationList[In, Yield, Await] : 855 VariableDeclaration[?In, ?Yield, ?Await] 856 VariableDeclarationList[?In, ?Yield, ?Await] `,` VariableDeclaration[?In, ?Yield, ?Await] 857 858VariableDeclaration[In, Yield, Await] : 859 BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]? 860 BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await] 861 862 863BindingPattern[Yield, Await] : 864 ObjectBindingPattern[?Yield, ?Await] 865 ArrayBindingPattern[?Yield, ?Await] 866 867ObjectBindingPattern[Yield, Await] : 868 `{` `}` 869 `{` BindingRestProperty[?Yield, ?Await] `}` 870 `{` BindingPropertyList[?Yield, ?Await] `}` 871 `{` BindingPropertyList[?Yield, ?Await] `,` BindingRestProperty[?Yield, ?Await]? `}` 872 873ArrayBindingPattern[Yield, Await] : 874 `[` Elision? BindingRestElement[?Yield, ?Await]? `]` 875 `[` BindingElementList[?Yield, ?Await] `]` 876 `[` BindingElementList[?Yield, ?Await] `,` Elision? BindingRestElement[?Yield, ?Await]? `]` 877 878BindingRestProperty[Yield, Await] : 879 `...` BindingIdentifier[?Yield, ?Await] 880 881BindingPropertyList[Yield, Await] : 882 BindingProperty[?Yield, ?Await] 883 BindingPropertyList[?Yield, ?Await] `,` BindingProperty[?Yield, ?Await] 884 885BindingElementList[Yield, Await] : 886 BindingElisionElement[?Yield, ?Await] 887 BindingElementList[?Yield, ?Await] `,` BindingElisionElement[?Yield, ?Await] 888 889BindingElisionElement[Yield, Await] : 890 Elision? BindingElement[?Yield, ?Await] 891 892BindingProperty[Yield, Await] : 893 SingleNameBinding[?Yield, ?Await] 894 PropertyName[?Yield, ?Await] `:` BindingElement[?Yield, ?Await] 895 896BindingElement[Yield, Await] : 897 SingleNameBinding[?Yield, ?Await] 898 BindingPattern[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]? 899 900SingleNameBinding[Yield, Await] : 901 BindingIdentifier[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]? 902 903BindingRestElement[Yield, Await] : 904 `...` BindingIdentifier[?Yield, ?Await] 905 `...` BindingPattern[?Yield, ?Await] 906 907 908EmptyStatement : 909 `;` 910 911 912ExpressionStatement[Yield, Await] : 913 [lookahead <! {`{`, `function`, `async`, `class`, `let`}] Expression[+In, ?Yield, ?Await] `;` 914 915 916IfStatement[Yield, Await, Return] : 917 `if` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] `else` Statement[?Yield, ?Await, ?Return] 918 `if` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 919 920 921IterationStatement[Yield, Await, Return] : 922 `do` Statement[?Yield, ?Await, ?Return] `while` `(` Expression[+In, ?Yield, ?Await] `)` `;` 923 `while` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 924 `for` `(` [lookahead != `let`] Expression[~In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `)` Statement[?Yield, ?Await, ?Return] 925 `for` `(` `var` VariableDeclarationList[~In, ?Yield, ?Await] `;` Expression[+In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `)` Statement[?Yield, ?Await, ?Return] 926 `for` `(` ForLexicalDeclaration[~In, ?Yield, ?Await] Expression[+In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `)` Statement[?Yield, ?Await, ?Return] 927 `for` `(` [lookahead != `let`] LeftHandSideExpression[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 928 `for` `(` `var` ForBinding[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 929 `for` `(` ForDeclaration[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 930 `for` `(` [lookahead <! {`async`, `let`} ] LeftHandSideExpression[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 931 `for` `(` `var` ForBinding[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 932 `for` `(` ForDeclaration[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 933 [+Await] `for` `await` `(` [lookahead <! {`async`, `let`} ] LeftHandSideExpression[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 934 [+Await] `for` `await` `(` `var` ForBinding[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 935 [+Await] `for` `await` `(` ForDeclaration[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 936 937ForDeclaration[Yield, Await] : 938 LetOrConst ForBinding[?Yield, ?Await] 939 940ForBinding[Yield, Await] : 941 BindingIdentifier[?Yield, ?Await] 942 BindingPattern[?Yield, ?Await] 943 944 945ContinueStatement[Yield, Await] : 946 `continue` `;` 947 `continue` LabelIdentifier[?Yield, ?Await] `;` 948 949 950BreakStatement[Yield, Await] : 951 `break` `;` 952 `break` LabelIdentifier[?Yield, ?Await] `;` 953 954 955ReturnStatement[Yield, Await] : 956 `return` `;` 957 `return` Expression[+In, ?Yield, ?Await] `;` 958 959 960WithStatement[Yield, Await, Return] : 961 `with` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 962 963 964SwitchStatement[Yield, Await, Return] : 965 `switch` `(` Expression[+In, ?Yield, ?Await] `)` CaseBlock[?Yield, ?Await, ?Return] 966 967CaseBlock[Yield, Await, Return] : 968 `{` CaseClauses[?Yield, ?Await, ?Return]? `}` 969 `{` CaseClauses[?Yield, ?Await, ?Return]? DefaultClause[?Yield, ?Await, ?Return] CaseClauses[?Yield, ?Await, ?Return]? `}` 970 971CaseClauses[Yield, Await, Return] : 972 CaseClause[?Yield, ?Await, ?Return] 973 CaseClauses[?Yield, ?Await, ?Return] CaseClause[?Yield, ?Await, ?Return] 974 975CaseClause[Yield, Await, Return] : 976 `case` Expression[+In, ?Yield, ?Await] `:` StatementList[?Yield, ?Await, ?Return]? 977 978DefaultClause[Yield, Await, Return] : 979 `default` `:` StatementList[?Yield, ?Await, ?Return]? 980 981 982LabelledStatement[Yield, Await, Return] : 983 LabelIdentifier[?Yield, ?Await] `:` LabelledItem[?Yield, ?Await, ?Return] 984 985LabelledItem[Yield, Await, Return] : 986 Statement[?Yield, ?Await, ?Return] 987 FunctionDeclaration[?Yield, ?Await, ~Default] 988 989 990ThrowStatement[Yield, Await] : 991 `throw` Expression[+In, ?Yield, ?Await] `;` 992 993 994TryStatement[Yield, Await, Return] : 995 `try` Block[?Yield, ?Await, ?Return] Catch[?Yield, ?Await, ?Return] 996 `try` Block[?Yield, ?Await, ?Return] Finally[?Yield, ?Await, ?Return] 997 `try` Block[?Yield, ?Await, ?Return] Catch[?Yield, ?Await, ?Return] Finally[?Yield, ?Await, ?Return] 998 999Catch[Yield, Await, Return] : 1000 `catch` `(` CatchParameter[?Yield, ?Await] `)` Block[?Yield, ?Await, ?Return] 1001 `catch` Block[?Yield, ?Await, ?Return] 1002 1003Finally[Yield, Await, Return] : 1004 `finally` Block[?Yield, ?Await, ?Return] 1005 1006CatchParameter[Yield, Await] : 1007 BindingIdentifier[?Yield, ?Await] 1008 BindingPattern[?Yield, ?Await] 1009 1010 1011DebuggerStatement : 1012 `debugger` `;` 1013 1014 1015FunctionDeclaration[Yield, Await, Default] : 1016 `function` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}` 1017 [+Default] `function` `(` FormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}` 1018 1019FunctionExpression : 1020 `function` BindingIdentifier[~Yield, ~Await]? `(` FormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}` 1021 1022UniqueFormalParameters[Yield, Await] : 1023 FormalParameters[?Yield, ?Await] 1024 1025FormalParameters[Yield, Await] : 1026 [empty] 1027 FunctionRestParameter[?Yield, ?Await] 1028 FormalParameterList[?Yield, ?Await] 1029 FormalParameterList[?Yield, ?Await] `,` 1030 FormalParameterList[?Yield, ?Await] `,` FunctionRestParameter[?Yield, ?Await] 1031 1032FormalParameterList[Yield, Await] : 1033 FormalParameter[?Yield, ?Await] 1034 FormalParameterList[?Yield, ?Await] `,` FormalParameter[?Yield, ?Await] 1035 1036FunctionRestParameter[Yield, Await] : 1037 BindingRestElement[?Yield, ?Await] 1038 1039FormalParameter[Yield, Await] : 1040 BindingElement[?Yield, ?Await] 1041 1042FunctionBody[Yield, Await] : 1043 FunctionStatementList[?Yield, ?Await] 1044 1045FunctionStatementList[Yield, Await] : 1046 StatementList[?Yield, ?Await, +Return]? 1047 1048 1049ArrowFunction[In, Yield, Await] : 1050 ArrowParameters[?Yield, ?Await] `=>` ConciseBody[?In] 1051 1052ArrowParameters[Yield, Await] : 1053 BindingIdentifier[?Yield, ?Await] 1054 CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await] #parencover 1055 1056ConciseBody[In] : 1057 [lookahead != `{` ] AssignmentExpression[?In, ~Yield, ~Await] 1058 `{` FunctionBody[~Yield, ~Await] `}` 1059 1060 1061ArrowFormalParameters[Yield, Await] : 1062 `(` UniqueFormalParameters[?Yield, ?Await] `)` 1063 1064 1065MethodDefinition[Yield, Await] : 1066 PropertyName[?Yield, ?Await] `(` UniqueFormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}` 1067 GeneratorMethod[?Yield, ?Await] 1068 AsyncMethod[?Yield, ?Await] 1069 AsyncGeneratorMethod[?Yield, ?Await] 1070 `get` PropertyName[?Yield, ?Await] `(` `)` `{` FunctionBody[~Yield, ~Await] `}` 1071 `set` PropertyName[?Yield, ?Await] `(` PropertySetParameterList `)` `{` FunctionBody[~Yield, ~Await] `}` 1072 1073PropertySetParameterList : 1074 FormalParameter[~Yield, ~Await] 1075 1076 1077GeneratorMethod[Yield, Await] : 1078 `*` PropertyName[?Yield, ?Await] `(` UniqueFormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}` 1079 1080GeneratorDeclaration[Yield, Await, Default] : 1081 `function` `*` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}` 1082 [+Default] `function` `*` `(` FormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}` 1083 1084GeneratorExpression : 1085 `function` `*` BindingIdentifier[+Yield, ~Await]? `(` FormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}` 1086 1087GeneratorBody : 1088 FunctionBody[+Yield, ~Await] 1089 1090YieldExpression[In, Await] : 1091 `yield` 1092 `yield` AssignmentExpression[?In, +Yield, ?Await] 1093 `yield` `*` AssignmentExpression[?In, +Yield, ?Await] 1094 1095 1096AsyncGeneratorMethod[Yield, Await] : 1097 `async` `*` PropertyName[?Yield, ?Await] `(` UniqueFormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}` 1098 1099AsyncGeneratorDeclaration[Yield, Await, Default] : 1100 `async` `function` `*` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}` 1101 [+Default] `async` `function` `*` `(` FormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}` 1102 1103AsyncGeneratorExpression : 1104 `async` `function` `*` BindingIdentifier[+Yield, +Await]? `(` FormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}` 1105 1106AsyncGeneratorBody : 1107 FunctionBody[+Yield, +Await] 1108 1109 1110ClassDeclaration[Yield, Await, Default] : 1111 `class` BindingIdentifier[?Yield, ?Await] ClassTail[?Yield, ?Await] 1112 [+Default] `class` ClassTail[?Yield, ?Await] 1113 1114ClassExpression[Yield, Await] : 1115 `class` BindingIdentifier[?Yield, ?Await]? ClassTail[?Yield, ?Await] 1116 1117ClassTail[Yield, Await] : 1118 ClassHeritage[?Yield, ?Await]? `{` ClassBody[?Yield, ?Await]? `}` 1119 1120ClassHeritage[Yield, Await] : 1121 `extends` LeftHandSideExpression[?Yield, ?Await] 1122 1123ClassBody[Yield, Await] : 1124 ClassElementList[?Yield, ?Await] 1125 1126ClassElementList[Yield, Await] : 1127 ClassElement[?Yield, ?Await] 1128 ClassElementList[?Yield, ?Await] ClassElement[?Yield, ?Await] 1129 1130ClassElement[Yield, Await] : 1131 MethodDefinition[?Yield, ?Await] 1132 `static` MethodDefinition[?Yield, ?Await] 1133 `;` 1134 1135 1136AsyncFunctionDeclaration[Yield, Await, Default] : 1137 `async` `function` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}` 1138 [+Default] `async` `function` `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}` 1139 1140AsyncFunctionExpression : 1141 `async` `function` `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}` 1142 `async` `function` BindingIdentifier[~Yield, +Await] `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}` 1143 1144AsyncMethod[Yield, Await] : 1145 `async` PropertyName[?Yield, ?Await] `(` UniqueFormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}` 1146 1147AsyncFunctionBody : 1148 FunctionBody[~Yield, +Await] 1149 1150AwaitExpression[Yield] : 1151 `await` UnaryExpression[?Yield, +Await] 1152 1153 1154AsyncArrowFunction[In, Yield, Await] : 1155 `async` AsyncArrowBindingIdentifier[?Yield] `=>` AsyncConciseBody[?In] 1156 CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] `=>` AsyncConciseBody[?In] #callcover 1157 1158AsyncConciseBody[In] : 1159 [lookahead != `{`] AssignmentExpression[?In, ~Yield, +Await] 1160 `{` AsyncFunctionBody `}` 1161 1162AsyncArrowBindingIdentifier[Yield] : 1163 BindingIdentifier[?Yield, +Await] 1164 1165CoverCallExpressionAndAsyncArrowHead[Yield, Await] : 1166 MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await] 1167 1168 1169AsyncArrowHead : 1170 `async` ArrowFormalParameters[~Yield, +Await] 1171 1172 1173Script : 1174 ScriptBody? 1175 1176ScriptBody : 1177 StatementList[~Yield, ~Await, ~Return] 1178 1179 1180Module : 1181 ModuleBody? 1182 1183ModuleBody : 1184 ModuleItemList 1185 1186ModuleItemList : 1187 ModuleItem 1188 ModuleItemList ModuleItem 1189 1190ModuleItem : 1191 ImportDeclaration 1192 ExportDeclaration 1193 StatementListItem[~Yield, ~Await, ~Return] 1194 1195 1196ImportDeclaration : 1197 `import` ImportClause FromClause `;` 1198 `import` ModuleSpecifier `;` 1199 1200ImportClause : 1201 ImportedDefaultBinding 1202 NameSpaceImport 1203 NamedImports 1204 ImportedDefaultBinding `,` NameSpaceImport 1205 ImportedDefaultBinding `,` NamedImports 1206 1207ImportedDefaultBinding : 1208 ImportedBinding 1209 1210NameSpaceImport : 1211 `*` `as` ImportedBinding 1212 1213NamedImports : 1214 `{` `}` 1215 `{` ImportsList `}` 1216 `{` ImportsList `,` `}` 1217 1218FromClause : 1219 `from` ModuleSpecifier 1220 1221ImportsList : 1222 ImportSpecifier 1223 ImportsList `,` ImportSpecifier 1224 1225ImportSpecifier : 1226 ImportedBinding 1227 IdentifierName `as` ImportedBinding 1228 1229ModuleSpecifier : 1230 StringLiteral 1231 1232ImportedBinding : 1233 BindingIdentifier[~Yield, ~Await] 1234 1235 1236ExportDeclaration : 1237 `export` `*` FromClause `;` 1238 `export` ExportClause FromClause `;` 1239 `export` ExportClause `;` 1240 `export` VariableStatement[~Yield, ~Await] 1241 `export` Declaration[~Yield, ~Await] 1242 `export` `default` HoistableDeclaration[~Yield, ~Await, +Default] 1243 `export` `default` ClassDeclaration[~Yield, ~Await, +Default] 1244 `export` `default` [lookahead <! {`function`, `async`, `class`}] AssignmentExpression[+In, ~Yield, ~Await] `;` 1245 1246ExportClause : 1247 `{` `}` 1248 `{` ExportsList `}` 1249 `{` ExportsList `,` `}` 1250 1251ExportsList : 1252 ExportSpecifier 1253 ExportsList `,` ExportSpecifier 1254 1255ExportSpecifier : 1256 IdentifierName 1257 IdentifierName `as` IdentifierName 1258 1259 1260uri ::: 1261 uriCharacters? 1262 1263uriCharacters ::: 1264 uriCharacter uriCharacters? 1265 1266uriCharacter ::: 1267 uriReserved 1268 uriUnescaped 1269 uriEscaped 1270 1271uriReserved ::: one of 1272 `;` `/` `?` `:` `@` `&` `=` `+` `$` `,` 1273 1274uriUnescaped ::: 1275 uriAlpha 1276 DecimalDigit 1277 uriMark 1278 1279uriEscaped ::: 1280 `%` HexDigit HexDigit 1281 1282uriAlpha ::: one of 1283 `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` 1284 `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` 1285 1286uriMark ::: one of 1287 `-` `_` `.` `!` `~` `*` `'` `(` `)` 1288 1289 1290NativeFunction : 1291 `function` PropertyName[~Yield, ~Await]? `(` FormalParameters[~Yield, ~Await] `)` `{` `[` `native` `code` `]` `}` 1292 1293 1294Pattern[U, N] :: 1295 Disjunction[?U, ?N] 1296 1297Disjunction[U, N] :: 1298 Alternative[?U, ?N] 1299 Alternative[?U, ?N] `|` Disjunction[?U, ?N] 1300 1301Alternative[U, N] :: 1302 [empty] 1303 Alternative[?U, ?N] Term[?U, ?N] 1304 1305Term[U, N] :: 1306 Assertion[?U, ?N] 1307 Atom[?U, ?N] 1308 Atom[?U, ?N] Quantifier 1309 1310Assertion[U, N] :: 1311 `^` 1312 `$` 1313 `\` `b` 1314 `\` `B` 1315 `(` `?` `=` Disjunction[?U, ?N] `)` 1316 `(` `?` `!` Disjunction[?U, ?N] `)` 1317 `(` `?` `<=` Disjunction[?U, ?N] `)` 1318 `(` `?` `<!` Disjunction[?U, ?N] `)` 1319 1320Quantifier :: 1321 QuantifierPrefix 1322 QuantifierPrefix `?` 1323 1324QuantifierPrefix :: 1325 `*` 1326 `+` 1327 `?` 1328 `{` DecimalDigits `}` 1329 `{` DecimalDigits `,` `}` 1330 `{` DecimalDigits `,` DecimalDigits `}` 1331 1332Atom[U, N] :: 1333 PatternCharacter 1334 `.` 1335 `\` AtomEscape[?U, ?N] 1336 CharacterClass[?U] 1337 `(` GroupSpecifier[?U] Disjunction[?U, ?N] `)` 1338 `(` `?` `:` Disjunction[?U, ?N] `)` 1339 1340SyntaxCharacter :: one of 1341 `^` `$` `\` `.` `*` `+` `?` `(` `)` `[` `]` `{` `}` `|` 1342 1343PatternCharacter :: 1344 SourceCharacter but not SyntaxCharacter 1345 1346AtomEscape[U, N] :: 1347 DecimalEscape 1348 CharacterClassEscape[?U] 1349 CharacterEscape[?U] 1350 [+N] `k` GroupName[?U] 1351 1352CharacterEscape[U] :: 1353 ControlEscape 1354 `c` ControlLetter 1355 `0` [lookahead <! DecimalDigit] 1356 HexEscapeSequence 1357 RegExpUnicodeEscapeSequence[?U] 1358 IdentityEscape[?U] 1359 1360ControlEscape :: one of 1361 `f` `n` `r` `t` `v` 1362 1363ControlLetter :: one of 1364 `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` 1365 `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` 1366 1367GroupSpecifier[U] :: 1368 [empty] 1369 `?` GroupName[?U] 1370 1371GroupName[U] :: 1372 `<` RegExpIdentifierName[?U] `>` 1373 1374RegExpIdentifierName[U] :: 1375 RegExpIdentifierStart[?U] 1376 RegExpIdentifierName[?U] RegExpIdentifierPart[?U] 1377 1378RegExpIdentifierStart[U] :: 1379 UnicodeIDStart 1380 `$` 1381 `_` 1382 `\` RegExpUnicodeEscapeSequence[?U] 1383 1384RegExpIdentifierPart[U] :: 1385 UnicodeIDContinue 1386 `$` 1387 `\` RegExpUnicodeEscapeSequence[?U] 1388 <ZWNJ> 1389 <ZWJ> 1390 1391RegExpUnicodeEscapeSequence[U] :: 1392 [+U] `u` LeadSurrogate `\u` TrailSurrogate 1393 [+U] `u` LeadSurrogate 1394 [+U] `u` TrailSurrogate 1395 [+U] `u` NonSurrogate 1396 [~U] `u` Hex4Digits 1397 [+U] `u{` CodePoint `}` 1398 1399 1400LeadSurrogate :: 1401 Hex4Digits [> but only if the SV of |Hex4Digits| is in the inclusive range 0xD800 to 0xDBFF] 1402 1403TrailSurrogate :: 1404 Hex4Digits [> but only if the SV of |Hex4Digits| is in the inclusive range 0xDC00 to 0xDFFF] 1405 1406NonSurrogate :: 1407 Hex4Digits [> but only if the SV of |Hex4Digits| is not in the inclusive range 0xD800 to 0xDFFF] 1408 1409IdentityEscape[U] :: 1410 [+U] SyntaxCharacter 1411 [+U] `/` 1412 [~U] SourceCharacter but not UnicodeIDContinue 1413 1414DecimalEscape :: 1415 NonZeroDigit DecimalDigits? [lookahead <! DecimalDigit] 1416 1417CharacterClassEscape[U] :: 1418 `d` 1419 `D` 1420 `s` 1421 `S` 1422 `w` 1423 `W` 1424 [+U] `p{` UnicodePropertyValueExpression `}` 1425 [+U] `P{` UnicodePropertyValueExpression `}` 1426 1427UnicodePropertyValueExpression :: 1428 UnicodePropertyName `=` UnicodePropertyValue 1429 LoneUnicodePropertyNameOrValue 1430 1431UnicodePropertyName :: 1432 UnicodePropertyNameCharacters 1433 1434UnicodePropertyNameCharacters :: 1435 UnicodePropertyNameCharacter UnicodePropertyNameCharacters? 1436 1437UnicodePropertyValue :: 1438 UnicodePropertyValueCharacters 1439 1440LoneUnicodePropertyNameOrValue :: 1441 UnicodePropertyValueCharacters 1442 1443UnicodePropertyValueCharacters :: 1444 UnicodePropertyValueCharacter UnicodePropertyValueCharacters? 1445 1446UnicodePropertyValueCharacter :: 1447 UnicodePropertyNameCharacter 1448 `0` 1449 `1` 1450 `2` 1451 `3` 1452 `4` 1453 `5` 1454 `6` 1455 `7` 1456 `8` 1457 `9` 1458 1459UnicodePropertyNameCharacter :: 1460 ControlLetter 1461 `_` 1462 1463CharacterClass[U] :: 1464 `[` [lookahead != `^`] ClassRanges[?U] `]` 1465 `[` `^` ClassRanges[?U] `]` 1466 1467ClassRanges[U] :: 1468 [empty] 1469 NonemptyClassRanges[?U] 1470 1471NonemptyClassRanges[U] :: 1472 ClassAtom[?U] 1473 ClassAtom[?U] NonemptyClassRangesNoDash[?U] 1474 ClassAtom[?U] `-` ClassAtom[?U] ClassRanges[?U] 1475 1476NonemptyClassRangesNoDash[U] :: 1477 ClassAtom[?U] 1478 ClassAtomNoDash[?U] NonemptyClassRangesNoDash[?U] 1479 ClassAtomNoDash[?U] `-` ClassAtom[?U] ClassRanges[?U] 1480 1481ClassAtom[U] :: 1482 `-` 1483 ClassAtomNoDash[?U] 1484 1485ClassAtomNoDash[U] :: 1486 SourceCharacter but not one of `\` or `]` or `-` 1487 `\` ClassEscape[?U] 1488 1489ClassEscape[U] :: 1490 `b` 1491 [+U] `-` 1492 CharacterClassEscape[?U] 1493 CharacterEscape[?U] 1494 1495 1496NumericLiteral :: 1497 DecimalLiteral 1498 BinaryIntegerLiteral 1499 OctalIntegerLiteral 1500 HexIntegerLiteral 1501 LegacyOctalIntegerLiteral 1502 1503LegacyOctalIntegerLiteral :: 1504 `0` OctalDigit 1505 LegacyOctalIntegerLiteral OctalDigit 1506 1507DecimalIntegerLiteral :: 1508 `0` 1509 NonZeroDigit DecimalDigits? 1510 NonOctalDecimalIntegerLiteral 1511 1512NonOctalDecimalIntegerLiteral :: 1513 `0` NonOctalDigit 1514 LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit 1515 NonOctalDecimalIntegerLiteral DecimalDigit 1516 1517LegacyOctalLikeDecimalIntegerLiteral :: 1518 `0` OctalDigit 1519 LegacyOctalLikeDecimalIntegerLiteral OctalDigit 1520 1521NonOctalDigit :: one of 1522 `8` `9` 1523 1524 1525EscapeSequence :: 1526 CharacterEscapeSequence 1527 LegacyOctalEscapeSequence 1528 HexEscapeSequence 1529 UnicodeEscapeSequence 1530 1531LegacyOctalEscapeSequence :: 1532 OctalDigit [lookahead <! OctalDigit] 1533 ZeroToThree OctalDigit [lookahead <! OctalDigit] 1534 FourToSeven OctalDigit 1535 ZeroToThree OctalDigit OctalDigit 1536 1537ZeroToThree :: one of 1538 `0` `1` `2` `3` 1539 1540FourToSeven :: one of 1541 `4` `5` `6` `7` 1542 1543 1544Comment :: 1545 MultiLineComment 1546 SingleLineComment 1547 SingleLineHTMLOpenComment 1548 SingleLineHTMLCloseComment 1549 SingleLineDelimitedComment 1550 1551MultiLineComment :: 1552 `/*` FirstCommentLine? LineTerminator MultiLineCommentChars? `*/` HTMLCloseComment? 1553 1554FirstCommentLine :: 1555 SingleLineDelimitedCommentChars 1556 1557SingleLineHTMLOpenComment :: 1558 `<!--` SingleLineCommentChars? 1559 1560SingleLineHTMLCloseComment :: 1561 LineTerminatorSequence HTMLCloseComment 1562 1563SingleLineDelimitedComment :: 1564 `/*` SingleLineDelimitedCommentChars? `*/` 1565 1566HTMLCloseComment :: 1567 WhiteSpaceSequence? SingleLineDelimitedCommentSequence? `-->` SingleLineCommentChars? 1568 1569SingleLineDelimitedCommentChars :: 1570 SingleLineNotAsteriskChar SingleLineDelimitedCommentChars? 1571 `*` SingleLinePostAsteriskCommentChars? 1572 1573SingleLineNotAsteriskChar :: 1574 SourceCharacter but not one of `*` or LineTerminator 1575 1576SingleLinePostAsteriskCommentChars :: 1577 SingleLineNotForwardSlashOrAsteriskChar SingleLineDelimitedCommentChars? 1578 `*` SingleLinePostAsteriskCommentChars? 1579 1580SingleLineNotForwardSlashOrAsteriskChar :: 1581 SourceCharacter but not one of `/` or `*` or LineTerminator 1582 1583WhiteSpaceSequence :: 1584 WhiteSpace WhiteSpaceSequence? 1585 1586SingleLineDelimitedCommentSequence :: 1587 SingleLineDelimitedComment WhiteSpaceSequence? SingleLineDelimitedCommentSequence? 1588 1589 1590Term[U, N] :: 1591 [+U] Assertion[+U, ?N] 1592 [+U] Atom[+U, ?N] 1593 [+U] Atom[+U, ?N] Quantifier 1594 [~U] QuantifiableAssertion[?N] Quantifier 1595 [~U] Assertion[~U, ?N] 1596 [~U] ExtendedAtom[?N] Quantifier 1597 [~U] ExtendedAtom[?N] 1598 1599Assertion[U, N] :: 1600 `^` 1601 `$` 1602 `\` `b` 1603 `\` `B` 1604 [+U] `(` `?` `=` Disjunction[+U, ?N] `)` 1605 [+U] `(` `?` `!` Disjunction[+U, ?N] `)` 1606 [~U] QuantifiableAssertion[?N] 1607 `(` `?` `<=` Disjunction[?U, ?N] `)` 1608 `(` `?` `<!` Disjunction[?U, ?N] `)` 1609 1610QuantifiableAssertion[N] :: 1611 `(` `?` `=` Disjunction[~U, ?N] `)` 1612 `(` `?` `!` Disjunction[~U, ?N] `)` 1613 1614ExtendedAtom[N] :: 1615 `.` 1616 `\` AtomEscape[~U, ?N] 1617 `\` [lookahead == `c`] 1618 CharacterClass[~U] 1619 `(` Disjunction[~U, ?N] `)` 1620 `(` `?` `:` Disjunction[~U, ?N] `)` 1621 InvalidBracedQuantifier 1622 ExtendedPatternCharacter 1623 1624InvalidBracedQuantifier :: 1625 `{` DecimalDigits `}` 1626 `{` DecimalDigits `,` `}` 1627 `{` DecimalDigits `,` DecimalDigits `}` 1628 1629ExtendedPatternCharacter :: 1630 SourceCharacter but not one of `^` `$` `\` `.` `*` `+` `?` `(` `)` `[` `|` 1631 1632AtomEscape[U, N] :: 1633 [+U] DecimalEscape 1634 [~U] DecimalEscape [> but only if the CapturingGroupNumber of |DecimalEscape| is <= _NcapturingParens_] 1635 CharacterClassEscape[?U] 1636 CharacterEscape[~U, ?N] 1637 [+N] `k` GroupName[?U] 1638 1639CharacterEscape[U, N] :: 1640 ControlEscape 1641 `c` ControlLetter 1642 `0` [lookahead <! DecimalDigit] 1643 HexEscapeSequence 1644 RegExpUnicodeEscapeSequence[?U] 1645 [~U] LegacyOctalEscapeSequence 1646 IdentityEscape[?U, ?N] 1647 1648IdentityEscape[U, N] :: 1649 [+U] SyntaxCharacter 1650 [+U] `/` 1651 [~U] SourceCharacterIdentityEscape[?N] 1652 1653SourceCharacterIdentityEscape[N] :: 1654 [~N] SourceCharacter but not `c` 1655 [+N] SourceCharacter but not one of `c` or `k` 1656 1657ClassAtomNoDash[U] :: 1658 SourceCharacter but not one of `\` or `]` or `-` 1659 `\` ClassEscape[?U, ~N] 1660 `\` [lookahead == `c`] 1661 1662ClassEscape[U, N] :: 1663 `b` 1664 [+U] `-` 1665 [~U] `c` ClassControlLetter 1666 CharacterClassEscape[?U] 1667 CharacterEscape[?U, ?N] 1668 1669ClassControlLetter :: 1670 DecimalDigit 1671 `_` 1672 1673 1674IfStatement[Yield, Await, Return] : 1675 `if` `(` Expression[+In, ?Yield, ?Await] `)` FunctionDeclaration[?Yield, ?Await, ~Default] `else` Statement[?Yield, ?Await, ?Return] 1676 `if` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] `else` FunctionDeclaration[?Yield, ?Await, ~Default] 1677 `if` `(` Expression[+In, ?Yield, ?Await] `)` FunctionDeclaration[?Yield, ?Await, ~Default] `else` FunctionDeclaration[?Yield, ?Await, ~Default] 1678 `if` `(` Expression[+In, ?Yield, ?Await] `)` FunctionDeclaration[?Yield, ?Await, ~Default] 1679 1680 1681IterationStatement[Yield, Await, Return] : 1682 `for` `(` `var` BindingIdentifier[?Yield, ?Await] Initializer[~In, ?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] 1683 1684