Expressions

Primary Expressions

PrimaryExpression Þ
   this
|  null
|  true
|  false
|  Number
|  String
|  Identifier
|  RegularExpression
|  ( Expression )

Left-Side Expressions

c Î {allowCallsnoCalls}
a Î {allowInnoIn}
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 Î {abbrevabbrevNonEmptyabbrevNoShortIffull}
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

EmptyStatement Þ «empty»

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