es6.grammar

This module was automatically generated from the following grammar:

More...

Public Imports

pegged.peg
public import pegged.peg;
Undocumented in source.

Members

Aliases

ES6
alias ES6 = GenericES6!(ParseTree).ES6
Undocumented in source.

Structs

GenericES6
struct GenericES6(TParseTree)
Undocumented in source.

Detailed Description

ES6: Module < ModuleBody eoi ModuleBody < ModuleItemList ModuleItemList < (ImportDeclaration / ExportDeclaration / StatementListItem)+ ImportDeclaration < "import" ((ImportClause FromClause) / ModuleSpecifier) ";" ImportClause < NameSpaceImport / NamedImports / (ImportedDefaultBinding "," NameSpaceImport) / (ImportedDefaultBinding "," NamedImports) / ImportedDefaultBinding ImportedDefaultBinding < ImportedBinding NameSpaceImport < "*" "as" ImportedBinding NamedImports < CurlyBrackets((ImportsList (",")?)?) FromClause < "from" ModuleSpecifier ImportsList < ImportSpecifier ("," ImportSpecifier)* ImportSpecifier < (IdentifierName "as" ImportedBinding) / ImportedBinding ModuleSpecifier < StringLiteral ImportedBinding < BindingIdentifier ExportDeclaration < / ("export" "*" FromClause ";") / ("export" ExportClause FromClause ";") / ("export" ExportClause ";") / ("export" "default" HoistableDeclarationDefault) / ("export" "default" ClassDeclarationDefault) / ("export" "default" !("function" / "class") AssignmentExpressionIn ";") / ("export" VariableStatement) / ("export" Declaration)

ExportClause < CurlyBrackets((ExportsList (",")?)?) ExportsList < ExportSpecifier ("," ExportSpecifier)* ExportSpecifier < IdentifierName ("as" IdentifierName)? SourceCharacter <- [\u0000-\uFFFC] InputElementDiv <- WhiteSpace / LineTerminator / Comment / CommonToken / DivPunctuator / RightBracePunctuator InputElementRegExp <- WhiteSpace / LineTerminator / Comment / CommonToken / RightBracePunctuator / RegularExpressionLiteral InputElementRegExpOrTemplateTail <- WhiteSpace / LineTerminator / Comment / CommonToken / RegularExpressionLiteral / TemplateSubstitutionTail InputElementTemplateTail <- WhiteSpace / LineTerminator / Comment / CommonToken / DivPunctuator / TemplateSubstitutionTail

WhiteSpace <- "\u0009" / "\u000B" / "\u000C" / "\u0020" / "\u00A0" / "\uFEFF" / [\u02B0-\u02FF] LineTerminator <- "\u000A" / "\u000D" / "\u2028" / "\u2029" LineTerminatorSequence <- "\u000A" / ("\u000D" !"\u000A") / "\u2028" / "\u2029" / ("\u000D\u000A") Spacing <~ (:WhiteSpace / :LineTerminatorSequence / Comment)* Spaces <~ (:WhiteSpace / Comment)*

Comment <~ MultiLineComment / SingleLineComment MultiLineComment <~ :"/*" (!"*/" SourceCharacter)* :"*/" SingleLineComment <- :"//" SingleLineCommentChars? eol SingleLineCommentChars <- SingleLineCommentChar+ SingleLineCommentChar <- !LineTerminator SourceCharacter

CommonToken <- IdentifierName / Punctuator / NumericLiteral / StringLiteral / Template IdentifierName <~ IdentifierStart IdentifierPart* IdentifierStart <~ UnicodeIDStart / "$" / "_" / ("\\" UnicodeEscapeSequence) IdentifierPart <~ UnicodeIDContinue / "$" / "_" / ("\\" UnicodeEscapeSequence) / "\u200C" / "\u200D" UnicodeIDStart <~ ID_Start / Other_ID_Start

ID_Start <- [\u0041-\u005a] / [\u0061-\u007a] / "\u00aa" / "\u00b5" / "\u00ba" / [\u00c0-\u00d6] / [\u00d8-\u00f6] Other_ID_Start <- "\u2118" / "\u212e" / [\u309b-\u309c] UnicodeIDContinue <- ID_Continue / Other_ID_Continue / Other_ID_Start ID_Continue <- [\u0030-\u0039] / [\u0041-\u005a] / "\u005f" / [\u0061-\u007a] / "\u00aa" / "\u00b5" / "\u00b7" / "\u00ba" / [\u00c0-\u00d6] / [\u00d8-\u00f6] Other_ID_Continue <- "\u00b7" / "\u0387" / [\u1369-\u1371] / "\u19da"

ReservedWord <- Keyword / FutureReservedWord / NullLiteral / BooleanLiteral Keyword <- "break" / "do" / "in" / "typeof" / "case" / "else" / "instanceof" / "var" / "catch" / "export" / "new" / "void" / "class" / "extends" / "return" / "while" / "const" / "finally" / "super" / "with" / "continue" / "for" / "switch" / "yield" / "debugger" / "function" / "this" / "default" / "if" / "throw" / "delete" / "import" / "try" FutureReservedWord <- "enum" / "await" Punctuator <- "{" / "}" / "(" / ")" / "[" / "]" / "." / ";" / "," / "<=" / ">=" / "<" / ">" / "===" / "!==" / "==" / "!=" / "++" / "--" / "*=" / "*" / "%=" / "%" / "+=" / "+" / "-=" / "-" / "<<=" / "<<" / ">>>=" / ">>>" / ">>=" / ">>" / "&&" / "||" / "^=" / "^" / "!" / "~" / "&=" / "&" / "|=" / "|" / "?" / ":" / "=>" / "=" DivPunctuator <- "/=" / "/" RightBracePunctuator <- "}" NullLiteral <- "null" BooleanLiteral <- "true" / "false" NumericLiteral <- HexIntegerLiteral / DecimalLiteral / BinaryIntegerLiteral / OctalIntegerLiteral DecimalLiteral <~ (DecimalIntegerLiteral ("." DecimalDigits?)? ExponentPart?) / ("." DecimalDigits ExponentPart?) DecimalIntegerLiteral <- "0" / (NonZeroDigit DecimalDigits?) DecimalDigits <~ DecimalDigit+ DecimalDigit <- [0-9] NonZeroDigit <- [1-9] ExponentPart <- ExponentIndicator SignedInteger ExponentIndicator <- "e" / "E" SignedInteger <- ("+" / "-")? DecimalDigits BinaryIntegerLiteral <~ ("0b" / "0B") BinaryDigits BinaryDigits <~ BinaryDigit+ BinaryDigit <- "0" / "1" OctalIntegerLiteral <~ ("0o" / "0O") OctalDigits OctalDigits <- OctalDigit+ OctalDigit <- [0-7] HexIntegerLiteral <~ ("0x" / "0X") HexDigits HexDigits <- HexDigit+ HexDigit <- [0-9a-fA-F]

