JavaScript シンタックス

目次

概要

まだブラウザで未実装のものもありますが、ES8/ES2018 の文法を整理しました。

JavaScript

JavaScript

JavaScript : Script opt Module opt

Scripts

Script : ScriptBody opt ScriptBody : StatementList [~Yield, ~Await, ~Return]

Statements

Statements

StatementList [Yield, Await, Return]: StatementListItem [?Yield, ?Await, ?Return] StatementList [?Yield, ?Await, ?Return]StatementListItem [?Yield, ?Await, ?Return] StatementListItem [Yield, Await, Return]: Statement [?Yield, ?Await, ?Return] Declaration [?Yield, ?Await] Statement [Yield, Await, Return]: BlockStatement [?Yield, ?Await, ?Return] VariableStatement [?Yield, ?Await] EmptyStatement ExpressionStatement [?Yield, ?Await] IfStatement [?Yield, ?Await, ?Return] BreakableStatement [?Yield, ?Await, ?Return] ContinueStatement [?Yield, ?Await] BreakStatement [?Yield, ?Await] [+Return]ReturnStatement [?Yield, ?Await] WithStatement [?Yield, ?Await, ?Return] LabelledStatement [?Yield, ?Await, ?Return] ThrowStatement [?Yield, ?Await] TryStatement [?Yield, ?Await, ?Return] DebuggerStatement Declaration [Yield, Await]: HoistableDeclaration [?Yield, ?Await, ~Default] ClassDeclaration [?Yield, ?Await, ~Default] LexicalDeclaration [+In, ?Yield, ?Await] HoistableDeclaration [Yield, Await, Default]: FunctionDeclaration [?Yield, ?Await, ?Default] GeneratorDeclaration [?Yield, ?Await, ?Default] AsyncFunctionDeclaration [?Yield, ?Await, ?Default] BreakableStatement [Yield, Await, Return]: IterationStatement [?Yield, ?Await, ?Return] SwitchStatement [?Yield, ?Await, ?Return]

Block Statement

BlockStatement [Yield, Await, Return]: Block [?Yield, ?Await, ?Return] Block [Yield, Await, Return]: {StatementList [?Yield, ?Await, ?Return]opt}

Variable Statement

VariableStatement [Yield, Await]: varVariableDeclarationList [+In, ?Yield, ?Await]; VariableDeclarationList [In, Yield, Await]: VariableDeclaration [?In, ?Yield, ?Await] VariableDeclarationList [?In, ?Yield, ?Await],VariableDeclaration [?In, ?Yield, ?Await] VariableDeclaration [In, Yield, Await]: BindingIdentifier [?Yield, ?Await]Initializer [?In, ?Yield, ?Await]opt BindingPattern [?Yield, ?Await]Initializer [?In, ?Yield, ?Await] BindingPattern [Yield, Await]: ObjectBindingPattern [?Yield, ?Await] ArrayBindingPattern [?Yield, ?Await] ObjectBindingPattern [Yield, Await]: {} {BindingPropertyList [?Yield, ?Await]} {BindingPropertyList [?Yield, ?Await],} ArrayBindingPattern [Yield, Await]: [Elision optBindingRestElement [?Yield, ?Await]opt] [BindingElementList [?Yield, ?Await]] [BindingElementList [?Yield, ?Await],Elision optBindingRestElement [?Yield, ?Await]opt] BindingPropertyList [Yield, Await]: BindingProperty [?Yield, ?Await] BindingPropertyList [?Yield, ?Await],BindingProperty [?Yield, ?Await] BindingElementList [Yield, Await]: BindingElisionElement [?Yield, ?Await] BindingElementList [?Yield, ?Await],BindingElisionElement [?Yield, ?Await] BindingElisionElement [Yield, Await]: Elision optBindingElement [?Yield, ?Await] BindingProperty [Yield, Await]: SingleNameBinding [?Yield, ?Await] PropertyName [?Yield, ?Await]:BindingElement [?Yield, ?Await] BindingElement [Yield, Await]: SingleNameBinding [?Yield, ?Await] BindingPattern [?Yield, ?Await]Initializer [+In, ?Yield, ?Await]opt SingleNameBinding [Yield, Await]: BindingIdentifier [?Yield, ?Await]Initializer [+In, ?Yield, ?Await]opt BindingRestElement [Yield, Await]: ...BindingIdentifier [?Yield, ?Await] ...BindingPattern [?Yield, ?Await]

Empty Statement

EmptyStatement : ;

Expression Statement

