JavaScript 2.0
Grammar
previousupnext

This LALR(1) grammar describes the syntax of the JavaScript 2.0 proposal. The starting nonterminal is Program. See also the description of the grammar notation.

This document is also available as a Word 98 rtf file.

Terminals

General tokens: Identifier   Number   RegularExpression   String

Punctuation tokens: !   !=   !==   %   %=   &   &&   &=   (   )   *   *=   +   ++   +=   ,   -   --   -=   .   ..   ...   /   /=   :   ::   ;   <   <<   <<=   <=   =   ==   ===   >   >=   >>   >>=   >>>   >>>=   ?   [   ]   ^   ^=   {   |   |=   ||   }   ~

Future punctuation tokens: #   &&=   ->   @   ^^   ^^=   ||=

Reserved words: break   case   catch   class   const   continue   default   delete   do   else   eval   extends   false   field   final   finally   for   function   if   import   in   instanceof   new   null   package   private   protected   public   return   super   switch   this   throw   true   try   typeof   var   while   with

Future reserved words: abstract   debugger   enum   export   goto   implements   native   static   synchronized   throws   transient   volatile

Non-reserved words: constructor   getter   method   override   setter   traditional   version

Expressions

a  {normalinitial}
b  {allowInnoIn}

Identifiers

Identifier 
   Identifier
|  version
|  override
|  method
|  getter
|  setter
|  traditional
|  constructor
QualifiedIdentifier 
   Identifier
|  QualifiedIdentifier :: Identifier
|  ParenthesizedExpression :: Identifier

Primary Expressions

PrimaryExpressionnormal 
   SimpleExpression
|  FunctionExpression
|  ObjectLiteral
PrimaryExpressioninitial  SimpleExpression
SimpleExpression 
   null
|  true
|  false
|  Number
|  String
|  this
|  super
|  QualifiedIdentifier
|  RegularExpression
|  ParenthesizedExpression
|  ArrayLiteral
ParenthesizedExpression  ( Expressionnormal,allowIn )

Function Expressions

FunctionExpression 
   AnonymousFunction
|  NamedFunction

Object Literals

ObjectLiteral 
   { }
|  { FieldList }
FieldList 
   LiteralField
|  FieldList , LiteralField
LiteralField  QualifiedIdentifier : AssignmentExpressionnormal,allowIn

Array Literals

ArrayLiteral 
   [ ]
|  [ ElementList ]
ElementList 
   LiteralElement
|  ElementList , LiteralElement
LiteralElement  AssignmentExpressionnormal,allowIn

Postfix Unary Operators

PostfixExpressiona 
   FullPostfixExpressiona
|  ShortNewExpression
FullPostfixExpressiona 
   PrimaryExpressiona
|  FullNewExpression
|  FullPostfixExpressiona MemberOperator
|  FullPostfixExpressiona Arguments
|  PostfixExpressiona ++
|  PostfixExpressiona --
|  PostfixExpressiona !
|  PostfixExpressiona ~
FullNewExpression  new FullNewSubexpression Arguments
ShortNewExpression  new ShortNewSubexpression
FullNewSubexpression 
   PrimaryExpressionnormal
|  FullNewSubexpression MemberOperator
|  FullNewExpression
ShortNewSubexpression 
   FullNewSubexpression
|  ShortNewExpression
MemberOperator 
   [ ArgumentList ]
|  . QualifiedIdentifier
|  . ParenthesizedExpression
Arguments  ( ArgumentList )
ArgumentList 
   «empty»
|  ArgumentListPrefix
ArgumentListPrefix 
   AssignmentExpressionnormal,allowIn
|  ArgumentListPrefix , AssignmentExpressionnormal,allowIn

Prefix Unary Operators

UnaryExpressiona 
   PostfixExpressiona
|  delete PostfixExpressionnormal
|  typeof UnaryExpressionnormal
|  eval UnaryExpressionnormal
|  ++ PostfixExpressionnormal
|  -- PostfixExpressionnormal
|  + UnaryExpressionnormal
|  - UnaryExpressionnormal
|  ~ UnaryExpressionnormal
|  ! UnaryExpressionnormal

Multiplicative Operators

MultiplicativeExpressiona 
   UnaryExpressiona
|  MultiplicativeExpressiona * UnaryExpressionnormal
|  MultiplicativeExpressiona / UnaryExpressionnormal
|  MultiplicativeExpressiona % UnaryExpressionnormal

Additive Operators

AdditiveExpressiona 
   MultiplicativeExpressiona