StringLiteral <~ ("\"" DoubleStringCharacters? "\"") / ("'" SingleStringCharacters? "'") DoubleStringCharacters <- DoubleStringCharacter+ SingleStringCharacters <- SingleStringCharacter+ DoubleStringCharacter <- (!("\"" / "\\" / LineTerminator) SourceCharacter) / ("\\" EscapeSequence) / LineContinuation SingleStringCharacter <- (!("\'" / "\\" / LineTerminator) SourceCharacter) / ("\\" EscapeSequence) / LineContinuation LineContinuation <- "\\" LineTerminatorSequence EscapeSequence <- (CharacterEscapeSequence / ("0" !DecimalDigit)) / HexEscapeSequence / UnicodeEscapeSequence CharacterEscapeSequence <- SingleEscapeCharacter / NonEscapeCharacter SingleEscapeCharacter <- "'" / "\"" / "\\" / "b" / "f" / "n" / "r" / "t" / "v" NonEscapeCharacter <- !(EscapeCharacter / LineTerminator) SourceCharacter EscapeCharacter <- SingleEscapeCharacter / DecimalDigit / "x" / "u" HexEscapeSequence <- "x" HexDigit HexDigit UnicodeEscapeSequence <- ("u" Hex4Digits) / "u{" HexDigits "}" Hex4Digits <- HexDigit HexDigit HexDigit HexDigit

RegularExpressionLiteral <- "/" RegularExpressionBody "/" RegularExpressionFlags RegularExpressionBody <- RegularExpressionFirstChar RegularExpressionChars RegularExpressionChars <- RegularExpressionChar*

RegularExpressionFirstChar <- (!("*" / "\\" / "/" / "[") RegularExpressionNonTerminator) / RegularExpressionBackslashSequence / RegularExpressionClass RegularExpressionChar <- (!("\\" / "/" / "[") RegularExpressionNonTerminator) / RegularExpressionBackslashSequence / RegularExpressionClass RegularExpressionBackslashSequence <- "\\" RegularExpressionNonTerminator RegularExpressionNonTerminator <- !LineTerminator SourceCharacter RegularExpressionClass <- :"[" RegularExpressionClassChars :"]" RegularExpressionClassChars <- RegularExpressionClassChar* RegularExpressionClassChar <- (!("]" / "\\") RegularExpressionNonTerminator) / RegularExpressionBackslashSequence RegularExpressionFlags <- IdentifierPart*

Template <- NoSubstitutionTemplate / TemplateHead NoSubstitutionTemplate <- :"\u0060" TemplateCharacters? :"\u0060" TemplateHead <- :"\u0060" TemplateCharacters? :"${" TemplateSubstitutionTail <- TemplateMiddle / TemplateTail TemplateMiddle <- :"}" TemplateCharacters? :"${" TemplateTail <- :"}" TemplateCharacters? :"\u0060" TemplateCharacters <- TemplateCharacter+ TemplateCharacter <- ("$" !"{") / ("\\" EscapeSequence) / LineContinuation / LineTerminatorSequence / (!("\u0060" / "\\" / "$" / LineTerminator) SourceCharacter)

IdentifierReference < Identifier / "yield" IdentifierReferenceYield < Identifier BindingIdentifier < Identifier / "yield" BindingIdentifierYield < Identifier LabelIdentifier < Identifier / "yield" LabelIdentifierYield < Identifier Identifier <- !(ReservedWord (WhiteSpace / LineTerminatorSequence / Comment / ";" / ":")) IdentifierName ThisKeyword <- ("this" !IdentifierPart)

PrimaryExpression < ThisKeyword / Literal / ArrayLiteral / ObjectLiteral / GeneratorExpression / ClassExpression / FunctionExpression / RegularExpressionLiteral / TemplateLiteral / CoverParenthesizedExpressionAndArrowParameterList / IdentifierReference PrimaryExpressionYield < ThisKeyword / Literal / ArrayLiteralYield / ObjectLiteralYield / GeneratorExpression / ClassExpressionYield / FunctionExpression / RegularExpressionLiteral / TemplateLiteralYield / CoverParenthesizedExpressionAndArrowParameterListYield / IdentifierReferenceYield CoverParenthesizedExpressionAndArrowParameterList < Parentheses(ExpressionIn "," "..." BindingIdentifier) / Parentheses("..." BindingIdentifier) / Parentheses(ExpressionIn?) CoverParenthesizedExpressionAndArrowParameterListYield < Parentheses(ExpressionInYield "," "..." BindingIdentifierYield) / Parentheses("..." BindingIdentifierYield) / Parentheses(ExpressionInYield?)

