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 {normal, initial}
b {allowIn, noIn}
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 {top, class, block}
w {abbrev, abbrevNonEmpty, abbrevNoShortIf, full}
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»
Empty Statement
EmptyStatementabbrev
;
| «empty»
EmptyStatementabbrevNonEmpty ;
EmptyStatementabbrevNoShortIf
;
| «empty»
Expression Statement
ExpressionStatement Expressioninitial,allowIn
Block
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 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
Waldemar Horwat