JavaScript 2.0
Formal Description
Parser Grammar
previousupnext

Monday, June 7, 1999

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

b  {allowInnoIn}

Identifiers

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

Primary Expressions

PrimaryExpression 
   null
|  true
|  false
|  Number
|  String
|  this
|  super
|  QualifiedIdentifier
|  RegularExpression
|  ParenthesizedExpression
|  ArrayLiteral
|  ObjectLiteral
|  FunctionExpression
ParenthesizedExpression  ( ExpressionallowIn )

Function Expressions

FunctionExpression 
   AnonymousFunction
|  NamedFunction

Object Literals

ObjectLiteral 
   { }
|  { FieldList }
FieldList 
   LiteralField
|  FieldList , LiteralField
LiteralField  QualifiedIdentifier : AssignmentExpressionallowIn

Array Literals

ArrayLiteral 
   [ ]
|  [ ElementList ]
ElementList 
   LiteralElement
|  ElementList , LiteralElement
LiteralElement  AssignmentExpressionallowIn

Postfix Unary Operators

PostfixExpression 
   FullPostfixExpression
|  ShortNewExpression
FullPostfixExpression 
   PrimaryExpression
|  FullNewExpression
|  FullPostfixExpression MemberOperator
|  FullPostfixExpression Arguments
|  PostfixExpression ++
|  PostfixExpression --
FullNewExpression  new FullNewSubexpression Arguments
ShortNewExpression  new ShortNewSubexpression
FullNewSubexpression 
   PrimaryExpression
|  FullNewSubexpression MemberOperator
|  FullNewExpression
ShortNewSubexpression 
   FullNewSubexpression
|  ShortNewExpression
MemberOperator 
   [ ArgumentList ]
|  . QualifiedIdentifier
|  . ParenthesizedExpression
|  @ QualifiedIdentifier
|  @ ParenthesizedExpression
Arguments  ( ArgumentList )
ArgumentList 
   «empty»
|  ArgumentListPrefix
ArgumentListPrefix 
   AssignmentExpressionallowIn
|  ArgumentListPrefix , AssignmentExpressionallowIn

Prefix Unary Operators

UnaryExpression 
   PostfixExpression
|  delete PostfixExpression
|  typeof UnaryExpression
|  eval UnaryExpression
|  ++ PostfixExpression
|  -- PostfixExpression
|  + 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

EqualityExpressionb 
   RelationalExpressionb
|  EqualityExpressionb == RelationalExpressionb
|  EqualityExpressionb != RelationalExpressionb
|  EqualityExpressionb === RelationalExpressionb
|  EqualityExpressionb !== RelationalExpressionb

Binary Bitwise Operators

BitwiseAndExpressionb 
   EqualityExpressionb
|  BitwiseAndExpressionb & EqualityExpressionb
BitwiseXorExpressionb 
   BitwiseAndExpressionb
|  BitwiseXorExpressionb ^ BitwiseAndExpressionb
|  BitwiseXorExpressionb ^ *
|  BitwiseXorExpressionb ^ ?
BitwiseOrExpressionb 
   BitwiseXorExpressionb
|  BitwiseOrExpressionb | BitwiseXorExpressionb
|  BitwiseOrExpressionb | *
|  BitwiseOrExpressionb | ?

Binary Logical Operators

LogicalAndExpressionb 
   BitwiseOrExpressionb
|  LogicalAndExpressionb && BitwiseOrExpressionb
LogicalOrExpressionb 
   LogicalAndExpressionb
|  LogicalOrExpressionb || LogicalAndExpressionb

Conditional Operator

ConditionalExpressionb 
   LogicalOrExpressionb
|  LogicalOrExpressionb ? AssignmentExpressionb : AssignmentExpressionb
NonAssignmentExpressionb 
   LogicalOrExpressionb
|  LogicalOrExpressionb ? NonAssignmentExpressionb : NonAssignmentExpressionb

Assignment Operators

AssignmentExpressionb 
   ConditionalExpressionb
|  PostfixExpression = AssignmentExpressionb
|  PostfixExpression CompoundAssignment AssignmentExpressionb
CompoundAssignment 
   *=
|  /=
|  %=
|  +=
|  -=
|  <<=
|  >>=
|  >>>=
|  &=
|  ^=
|  |=

Expressions

Expressionb 
   AssignmentExpressionb
|  Expressionb , AssignmentExpressionb
OptionalExpression 
   ExpressionallowIn
|  «empty»

Type Expressions

TypeExpressionb  NonAssignmentExpressionb

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  [lookahead{function{}] ExpressionallowIn

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 ExpressionallowIn :
|  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 ExpressionallowIn ) CodeStatementw
ForInitializer 
   «empty»
|  ExpressionnoIn
|  VariableDefinitionKind VariableBindingListnoIn
ForInBinding 
   PostfixExpression
|  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 ExpressionallowIn

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 
   NonAssignmentExpressionnoIn
|  NonAssignmentExpressionnoIn : 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»
|  VersionsAndRenamesPrefix
VersionsAndRenamesPrefix 
   VersionRangeAndAlias
|  VersionsAndRenamesPrefix , VersionRangeAndAlias
VersionRangeAndAlias 
   VersionRange
|  VersionRange : Identifier
VersionRange 
   Version
|  OptionalVersion .. OptionalVersion

Versions

OptionalVersion 
   Version
|  «empty»
Version  String

Version Definition

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

Variable Definition

VariableDefinition  VariableDefinitionKind VariableBindingListallowIn
VariableDefinitionKind 
   var
|  const
VariableBindingListb 
   VariableBindingb
|  VariableBindingListb , VariableBindingb
VariableBindingb  TypedIdentifierb VariableInitializerb
TypedIdentifierb 
   Identifier
|  TypeExpressionb Identifier
VariableInitializerb 
   «empty»
|  = AssignmentExpressionb

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 = AssignmentExpressionallowIn
RestParameter 
   ...
|  ... Identifier
ResultSignature 
   «empty»
|  [lookahead{{}] TypeExpressionallowIn
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 TypeExpressionallowIn Blockclass
Superclasses 
   «empty»
|  extends TypeExpressionallowIn

Programs

Program  Statementstop

Waldemar Horwat
Last modified Monday, June 7, 1999