ParenthesizedExpression < Parentheses(ExpressionIn) ParenthesizedExpressionYield < Parentheses(ExpressionInYield) Literal <- ((NullLiteral / BooleanLiteral / NumericLiteral) !(IdentifierStart / IdentifierPart)) / StringLiteral ArrayLiteral < SquareBrackets(ElementList? Elision?) ArrayLiteralYield < SquareBrackets(ElementListYield? Elision?) ElementList < Elision? (AssignmentExpressionIn / SpreadElement) (:"," Elision? (AssignmentExpressionIn / SpreadElement))* ElementListYield < Elision? (AssignmentExpressionInYield / SpreadElementYield) (:"," Elision? (AssignmentExpressionInYield / SpreadElementYield))* Elision < ","+ SpreadElement < :"..." AssignmentExpressionIn SpreadElementYield < :"..." AssignmentExpressionInYield ObjectLiteral < CurlyBrackets((PropertyDefinitionList :","?)?) ObjectLiteralYield < CurlyBrackets((PropertyDefinitionListYield :","?)?) PropertyDefinitionList < PropertyDefinition ("," PropertyDefinition)* PropertyDefinitionListYield < PropertyDefinitionYield ("," PropertyDefinitionYield)* PropertyDefinition < MethodDefinition / CoverInitializedName / (PropertyName ":" AssignmentExpressionIn) / IdentifierReference PropertyDefinitionYield < MethodDefinitionYield / CoverInitializedNameYield / (PropertyNameYield ":" AssignmentExpressionInYield) / IdentifierReferenceYield PropertyName < ComputedPropertyName / LiteralPropertyName PropertyNameYield < ComputedPropertyNameYield / LiteralPropertyName LiteralPropertyName < NumericLiteral / StringLiteral / IdentifierName ComputedPropertyName < SquareBrackets(AssignmentExpressionIn) ComputedPropertyNameYield < SquareBrackets(AssignmentExpressionInYield) CoverInitializedName < IdentifierReference InitializerIn CoverInitializedNameYield < IdentifierReferenceYield InitializerInYield Initializer < :"=" AssignmentExpression InitializerIn < :"=" AssignmentExpressionIn InitializerYield < :"=" AssignmentExpressionYield InitializerInYield < :"=" AssignmentExpressionInYield TemplateLiteral < NoSubstitutionTemplate / (TemplateHead ExpressionIn TemplateSpans) TemplateLiteralYield < NoSubstitutionTemplate / (TemplateHead ExpressionInYield TemplateSpansYield) TemplateSpans < TemplateMiddleList? TemplateTail TemplateSpansYield < TemplateMiddleListYield? TemplateTail TemplateMiddleList < TemplateMiddleList? TemplateMiddle ExpressionIn TemplateMiddleListYield < TemplateMiddleListYield? TemplateMiddle ExpressionInYield FieldAccessor < "." IdentifierName MemberExpression < ((SuperProperty / MetaProperty / PrimaryExpression) / (NewKeyword ((SuperProperty / MetaProperty / PrimaryExpression) (SquareBrackets(ExpressionIn) / (FieldAccessor) / TemplateLiteral)*) Arguments)) (SquareBrackets(ExpressionIn) / (FieldAccessor) / TemplateLiteral)* MemberExpressionYield < ((SuperPropertyYield / MetaProperty / PrimaryExpressionYield) / (NewKeyword ((SuperPropertyYield / MetaProperty / PrimaryExpressionYield) (SquareBrackets(ExpressionInYield) / (FieldAccessor) / TemplateLiteralYield)*) ArgumentsYield)) (SquareBrackets(ExpressionInYield) / (FieldAccessor) / TemplateLiteralYield)* SuperProperty < (:"super" SquareBrackets(ExpressionIn)) / (:"super" FieldAccessor) SuperPropertyYield < (:"super" SquareBrackets(ExpressionInYield)) / (:"super" FieldAccessor) MetaProperty < NewTarget NewKeyword <- "new" !(IdentifierStart / IdentifierPart) NewTarget < :"new" "." :"target" NewExpression < MemberExpression / ((NewKeyword WhiteSpace?)* MemberExpression) NewExpressionYield < MemberExpressionYield / ((NewKeyword WhiteSpace?)* MemberExpressionYield) CallExpression < (SuperCall / (MemberExpression Arguments)) (SquareBrackets(ExpressionIn) / (FieldAccessor) / TemplateLiteral / Arguments)* CallExpressionYield < (SuperCallYield / (MemberExpressionYield ArgumentsYield)) (SquareBrackets(ExpressionInYield) / (FieldAccessor) / TemplateLiteralYield / ArgumentsYield)* SuperCall < :"super" Arguments SuperCallYield < :"super" ArgumentsYield Arguments < Parentheses(ArgumentList?) ArgumentsYield < Parentheses(ArgumentListYield?) ArgumentList < "..."? AssignmentExpressionIn ("," ArgumentList)* ArgumentListYield < "..."? AssignmentExpressionInYield ("," ArgumentListYield)* LeftHandSideExpression < CallExpression / NewExpression LeftHandSideExpressionYield < CallExpressionYield / NewExpressionYield PostfixExpression < LeftHandSideExpression (Spaces (PostfixOperator))? PostfixExpressionYield < LeftHandSideExpressionYield (Spaces (PostfixOperator))? PostfixOperator < "++" / "--" PrefixExpression <- ((("delete" / "void" / "typeof") !(IdentifierStart / IdentifierPart)) / "++" / "--" / "+" / "-" / "~" / "!") UnaryExpression < PrefixExpression* PostfixExpression UnaryExpressionYield < PrefixExpression* PostfixExpressionYield RightHandSideExpression < BinaryExpression / UnaryExpression RightHandSideExpressionIn < BinaryExpressionIn / UnaryExpression RightHandSideExpressionYield < BinaryExpressionYield / UnaryExpressionYield RightHandSideExpressionInYield < BinaryExpressionInYield / UnaryExpressionYield BinaryExpression < UnaryExpression (ExpressionOperator UnaryExpression)+ BinaryExpressionIn < UnaryExpression (ExpressionOperatorIn UnaryExpression)+ BinaryExpressionYield < UnaryExpressionYield (ExpressionOperator UnaryExpressionYield)+ BinaryExpressionInYield < UnaryExpressionYield (ExpressionOperatorIn UnaryExpressionYield)+ ExpressionOperator < LogicalOperator / BitwiseOperator / EqualityOperator / ShiftOperator / RelationalOperator / AdditiveOperator / MultiplicativeOperator ExpressionOperatorIn < LogicalOperator / BitwiseOperator / EqualityOperator / ShiftOperator / RelationalOperatorIn / AdditiveOperator / MultiplicativeOperator LogicalOperator < "||" / "&&" BitwiseOperator < "|" / "^" / "&" EqualityOperator < "===" / "!==" / "==" / "!=" RelationalOperator < "<=" / ">=" / "<" / ">" / "instanceof" RelationalOperatorIn < "<=" / ">=" / "<" / ">" / "instanceof" / "in" ShiftOperator < "<<" / ">>>" / ">>" AdditiveOperator <- "+" / "-" MultiplicativeOperator < "*" / "/" / "%" ConditionalExpression < RightHandSideExpression ("?" AssignmentExpressionIn ":" AssignmentExpression)? ConditionalExpressionIn < RightHandSideExpressionIn ("?" AssignmentExpressionIn ":" AssignmentExpressionIn)? ConditionalExpressionYield < RightHandSideExpressionYield ("?" AssignmentExpressionInYield ":" AssignmentExpressionYield)? ConditionalExpressionInYield < RightHandSideExpressionInYield ("?" AssignmentExpressionInYield ":" AssignmentExpressionInYield)? AssignmentExpression < ((JSXElement / ArrowFunction / ConditionalExpression) !AssignmentOperator) / ((LeftHandSideExpression AssignmentOperator)* (JSXElement / ArrowFunction / ConditionalExpression)) AssignmentExpressionIn < ((JSXElement / ArrowFunctionIn / ConditionalExpressionIn) !AssignmentOperator) / ((LeftHandSideExpression AssignmentOperator)* (JSXElement / ArrowFunctionIn / ConditionalExpressionIn)) AssignmentExpressionYield < (YieldExpression / ArrowFunctionYield / ConditionalExpressionYield) / ((LeftHandSideExpressionYield AssignmentOperator)* (YieldExpression / ArrowFunctionYield / ConditionalExpressionYield)) AssignmentExpressionInYield < (YieldExpressionIn / ArrowFunctionInYield / ConditionalExpressionInYield) / ((LeftHandSideExpressionYield AssignmentOperator)* (YieldExpressionIn / ArrowFunctionInYield / ConditionalExpressionInYield)) AssignmentOperator < (!"==" "=") / "*=" / "/=" / "%=" / "+=" / "-=" / "<<=" / ">>=" / ">>>=" / "&=" / "^=" / "|=" Comma < "," Expression < AssignmentExpression (Comma AssignmentExpression)* ExpressionIn < AssignmentExpressionIn (Comma AssignmentExpressionIn)* ExpressionYield < AssignmentExpressionYield (Comma AssignmentExpressionYield)* ExpressionInYield < AssignmentExpressionInYield (Comma AssignmentExpressionInYield)*

