-
-
Save ryanjdew/7f4b0fa81c1aa78ceaa90f4824a0cce5 to your computer and use it in GitHub Desktop.
ES6 bnf grammer - See https://avdg.github.io/es6.xhtml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* ebnf file for es 6 - MAY CONTAIN ERRORS / DISAMBIGUITY */ | |
| /* Edited by @ryanjdew for compatiblity with REx Parser: es6.ebnf -ll 1 -backtrack -javascript -faster */ | |
| Program ::= (Shebang? Grammar+|Script|Module) EOF | |
| Grammar ::= Statement | |
| /* Expressions */ | |
| IdentifierReference ::= Identifier | /* [~Yield] */ "yield" | |
| BindingIdentifier ::= Identifier | /* [~Yield] */ "yield" | |
| LabelIdentifier ::= Identifier | /* [~Yield] */ "yield" | |
| Identifier ::= /* IdentifierName but not ReservedWord */ IdentifierName | |
| PrimaryExpression ::= "this" | IdentifierReference | Literal | ArrayLiteral | ObjectLiteral | FunctionExpression | ClassExpression | GeneratorExpression | RegularExpressionLiteral | | |
| TemplateLiteral | CoverParenthesizedExpressionAndArrowParameterList | |
| CoverParenthesizedExpressionAndArrowParameterList ::= "(" Expression ")" | "(" ")" | "(" "..." BindingIdentifier ")" | "(" Expression "," "..." BindingIdentifier ")" | |
| Literal ::= NullLiteral | BooleanLiteral | NumbericLiteral | StringLiteral | |
| ArrayLiteral ::= "[" Elision? "]" | "[" ElementList "]" | "[" ElementList "," Elision? "]" | |
| ElementList ::= Element ("," Element)? | |
| Element ::= (Elision? AssignmentExpression | Elision? SpreadElement | Elision? AssignmentExpression | Elision? SpreadElement) | |
| Elision ::= "," | |
| SpreadElement ::= "..." AssignmentExpression | |
| ObjectLiteral ::= "{" "}" | "{" PropertyDefinitionList "}" | "{" PropertyDefinitionList "," "}" | |
| PropertyDefinitionList ::= PropertyDefinition ("," PropertyDefinition)* | |
| PropertyDefinition ::= IdentifierReference | CoverInitializedName | PropertyName ":" AssignmentExpression | MethodDefinition | |
| PropertyName ::= LiteralPropertyName | ComputedPropertyName | |
| LiteralPropertyName ::= IdentifierName | StringLiteral | NumericLiteral | |
| ComputedPropertyName ::= "[" AssignmentExpression "]" | |
| CoverInitializedName ::= IdentifierReference Initializer | |
| Initializer ::= "=" AssignmentExpression | |
| TemplateLiteral ::= NoSubstitutionTemplate | TemplateHead Expression TemplateSpans | |
| TemplateSpans ::= TemplateTail | TemplateMiddleList TemplateTail | |
| TemplateMiddleList ::= (TemplateMiddle Expression)+ | |
| MemberExpression ::= ("new"? (PrimaryExpression | "[" Expression "]" | "." IdentifierName | TemplateLiteral | |
| | SuperProperty | MetaProperty | Arguments))+ | |
| SuperProperty ::= "super" "[" Expression "]" | "super" "." IdentifierName | |
| MetaProperty ::= NewTarget | |
| NewTarget ::= "new" "." "target" | |
| NewExpression ::= MemberExpression | "new" NewExpression | |
| CallExpression ::= ((MemberExpression Arguments | SuperCall)( Arguments | "[" Expression "]" | "." IdentifierName | TemplateLiteral)?)+ | |
| SuperCall ::= "super" Arguments | |
| Arguments ::= "(" ")" | "(" ArgumentList ")" | |
| ArgumentList ::= ((AssignmentExpression | "..." AssignmentExpression)("," (AssignmentExpression | "..." AssignmentExpression)*)*)+ | |
| LeftHandSideExpression ::= NewExpression | CallExpression | |
| PostfixExpression ::= LeftHandSideExpression | LeftHandSideExpression /* no LineTerminator here */ "++" | LeftHandSideExpression /* no LineTerminator here */ "--" | |
| UnaryExpression ::= PostfixExpression | "delete" UnaryExpression | "void" UnaryExpression | "typeof" UnaryExpression | |
| | "++" UnaryExpression | "--" UnaryExpression | "+" UnaryExpression | "-" UnaryExpression | "~" UnaryExpression | "!" UnaryExpression | |
| MultiplicativeExpression | |
| ::= UnaryExpression ( MultiplicativeOperator UnaryExpression )* | |
| MultiplicativeOperator ::= ( '*' | '/' | '%') | |
| AdditiveExpression | |
| ::= MultiplicativeExpression ( ( '+' | '-' ) MultiplicativeExpression )* | |
| ShiftExpression | |
| ::= AdditiveExpression ( ( '<<' | '>>' | '>>>' ) AdditiveExpression )* | |
| RelationalExpression | |
| ::= ShiftExpression ( ( '<' | '>' | '<=' | '>=' | 'instanceof' | 'in' ) ShiftExpression )* | |
| EqualityExpression | |
| ::= RelationalExpression ( ( '==' | '!=' | '===' | '!==' ) RelationalExpression )* | |
| BitwiseORExpression | |
| ::= BitwiseXORExpression ( '|' BitwiseXORExpression )* | |
| BitwiseXORExpression | |
| ::= BitwiseANDExpression ( '^' BitwiseANDExpression )* | |
| BitwiseANDExpression | |
| ::= EqualityExpression ( '&' EqualityExpression )* | |
| LogicalORExpression | |
| ::= LogicalANDExpression ( '||' LogicalANDExpression )* | |
| LogicalANDExpression | |
| ::= BitwiseORExpression ( '&&' BitwiseORExpression )* | |
| ConditionalExpression ::= LogicalORExpression | |
| | LogicalORExpression "?" AssignmentExpression ":" AssignmentExpression | |
| AssignmentExpression ::= ConditionalExpression | |
| | YieldExpression | |
| | ArrowFunction | |
| | LeftHandSideExpression "=" AssignmentExpression | |
| | LeftHandSideExpression AssignmentOperator AssignmentExpression | |
| AssignmentOperator ::= "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | ">>>=" | "&=" | "^=" | "|=" | |
| Expression | |
| ::= AssignmentExpression ( ',' AssignmentExpression )* | |
| /* Statements */ | |
| Statement ::= BlockStatement | VariableStatement | EmptyStatement | ExpressionStatement | IfStatement | |
| | BreakableStatement | ContinueStatement | BreakStatement | ReturnStatement | WithStatement | |
| | LabelledStatement | ThrowStatement | TryStatement | DebuggerStatement | |
| Declaration ::= HoistableDeclaration | ClassDeclaration | LexicalDeclaration | |
| HoistableDeclaration ::= FunctionDeclaration | GeneratorDeclaration | |
| BreakableStatement ::= IterationStatement | SwitchStatement | |
| BlockStatement ::= Block | |
| Block ::= "{" StatementList? "}" | |
| StatementList ::= StatementListItem+ | |
| StatementListItem ::= Statement | Declaration | |
| LexicalDeclaration ::= LetOrConst BindingList | |
| LetOrConst ::= "let" | "const" | |
| BindingList ::= LexicalBinding ("," LexicalBinding)* | |
| LexicalBinding ::= BindingIdentifier Initializer? | BindingPattern Initializer | |
| VariableStatement ::= "var" VariableDeclarationList | |
| VariableDeclarationList ::= VariableDeclaration ("," VariableDeclaration)* | |
| VariableDeclaration ::= BindingIdentifier Initializer? | BindingPattern Initializer | |
| BindingPattern ::= ObjectBindingPattern | ArrayBindingPattern | |
| ObjectBindingPattern ::= "{" "}" | "{" BindingPropertyList "}" | "{" BindingPropertyList "," "}" | |
| ArrayBindingPattern ::= "[" Elision? BindingRestElement? "]" | "[" BindingElementList "]" | "[" BindingElementList "," Elision? BindingRestElement? "]" | |
| BindingPropertyList ::= BindingProperty+ | |
| BindingElementList ::= BindingElisionElement ("," BindingElisionElement)* | |
| BindingElisionElement ::= Elision? BindingElement | |
| BindingProperty ::= SingleNameBinding | PropertyName ":" BindingElement | |
| BindingElement ::= SingleNameBinding | BindingPattern Initializer? | |
| SingleNameBinding ::= BindingIdentifier Initializer? | |
| BindingRestElement ::= "..." BindingIdentifier | |
| EmptyStatement ::= ";" | |
| ExpressionStatement ::= /* [lookahead ∉ {{, function, class, let [}] */ Expression ";" | |
| IfStatement ::= "if" "(" Expression ")" Statement "else" Statement | |
| | "if" "(" Expression ")" Statement | |
| IterationStatement ::= "do" Statement "while" "(" Expression ")" ";" | |
| | "while" "(" Expression ")" Statement | |
| | "for" "(" /* [lookahead ∉ {let [}] */ Expression? ";" Expression? ";" Expression? ")" Statement | |
| | "for" "(" "var" VariableDeclarationList ";" Expression? ";" Expression? ")" Statement | |
| | "for" "(" LexicalDeclaration Expression? ";" Expression? ";" Expression? ")" Statement | |
| | "for" "(" /* [lookahead ∉ {let [}] */ LeftHandSideExpression "in" Expression ")" Statement | |
| | "for" "(" "var" ForBinding "in" Expression ")" Statement | |
| | "for" "(" ForDeclaration "in" Expression ")" Statement | |
| | "for" "(" /* [lookahead ∉ {let [}] */ LeftHandSideExpression "of" AssignmentExpression ")" Statement | |
| | "for" "(" "var" ForBinding "of" AssignmentExpression ")" Statement | |
| | "for" "(" LexicalDeclaration Expression "of" AssignmentExpression ")" Statement | |
| ForDeclaration ::= LetOrConst ForBinding | |
| ForBinding ::= BindingIdentifier | BindingPattern | |
| ContinueStatement ::= "continue" ";" | "continue" /* no LineTerminator here */ LabelIdentifier ";" | |
| BreakStatement ::= "break" ";" | "break" /* no LineTerminator here */ LabelIdentifier ";" | |
| ReturnStatement ::= "return" ";" | "return" /* no LineTerminator here */ Expression ";" | |
| WithStatement ::= "with" "(" Expression ")" Statement | |
| SwitchStatement ::= "switch" "(" Expression ")" CaseBlock | |
| CaseBlock ::= "{" CaseClauses? "}" | "{" CaseClauses? DefaultClause CaseClauses? "}" | |
| CaseClauses ::= CaseClause+ | |
| CaseClause ::= "case" Expression ":" StatementList? | |
| DefaultClause ::= "default" ":" StatementList? | |
| LabelledStatement ::= LabelIdentifier ":" LabelledItem | |
| LabelledItem ::= Statement | FunctionDeclaration | |
| ThrowStatement ::= "throw" /* no LineTerminator here */ Expression ";" | |
| TryStatement ::= "try" Block Catch | "try" Block Finally | "try" Block Catch Finally | |
| Catch ::= "catch" "(" CatchParameter ")" Block | |
| Finally ::= "finally" Block | |
| CatchParameter ::= BindingIdentifier | BindingPattern | |
| DebuggerStatement ::= "debugger" ";" | |
| /* Functions and classes */ | |
| FunctionDeclaration ::= "function" BindingIdentifier "(" FormalParameters ")" "{" FunctionBody "}" | |
| | /* [+Default] */ "function" "(" FormalParameters ")" "{" FunctionBody "}" | |
| FunctionExpression ::= "function" BindingIdentifier? "(" FormalParameters ")" "{" FunctionBody "}" | |
| StrictFormalParameters ::= FormalParameters | |
| FormalParameters ::= | FormalParameterList | |
| FormalParameterList ::= FunctionRestParameter | FormalsList | FormalsList "," FormalParameter | |
| FormalsList ::= FormalParameter ("," FormalParameter)* | |
| FunctionRestParameter ::= BindingRestElement | |
| FormalParameter ::= BindingElement | |
| FunctionBody ::= FunctionStatementList | |
| FunctionStatementList ::= StatementList? | |
| ArrowFunction ::= ArrowParameters /* no LineTerminator here */ "=>" ConciseBody | |
| ArrowParameters ::= BindingIdentifier | CoverParenthesizedExpressionAndArrowParameterList | |
| ConciseBody ::= /* [lookahead ≠ { ] */ AssignmentExpression | "{" FunctionBody "}" | |
| MethodDefinition ::= PropertyName "(" StrictFormalParameters ")" "{" FunctionBody "}" | |
| | GeneratorMethod | |
| | "get" PropertyName "(" ")" "{" FunctionBody "}" | |
| | "set" PropertyName "(" PropertySetParameterList ")" "{" FunctionBody "}" | |
| PropertySetParameterList ::= FormalParameter | |
| GeneratorMethod ::= "*" PropertyName "(" StrictFormalParameters ")" "{" GeneratorBody "}" | |
| GeneratorDeclaration ::= "function" "*" BindingIdentifier "(" FormalParameters ")" "{" GeneratorBody "}" | |
| | /* [+Default] */ "function" "*" "(" FormalParameters ")" "{" GeneratorBody "}" | |
| GeneratorExpression ::= "function" "*" BindingIdentifier? "(" FormalParameters ")" "{" GeneratorBody "}" | |
| GeneratorBody ::= FunctionBody | |
| YieldExpression ::= "yield" | |
| | "yield" /* no LineTerminator here */ AssignmentExpression | |
| | "yield" /* no LineTerminator here */ "*" AssignmentExpression | |
| ClassDeclaration ::= "class" BindingIdentifier? ClassTail | |
| | /* [+Default] */ "class" ClassTail | |
| ClassExpression ::= "class" BindingIdentifier? ClassTail | |
| ClassTail ::= ClassHeritage? "{" ClassBody? "}" | |
| ClassHeritage ::= "extends" LeftHandSideExpression | |
| ClassBody ::= ClassElementList | |
| ClassElementList ::= ClassElement+ | |
| ClassElement ::= MethodDefinition | |
| | "static" MethodDefinition | |
| | ";" | |
| /* Scripts and Modules */ | |
| Script ::= ScriptBody | |
| ScriptBody ::= StatementList | |
| Module ::= ModuleBody? | |
| ModuleBody ::= ModuleItemList | |
| ModuleItemList ::= ModuleItem+ | |
| ModuleItem ::= ImportDeclaration | |
| | ExportDeclaration | |
| | StatementListItem | |
| ImportDeclaration ::= "import" ImportClause FromClause ";" | |
| | "import" ModuleSpecifier ";" | |
| ImportClause ::= ImportedDefaultBinding | |
| | NameSpaceImport | |
| | NamedImports | |
| | ImportedDefaultBinding "," NameSpaceImport | |
| | ImportedDefaultBinding "," NamedImports | |
| ImportedDefaultBinding ::= ImportedBinding | |
| NameSpaceImport ::= "*" "as" ImportedBinding | |
| NamedImports ::= "{" "}" | |
| FromClause ::= "from" ModuleSpecifier | |
| ModuleSpecifier ::= StringLiteral | |
| ImportedBinding ::= BindingIdentifier | |
| ExportDeclaration ::= "export" "*" FromClause ";" | |
| | "export" ExportClause FromClause ";" | |
| | "export" ExportClause ";" | |
| | "export" VariableStatement | |
| | "export" Declaration | |
| | "export" "default" HoistableDeclaration | |
| | "export" "default" ClassDeclaration | |
| | "export" "default" /* [lookahead ∉ {function, class}] */ AssignmentExpression ";" | |
| ExportClause ::= "{" "}" | |
| | "{" ExportList "}" | |
| | "{" ExportList "," "}" | |
| ExportList ::= ExportSpecifier ("," ExportSpecifier)* | |
| ExportSpecifier ::= IdentifierName | |
| | IdentifierName "as" IdentifierName | |
| /* Number Conversions */ | |
| StrWhiteSpace ::= StrWhiteSpaceChar StrWhiteSpace? | |
| StrWhiteSpaceChar ::= WhiteSpace | |
| | LineTerminator | |
| /* Additional syntax: (non strict) Numeric Literals */ | |
| NumericLiteral ::= DecimalLiteral | |
| | BinaryIntegerLiteral | |
| | OctalIntegerLiteral | |
| | HexIntegerLiteral | |
| | LegacyOctalIntegerLiteral | |
| LegacyOctalIntegerLiteral ::= "0" OctalDigit | |
| | NonZeroDigit DecimalDigits? | |
| | NonOctalDecimalIntegerLiteral | |
| NonOctalDecimalIntegerLiteral ::= ("0" NonOctalDigit | |
| | LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit) DecimalDigit? | |
| LegacyOctalLikeDecimalIntegerLiteral ::= "0" OctalDigit+ | |
| NonOctalDigit ::= "8" | |
| | "9" | |
| IdentifierName | |
| ::= IdentifierName^Token | |
| | 'get' | |
| | 'set' | |
| <?TOKENS?> | |
| Shebang ::= '#!' ( SourceCharacter - LineTerminator )* | |
| EOF ::= $ | |
| PatternCharacter ::= SourceCharacter - SyntaxCharacter | |
| IdentityEscape ::= SyntaxCharacter | |
| | "/" | |
| | SourceCharacter - UnicodeIDContinue | |
| SingleLineNotAsteriskChar ::= SourceCharacter - ('*'| LineTerminator) | |
| /* Also using, but already declared: DecimalDigits DecimalDigit ExponentPart ExponentIndicator SignedInteger HexIntegerLiteral HexDigit */ | |
| /* Universal Resource Identifier Character Classes */ | |
| uri ::= uriCharacters? | |
| uriCharacters ::= uriCharacter uriCharacters? | |
| uriCharacter ::= uriReserved | |
| | uriUnescaped | |
| | uriEscaped | |
| uriReserved ::= ( ';' | '/' | '?' | ':' | '@' | '&' | '=' | '+' | '$' | ',') | |
| uriUnescaped ::= uriAlpha | |
| | DecimalDigit | |
| | uriMark | |
| uriEscaped ::= "%" HexDigit HexDigit | |
| uriAlpha ::= ('a' |'b' |'c' |'d' |'e' |'f' |'g' |'h' |'i' |'j' |'k' |'l' |'m' |'n' |'o' |'p' |'q' |'r' |'s' |'t' |'u' |'v' |'w' |'x' |'y' |'z'|'A' |'B' |'C' |'D' |'E' |'F' |'G' |'H' |'I' |'J' |'K' |'L' |'M' |'N' |'O' |'P' |'Q' |'R' |'S' |'T' |'U' |'V' |'W' |'X' |'Y' |'Z') | |
| uriMark ::= ( '-' | '_' | '.' | '!' | '~' | '*' | "'" | '(' | ')' ) | |
| /* Additional syntax: Regular Expressions Patterns */ | |
| Term ::= ExtendedTerm | |
| | Assertion | |
| | Atom | |
| | Atom Quantifier | |
| ExtendedTerm ::= Assertion | |
| | AtomNoBrace Quantifier | |
| | Atom | |
| | QuantifiableAssertion Quantifier | |
| AtomNoBrace ::= PatternCharacterNoBrace | |
| | "." | |
| | "\" AtomEscape | |
| | CharacterClass | |
| | "(" Disjunction ")" | |
| | "(" "?" ":" Disjunction ")" | |
| /* DUP | |
| Atom ::= PatternCharacter | |
| | "." | |
| | "\" AtomEscape | |
| | CharacterClass | |
| | "(" Disjunction ")" | |
| | "(" "?" ":" Disjunction ")" */ | |
| PatternCharacterNoBrace ::= /* SourceCharacter but not one of ^ $ \ . * + ? ( ) [ ] { } | */ [^^$\.*+?()[#x005D{}|] | |
| QuantifiableAssertion ::= "(" "?" "=" Disjunction ")" | |
| | "(" "?" "!" Disjunction ")" | |
| Assertion ::= "^" | |
| | "$" | |
| | "\" "b" | |
| | "\" "B" | |
| | "(" "?" "=" Disjunction ")" | |
| | "(" "?" "!" Disjunction ")" | |
| | QuantifiableAssertion | |
| AtomEscape ::= DecimalEscape | |
| | CharacterEscape | |
| | CharacterClassEscape | |
| | DecimalEscape /* but only if the integer value of DecimalEscape is <= NCapturingParens */ | |
| | CharacterClassEscape | |
| | CharacterEscape | |
| CharacterEscape ::= ControlEscape | |
| | "c" ControlLetter | |
| | HexEscapeSequence | |
| | RegExpUnicodeEscapeSequence | |
| | LegacyOctalEscapeSequence | |
| | IdentityEscape | |
| NonemptyClassRanges ::= ClassAtom | |
| | ClassAtom NonemptyClassRangesNoDash | |
| | ClassAtom "-" ClassAtom ClassRanges | |
| | ClassAtomInRange "-" ClassAtomInRange ClassRanges | |
| NonemptyClassRangesNoDash ::= ClassAtom | |
| | ClassAtomNoDash NonemptyClassRangesNoDash | |
| | ClassAtomNoDash "-" ClassAtom ClassRanges | |
| | ClassAtomNoDashInRange "-" ClassAtomInRange ClassRanges | |
| ClassAtom ::= "-" | |
| | ClassAtomNoDashInRange | |
| ClassAtomNoDash ::= /* SourceCharacter but not one of \ or ] or - */ [^\#x005D-] | |
| | "\" ClassEscape | |
| ClassAtomInRange ::= "-" | |
| | ClassAtomNoDashInRange | |
| ClassAtomNoDashInRange ::= /* SourceCharacter but not one of \ or ] or - */ [^\#x005D-] | |
| | "\" ClassEscape /* but only if ClassEscape evaluates to a CharSet with exactly one character */ | |
| | "\" IdentityEscape | |
| ClassEscape ::= DecimalEscape | |
| | CharacterEscape | |
| | CharacterClassEscape | |
| | DecimalEscape | |
| | "b" | |
| | CharacterClassEscape | |
| | CharacterEscape | |
| /* Lexical grammer */ | |
| SourceCharacter | |
| ::= [#x0000-#x10FFFF] | |
| InputElementDiv ::= WhiteSpace | LineTerminator | Comment | CommonToken | DivPunctuator | RightBracePunctuator | |
| InputElementRegExp ::= WhiteSpace | LineTerminator | Comment | CommonToken | RightBracePunctuator | RegularExpressionLiteral | |
| InputElementRegExpOrTemplateTail ::= WhiteSpace | LineTerminator | Comment | CommonToken | RegularExpressionLiteral | TemplateSubstitutionTail | |
| InputElementTemplateTail ::= WhiteSpace | LineTerminator | Comment | CommonToken | DivPunctuator | TemplateSubstitutionTail | |
| WhiteSpace ::= "<TAB>" | "<VT>" | "<FF>" | "<SP>" | "<NBSP>" | "<ZWNBSP>" | "<USP>" | |
| LineTerminator ::= "<LF>" | "<CR>" | "<LS>" | "<PS>" /* #x0012 #x0015 #x2028 #x2029 */ | |
| LineTerminatorSequence ::= "<LF>" | "<CR>" "<LF>"? | "<LS>" | "<PS>" | |
| Comment ::= MultiLineComment | SingleLineComment | |
| MultiLineComment ::= "/*" MultiLineCommentChars? "*/" | |
| MultiLineCommentChars ::= MultiLineNotAsteriskChar MultiLineCommentChars? | |
| PostAsteriskCommentChars ::= MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentChars? | "*" PostAsteriskCommentChars? | |
| MultiLineNotAsteriskChar ::= SourceCharacter - '*' | |
| MultiLineNotForwardSlashOrAsteriskChar ::= SourceCharacter - ( '/' | '*' ) | |
| SingleLineComment ::= "/" "/" SingleLineCommentChars? | |
| SingleLineCommentChars ::= SingleLineCommentChar SingleLineCommentChars? | |
| SingleLineCommentChar ::= SourceCharacter - ( #x0012 | #x0015 | #x2028 | #x2029 ) | |
| CommonToken ::= IdentifierName | Punctuator | NumericLiteral | StringLiteral | Template | |
| IdentifierName | |
| ::= IdentifierStart IdentifierPart* | |
| IdentifierStart | |
| ::= UnicodeLetter | |
| | '$' | |
| | '_' | |
| | '\' UnicodeEscapeSequence | |
| UnicodeLetter | |
| ::= [#x0041-#x005A] | |
| | [#x0061-#x007A] | |
| | [#x00C0-#x00D6] | |
| | [#x00D8-#x00F6] | |
| | [#x00F8-#x00FF] | |
| | [#x0100-#x0131] | |
| | [#x0134-#x013E] | |
| | [#x0141-#x0148] | |
| | [#x014A-#x017E] | |
| | [#x0180-#x01C3] | |
| | [#x01CD-#x01F0] | |
| | [#x01F4-#x01F5] | |
| | [#x01FA-#x0217] | |
| | [#x0250-#x02A8] | |
| | [#x02BB-#x02C1] | |
| | #x0386 | |
| | [#x0388-#x038A] | |
| | #x038C | |
| | [#x038E-#x03A1] | |
| | [#x03A3-#x03CE] | |
| | [#x03D0-#x03D6] | |
| | #x03DA | |
| | #x03DC | |
| | #x03DE | |
| | #x03E0 | |
| | [#x03E2-#x03F3] | |
| | [#x0401-#x040C] | |
| | [#x040E-#x044F] | |
| | [#x0451-#x045C] | |
| | [#x045E-#x0481] | |
| | [#x0490-#x04C4] | |
| | [#x04C7-#x04C8] | |
| | [#x04CB-#x04CC] | |
| | [#x04D0-#x04EB] | |
| | [#x04EE-#x04F5] | |
| | [#x04F8-#x04F9] | |
| | [#x0531-#x0556] | |
| | #x0559 | |
| | [#x0561-#x0586] | |
| | [#x05D0-#x05EA] | |
| | [#x05F0-#x05F2] | |
| | [#x0621-#x063A] | |
| | [#x0641-#x064A] | |
| | [#x0671-#x06B7] | |
| | [#x06BA-#x06BE] | |
| | [#x06C0-#x06CE] | |
| | [#x06D0-#x06D3] | |
| | #x06D5 | |
| | [#x06E5-#x06E6] | |
| | [#x0905-#x0939] | |
| | #x093D | |
| | [#x0958-#x0961] | |
| | [#x0985-#x098C] | |
| | [#x098F-#x0990] | |
| | [#x0993-#x09A8] | |
| | [#x09AA-#x09B0] | |
| | #x09B2 | |
| | [#x09B6-#x09B9] | |
| | [#x09DC-#x09DD] | |
| | [#x09DF-#x09E1] | |
| | [#x09F0-#x09F1] | |
| | [#x0A05-#x0A0A] | |
| | [#x0A0F-#x0A10] | |
| | [#x0A13-#x0A28] | |
| | [#x0A2A-#x0A30] | |
| | [#x0A32-#x0A33] | |
| | [#x0A35-#x0A36] | |
| | [#x0A38-#x0A39] | |
| | [#x0A59-#x0A5C] | |
| | #x0A5E | |
| | [#x0A72-#x0A74] | |
| | [#x0A85-#x0A8B] | |
| | #x0A8D | |
| | [#x0A8F-#x0A91] | |
| | [#x0A93-#x0AA8] | |
| | [#x0AAA-#x0AB0] | |
| | [#x0AB2-#x0AB3] | |
| | [#x0AB5-#x0AB9] | |
| | #x0ABD | |
| | #x0AE0 | |
| | [#x0B05-#x0B0C] | |
| | [#x0B0F-#x0B10] | |
| | [#x0B13-#x0B28] | |
| | [#x0B2A-#x0B30] | |
| | [#x0B32-#x0B33] | |
| | [#x0B36-#x0B39] | |
| | #x0B3D | |
| | [#x0B5C-#x0B5D] | |
| | [#x0B5F-#x0B61] | |
| | [#x0B85-#x0B8A] | |
| | [#x0B8E-#x0B90] | |
| | [#x0B92-#x0B95] | |
| | [#x0B99-#x0B9A] | |
| | #x0B9C | |
| | [#x0B9E-#x0B9F] | |
| | [#x0BA3-#x0BA4] | |
| | [#x0BA8-#x0BAA] | |
| | [#x0BAE-#x0BB5] | |
| | [#x0BB7-#x0BB9] | |
| | [#x0C05-#x0C0C] | |
| | [#x0C0E-#x0C10] | |
| | [#x0C12-#x0C28] | |
| | [#x0C2A-#x0C33] | |
| | [#x0C35-#x0C39] | |
| | [#x0C60-#x0C61] | |
| | [#x0C85-#x0C8C] | |
| | [#x0C8E-#x0C90] | |
| | [#x0C92-#x0CA8] | |
| | [#x0CAA-#x0CB3] | |
| | [#x0CB5-#x0CB9] | |
| | #x0CDE | |
| | [#x0CE0-#x0CE1] | |
| | [#x0D05-#x0D0C] | |
| | [#x0D0E-#x0D10] | |
| | [#x0D12-#x0D28] | |
| | [#x0D2A-#x0D39] | |
| | [#x0D60-#x0D61] | |
| | [#x0E01-#x0E2E] | |
| | #x0E30 | |
| | [#x0E32-#x0E33] | |
| | [#x0E40-#x0E45] | |
| | [#x0E81-#x0E82] | |
| | #x0E84 | |
| | [#x0E87-#x0E88] | |
| | #x0E8A | |
| | #x0E8D | |
| | [#x0E94-#x0E97] | |
| | [#x0E99-#x0E9F] | |
| | [#x0EA1-#x0EA3] | |
| | #x0EA5 | |
| | #x0EA7 | |
| | [#x0EAA-#x0EAB] | |
| | [#x0EAD-#x0EAE] | |
| | #x0EB0 | |
| | [#x0EB2-#x0EB3] | |
| | #x0EBD | |
| | [#x0EC0-#x0EC4] | |
| | [#x0F40-#x0F47] | |
| | [#x0F49-#x0F69] | |
| | [#x10A0-#x10C5] | |
| | [#x10D0-#x10F6] | |
| | #x1100 | |
| | [#x1102-#x1103] | |
| | [#x1105-#x1107] | |
| | #x1109 | |
| | [#x110B-#x110C] | |
| | [#x110E-#x1112] | |
| | #x113C | |
| | #x113E | |
| | #x1140 | |
| | #x114C | |
| | #x114E | |
| | #x1150 | |
| | [#x1154-#x1155] | |
| | #x1159 | |
| | [#x115F-#x1161] | |
| | #x1163 | |
| | #x1165 | |
| | #x1167 | |
| | #x1169 | |
| | [#x116D-#x116E] | |
| | [#x1172-#x1173] | |
| | #x1175 | |
| | #x119E | |
| | #x11A8 | |
| | #x11AB | |
| | [#x11AE-#x11AF] | |
| | [#x11B7-#x11B8] | |
| | #x11BA | |
| | [#x11BC-#x11C2] | |
| | #x11EB | |
| | #x11F0 | |
| | #x11F9 | |
| | [#x1E00-#x1E9B] | |
| | [#x1EA0-#x1EF9] | |
| | [#x1F00-#x1F15] | |
| | [#x1F18-#x1F1D] | |
| | [#x1F20-#x1F45] | |
| | [#x1F48-#x1F4D] | |
| | [#x1F50-#x1F57] | |
| | #x1F59 | |
| | #x1F5B | |
| | #x1F5D | |
| | [#x1F5F-#x1F7D] | |
| | [#x1F80-#x1FB4] | |
| | [#x1FB6-#x1FBC] | |
| | #x1FBE | |
| | [#x1FC2-#x1FC4] | |
| | [#x1FC6-#x1FCC] | |
| | [#x1FD0-#x1FD3] | |
| | [#x1FD6-#x1FDB] | |
| | [#x1FE0-#x1FEC] | |
| | [#x1FF2-#x1FF4] | |
| | [#x1FF6-#x1FFC] | |
| | #x2126 | |
| | [#x212A-#x212B] | |
| | #x212E | |
| | [#x2180-#x2182] | |
| | [#x3041-#x3094] | |
| | [#x30A1-#x30FA] | |
| | [#x3105-#x312C] | |
| | [#xAC00-#xD7A3] | |
| | [#x4E00-#x9FA5] | |
| | #x3007 | |
| | [#x3021-#x3029] | |
| IdentifierPart | |
| ::= IdentifierStart | |
| | UnicodeCombiningMark | |
| | UnicodeDigit | |
| | UnicodeConnectorPunctuation | |
| | ZWNJ | |
| | ZWJ | |
| UnicodeCombiningMark | |
| ::= [#x0300-#x0345] | |
| | [#x0360-#x0361] | |
| | [#x0483-#x0486] | |
| | [#x0591-#x05A1] | |
| | [#x05A3-#x05B9] | |
| | [#x05BB-#x05BD] | |
| | #x05BF | |
| | [#x05C1-#x05C2] | |
| | #x05C4 | |
| | [#x064B-#x0652] | |
| | #x0670 | |
| | [#x06D6-#x06DC] | |
| | [#x06DD-#x06DF] | |
| | [#x06E0-#x06E4] | |
| | [#x06E7-#x06E8] | |
| | [#x06EA-#x06ED] | |
| | [#x0901-#x0903] | |
| | #x093C | |
| | [#x093E-#x094C] | |
| | #x094D | |
| | [#x0951-#x0954] | |
| | [#x0962-#x0963] | |
| | [#x0981-#x0983] | |
| | #x09BC | |
| | #x09BE | |
| | #x09BF | |
| | [#x09C0-#x09C4] | |
| | [#x09C7-#x09C8] | |
| | [#x09CB-#x09CD] | |
| | #x09D7 | |
| | [#x09E2-#x09E3] | |
| | #x0A02 | |
| | #x0A3C | |
| | #x0A3E | |
| | #x0A3F | |
| | [#x0A40-#x0A42] | |
| | [#x0A47-#x0A48] | |
| | [#x0A4B-#x0A4D] | |
| | [#x0A70-#x0A71] | |
| | [#x0A81-#x0A83] | |
| | #x0ABC | |
| | [#x0ABE-#x0AC5] | |
| | [#x0AC7-#x0AC9] | |
| | [#x0ACB-#x0ACD] | |
| | [#x0B01-#x0B03] | |
| | #x0B3C | |
| | [#x0B3E-#x0B43] | |
| | [#x0B47-#x0B48] | |
| | [#x0B4B-#x0B4D] | |
| | [#x0B56-#x0B57] | |
| | [#x0B82-#x0B83] | |
| | [#x0BBE-#x0BC2] | |
| | [#x0BC6-#x0BC8] | |
| | [#x0BCA-#x0BCD] | |
| | #x0BD7 | |
| | [#x0C01-#x0C03] | |
| | [#x0C3E-#x0C44] | |
| | [#x0C46-#x0C48] | |
| | [#x0C4A-#x0C4D] | |
| | [#x0C55-#x0C56] | |
| | [#x0C82-#x0C83] | |
| | [#x0CBE-#x0CC4] | |
| | [#x0CC6-#x0CC8] | |
| | [#x0CCA-#x0CCD] | |
| | [#x0CD5-#x0CD6] | |
| | [#x0D02-#x0D03] | |
| | [#x0D3E-#x0D43] | |
| | [#x0D46-#x0D48] | |
| | [#x0D4A-#x0D4D] | |
| | #x0D57 | |
| | #x0E31 | |
| | [#x0E34-#x0E3A] | |
| | [#x0E47-#x0E4E] | |
| | #x0EB1 | |
| | [#x0EB4-#x0EB9] | |
| | [#x0EBB-#x0EBC] | |
| | [#x0EC8-#x0ECD] | |
| | [#x0F18-#x0F19] | |
| | #x0F35 | |
| | #x0F37 | |
| | #x0F39 | |
| | #x0F3E | |
| | #x0F3F | |
| | [#x0F71-#x0F84] | |
| | [#x0F86-#x0F8B] | |
| | [#x0F90-#x0F95] | |
| | #x0F97 | |
| | [#x0F99-#x0FAD] | |
| | [#x0FB1-#x0FB7] | |
| | #x0FB9 | |
| | [#x20D0-#x20DC] | |
| | #x20E1 | |
| | [#x302A-#x302F] | |
| | #x3099 | |
| | #x309A | |
| UnicodeDigit | |
| ::= [#x0030-#x0039] | |
| | [#x0660-#x0669] | |
| | [#x06F0-#x06F9] | |
| | [#x0966-#x096F] | |
| | [#x09E6-#x09EF] | |
| | [#x0A66-#x0A6F] | |
| | [#x0AE6-#x0AEF] | |
| | [#x0B66-#x0B6F] | |
| | [#x0BE7-#x0BEF] | |
| | [#x0C66-#x0C6F] | |
| | [#x0CE6-#x0CEF] | |
| | [#x0D66-#x0D6F] | |
| | [#x0E50-#x0E59] | |
| | [#x0ED0-#x0ED9] | |
| | [#x0F20-#x0F29] | |
| UnicodeConnectorPunctuation | |
| ::= #x00B7 | |
| | #x02D0 | |
| | #x02D1 | |
| | #x0387 | |
| | #x0640 | |
| | #x0E46 | |
| | #x0EC6 | |
| | #x3005 | |
| | [#x3031-#x3035] | |
| | [#x309D-#x309E] | |
| | [#x30FC-#x30FE] | |
| ZWNJ ::= #x200C | |
| ZWJ ::= #x200D | |
| ReservedWord ::= Keyword | FutureReservedWord | NullLIteral | BooleanLiteral | |
| Keyword ::= "break" | "case" | "catch" | "class" | "const" | "continue" | "debugger" | "default" | "delete" | | |
| "do" | "else" | "export" | "extends" | "finally" | "for" | "function" | "if" | "import" | | |
| "in" | "instanceof" | "new" | "return" | "super" | "switch" | "this" | "throw" | "try" | | |
| "typeof" | "var" | "void" | "while" | "with" | "yield" | |
| FutureReservedWord ::= "enum" | "await" /* await is only treated as a FutureReservedWord when Module is the goal symbol of the syntactic grammar. */ | |
| /* The following tokens are also considered to be FutureReservedWords when parsing strict mode code: */ | |
| | "implements" | "interface" | "package" | "private" | "protected" | "public" | |
| Punctuator ::= "{" | "}" | "(" | ")" | "[" | "]" | "." | ";" | "," | "<" | ">" | "<=" | ">=" | "==" | "!=" | "===" | "!==" | | |
| "+" | "-" | "*" | "%" | "++" | "--" | "<<" | ">>" | ">>>" | "&" | "|" | "^" | | |
| "!" | "~" | "&&" | "?" | ":" | "=" | "+=" | "-=" | "*=" | "%=" | "<<=" | ">>=" | ">>>=" | "&=" | "|=" | "^=" | "=>" | |
| DivPunctuator ::= "/" | "/=" | |
| RightBracePunctuator ::= "}" | |
| NullLiteral ::= "null" | |
| BooleanLiteral ::= "true" | "false" | |
| NumbericLiteral ::= DecimalLiteral | BinaryIntegerLiteral | OctalIntegerLiteral | HexIntegerLiteral | |
| DecimalLiteral ::= DecimalIntegerLiteral "." DecimalDigits ExponentPart? | "." DecimalDigits ExponentPart? | DecimalIntegerLiteral ExponentPart | |
| DecimalIntegerLiteral ::= "0" | NonZeroDigit DecimalDigits? | |
| DecimalDigits ::= DecimalDigit+ | |
| DecimalDigit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | |
| NonZeroDigit ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | |
| ExponentPart ::= ExponentIndicator SignedInteger | |
| ExponentIndicator ::= "e" | "E" | |
| SignedInteger ::= DecimalDigits | "+" DecimalDigits | "-" DecimalDigits | |
| BinaryIntegerLiteral ::= "0b" BinaryDigits | "0B" BinaryDigits | |
| BinaryDigits ::= BinaryDigit+ | |
| BinaryDigit ::= "0" | "1" | |
| OctalIntegerLiteral ::= "0o" OctalDigits | "0O" OctalDigits | |
| OctalDigits ::= OctalDigit+ | |
| OctalDigit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | |
| HexIntegerLiteral ::= "0x" HexDigits | "0X" HexDigits | |
| HexDigits ::= HexDigit+ | |
| HexDigit ::= [0-9a-fA-F] | |
| StringLiteral ::= '"' DoubleStringCharacters? '"' | '"' SingleStringCharacters? '"' | |
| DoubleStringCharacters ::= DoubleStringCharacter+ | |
| SingleStringCharacters ::= SingleStringCharacter+ | |
| DoubleStringCharacter ::= /* chars are lineTerminators */ [^" \ #x0012 #x0015 #x2028 #x2029] | "\" EscapeSequence | LineContinuation | |
| SingleStringCharacter ::= /* chars are lineTerminators */ [^' \ #x0012 #x0015 #x2028 #x2029] | "\" EscapeSequence | LineContinuation | |
| LineContinuation ::= "\" LineTerminatorSequence | |
| EscapeSequence ::= CharacterEscapeSequence | "0" /* lookahead not DecimalDigit */ [^ 0 1 2 3 4 5 6 7 8 9] | HexEscapeSequence | UnicodeEscapeSequence | |
| CharacterEscapeSequence ::= SingleEscapeCharacter | NonEscapeCharacter | |
| SingleEscapeCharacter ::= "'" | '"' | "\" | "b" | "f" | "n" | "r" | "t" | "v" | |
| NonEscapeCharacter ::= [^ ' " \ b f n r t v #x0012 #x0015 #x2028 #x2029] | |
| 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 ::= SourceCharacter - LineTerminator | |
| RegularExpressionClass ::= "[" RegularExpressionClassChars "]" | |
| RegularExpressionClassChars ::= | RegularExpressionClassChar+ | |
| RegularExpressionClassChar ::= /* RegularExpressionNonTerminator but not one of ] or \ */ [^ \ #x0012 #x0015 #x2028 #x2029 #x005D] | RegularExpressionBackslashSequence | |
| RegularExpressionFlags ::= | IdentifierPart+ | |
| Template ::= NoSubstitutionTemplate | TemplateHead | |
| NoSubstitutionTemplate ::= "`" TemplateCharacters? "`" | |
| TemplateHead ::= "`" TemplateCharacters? "${" | |
| TemplateSubstitutionTail ::= TemplateMiddle | TemplateTail | |
| TemplateMiddle ::= "}" TemplateCharacters? "${" | |
| TemplateTail ::= "}" TemplateCharacters? "`" | |
| TemplateCharacters ::= TemplateCharacter+ | |
| TemplateCharacter ::= "$" [^{] | "\" EscapeSequence | LineContinuation | LineTerminatorSequence | SourceCharacter - ('`' | '\' | '$' | LineTerminator) | |
| NonNameChar | |
| ::= . - IdentifierPart | |
| | $ | |
| NonNameChar | |
| \\ 'break' 'do' 'instanceof' 'typeof' 'case' 'else' 'new' 'var' 'catch' 'finally' 'return' 'void' 'continue' 'for' 'switch' 'while' 'debugger' 'function' 'this' 'with' 'default' 'if' 'throw' 'delete' 'in' 'try' 'get' 'set' 'yield' NullLiteral BooleanLiteral NumbericLiteral "class" "const" "export" "extends" "import" "let" "of" "static" "super" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment