Expressions
Primary Expressions
PrimaryExpression Þ
this
| null
| true
| false
| Number
| String
| Identifier
| RegularExpression
| ( Expression )
Left-Side Expressions
c Î {allowCalls, noCalls}
a Î {allowIn, noIn}
MemberExpressionnoCalls Þ
PrimaryExpression
| MemberExpressionnoCalls [ Expression ]
| MemberExpressionnoCalls . Identifier
| new MemberExpressionnoCalls Arguments
MemberExpressionallowCalls Þ
MemberExpressionnoCalls Arguments
| MemberExpressionallowCalls Arguments
| MemberExpressionallowCalls [ Expression ]
| MemberExpressionallowCalls . Identifier
NewExpression Þ
MemberExpressionnoCalls
| new NewExpression
Arguments Þ
( )
| ( ArgumentList )
ArgumentList Þ
AssignmentExpressionallowIn
| ArgumentList , AssignmentExpressionallowIn
LeftSideExpression Þ
NewExpression
| MemberExpressionallowCalls
Postfix Expressions
PostfixExpression Þ
LeftSideExpression
| LeftSideExpression ++
| LeftSideExpression --
Unary Operators
UnaryExpression Þ
PostfixExpression
| delete LeftSideExpression
| void UnaryExpression
| typeof UnaryExpression
| ++ LeftSideExpression
| -- LeftSideExpression
| + UnaryExpression
| - UnaryExpression
| ~ UnaryExpression
| ! UnaryExpression
Multiplicative Operators
MultiplicativeExpression Þ
UnaryExpression
| MultiplicativeExpression * UnaryExpression
| MultiplicativeExpression / UnaryExpression
| MultiplicativeExpression % UnaryExpression
Additive Operators
AdditiveExpression Þ
MultiplicativeExpression
| AdditiveExpression + MultiplicativeExpression
| AdditiveExpression - MultiplicativeExpression
Bitwise Shift Operators
ShiftExpression Þ
AdditiveExpression
| ShiftExpression << AdditiveExpression
| ShiftExpression >> AdditiveExpression
| ShiftExpression >>> AdditiveExpression
Relational Operators
RelationalExpressionallowIn Þ
ShiftExpression
| RelationalExpressionallowIn < ShiftExpression
| RelationalExpressionallowIn > ShiftExpression
| RelationalExpressionallowIn <= ShiftExpression
| RelationalExpressionallowIn >= ShiftExpression
| RelationalExpressionallowIn instanceof ShiftExpression
| RelationalExpressionallowIn in ShiftExpression
RelationalExpressionnoIn Þ
ShiftExpression
| RelationalExpressionnoIn < ShiftExpression
| RelationalExpressionnoIn > ShiftExpression
| RelationalExpressionnoIn <= ShiftExpression
| RelationalExpressionnoIn >= ShiftExpression
| RelationalExpressionnoIn instanceof ShiftExpression
Equality Operators
EqualityExpressiona Þ
RelationalExpressiona
| EqualityExpressiona == RelationalExpressiona
| EqualityExpressiona != RelationalExpressiona
| EqualityExpressiona === RelationalExpressiona
| EqualityExpressiona !== RelationalExpressiona
Binary Bitwise Operators
BitwiseAndExpressiona Þ
EqualityExpressiona
| BitwiseAndExpressiona & EqualityExpressiona
BitwiseXorExpressiona Þ
BitwiseAndExpressiona
| BitwiseXorExpressiona ^ BitwiseAndExpressiona
BitwiseOrExpressiona Þ
BitwiseXorExpressiona
| BitwiseOrExpressiona | BitwiseXorExpressiona
Binary Logical Operators
LogicalAndExpressiona Þ
BitwiseOrExpressiona
| LogicalAndExpressiona && BitwiseOrExpressiona
LogicalOrExpressiona Þ
LogicalAndExpressiona
| LogicalOrExpressiona || LogicalAndExpressiona
Conditional Operator
ConditionalExpressiona Þ
LogicalOrExpressiona
| LogicalOrExpressiona ? AssignmentExpressiona : AssignmentExpressiona
Assignment Operators
AssignmentExpressiona Þ
ConditionalExpressiona
| LeftSideExpression = AssignmentExpressiona
| LeftSideExpression CompoundAssignment AssignmentExpressiona
CompoundAssignment Þ
*=
| /=
| %=
| +=
| -=
Expressions
CommaExpressiona Þ AssignmentExpressiona
Expression Þ CommaExpressionallowIn
OptionalExpression Þ
Expression
| «empty»
Statements
w Î {abbrev, abbrevNonEmpty, abbrevNoShortIf, full}
Statementw Þ
BlocklikeStatement
| UnterminatedStatement ;
| NonuniformStatementw
| IfStatementw
| WhileStatementw
| ForStatementw
| LabeledStatementw
NonuniformStatementabbrev Þ
EmptyStatement ;
| EmptyStatement
| UnterminatedStatement
NonuniformStatementabbrevNonEmpty Þ
EmptyStatement ;
| UnterminatedStatement
NonuniformStatementabbrevNoShortIf Þ
EmptyStatement ;
| UnterminatedStatement
| EmptyStatement
NonuniformStatementfull Þ EmptyStatement ;
BlocklikeStatement Þ
Block
| SwitchStatement
| TryStatement
UnterminatedStatement Þ
VariableStatement
| ExpressionStatement
| DoStatement
| ContinueStatement
| BreakStatement
| ReturnStatement
| ThrowStatement
Block
Block Þ { BlockStatements }
BlockStatements Þ
Statementabbrev
| BlockStatementsPrefix StatementabbrevNonEmpty
BlockStatementsPrefix Þ
Statementfull
| BlockStatementsPrefix Statementfull
Variable Statement
VariableStatement Þ var VariableDeclarationListallowIn
VariableDeclarationLista Þ
VariableDeclarationa
| VariableDeclarationLista , VariableDeclarationa
VariableDeclarationa Þ
Identifier
| Identifier = AssignmentExpressiona
Empty Statement
Expression Statement
ExpressionStatement Þ Expression
If Statement
IfStatementabbrev Þ
if ( Expression ) Statementabbrev
| if ( Expression ) StatementabbrevNoShortIf else Statementabbrev
IfStatementabbrevNonEmpty Þ
if ( Expression ) StatementabbrevNonEmpty
| if ( Expression ) StatementabbrevNoShortIf else StatementabbrevNonEmpty
IfStatementfull Þ
if ( Expression ) Statementfull
| if ( Expression ) StatementabbrevNoShortIf else Statementfull
IfStatementabbrevNoShortIf Þ if ( Expression ) StatementabbrevNoShortIf else StatementabbrevNoShortIf
Do-While Statement
DoStatement Þ do StatementabbrevNonEmpty while ( Expression )
While Statement
WhileStatementw Þ while ( Expression ) Statementw
For Statements
ForStatementw Þ
for ( ForInitializer ; OptionalExpression ; OptionalExpression ) Statementw
| for ( ForInBinding in Expression ) Statementw
ForInitializer Þ
«empty»
| CommaExpressionnoIn
| var VariableDeclarationListnoIn
ForInBinding Þ
LeftSideExpression
| var VariableDeclarationnoIn
Continue and Break Statements
ContinueStatement Þ continue OptionalLabel
BreakStatement Þ break OptionalLabel
OptionalLabel Þ
«empty»
| Identifier
Labeled Statements
LabeledStatementw Þ Identifier : Statementw
Return Statement
ReturnStatement Þ return OptionalExpression
Switch Statement
SwitchStatement Þ
switch ( Expression ) { }
| switch ( Expression ) { CaseGroups LastCaseGroup }
CaseGroups Þ
«empty»
| CaseGroups CaseGroup
CaseGroup Þ CaseGuards BlockStatementsPrefix
LastCaseGroup Þ CaseGuards BlockStatements
CaseGuards Þ
CaseGuard
| CaseGuards CaseGuard
CaseGuard Þ
case Expression :
| default :
Throw Statement
ThrowStatement Þ throw Expression
Try Statement
TryStatement Þ
try Block CatchClauses
| try Block FinallyClause
| try Block CatchClauses FinallyClause
CatchClauses Þ
CatchClause
| CatchClauses CatchClause
CatchClause Þ catch ( Identifier ) Block
FinallyClause Þ finally Block
Functions
FunctionDeclaration Þ function Identifier ( FormalParameters ) { FunctionStatements }
FormalParameters Þ
«empty»
| FormalParametersPrefix
FormalParametersPrefix Þ
Identifier
| FormalParametersPrefix , Identifier
FunctionStatements Þ
FunctionStatementabbrev
| FunctionStatementsPrefix FunctionStatementabbrevNonEmpty
FunctionStatementsPrefix Þ
FunctionStatementfull
| FunctionStatementsPrefix FunctionStatementfull
FunctionStatementw Þ
Statementw
| FunctionDeclaration
Programs
Program Þ FunctionStatements