Statement < (BlockStatement / VariableStatement / EmptyStatement / IfStatement / BreakableStatement / ContinueStatement / BreakStatement / WithStatement / LabelledStatement / ThrowStatement / TryStatement / DebuggerStatement / ExpressionStatement) :";"? StatementYield < (BlockStatementYield / VariableStatementYield / EmptyStatement / IfStatementYield / BreakableStatementYield / ContinueStatementYield / BreakStatementYield / WithStatementYield / LabelledStatementYield / ThrowStatementYield / TryStatementYield / DebuggerStatement / ExpressionStatementYield) :";"? StatementReturn < (BlockStatementReturn / VariableStatement / EmptyStatement / IfStatementReturn / BreakableStatementReturn / ContinueStatement / BreakStatement / ReturnStatement / WithStatementReturn / LabelledStatementReturn / ThrowStatement / TryStatementReturn / DebuggerStatement / ExpressionStatement) :";"? StatementYieldReturn < (BlockStatementYieldReturn / VariableStatementYield / EmptyStatement / IfStatementYieldReturn / BreakableStatementYieldReturn / ContinueStatementYield / BreakStatementYield / ReturnStatementYield / WithStatementYieldReturn / LabelledStatementYieldReturn / ThrowStatementYield / TryStatementYieldReturn / DebuggerStatement / ExpressionStatementYield) :";"?

Declaration < HoistableDeclaration / ClassDeclaration / LexicalDeclarationIn DeclarationYield < HoistableDeclarationYield / ClassDeclarationYield / LexicalDeclarationInYield HoistableDeclaration < GeneratorDeclaration / FunctionDeclaration HoistableDeclarationYield < GeneratorDeclarationYield / FunctionDeclarationYield HoistableDeclarationDefault < GeneratorDeclarationDefault / FunctionDeclarationDefault HoistableDeclarationYieldDefault < GeneratorDeclarationYieldDefault / FunctionDeclarationYieldDefault

BreakableStatement < IterationStatement / SwitchStatement BreakableStatementYield < IterationStatementYield / SwitchStatementYield BreakableStatementReturn < IterationStatementReturn / SwitchStatementReturn BreakableStatementYieldReturn < IterationStatementYieldReturn / SwitchStatementYieldReturn