|  AdditiveExpressiona + MultiplicativeExpressionnormal
|  AdditiveExpressiona - MultiplicativeExpressionnormal

Bitwise Shift Operators

ShiftExpressiona 
   AdditiveExpressiona
|  ShiftExpressiona << AdditiveExpressionnormal
|  ShiftExpressiona >> AdditiveExpressionnormal
|  ShiftExpressiona >>> AdditiveExpressionnormal

Relational Operators

RelationalExpressiona,allowIn 
   ShiftExpressiona
|  RelationalExpressiona,allowIn < ShiftExpressionnormal
|  RelationalExpressiona,allowIn > ShiftExpressionnormal
|  RelationalExpressiona,allowIn <= ShiftExpressionnormal
|  RelationalExpressiona,allowIn >= ShiftExpressionnormal
|  RelationalExpressiona,allowIn instanceof ShiftExpressionnormal
|  RelationalExpressiona,allowIn in ShiftExpressionnormal
RelationalExpressiona,noIn 
   ShiftExpressiona
|  RelationalExpressiona,noIn < ShiftExpressionnormal
|  RelationalExpressiona,noIn > ShiftExpressionnormal
|  RelationalExpressiona,noIn <= ShiftExpressionnormal
|  RelationalExpressiona,noIn >= ShiftExpressionnormal
|  RelationalExpressiona,noIn instanceof ShiftExpressionnormal

Equality Operators

EqualityExpressiona,b 
   RelationalExpressiona,b
|  EqualityExpressiona,b == RelationalExpressionnormal,b
|  EqualityExpressiona,b != RelationalExpressionnormal,b
|  EqualityExpressiona,b === RelationalExpressionnormal,b
|  EqualityExpressiona,b !== RelationalExpressionnormal,b

Binary Bitwise Operators

BitwiseAndExpressiona,b 
   EqualityExpressiona,b
|  BitwiseAndExpressiona,b & EqualityExpressionnormal,b
BitwiseXorExpressiona,b 
   BitwiseAndExpressiona,b
|  BitwiseXorExpressiona,b ^ BitwiseAndExpressionnormal,b
BitwiseOrExpressiona,b 
   BitwiseXorExpressiona,b
|  BitwiseOrExpressiona,b | BitwiseXorExpressionnormal,b

Binary Logical Operators

LogicalAndExpressiona,b 
   BitwiseOrExpressiona,b
|  LogicalAndExpressiona,b && BitwiseOrExpressionnormal,b
LogicalOrExpressiona,b 
   LogicalAndExpressiona,b
|  LogicalOrExpressiona,b || LogicalAndExpressionnormal,b

Conditional Operator

ConditionalExpressiona,b 
   LogicalOrExpressiona,b
|  LogicalOrExpressiona,b ? AssignmentExpressionnormal,b : AssignmentExpressionnormal,b
NonAssignmentExpressiona,b 
   LogicalOrExpressiona,b
|  LogicalOrExpressiona,b ? NonAssignmentExpressionnormal,b : NonAssignmentExpressionnormal,b

Assignment Operators

AssignmentExpressiona,b 
   ConditionalExpressiona,b
|  PostfixExpressiona = AssignmentExpressionnormal,b
|  PostfixExpressiona CompoundAssignment AssignmentExpressionnormal,b
CompoundAssignment 
   *=
|  /=
|  %=
|  +=
|  -=
|  <<=
|  >>=
|  >>>=
|  &=
|  ^=
|  |=

Expressions

Expressiona,b 
   AssignmentExpressiona,b
|  Expressiona,b , AssignmentExpressionnormal,b
OptionalExpression 
   Expressionnormal,allowIn
|  «empty»

Type Expressions

TypeExpressiona,b  NonAssignmentExpressiona,b

Statements

d  {topclassblock}
w  {abbrevabbrevNonEmptyabbrevNoShortIffull}
Statementd,w 
   CodeStatementw
|  Definitiond,w
CodeStatementw 
   EmptyStatementw
|  ExpressionStatement Semicolonw
|  Blockblock
|  LabeledStatementw
|  IfStatementw
|  SwitchStatement
|  DoStatement Semicolonw
|  WhileStatementw
|  ForStatementw
|  WithStatementw
|  ContinueStatement Semicolonw
|  BreakStatement Semicolonw
|  ReturnStatement Semicolonw
|  ThrowStatement Semicolonw
|  TryStatement
|  ImportStatementw
Semicolonabbrev 
   ;
|  «empty»
SemicolonabbrevNonEmpty 
   ;
