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]}
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 }
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]
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])
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
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 }
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]
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
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>
MultiLineNotAsteriskChar ::
SourceCharacter but not *
MultiLineNotForwardSlashOrAsteriskChar ::
SourceCharacter but not one of / or *
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