BlockStatement < %Block BlockStatementYield < %BlockYield BlockStatementReturn < %BlockReturn BlockStatementYieldReturn < %BlockYieldReturn

Block < CurlyBrackets(StatementList) BlockYield < CurlyBrackets(StatementListYield) BlockReturn < CurlyBrackets(StatementListReturn) BlockYieldReturn < CurlyBrackets(StatementListYieldReturn)

StatementList < StatementListItem* StatementListYield < StatementListItemYield* StatementListReturn < StatementListItemReturn* StatementListYieldReturn < StatementListItemYieldReturn*

StatementListItem < Declaration / Statement StatementListItemYield < DeclarationYield / StatementYield StatementListItemReturn < Declaration / StatementReturn StatementListItemYieldReturn < DeclarationYield / StatementYieldReturn

LexicalDeclaration < LetOrConst BindingList :";" LexicalDeclarationIn < LetOrConst BindingListIn :";" LexicalDeclarationYield < LetOrConst BindingListYield :";" LexicalDeclarationInYield < LetOrConst BindingListInYield :";" LetOrConst < ("let" / "const")

BindingList < LexicalBinding (:"," LexicalBinding)* BindingListIn < LexicalBindingIn (:"," LexicalBindingIn)* BindingListYield < LexicalBindingYield (:"," LexicalBindingYield)* BindingListInYield < LexicalBindingInYield (:"," LexicalBindingInYield)*

LexicalBinding < (BindingPatternYield Initializer) / (BindingIdentifier Initializer?) LexicalBindingIn < (BindingPatternYield InitializerIn) / (BindingIdentifier InitializerIn?) LexicalBindingYield < (BindingPatternYield InitializerYield) / (BindingIdentifierYield InitializerYield?) LexicalBindingInYield < (BindingPatternYield InitializerInYield) / (BindingIdentifierYield InitializerInYield?)

VariableStatement < :"var" VariableDeclarationListIn VariableStatementYield < :"var" VariableDeclarationListInYield

VariableDeclarationList < VariableDeclaration (:"," VariableDeclaration)* VariableDeclarationListIn < VariableDeclarationIn (:"," VariableDeclarationIn)* VariableDeclarationListYield < VariableDeclarationYield (:"," VariableDeclarationYield)* VariableDeclarationListInYield < VariableDeclarationInYield (:"," VariableDeclarationInYield)*

VariableDeclaration < (BindingPattern Initializer) / (BindingIdentifier Initializer?) VariableDeclarationIn < (BindingPattern InitializerIn) / (BindingIdentifier InitializerIn?) VariableDeclarationYield < (BindingPatternYield InitializerYield) / (BindingIdentifierYield InitializerYield?) VariableDeclarationInYield < (BindingPatternYield InitializerInYield) / (BindingIdentifierYield InitializerInYield?)

BindingPattern < ObjectBindingPattern / ArrayBindingPattern BindingPatternYield < ObjectBindingPatternYield / ArrayBindingPatternYield ObjectBindingPattern < CurlyBrackets((BindingPropertyList (:",")?)?) ObjectBindingPatternYield < CurlyBrackets((BindingPropertyListYield (:",")?)?)

ArrayBindingPattern < SquareBrackets(Elision? BindingRestElement?) / SquareBrackets(BindingElementList (:"," Elision? BindingRestElement?)?) / SquareBrackets(BindingElementList) ArrayBindingPatternYield < SquareBrackets(Elision? BindingRestElementYield?) / SquareBrackets(BindingElementListYield (:"," Elision? BindingRestElementYield?)?) / SquareBrackets(BindingElementListYield) BindingPropertyList < BindingProperty (:"," BindingProperty)* BindingPropertyListYield < BindingPropertyYield (:"," BindingPropertyYield)* BindingElementList < BindingElisionElement (:"," BindingElisionElement)* BindingElementListYield < BindingElisionElementYield (:"," BindingElisionElementYield)* BindingElisionElement < Elision? BindingElement BindingElisionElementYield < Elision? BindingElementYield BindingProperty < (PropertyName ":" BindingElement) / SingleNameBinding BindingPropertyYield < (PropertyNameYield ":" BindingElementYield) / SingleNameBindingYield BindingElement < (BindingPattern InitializerIn?) / SingleNameBinding BindingElementYield < (BindingPatternYield InitializerInYield?) / SingleNameBindingYield SingleNameBinding < BindingIdentifier InitializerIn? SingleNameBindingYield < BindingIdentifierYield InitializerInYield? BindingRestElement < :"..." BindingIdentifier BindingRestElementYield < :"..." BindingIdentifierYield

EmptyStatement < ";"

ExpressionStatement < !("{" / (("function" / "class" / ("let" "[")) !(IdentifierStart / IdentifierPart))) ExpressionIn ExpressionStatementYield < !("{" / (("function" / "class" / ("let" "[")) !(IdentifierStart / IdentifierPart))) ExpressionInYield ElseKeyword < "else" IfStatement < :"if" Parentheses(ExpressionIn) Statement (ElseKeyword Statement)? IfStatementYield < :"if" Parentheses(ExpressionInYield) StatementYield (ElseKeyword StatementYield)? IfStatementReturn < :"if" Parentheses(ExpressionIn) StatementReturn (ElseKeyword StatementReturn)? IfStatementYieldReturn < :"if" Parentheses(ExpressionInYield) StatementYieldReturn (ElseKeyword StatementYieldReturn)?

DoKeyword <- "do" !(IdentifierStart / IdentifierPart) WhileKeyword < "while" ForKeyword < "for" VarKeyword < "var" InKeyword < "in" OfKeyword < "of" Semicolon < ";" IterationStatement < / (DoKeyword Statement WhileKeyword Parentheses(ExpressionIn) Semicolon) / (WhileKeyword Parentheses(ExpressionIn) Statement) / (ForKeyword Parentheses(VarKeyword VariableDeclarationList Semicolon ExpressionIn? Semicolon ExpressionIn?) Statement) / (ForKeyword Parentheses(VarKeyword ForBinding ((InKeyword ExpressionIn) / (OfKeyword AssignmentExpressionIn))) Statement) / (ForKeyword Parentheses(ForDeclaration InKeyword ExpressionIn) Statement) / (ForKeyword Parentheses(ForDeclaration OfKeyword AssignmentExpressionIn) Statement) / (ForKeyword Parentheses(LexicalDeclaration ExpressionIn? Semicolon ExpressionIn?) Statement) / (ForKeyword Parentheses(!("let" "[") Expression? Semicolon ExpressionIn? Semicolon ExpressionIn?) Statement) / (ForKeyword Parentheses(!("let" "[") LeftHandSideExpression InKeyword ExpressionIn) Statement) / (ForKeyword Parentheses(!("let") LeftHandSideExpression OfKeyword AssignmentExpressionIn) Statement) IterationStatementYield < / (DoKeyword StatementYield WhileKeyword Parentheses(ExpressionInYield) Semicolon) / (WhileKeyword Parentheses(ExpressionInYield) StatementYield) / (ForKeyword Parentheses(VarKeyword VariableDeclarationListYield Semicolon ExpressionInYield? Semicolon ExpressionInYield?) StatementYield) / (ForKeyword Parentheses(VarKeyword ForBindingYield ((InKeyword ExpressionInYield) / (OfKeyword AssignmentExpressionInYield))) StatementYield) / (ForKeyword Parentheses(ForDeclarationYield InKeyword ExpressionInYield) StatementYield) / (ForKeyword Parentheses(ForDeclarationYield OfKeyword AssignmentExpressionInYield) StatementYield) / (ForKeyword Parentheses(LexicalDeclarationYield ExpressionInYield? Semicolon ExpressionInYield?) StatementYield) / (ForKeyword Parentheses(!("let" "[") ExpressionYield? Semicolon ExpressionInYield? Semicolon ExpressionInYield?) StatementYield) / (ForKeyword Parentheses(!("let" "[") LeftHandSideExpressionYield InKeyword ExpressionInYield) StatementYield) / (ForKeyword Parentheses(!("let") LeftHandSideExpressionYield OfKeyword AssignmentExpressionInYield) StatementYield) IterationStatementReturn < / (DoKeyword StatementReturn WhileKeyword Parentheses(ExpressionIn) Semicolon) / (WhileKeyword Parentheses(ExpressionIn) StatementReturn) / (ForKeyword Parentheses(VarKeyword VariableDeclarationList Semicolon ExpressionIn? Semicolon ExpressionIn?) StatementReturn) / (ForKeyword Parentheses(VarKeyword ForBinding ((InKeyword ExpressionIn) / (OfKeyword AssignmentExpressionIn))) StatementReturn) / (ForKeyword Parentheses(ForDeclaration InKeyword ExpressionIn) StatementReturn) / (ForKeyword Parentheses(ForDeclaration OfKeyword AssignmentExpressionIn) StatementReturn) / (ForKeyword Parentheses(LexicalDeclaration ExpressionIn? Semicolon ExpressionIn?) StatementReturn) / (ForKeyword Parentheses(!("let" "[") Expression? Semicolon ExpressionIn? Semicolon ExpressionIn?) StatementReturn) / (ForKeyword Parentheses(!("let" "[") LeftHandSideExpression InKeyword ExpressionIn) StatementReturn) / (ForKeyword Parentheses(!("let") LeftHandSideExpression OfKeyword AssignmentExpressionIn) StatementReturn) IterationStatementYieldReturn < / (DoKeyword StatementYieldReturn WhileKeyword Parentheses(ExpressionInYield) Semicolon) / (WhileKeyword Parentheses(ExpressionInYield) StatementYieldReturn) / (ForKeyword Parentheses(VarKeyword VariableDeclarationListYield Semicolon ExpressionInYield? Semicolon ExpressionInYield?) StatementYieldReturn) / (ForKeyword Parentheses(VarKeyword ForBindingYield ((InKeyword ExpressionInYield) / (OfKeyword AssignmentExpressionInYield))) StatementYieldReturn) / (ForKeyword Parentheses(ForDeclarationYield InKeyword ExpressionInYield) StatementYieldReturn) / (ForKeyword Parentheses(ForDeclarationYield OfKeyword AssignmentExpressionInYield) StatementYieldReturn) / (ForKeyword Parentheses(LexicalDeclarationYield ExpressionInYield? Semicolon ExpressionInYield?) StatementYieldReturn) / (ForKeyword Parentheses(!("let" "[") ExpressionYield? Semicolon ExpressionInYield? Semicolon ExpressionInYield?) StatementYieldReturn) / (ForKeyword Parentheses(!("let" "[") LeftHandSideExpressionYield InKeyword ExpressionInYield) StatementYieldReturn) / (ForKeyword Parentheses(!("let") LeftHandSideExpressionYield OfKeyword AssignmentExpressionInYield) StatementYieldReturn)

ForDeclaration < LetOrConst ForBinding ForDeclarationYield < LetOrConst ForBindingYield ForBinding < BindingPattern / BindingIdentifier ForBindingYield < BindingPatternYield / BindingIdentifierYield ContinueStatement <- (("continue" !(IdentifierStart) Spaces LabelIdentifier) / ("continue" !(IdentifierStart / IdentifierPart))) Spaces :";"? ContinueStatementYield <- (("continue" !(IdentifierStart) Spaces LabelIdentifierYield) / ("continue" !(IdentifierStart / IdentifierPart))) Spaces :";"? BreakStatement <- (("break" !(IdentifierStart) Spaces LabelIdentifier) / ("break" !(IdentifierStart / IdentifierPart))) Spaces :";"? BreakStatementYield <- (("break" !(IdentifierStart) Spaces LabelIdentifierYield) / ("break" !(IdentifierStart / IdentifierPart))) Spaces :";"? ReturnStatement <- (("return" !(IdentifierStart) Spaces ExpressionIn) / ("return" !(IdentifierStart / IdentifierPart))) Spaces :";"? ReturnStatementYield <- (("return" !(IdentifierStart) Spaces ExpressionInYield) / ("return" !(IdentifierStart / IdentifierPart))) Spaces :";"?