|  «empty»
SemicolonabbrevNoShortIf 
   ;
|  «empty»
Semicolonfull  ;

Empty Statement

EmptyStatementabbrev 
   ;
|  «empty»
EmptyStatementabbrevNonEmpty  ;
EmptyStatementabbrevNoShortIf 
   ;
|  «empty»
EmptyStatementfull  ;

Expression Statement

ExpressionStatement  Expressioninitial,allowIn

Block

Blockd  { Statementsd }
Statementsd 
   Statementd,abbrev
|  StatementsPrefixd Statementd,abbrevNonEmpty
StatementsPrefixd 
   Statementd,full
|  StatementsPrefixd Statementd,full

Labeled Statements

LabeledStatementw  Identifier : CodeStatementw

If Statement

IfStatementabbrev 
   if ParenthesizedExpression CodeStatementabbrev
|  if ParenthesizedExpression CodeStatementabbrevNoShortIf else CodeStatementabbrev
IfStatementabbrevNonEmpty 
   if ParenthesizedExpression CodeStatementabbrevNonEmpty
|  if ParenthesizedExpression CodeStatementabbrevNoShortIf else CodeStatementabbrevNonEmpty
IfStatementfull 
   if ParenthesizedExpression CodeStatementfull
|  if ParenthesizedExpression CodeStatementabbrevNoShortIf else CodeStatementfull
IfStatementabbrevNoShortIf  if ParenthesizedExpression CodeStatementabbrevNoShortIf else CodeStatementabbrevNoShortIf

Switch Statement

SwitchStatement 
   switch ParenthesizedExpression { }
|  switch ParenthesizedExpression { CaseGroups LastCaseGroup }
CaseGroups 
   «empty»
|  CaseGroups CaseGroup
CaseGroup  CaseGuards CaseStatementsPrefix
LastCaseGroup  CaseGuards CaseStatements
CaseGuards 
   CaseGuard
|  CaseGuards CaseGuard
CaseGuard 
   case Expressionnormal,allowIn :
|  default :
CaseStatements 
   CodeStatementabbrev
|  CaseStatementsPrefix CodeStatementabbrevNonEmpty
CaseStatementsPrefix 
   CodeStatementfull
|  CaseStatementsPrefix CodeStatementfull

Do-While Statement

DoStatement  do CodeStatementabbrevNonEmpty while ParenthesizedExpression

While Statement

WhileStatementw  while ParenthesizedExpression CodeStatementw

For Statements

ForStatementw 
   for ( ForInitializer ; OptionalExpression ; OptionalExpression ) CodeStatementw
|  for ( ForInBinding in Expressionnormal,allowIn ) CodeStatementw
ForInitializer 
   «empty»
|  Expressionnormal,noIn
|  VariableDefinitionKind VariableBindingListnoIn
ForInBinding 
   PostfixExpressionnormal
|  VariableDefinitionKind VariableBindingnoIn

With Statement

WithStatementw  with ParenthesizedExpression CodeStatementw

Continue and Break Statements

ContinueStatement  continue OptionalLabel
BreakStatement  break OptionalLabel
OptionalLabel 
   «empty»
|  Identifier

Return Statement

ReturnStatement  return OptionalExpression

Throw Statement

ThrowStatement  throw Expressionnormal,allowIn

Try Statement

TryStatement 
   try Blockblock CatchClauses
|  try Blockblock FinallyClause
|  try Blockblock CatchClauses FinallyClause
CatchClauses 
   CatchClause
|  CatchClauses CatchClause
CatchClause  catch ( TypedIdentifierallowIn ) Blockblock
FinallyClause  finally Blockblock

Import Statement

ImportStatementabbrev 
   import ImportList Semicolonabbrev
|  import ImportList Blockblock
|  import ImportList Blockblock else CodeStatementabbrev
ImportStatementabbrevNonEmpty 
   import ImportList SemicolonabbrevNonEmpty
|  import ImportList Blockblock
|  import ImportList Blockblock else CodeStatementabbrevNonEmpty
ImportStatementabbrevNoShortIf 
   import ImportList SemicolonabbrevNoShortIf
|  import ImportList Blockblock else CodeStatementabbrevNoShortIf
ImportStatementfull 
   import ImportList Semicolonfull
|  import ImportList Blockblock
|  import ImportList Blockblock else CodeStatementfull
ImportList 
   ImportItem
|  ImportList , ImportItem
ImportItem 
   ImportSource
|  Identifier = ImportSource
|  protected Identifier = ImportSource
ImportSource 
   NonAssignmentExpressionnormal,noIn
|  NonAssignmentExpressionnormal,noIn : Version

Definitions

Definitiond,w 
   Visibility GlobalDefinitionw
|  LocalDefinitiond,w
GlobalDefinitionw 
   VersionDefinition Semicolonw
|  VariableDefinition Semicolonw
|  FunctionDefinition
|  MemberDefinitionw
|  ClassDefinition
LocalDefinitiontop,w 
   VersionDefinition Semicolonw
|  VariableDefinition Semicolonw
|  FunctionDefinition
|  ClassDefinition
LocalDefinitionclass,w 
   VariableDefinition Semicolonw
|  FunctionDefinition
|  MemberDefinitionw
|  ClassDefinition
LocalDefinitionblock,w 
   VariableDefinition Semicolonw
|  FunctionDefinition

Visibility Specifications

Visibility 
   private
|  package
|  public VersionsAndRenames
VersionsAndRenames 
   «empty»
|  < VersionRangesAndAliases >
VersionRangesAndAliases 
   «empty»
|  VersionRangesAndAliasesPrefix
VersionRangesAndAliasesPrefix 
   VersionRangeAndAlias
|  VersionRangesAndAliasesPrefix , VersionRangeAndAlias
VersionRangeAndAlias 
   VersionRange
|  VersionRange : Identifier
VersionRange 
   Version
|  OptionalVersion .. OptionalVersion

Versions

OptionalVersion 
   Version
|  «empty»
Version 
   Number
|  String

Version Definition

VersionDefinition 
   version Version
|  version Version > VersionList
VersionList 
   Version
|  VersionList , Version

Variable Definition

VariableDefinition  VariableDefinitionKind VariableBindingListallowIn
VariableDefinitionKind 
   var
|  const
VariableBindingListb 
   VariableBindingb
|  VariableBindingListb , VariableBindingb
VariableBindingb  TypedIdentifierb VariableInitializerb
TypedIdentifierb 
   Identifier
|  TypeExpressionnormal,b Identifier
VariableInitializerb 
   «empty»
|  = AssignmentExpressionnormal,b

Function Definition

FunctionDefinition 
   NamedFunction
|  getter NamedFunction
|  setter NamedFunction
|  TraditionalFunction
AnonymousFunction  function FunctionSignature Blockblock
NamedFunction  function Identifier FunctionSignature Blockblock
FunctionSignature  ParameterSignature ResultSignature
ParameterSignature  ( Parameters )
Parameters 
   «empty»
|  RestParameter
|  RequiredParameters
|  OptionalParameters
|  RequiredParameters , RestParameter
|  OptionalParameters , RestParameter
RequiredParameters 
   RequiredParameter
|  RequiredParameters , RequiredParameter
OptionalParameters 
   OptionalParameter
|  RequiredParameters , OptionalParameter
|  OptionalParameters , OptionalParameter
RequiredParameter  TypedIdentifierallowIn
OptionalParameter 
   TypedIdentifierallowIn =
|  TypedIdentifierallowIn = AssignmentExpressionnormal,allowIn
RestParameter 
   ...
|  ... Identifier
ResultSignature 
   «empty»
|  TypeExpressioninitial,allowIn
TraditionalFunction  traditional function Identifier ( TraditionalParameterList ) Blockblock
TraditionalParameterList 
   «empty»
|  TraditionalParameterListPrefix
TraditionalParameterListPrefix 
   Identifier
|  TraditionalParameterListPrefix , Identifier

Class Member Definitions

MemberDefinitionw 
   FieldDefinition Semicolonw
|  MethodDefinitionw
|  ConstructorDefinition
FieldDefinition  field VariableBindingListallowIn
MethodDefinitionw 
   ConcreteMethodDefinition
|  AbstractMethodDefinitionw
ConcreteMethodDefinition  MethodPrefix Identifier FunctionSignature Blockblock
AbstractMethodDefinitionw  MethodPrefix Identifier FunctionSignature Semicolonw
MethodPrefix 
   MethodKind
|  override MethodKind
|  final MethodKind
|  final override MethodKind
MethodKind 
   method
|  getter method
|  setter method
ConstructorDefinition  constructor ConstructorName ParameterSignature Blockblock
ConstructorName 
   new
|  Identifier

Class Definition

ClassDefinition 
   class Identifier Superclasses Blockclass
|  class extends TypeExpressioninitial,allowIn Blockclass
Superclasses 
   «empty»
|  extends TypeExpressioninitial,allowIn

Programs

Program  Statementstop

Waldemar Horwat