ExpressionStatement [Yield, Await]: [lookahead ? { {, function, async [no LineTerminator here] function, class, let [ }]Expression [+In, ?Yield, ?Await];

If Statement

IfStatement [Yield, Await, Return]: if(Expression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return]elseStatement [?Yield, ?Await, ?Return] if(Expression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return]

Iteration Statement

IterationStatement [Yield, Await, Return]: doStatement [?Yield, ?Await, ?Return]while(Expression [+In, ?Yield, ?Await]); while(Expression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return] for([lookahead ? { let [ }]Expression [~In, ?Yield, ?Await]opt;Expression [+In, ?Yield, ?Await]opt;Expression [+In, ?Yield, ?Await]opt)Statement [?Yield, ?Await, ?Return] for(varVariableDeclarationList [~In, ?Yield, ?Await];Expression [+In, ?Yield, ?Await]opt;Expression [+In, ?Yield, ?Await]opt)Statement [?Yield, ?Await, ?Return] for(LexicalDeclaration [~In, ?Yield, ?Await]Expression [+In, ?Yield, ?Await]opt;Expression [+In, ?Yield, ?Await]opt)Statement [?Yield, ?Await, ?Return] for([lookahead ? { let [ }]LeftHandSideExpression [?Yield, ?Await]inExpression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return] for(varForBinding [?Yield, ?Await]inExpression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return] for(ForDeclaration [?Yield, ?Await]inExpression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return] for([lookahead ≠ let]LeftHandSideExpression [?Yield, ?Await]ofAssignmentExpression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return] for(varForBinding [?Yield, ?Await]ofAssignmentExpression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return] for(ForDeclaration [?Yield, ?Await]ofAssignmentExpression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return] ForDeclaration [Yield, Await]: LetOrConst ForBinding [?Yield, ?Await] ForBinding [Yield, Await]: BindingIdentifier [?Yield, ?Await] BindingPattern [?Yield, ?Await]

Switch Statement

SwitchStatement [Yield, Await, Return]: switch(Expression [+In, ?Yield, ?Await])CaseBlock [?Yield, ?Await, ?Return] CaseBlock [Yield, Await, Return]: {CaseClauses [?Yield, ?Await, ?Return]opt} {CaseClauses [?Yield, ?Await, ?Return]optDefaultClause [?Yield, ?Await, ?Return]CaseClauses [?Yield, ?Await, ?Return]opt} CaseClauses [Yield, Await, Return]: CaseClause [?Yield, ?Await, ?Return] CaseClauses [?Yield, ?Await, ?Return]CaseClause [?Yield, ?Await, ?Return] CaseClause [Yield, Await, Return]: caseExpression [+In, ?Yield, ?Await]:StatementList [?Yield, ?Await, ?Return]opt DefaultClause [Yield, Await, Return]: default:StatementList [?Yield, ?Await, ?Return]opt

Continue Statement

ContinueStatement [Yield, Await]: continue; continue[no LineTerminator here]LabelIdentifier [?Yield, ?Await];

Break Statement

BreakStatement [Yield, Await]: break; break[no LineTerminator here]LabelIdentifier [?Yield, ?Await];

Return Statement

ReturnStatement [Yield, Await]: return; return[no LineTerminator here]Expression [+In, ?Yield, ?Await];

With Statement

WithStatement [Yield, Await, Return]: with(Expression [+In, ?Yield, ?Await])Statement [?Yield, ?Await, ?Return]

Labelled Statement

LabelledStatement [Yield, Await, Return]: LabelIdentifier [?Yield, ?Await]:LabelledItem [?Yield, ?Await, ?Return] LabelledItem [Yield, Await, Return]: Statement [?Yield, ?Await, ?Return] FunctionDeclaration [?Yield, ?Await, ~Default] LabelIdentifier [Yield, Await]: Identifier [~Yield]yield [~Await]await

Throw Statement

ThrowStatement [Yield, Await]: throw[no LineTerminator here]Expression [+In, ?Yield, ?Await];

Try Statement

TryStatement [Yield, Await, Return]: tryBlock [?Yield, ?Await, ?Return]Catch [?Yield, ?Await, ?Return] tryBlock [?Yield, ?Await, ?Return]Finally [?Yield, ?Await, ?Return] tryBlock [?Yield, ?Await, ?Return]Catch [?Yield, ?Await, ?Return]Finally [?Yield, ?Await, ?Return] Catch [Yield, Await, Return]: catch(CatchParameter [?Yield, ?Await])Block [?Yield, ?Await, ?Return] Finally [Yield, Await, Return]: finallyBlock [?Yield, ?Await, ?Return] CatchParameter [Yield, Await]: BindingIdentifier [?Yield, ?Await] BindingPattern [?Yield, ?Await]

Debugger Statement

DebuggerStatement : debugger;

Function Declaration

FunctionDeclaration [Yield, Await, Default]: functionBindingIdentifier [?Yield, ?Await](FormalParameters [~Yield, ~Await]){FunctionBody [~Yield, ~Await]} [+Default]function(FormalParameters [~Yield, ~Await]){FunctionBody [~Yield, ~Await]} FunctionExpression : functionBindingIdentifier [~Yield, ~Await]opt(FormalParameters [~Yield, ~Await]){FunctionBody [~Yield, ~Await]} UniqueFormalParameters [Yield, Await]: FormalParameters [?Yield, ?Await] FormalParameters [Yield, Await]: [empty] FunctionRestParameter [?Yield, ?Await] FormalParameterList [?Yield, ?Await] FormalParameterList [?Yield, ?Await], FormalParameterList [?Yield, ?Await],FunctionRestParameter [?Yield, ?Await] FormalParameterList [Yield, Await]: FormalParameter [?Yield, ?Await] FormalParameterList [?Yield, ?Await],FormalParameter [?Yield, ?Await] FunctionRestParameter [Yield, Await]: BindingRestElement [?Yield, ?Await] FormalParameter [Yield, Await]: BindingElement [?Yield, ?Await] FunctionBody [Yield, Await]: FunctionStatementList [?Yield, ?Await] FunctionStatementList [Yield, Await]: StatementList [?Yield, ?Await, +Return]opt

Arrow Function

ArrowFunction [In, Yield, Await]: ArrowParameters [?Yield, ?Await][no LineTerminator here]=>ConciseBody [?In] ArrowParameters [Yield, Await]: BindingIdentifier [?Yield, ?Await] CoverParenthesizedExpressionAndArrowParameterList [?Yield, ?Await] ConciseBody [In]: [lookahead ≠ {]AssignmentExpression [?In, ~Yield, ~Await] {FunctionBody [~Yield, ~Await]}

When the production ArrowParameters [Yield, Await]:CoverParenthesizedExpressionAndArrowParameterList [?Yield, ?Await] is recognized the following grammar is used to refine the interpretation of CoverParenthesizedExpressionAndArrowParameterList :

ArrowFormalParameters [Yield, Await]: (UniqueFormalParameters [?Yield, ?Await])

Async Arrow Function

AsyncArrowFunction [In, Yield, Await]: async[no LineTerminator here]AsyncArrowBindingIdentifier [?Yield][no LineTerminator here]=>AsyncConciseBody [?In] CoverCallExpressionAndAsyncArrowHead [?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody [?In] AsyncConciseBody [In]: [lookahead ≠ {]AssignmentExpression [?In, ~Yield, +Await] {AsyncFunctionBody }

When the production AsyncArrowFunction [In, Yield, Await]:CoverCallExpressionAndAsyncArrowHead [?Yield, ?Await][no LineTerminator here]=>AsyncConciseBody [?In] is recognized the following grammar is used to refine the interpretation of CoverParenthesizedExpressionAndArrowParameterList :

AsyncArrowBindingIdentifier [Yield]: BindingIdentifier [?Yield, +Await] AsyncArrowHead : async[no LineTerminator here]ArrowFormalParameters [~Yield, +Await] MethodDefinition [Yield, Await]: PropertyName [?Yield, ?Await](UniqueFormalParameters [~Yield, ~Await]){FunctionBody [~Yield, ~Await]} GeneratorMethod [?Yield, ?Await] AsyncMethod [?Yield, ?Await] getPropertyName [?Yield, ?Await](){FunctionBody [~Yield, ~Await]} setPropertyName [?Yield, ?Await](PropertySetParameterList ){FunctionBody [~Yield, ~Await]} PropertySetParameterList : FormalParameter [~Yield, ~Await] GeneratorMethod [Yield, Await]: *PropertyName [?Yield, ?Await](UniqueFormalParameters [+Yield, ~Await]){GeneratorBody } AsyncMethod [Yield, Await]: async[no LineTerminator here]PropertyName [?Yield, ?Await](UniqueFormalParameters [~Yield, +Await]){AsyncFunctionBody }

Generator Declaration

GeneratorDeclaration [Yield, Await, Default]: function*BindingIdentifier [?Yield, ?Await](FormalParameters [+Yield, ~Await]){GeneratorBody } [+Default]function*(FormalParameters [+Yield, ~Await]){GeneratorBody } GeneratorExpression : function*BindingIdentifier [+Yield, ~Await]opt(FormalParameters [+Yield, ~Await]){GeneratorBody } GeneratorBody : FunctionBody [+Yield, ~Await]

Async Function Declaration

AsyncFunctionDeclaration [Yield, Await, Default]: async[no LineTerminator here]functionBindingIdentifier [?Yield, ?Await](FormalParameters [~Yield, ?Await]){AsyncFunctionBody } [+Default]async[no LineTerminator here]function(FormalParameters [~Yield, ?Await]){AsyncFunctionBody } AsyncFunctionExpression : async[no LineTerminator here]function(FormalParameters [~Yield, +Await]){AsyncFunctionBody } async[no LineTerminator here]functionBindingIdentifier [~Yield, +Await](FormalParameters [~Yield, +Await]){AsyncFunctionBody } AsyncFunctionBody : FunctionBody [~Yield, +Await]

Await Expression

AwaitExpression [Yield]: awaitUnaryExpression [?Yield, +Await]

Class Declaration

ClassDeclaration [Yield, Await, Default]: classBindingIdentifier [?Yield, ?Await]ClassTail [?Yield, ?Await] [+Default]classClassTail [?Yield, ?Await] ClassExpression [Yield, Await]: classBindingIdentifier [?Yield, ?Await]optClassTail [?Yield, ?Await] ClassTail [Yield, Await]: ClassHeritage [?Yield, ?Await]opt{ClassBody [?Yield, ?Await]opt} ClassHeritage [Yield, Await]: extendsLeftHandSideExpression [?Yield, ?Await] ClassBody [Yield, Await]: ClassElementList [?Yield, ?Await] ClassElementList [Yield, Await]: ClassElement [?Yield, ?Await] ClassElementList [?Yield, ?Await]ClassElement [?Yield, ?Await] ClassElement [Yield, Await]: MethodDefinition [?Yield, ?Await] staticMethodDefinition [?Yield, ?Await] ;

Lexical Declaration

LexicalDeclaration [In, Yield, Await]: LetOrConst BindingList [?In, ?Yield, ?Await]; LetOrConst : let const BindingList [In, Yield, Await]: LexicalBinding [?In, ?Yield, ?Await] BindingList [?In, ?Yield, ?Await],LexicalBinding [?In, ?Yield, ?Await] LexicalBinding [In, Yield, Await]: BindingIdentifier [?Yield, ?Await]Initializer [?In, ?Yield, ?Await]opt BindingPattern [?Yield, ?Await]Initializer [?In, ?Yield, ?Await]

Expressions

Expression

Expression [In, Yield, Await]: AssignmentExpression [?In, ?Yield, ?Await] Expression [?In, ?Yield, ?Await],AssignmentExpression [?In, ?Yield, ?Await]

Assignment Expression

AssignmentExpression [In, Yield, Await]: ConditionalExpression [?In, ?Yield, ?Await] [+Yield]YieldExpression [?In, ?Await] ArrowFunction [?In, ?Yield, ?Await] AsyncArrowFunction [?In, ?Yield, ?Await] LeftHandSideExpression [?Yield, ?Await]=AssignmentExpression [?In, ?Yield, ?Await] LeftHandSideExpression [?Yield, ?Await]AssignmentOperator AssignmentExpression [?In, ?Yield, ?Await] LeftHandSideExpression [Yield, Await]: NewExpression [?Yield, ?Await] CallExpression [?Yield, ?Await]

In certain circumstances when processing an instance of the production AssignmentExpression [In, Yield, Await]:LeftHandSideExpression [?Yield, ?Await]=AssignmentExpression [?In, ?Yield, ?Await] the following grammar is used to refine the interpretation of LeftHandSideExpression :

AssignmentPattern [Yield, Await]: ObjectAssignmentPattern [?Yield, ?Await] ArrayAssignmentPattern [?Yield, ?Await] ObjectAssignmentPattern [Yield, Await]: {} {AssignmentPropertyList [?Yield, ?Await]} {AssignmentPropertyList [?Yield, ?Await],} ArrayAssignmentPattern [Yield, Await]: [Elision optAssignmentRestElement [?Yield, ?Await]opt] [AssignmentElementList [?Yield, ?Await]] [AssignmentElementList [?Yield, ?Await],Elision optAssignmentRestElement [?Yield, ?Await]opt] AssignmentPropertyList [Yield, Await]: AssignmentProperty [?Yield, ?Await] AssignmentPropertyList [?Yield, ?Await],AssignmentProperty [?Yield, ?Await] AssignmentElementList [Yield, Await]: AssignmentElisionElement [?Yield, ?Await] AssignmentElementList [?Yield, ?Await],AssignmentElisionElement [?Yield, ?Await] AssignmentElisionElement [Yield, Await]: Elision optAssignmentElement [?Yield, ?Await] AssignmentProperty [Yield, Await]: IdentifierReference [?Yield, ?Await]Initializer [+In, ?Yield, ?Await]opt PropertyName [?Yield, ?Await]:AssignmentElement [?Yield, ?Await] AssignmentElement [Yield, Await]: DestructuringAssignmentTarget [?Yield, ?Await]Initializer [+In, ?Yield, ?Await]opt AssignmentRestElement [Yield, Await]: ...DestructuringAssignmentTarget [?Yield, ?Await] DestructuringAssignmentTarget [Yield, Await]: LeftHandSideExpression [?Yield, ?Await]

Conditional Expression

ConditionalExpression [In, Yield, Await]: LogicalORExpression [?In, ?Yield, ?Await] LogicalORExpression [?In, ?Yield, ?Await]?AssignmentExpression [+In, ?Yield, ?Await]:AssignmentExpression [?In, ?Yield, ?Await]

Yield Expression

YieldExpression [In, Await]: yield yield[no LineTerminator here]AssignmentExpression [?In, +Yield, ?Await] yield[no LineTerminator here]*AssignmentExpression [?In, +Yield, ?Await]

Update Expression

UpdateExpression [Yield, Await]: LeftHandSideExpression [?Yield, ?Await] LeftHandSideExpression [?Yield, ?Await][no LineTerminator here]++ LeftHandSideExpression [?Yield, ?Await][no LineTerminator here]-- ++UnaryExpression [?Yield, ?Await] --UnaryExpression [?Yield, ?Await]

Unary Expression

UnaryExpression [Yield, Await]: UpdateExpression [?Yield, ?Await] deleteUnaryExpression [?Yield, ?Await] voidUnaryExpression [?Yield, ?Await] typeofUnaryExpression [?Yield, ?Await] +UnaryExpression [?Yield, ?Await] -UnaryExpression [?Yield, ?Await] ~UnaryExpression [?Yield, ?Await] !UnaryExpression [?Yield, ?Await] [+Await]AwaitExpression [?Yield]

Multiplicative Expression

MultiplicativeExpression [Yield, Await]: ExponentiationExpression [?Yield, ?Await] MultiplicativeExpression [?Yield, ?Await]MultiplicativeOperator ExponentiationExpression [?Yield, ?Await]

Exponentiation Expression

ExponentiationExpression [Yield, Await]: UnaryExpression [?Yield, ?Await] UpdateExpression [?Yield, ?Await]**ExponentiationExpression [?Yield, ?Await]

Primary Expression

PrimaryExpression [Yield, Await]: this IdentifierReference [?Yield, ?Await] Literal ArrayLiteral [?Yield, ?Await] ObjectLiteral [?Yield, ?Await] FunctionExpression ClassExpression [?Yield, ?Await] GeneratorExpression AsyncFunctionExpression RegularExpressionLiteral TemplateLiteral [?Yield, ?Await] CoverParenthesizedExpressionAndArrowParameterList [?Yield, ?Await] CoverParenthesizedExpressionAndArrowParameterList [Yield, Await]: (Expression [+In, ?Yield, ?Await]) (Expression [+In, ?Yield, ?Await],) () (...BindingIdentifier [?Yield, ?Await]) (...BindingPattern [?Yield, ?Await]) (Expression [+In, ?Yield, ?Await],...BindingIdentifier [?Yield, ?Await]) (Expression [+In, ?Yield, ?Await],...BindingPattern [?Yield, ?Await])

When processing an instance of the production PrimaryExpression [Yield, Await]:CoverParenthesizedExpressionAndArrowParameterList [?Yield, ?Await] the interpretation of CoverParenthesizedExpressionAndArrowParameterList is refined using the following grammar:

Parenthesized Expression

ParenthesizedExpression [Yield, Await]: (Expression [+In, ?Yield, ?Await])

Literal

Literal

Literal : NullLiteral BooleanLiteral NumericLiteral StringLiteral

Null Literal

NullLiteral :: null

Boolean Literal

BooleanLiteral :: true false

Numeric Literal

NumericLiteral :: DecimalLiteral BinaryIntegerLiteral OctalIntegerLiteral HexIntegerLiteral

Decimal Literal

DecimalLiteral :: DecimalIntegerLiteral .DecimalDigits optExponentPart opt .DecimalDigits ExponentPart opt DecimalIntegerLiteral ExponentPart opt DecimalIntegerLiteral :: 0 NonZeroDigit DecimalDigits opt DecimalDigits :: DecimalDigit DecimalDigits DecimalDigit DecimalDigit ::one of 0123456789 NonZeroDigit ::one of 123456789 ExponentPart :: ExponentIndicator SignedInteger ExponentIndicator ::one of eE

Signed Integer Literal

SignedInteger :: DecimalDigits +DecimalDigits -DecimalDigits

Binary Integer Literal

BinaryIntegerLiteral :: 0bBinaryDigits 0BBinaryDigits BinaryDigits :: BinaryDigit BinaryDigits BinaryDigit BinaryDigit ::one of 01

Octal Integer Literal

OctalIntegerLiteral :: 0oOctalDigits 0OOctalDigits OctalDigits :: OctalDigit OctalDigits OctalDigit OctalDigit ::one of 01234567

Hex Integer Literal

HexIntegerLiteral :: 0xHexDigits 0XHexDigits HexDigits :: HexDigit HexDigits HexDigit HexDigit ::one of 0123456789abcdefABCDEF

String Numeric Literal

StringNumericLiteral ::: StrWhiteSpace opt StrWhiteSpace optStrNumericLiteral StrWhiteSpace opt StrWhiteSpace ::: StrWhiteSpaceChar StrWhiteSpace opt StrWhiteSpaceChar ::: WhiteSpace LineTerminator StrNumericLiteral ::: StrDecimalLiteral BinaryIntegerLiteral OctalIntegerLiteral HexIntegerLiteral StrDecimalLiteral ::: StrUnsignedDecimalLiteral +StrUnsignedDecimalLiteral -StrUnsignedDecimalLiteral StrUnsignedDecimalLiteral ::: Infinity DecimalDigits .DecimalDigits optExponentPart opt .DecimalDigits ExponentPart opt DecimalDigits ExponentPart opt

All grammar symbols not explicitly defined by the StringNumericLiteral grammar have the definitions used in the Lexical Grammar for numeric literals .

String Literal

StringLiteral :: "DoubleStringCharacters opt" 'SingleStringCharacters opt' DoubleStringCharacters :: DoubleStringCharacter DoubleStringCharacters opt SingleStringCharacters :: SingleStringCharacter SingleStringCharacters opt DoubleStringCharacter :: SourceCharacter but not one of " or \ or LineTerminator \EscapeSequence LineContinuation SingleStringCharacter :: SourceCharacter but not one of ' or \ or LineTerminator \EscapeSequence LineContinuation LineContinuation :: \LineTerminatorSequence EscapeSequence :: CharacterEscapeSequence 0[lookahead ? DecimalDigit ] HexEscapeSequence UnicodeEscapeSequence CharacterEscapeSequence :: SingleEscapeCharacter NonEscapeCharacter SingleEscapeCharacter ::one of '"\bfnrtv NonEscapeCharacter :: SourceCharacter but not one of EscapeCharacter or LineTerminator EscapeCharacter :: SingleEscapeCharacter DecimalDigit x u HexEscapeSequence :: xHexDigit HexDigit UnicodeEscapeSequence :: uHex4Digits u{HexDigits } Hex4Digits :: HexDigit HexDigit HexDigit HexDigit

Regular Expression Literal

RegularExpressionLiteral :: /RegularExpressionBody /RegularExpressionFlags RegularExpressionBody :: RegularExpressionFirstChar RegularExpressionChars RegularExpressionChars :: [empty] RegularExpressionChars RegularExpressionChar RegularExpressionFirstChar :: RegularExpressionNonTerminator but not one of * or \ or / or [ RegularExpressionBackslashSequence RegularExpressionClass RegularExpressionChar :: RegularExpressionNonTerminator but not one of \ or / or [ RegularExpressionBackslashSequence RegularExpressionClass RegularExpressionBackslashSequence :: \RegularExpressionNonTerminator RegularExpressionNonTerminator :: SourceCharacter but not LineTerminator RegularExpressionClass :: [RegularExpressionClassChars ] RegularExpressionClassChars :: [empty] RegularExpressionClassChars RegularExpressionClassChar RegularExpressionClassChar :: RegularExpressionNonTerminator but not one of ] or \ RegularExpressionBackslashSequence RegularExpressionFlags :: [empty] RegularExpressionFlags IdentifierPart

Regular Expression Pattern

Pattern [U]:: Disjunction [?U] Disjunction [U]:: Alternative [?U] Alternative [?U]|Disjunction [?U] Alternative [U]:: [empty] Alternative [?U]Term [?U] Term [U]:: Assertion [?U] Atom [?U] Atom [?U]Quantifier Assertion [U]:: ^ $ \b \B (?=Disjunction [?U]) (?!Disjunction [?U]) Quantifier :: QuantifierPrefix QuantifierPrefix ? QuantifierPrefix :: * + ? {DecimalDigits } {DecimalDigits ,} {DecimalDigits ,DecimalDigits } Atom [U]:: PatternCharacter . \AtomEscape [?U] CharacterClass [?U] (Disjunction [?U]) (?:Disjunction [?U]) SyntaxCharacter ::one of ^$\.*+?()[]{}| PatternCharacter :: SourceCharacter but not SyntaxCharacter AtomEscape [U]:: DecimalEscape CharacterClassEscape CharacterEscape [?U] CharacterEscape [U]:: ControlEscape cControlLetter 0[lookahead ? DecimalDigit ] HexEscapeSequence RegExpUnicodeEscapeSequence [?U] IdentityEscape [?U] ControlEscape ::one of fnrtv ControlLetter ::one of abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ RegExpUnicodeEscapeSequence [U]::[+U]uLeadSurrogate \uTrailSurrogate [+U]uLeadSurrogate [+U]uTrailSurrogate [+U]uNonSurrogate [~U]uHex4Digits [+U]u{HexDigits }

Each \u TrailSurrogate for which the choice of associated u LeadSurrogate is ambiguous shall be associated with the nearest possible u LeadSurrogate that would otherwise have no corresponding \u TrailSurrogate .

LeadSurrogate :: Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xD800 to 0xDBFF TrailSurrogate :: Hex4Digits but only if the SV of Hex4Digits is in the inclusive range 0xDC00 to 0xDFFF NonSurrogate :: Hex4Digits but only if the SV of Hex4Digits is not in the inclusive range 0xD800 to 0xDFFF IdentityEscape [U]::[+U]SyntaxCharacter [+U]/ [~U]SourceCharacter but not UnicodeIDContinue DecimalEscape :: NonZeroDigit DecimalDigits opt[lookahead ? DecimalDigit ] CharacterClassEscape ::one of dDsSwW CharacterClass [U]:: [[lookahead ? { ^ }]ClassRanges [?U]] [^ClassRanges [?U]] ClassRanges [U]:: [empty] NonemptyClassRanges [?U] NonemptyClassRanges [U]:: ClassAtom [?U] ClassAtom [?U]NonemptyClassRangesNoDash [?U] ClassAtom [?U]-ClassAtom [?U]ClassRanges [?U] NonemptyClassRangesNoDash [U]:: ClassAtom [?U] ClassAtomNoDash [?U]NonemptyClassRangesNoDash [?U] ClassAtomNoDash [?U]-ClassAtom [?U]ClassRanges [?U] ClassAtom [U]:: - ClassAtomNoDash [?U] ClassAtomNoDash [U]:: SourceCharacter but not one of \ or ] or - \ClassEscape [?U] ClassEscape [U]:: b [+U]- CharacterClassEscape CharacterEscape [?U]

Template Literal

Template :: NoSubstitutionTemplate TemplateHead NoSubstitutionTemplate :: `TemplateCharacters opt` TemplateHead :: `TemplateCharacters opt${ TemplateSubstitutionTail :: TemplateMiddle TemplateTail TemplateMiddle :: }TemplateCharacters opt${ TemplateTail :: }TemplateCharacters opt` TemplateCharacters :: TemplateCharacter TemplateCharacters opt TemplateCharacter :: $[lookahead ≠ {] \EscapeSequence LineContinuation LineTerminatorSequence SourceCharacter but not one of ` or \ or $ or LineTerminator

Array Literal

ArrayLiteral [Yield, Await]: [Elision opt] [ElementList [?Yield, ?Await]] [ElementList [?Yield, ?Await],Elision opt] ElementList [Yield, Await]: Elision optAssignmentExpression [+In, ?Yield, ?Await] Elision optSpreadElement [?Yield, ?Await] ElementList [?Yield, ?Await],Elision optAssignmentExpression [+In, ?Yield, ?Await] ElementList [?Yield, ?Await],Elision optSpreadElement [?Yield, ?Await] Elision : , Elision , SpreadElement [Yield, Await]: ...AssignmentExpression [+In, ?Yield, ?Await]

Object Literal

ObjectLiteral [Yield, Await]: {} {PropertyDefinitionList [?Yield, ?Await]} {PropertyDefinitionList [?Yield, ?Await],} PropertyDefinitionList [Yield, Await]: PropertyDefinition [?Yield, ?Await] PropertyDefinitionList [?Yield, ?Await],PropertyDefinition [?Yield, ?Await] PropertyDefinition [Yield, Await]: IdentifierReference [?Yield, ?Await] CoverInitializedName [?Yield, ?Await] PropertyName [?Yield, ?Await]:AssignmentExpression [+In, ?Yield, ?Await] MethodDefinition [?Yield, ?Await] PropertyName [Yield, Await]: LiteralPropertyName ComputedPropertyName [?Yield, ?Await] LiteralPropertyName : IdentifierName StringLiteral NumericLiteral ComputedPropertyName [Yield, Await]: [AssignmentExpression [+In, ?Yield, ?Await]] CoverInitializedName [Yield, Await]: IdentifierReference [?Yield, ?Await]Initializer [+In, ?Yield, ?Await] Initializer [In, Yield, Await]: =AssignmentExpression [?In, ?Yield, ?Await] TemplateLiteral [Yield, Await]: NoSubstitutionTemplate TemplateHead Expression [+In, ?Yield, ?Await]TemplateSpans [?Yield, ?Await] TemplateSpans [Yield, Await]: TemplateTail TemplateMiddleList [?Yield, ?Await]TemplateTail TemplateMiddleList [Yield, Await]: TemplateMiddle Expression [+In, ?Yield, ?Await] TemplateMiddleList [?Yield, ?Await]TemplateMiddle Expression [+In, ?Yield, ?Await] MemberExpression [Yield, Await]: PrimaryExpression [?Yield, ?Await] MemberExpression [?Yield, ?Await][Expression [+In, ?Yield, ?Await]] MemberExpression [?Yield, ?Await].IdentifierName MemberExpression [?Yield, ?Await]TemplateLiteral [?Yield, ?Await] SuperProperty [?Yield, ?Await] MetaProperty newMemberExpression [?Yield, ?Await]Arguments [?Yield, ?Await] SuperProperty [Yield, Await]: super[Expression [+In, ?Yield, ?Await]] super.IdentifierName MetaProperty : NewTarget NewTarget : new.target NewExpression [Yield, Await]: MemberExpression [?Yield, ?Await] newNewExpression [?Yield, ?Await] CallExpression [Yield, Await]:CoverCallExpressionAndAsyncArrowHead [?Yield, ?Await] SuperCall [?Yield, ?Await] CallExpression [?Yield, ?Await]Arguments [?Yield, ?Await] CallExpression [?Yield, ?Await][Expression [+In, ?Yield, ?Await]] CallExpression [?Yield, ?Await].IdentifierName CallExpression [?Yield, ?Await]TemplateLiteral [?Yield, ?Await] CoverCallExpressionAndAsyncArrowHead [Yield, Await]: MemberExpression [?Yield, ?Await]Arguments [?Yield, ?Await]

When processing an instance of the production CallExpression [Yield, Await]:CoverCallExpressionAndAsyncArrowHead [?Yield, ?Await] the interpretation of CoverCallExpressionAndAsyncArrowHead is refined using the following grammar:

CallMemberExpression [Yield, Await]: MemberExpression [?Yield, ?Await]Arguments [?Yield, ?Await] SuperCall [Yield, Await]: superArguments [?Yield, ?Await] Arguments [Yield, Await]: () (ArgumentList [?Yield, ?Await]) (ArgumentList [?Yield, ?Await],) ArgumentList [Yield, Await]: AssignmentExpression [+In, ?Yield, ?Await] ...AssignmentExpression [+In, ?Yield, ?Await] ArgumentList [?Yield, ?Await],AssignmentExpression [+In, ?Yield, ?Await] ArgumentList [?Yield, ?Await],...AssignmentExpression [+In, ?Yield, ?Await]

Operators

Operators

AssignmentOperator :one of *=/=%=+=-=<<=>>=>>>=&=^=|=**= MultiplicativeOperator :one of */%

Additive Operators

AdditiveExpression [Yield, Await]: MultiplicativeExpression [?Yield, ?Await] AdditiveExpression [?Yield, ?Await]+MultiplicativeExpression [?Yield, ?Await] AdditiveExpression [?Yield, ?Await]-MultiplicativeExpression [?Yield, ?Await]

Shift Operators

ShiftExpression [Yield, Await]: AdditiveExpression [?Yield, ?Await] ShiftExpression [?Yield, ?Await]<<AdditiveExpression [?Yield, ?Await] ShiftExpression [?Yield, ?Await]>>AdditiveExpression [?Yield, ?Await] ShiftExpression [?Yield, ?Await]>>>AdditiveExpression [?Yield, ?Await]

Comparison Operators

RelationalExpression [In, Yield, Await]: ShiftExpression [?Yield, ?Await] RelationalExpression [?In, ?Yield, ?Await]<ShiftExpression [?Yield, ?Await] RelationalExpression [?In, ?Yield, ?Await]>ShiftExpression [?Yield, ?Await] RelationalExpression [?In, ?Yield, ?Await]<=ShiftExpression [?Yield, ?Await] RelationalExpression [?In, ?Yield, ?Await]>=ShiftExpression [?Yield, ?Await] RelationalExpression [?In, ?Yield, ?Await]instanceofShiftExpression [?Yield, ?Await] [+In]RelationalExpression [+In, ?Yield, ?Await]inShiftExpression [?Yield, ?Await] EqualityExpression [In, Yield, Await]: RelationalExpression [?In, ?Yield, ?Await] EqualityExpression [?In, ?Yield, ?Await]==RelationalExpression [?In, ?Yield, ?Await] EqualityExpression [?In, ?Yield, ?Await]!=RelationalExpression [?In, ?Yield, ?Await] EqualityExpression [?In, ?Yield, ?Await]===RelationalExpression [?In, ?Yield, ?Await] EqualityExpression [?In, ?Yield, ?Await]!==RelationalExpression [?In, ?Yield, ?Await]

Bitwise Operators

BitwiseANDExpression [In, Yield, Await]: EqualityExpression [?In, ?Yield, ?Await] BitwiseANDExpression [?In, ?Yield, ?Await]&EqualityExpression [?In, ?Yield, ?Await] BitwiseXORExpression [In, Yield, Await]: BitwiseANDExpression [?In, ?Yield, ?Await] BitwiseXORExpression [?In, ?Yield, ?Await]^BitwiseANDExpression [?In, ?Yield, ?Await] BitwiseORExpression [In, Yield, Await]: BitwiseXORExpression [?In, ?Yield, ?Await] BitwiseORExpression [?In, ?Yield, ?Await]|BitwiseXORExpression [?In, ?Yield, ?Await]

Logical Operators

LogicalANDExpression [In, Yield, Await]: BitwiseORExpression [?In, ?Yield, ?Await] LogicalANDExpression [?In, ?Yield, ?Await]&&BitwiseORExpression [?In, ?Yield, ?Await] LogicalORExpression [In, Yield, Await]: LogicalANDExpression [?In, ?Yield, ?Await] LogicalORExpression [?In, ?Yield, ?Await]||LogicalANDExpression [?In, ?Yield, ?Await]

Modules

Modules

Module : ModuleBody opt ModuleBody : ModuleItemList ModuleItemList : ModuleItem ModuleItemList ModuleItem ModuleItem : ImportDeclaration ExportDeclaration StatementListItem [~Yield, ~Await, ~Return]

Import

ImportDeclaration : importImportClause FromClause ; importModuleSpecifier ; ImportClause : ImportedDefaultBinding NameSpaceImport NamedImports ImportedDefaultBinding ,NameSpaceImport ImportedDefaultBinding ,NamedImports ImportedDefaultBinding : ImportedBinding NameSpaceImport : *asImportedBinding NamedImports : {} {ImportsList } {ImportsList ,} FromClause : fromModuleSpecifier ImportsList : ImportSpecifier ImportsList ,ImportSpecifier ImportSpecifier : ImportedBinding IdentifierName asImportedBinding ModuleSpecifier : StringLiteral ImportedBinding : BindingIdentifier [~Yield, ~Await]

Export

ExportDeclaration : export*FromClause ; exportExportClause FromClause ; exportExportClause ; exportVariableStatement [~Yield, ~Await] exportDeclaration [~Yield, ~Await] exportdefaultHoistableDeclaration [~Yield, ~Await, +Default] exportdefaultClassDeclaration [~Yield, ~Await, +Default] exportdefault[lookahead ? { function, async [no LineTerminator here] function, class }]AssignmentExpression [+In, ~Yield, ~Await]; ExportClause : {} {ExportsList } {ExportsList ,} ExportsList : ExportSpecifier ExportsList ,ExportSpecifier ExportSpecifier : IdentifierName IdentifierName asIdentifierName

Identifier

Identifier

IdentifierReference [Yield, Await]: Identifier [~Yield]yield [~Await]await BindingIdentifier [Yield, Await]: Identifier [~Yield]yield [~Await]await Identifier : IdentifierName but not ReservedWord IdentifierName :: IdentifierStart IdentifierName IdentifierPart IdentifierStart :: UnicodeIDStart $ _ \UnicodeEscapeSequence IdentifierPart :: UnicodeIDContinue $ _ \UnicodeEscapeSequence <ZWNJ> <ZWJ> UnicodeIDStart :: any Unicode code point with the Unicode property "ID_Start" UnicodeIDContinue :: any Unicode code point with the Unicode property "ID_Continue"

Reserved Word

ReservedWord :: Keyword FutureReservedWord NullLiteral BooleanLiteral Keyword :: await break casecatchclassconstcontinue debuggerdefaultdeletedo elseexportextends finallyforfunction ifimportininstanceof new return superswitch thisthrowtrytypeof varvoid whilewith yield

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 FutureReservedWord s when parsing strict mode code :

implements package protected
interface private public

FutureReservedWord :: enum

Universal Resource Identifier

uri ::: uriCharacters opt uriCharacters ::: uriCharacter uriCharacters opt uriCharacter ::: uriReserved uriUnescaped uriEscaped uriReserved :::one of ;/?:@&=+$, uriUnescaped ::: uriAlpha DecimalDigit uriMark uriEscaped ::: %HexDigit HexDigit uriAlpha :::one of abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ uriMark :::one of -_.!~*'()

Source Code

Source Text

SourceCharacter :: any Unicode code point

Lexical Grammar

Lexical Grammar

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 DivPunctuator :: / /= RightBracePunctuator :: }

White Space

WhiteSpace :: <TAB> <VT> <FF> <SP> <NBSP> <ZWNBSP> <USP>

Line Terminator

LineTerminator :: <LF> <CR> <LS> <PS> LineTerminatorSequence :: <LF> <CR>[lookahead ≠ <LF>] <LS> <PS> <CR><LF>

Comment

Comment :: MultiLineComment SingleLineComment MultiLineComment :: /*MultiLineCommentChars opt*/ MultiLineCommentChars :: MultiLineNotAsteriskChar MultiLineCommentChars opt *PostAsteriskCommentChars opt PostAsteriskCommentChars :: MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentChars opt *PostAsteriskCommentChars opt MultiLineNotAsteriskChar :: SourceCharacter but not * MultiLineNotForwardSlashOrAsteriskChar :: SourceCharacter but not one of / or * SingleLineComment :: //SingleLineCommentChars opt SingleLineCommentChars :: SingleLineCommentChar SingleLineCommentChars opt SingleLineCommentChar :: SourceCharacter but not LineTerminator

Common Token

CommonToken :: IdentifierName Punctuator NumericLiteral StringLiteral Template Punctuator :: {()[] ....;, <><=>= ==!====!== +-*%** ++-- <<>>>>> &|^ !~ &&|| ?: =+=-=*=%=**=<<=>>=>>>=&=|=^= =>

Copyright (C) 2017 杜甫々
改訂版初版:2017年12月17日、最終更新:2017年12月17日
https://www.tohoho-web.com/js/syntax.htm

AltStyle によって変換されたページ (->オリジナル) /