WithStatement < :"with" Parentheses(ExpressionIn) Statement WithStatementYield < :"with" Parentheses(ExpressionInYield) StatementYield WithStatementReturn < :"with" Parentheses(ExpressionIn) StatementReturn WithStatementYieldReturn < :"with" Parentheses(ExpressionInYield) StatementYieldReturn

SwitchStatement < :"switch" Parentheses(ExpressionIn) CaseBlock SwitchStatementYield < :"switch" Parentheses(ExpressionInYield) CaseBlockYield SwitchStatementReturn < :"switch" Parentheses(ExpressionIn) CaseBlockReturn SwitchStatementYieldReturn < :"switch" Parentheses(ExpressionInYield) CaseBlockYieldReturn

CaseBlock < CurlyBrackets(CaseClauses? DefaultClause? CaseClauses?) CaseBlockYield < CurlyBrackets(CaseClausesYield? DefaultClauseYield? CaseClausesYield?) CaseBlockReturn < CurlyBrackets(CaseClausesReturn? DefaultClauseReturn? CaseClausesReturn?) CaseBlockYieldReturn < CurlyBrackets(CaseClausesYieldReturn? DefaultClauseYieldReturn? CaseClausesYieldReturn?)

CaseClauses < CaseClause+ CaseClausesYield < CaseClauseYield+ CaseClausesReturn < CaseClauseReturn+ CaseClausesYieldReturn < CaseClauseYieldReturn+

CaseClause < :"case" ExpressionIn :":" StatementList? CaseClauseYield < :"case" ExpressionInYield :":" StatementListYield? CaseClauseReturn < :"case" ExpressionIn :":" StatementListReturn? CaseClauseYieldReturn < :"case" ExpressionInYield :":" StatementListYieldReturn?

DefaultClause < :"default" :":" StatementList? DefaultClauseYield < :"default" :":" StatementListYield? DefaultClauseReturn < :"default" :":" StatementListReturn? DefaultClauseYieldReturn < :"default" :":" StatementListYieldReturn?

LabelledStatement < LabelIdentifier :":" LabelledItem LabelledStatementYield < LabelIdentifierYield :":" LabelledItemYield LabelledStatementReturn < LabelIdentifier :":" LabelledItemReturn LabelledStatementYieldReturn < LabelIdentifierYield :":" LabelledItemYieldReturn

LabelledItem < FunctionDeclaration / Statement LabelledItemYield < FunctionDeclarationYield / StatementYield LabelledItemReturn < FunctionDeclaration / StatementReturn LabelledItemYieldReturn < FunctionDeclarationYield / StatementYieldReturn

ThrowStatement <- "throw" !(IdentifierStart) Spaces ExpressionIn Spaces :";"? ThrowStatementYield <- "throw" !(IdentifierStart) Spaces ExpressionInYield Spaces :";"?

TryStatement < :"try" %Block Catch? Finally? TryStatementYield < :"try" %BlockYield CatchYield? FinallyYield? TryStatementReturn < :"try" %BlockReturn CatchReturn? FinallyReturn? TryStatementYieldReturn < :"try" %BlockYieldReturn CatchYieldReturn? FinallyYieldReturn?

Catch < :"catch" Parentheses(CatchParameter) %Block CatchYield < :"catch" Parentheses(CatchParameterYield) %BlockYield CatchReturn < :"catch" Parentheses(CatchParameter) %BlockReturn CatchYieldReturn < :"catch" Parentheses(CatchParameterYield) %BlockYieldReturn

Finally < :"finally" %Block FinallyYield < :"finally" %BlockYield FinallyReturn < :"finally" %BlockReturn FinallyYieldReturn < :"finally" %BlockYieldReturn

CatchParameter < BindingPattern / BindingIdentifier CatchParameterYield < BindingPatternYield / BindingIdentifierYield

DebuggerStatement < :"debugger" :";" CurlyBrackets(Content) < "{" Content "}" Parentheses(Content) < "(" Content ")" SquareBrackets(Content) < "[" Content "]"

FunctionDeclaration < (:"function" BindingIdentifier Parentheses(FormalParameters) CurlyBrackets(FunctionBody)) FunctionDeclarationYield < (:"function" BindingIdentifierYield Parentheses(FormalParameters) CurlyBrackets(FunctionBody)) FunctionDeclarationDefault < (:"function" BindingIdentifier Parentheses(FormalParameters) CurlyBrackets(FunctionBody)) / (:"function" Parentheses(FormalParameters) CurlyBrackets(FunctionBody)) FunctionDeclarationYieldDefault < (:"function" BindingIdentifierYield Parentheses(FormalParameters) CurlyBrackets(FunctionBody)) / (:"function" Parentheses(FormalParameters) CurlyBrackets(FunctionBody))

FunctionExpression < "function" BindingIdentifier? Parentheses(FormalParameters) CurlyBrackets(FunctionBody)

StrictFormalParameters < FormalParameters StrictFormalParametersYield < FormalParametersYield FormalParameters < FormalParameterList? FormalParametersYield < FormalParameterListYield? FormalParameterList < FunctionRestParameter / (FormalsList (:"," FunctionRestParameter)?) FormalParameterListYield < FunctionRestParameterYield / (FormalsListYield (:"," FunctionRestParameterYield)?) FormalsList < FormalParameter (:"," FormalParameter)* FormalsListYield < FormalParameterYield (:"," FormalParameterYield)* FunctionRestParameter < BindingRestElement FunctionRestParameterYield < BindingRestElementYield FormalParameter < BindingElement FormalParameterYield < BindingElementYield FunctionBody < FunctionStatementList FunctionBodyYield < FunctionStatementListYield FunctionStatementList < StatementListReturn? FunctionStatementListYield < StatementListYieldReturn? ArrowFunction <- ArrowParameters Spaces "=>" Spacing ConciseBody ArrowFunctionIn <- ArrowParameters Spaces "=>" Spacing ConciseBodyIn ArrowFunctionYield <- ArrowParametersYield Spaces "=>" Spacing ConciseBody ArrowFunctionInYield <- ArrowParametersYield Spaces "=>" Spacing ConciseBodyIn ArrowParameters < BindingIdentifier / CoverParenthesizedExpressionAndArrowParameterList ArrowParametersYield < BindingIdentifierYield / CoverParenthesizedExpressionAndArrowParameterListYield ConciseBody < (!("{") AssignmentExpression) / CurlyBrackets(FunctionBody) ConciseBodyIn < (!("{") AssignmentExpressionIn) / CurlyBrackets(FunctionBody)

ArrowFormalParameters < Parentheses(StrictFormalParameters) ArrowFormalParametersYield < Parentheses(StrictFormalParametersYield) MethodDefinition < GeneratorMethod / ("get" PropertyName "(" ")" CurlyBrackets(FunctionBody)) / ("set" PropertyName Parentheses(PropertySetParameterList) CurlyBrackets(FunctionBody)) / (PropertyName Parentheses(StrictFormalParameters) CurlyBrackets(FunctionBody)) MethodDefinitionYield < GeneratorMethodYield / ("get" PropertyNameYield "(" ")" CurlyBrackets(FunctionBody)) / ("set" PropertyNameYield Parentheses(PropertySetParameterList) CurlyBrackets(FunctionBody)) / (PropertyNameYield Parentheses(StrictFormalParameters) CurlyBrackets(FunctionBody)) PropertySetParameterList < FormalParameter GeneratorMethod < :"*" PropertyName Parentheses(StrictFormalParameters) CurlyBrackets(GeneratorBody) GeneratorMethodYield < :"*" PropertyNameYield Parentheses(StrictFormalParametersYield) CurlyBrackets(GeneratorBody) GeneratorDeclaration < :"function" :"*" BindingIdentifier Parentheses(FormalParameters) CurlyBrackets(GeneratorBody) GeneratorDeclarationYield < :"function" :"*" BindingIdentifierYield Parentheses(FormalParametersYield) CurlyBrackets(GeneratorBody) GeneratorDeclarationDefault < :"function" :"*" BindingIdentifier? Parentheses(FormalParameters) CurlyBrackets(GeneratorBody) GeneratorDeclarationYieldDefault < :"function" :"*" BindingIdentifierYield? Parentheses(FormalParametersYield) CurlyBrackets(GeneratorBody) GeneratorExpression < :"function" :"*" BindingIdentifierYield? Parentheses(FormalParametersYield) CurlyBrackets(GeneratorBody) GeneratorBody < FunctionBodyYield YieldExpression <- ("yield" Spaces ("*")? AssignmentExpressionYield) / "yield" YieldExpressionIn <- ("yield" Spaces ("*")? AssignmentExpressionInYield) / "yield" ClassDeclaration <- :"class" !(IdentifierStart / IdentifierPart) Spaces BindingIdentifier Spaces ClassTail ClassDeclarationYield <- :"class" !(IdentifierStart / IdentifierPart) Spaces BindingIdentifierYield Spaces ClassTailYield ClassDeclarationDefault <- :"class" !(IdentifierStart / IdentifierPart) Spaces BindingIdentifier? Spaces ClassTail ClassDeclarationYieldDefault <- :"class" !(IdentifierStart / IdentifierPart) Spaces BindingIdentifierYield? Spaces ClassTailYield ClassExpression <- :"class" !(IdentifierStart / IdentifierPart) Spaces BindingIdentifier? Spaces ClassTail ClassExpressionYield <- :"class" !(IdentifierStart / IdentifierPart) Spaces BindingIdentifierYield? Spaces ClassTailYield ClassTail < ClassHeritage? CurlyBrackets(ClassBody?) ClassTailYield < ClassHeritageYield? CurlyBrackets(ClassBodyYield?) ClassHeritage < :"extends" LeftHandSideExpression ClassHeritageYield < :"extends" LeftHandSideExpressionYield ClassBody < ClassElementList ClassBodyYield < ClassElementListYield ClassElementList < ClassElement+ ClassElementListYield < ClassElementYield+ ClassElement < ("static" MethodDefinition) / :";" / MethodDefinition ClassElementYield < ("static" MethodDefinitionYield) / :";" / MethodDefinitionYield

JSXElement < "<" JSXTag JSXAttributeSet ("/>" / (">" JSXContent "</" JSXTag ">")) JSXAttributeSet < JSXAttribute* JSXAttribute < CurlyBrackets(SpreadElement) / (JSXKey ("=" JSXValue)?) JSXKey <~ (!("=" / "/>" / ">") .)+ JSXInlineJS < ArrowFunction / ConditionalExpression JSXValue < StringLiteral / JSXCodeBlock JSXCodeBlock < CurlyBrackets(JSXInlineJS) JSXJavaScriptValue < CurlyBrackets(!JSXElement JSXInlineJS) JSXTag <~ [a-zA-Z][a-zA-Z0-9]* JSXContent < (JSXElement / JSXCodeBlock / JSXContentText)* JSXContentText <~ (!"</" SourceCharacter)*

Meta