March 1999 Draft
JavaScript 2.0
Grammar
|
|
Wednesday, March 24, 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
{normal, initial}
{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
PostfixExpression
FullPostfixExpression
| ShortNewExpression
FullPostfixExpression
PrimaryExpression
| FullNewExpression
| FullPostfixExpression MemberOperator
| FullPostfixExpression Arguments
| PostfixExpression ++
| PostfixExpression --
| PostfixExpression !
| PostfixExpression ~
FullNewExpression new
FullNewSubexpression Arguments
ShortNewExpression new
ShortNewSubexpression
FullNewSubexpression
PrimaryExpressionnormal
| FullNewSubexpression MemberOperator
| FullNewExpression
ShortNewSubexpression
FullNewSubexpression
| ShortNewExpression
MemberOperator
[
ArgumentList ]
| .
QualifiedIdentifier
| .
ParenthesizedExpression
| @
QualifiedIdentifier
| @
ParenthesizedExpression
Arguments (
ArgumentList )
ArgumentList
«empty»
| ArgumentListPrefix
ArgumentListPrefix
AssignmentExpressionnormal,allowIn
| ArgumentListPrefix ,
AssignmentExpressionnormal,allowIn
Prefix Unary Operators
UnaryExpression
PostfixExpression
| delete
PostfixExpressionnormal
| typeof
UnaryExpressionnormal
| eval
UnaryExpressionnormal
| ++
PostfixExpressionnormal
| --
PostfixExpressionnormal
| +
UnaryExpressionnormal
| -
UnaryExpressionnormal
| ~
UnaryExpressionnormal
| !
UnaryExpressionnormal
Multiplicative Operators
MultiplicativeExpression
UnaryExpression
| MultiplicativeExpression *
UnaryExpressionnormal
| MultiplicativeExpression /
UnaryExpressionnormal
| MultiplicativeExpression %
UnaryExpressionnormal
Additive Operators
AdditiveExpression
MultiplicativeExpression
| AdditiveExpression +
MultiplicativeExpressionnormal
| AdditiveExpression -
MultiplicativeExpressionnormal
Bitwise Shift Operators
ShiftExpression
AdditiveExpression
| ShiftExpression <<
AdditiveExpressionnormal
| ShiftExpression >>
AdditiveExpressionnormal
| ShiftExpression >>>
AdditiveExpressionnormal
Relational Operators
RelationalExpression,allowIn
ShiftExpression
| RelationalExpression,allowIn <
ShiftExpressionnormal
| RelationalExpression,allowIn >
ShiftExpressionnormal
| RelationalExpression,allowIn <=
ShiftExpressionnormal
| RelationalExpression,allowIn >=
ShiftExpressionnormal
| RelationalExpression,allowIn instanceof
ShiftExpressionnormal
| RelationalExpression,allowIn in
ShiftExpressionnormal
RelationalExpression,noIn
ShiftExpression
| RelationalExpression,noIn <
ShiftExpressionnormal
| RelationalExpression,noIn >
ShiftExpressionnormal
| RelationalExpression,noIn <=
ShiftExpressionnormal
| RelationalExpression,noIn >=
ShiftExpressionnormal
| RelationalExpression,noIn instanceof
ShiftExpressionnormal
Equality Operators
EqualityExpression,
RelationalExpression,
| EqualityExpression, ==
RelationalExpressionnormal,
| EqualityExpression, !=
RelationalExpressionnormal,
| EqualityExpression, ===
RelationalExpressionnormal,
| EqualityExpression, !==
RelationalExpressionnormal,
Binary Bitwise Operators
BitwiseAndExpression,
EqualityExpression,
| BitwiseAndExpression, &
EqualityExpressionnormal,
BitwiseXorExpression,
BitwiseAndExpression,
| BitwiseXorExpression, ^
BitwiseAndExpressionnormal,
| BitwiseXorExpression, ^
*
| BitwiseXorExpression, ^
?
BitwiseOrExpression,
BitwiseXorExpression,
| BitwiseOrExpression, |
BitwiseXorExpressionnormal,
| BitwiseOrExpression, |
*
| BitwiseOrExpression, |
?
Binary Logical Operators
LogicalAndExpression,
BitwiseOrExpression,
| LogicalAndExpression, &&
BitwiseOrExpressionnormal,
LogicalOrExpression,
LogicalAndExpression,
| LogicalOrExpression, ||
LogicalAndExpressionnormal,
Conditional Operator
ConditionalExpression,
LogicalOrExpression,
| LogicalOrExpression, ?
AssignmentExpressionnormal, :
AssignmentExpressionnormal,
NonAssignmentExpression,
LogicalOrExpression,
| LogicalOrExpression, ?
NonAssignmentExpressionnormal, :
NonAssignmentExpressionnormal,
Assignment Operators
AssignmentExpression,
ConditionalExpression,
| PostfixExpression =
AssignmentExpressionnormal,
| PostfixExpression CompoundAssignment AssignmentExpressionnormal,
CompoundAssignment
*=
| /=
| %=
| +=
| -=
| <<=
| >>=
| >>>=
| &=
| ^=
| |=
Expressions
Expression,
AssignmentExpression,
| Expression, ,
AssignmentExpressionnormal,
OptionalExpression
Expressionnormal,allowIn
| «empty»
Type Expressions
TypeExpression, NonAssignmentExpression,
Statements
{top, class, block}
{abbrev, abbrevNonEmpty, abbrevNoShortIf, full}
Statement,
CodeStatement
| Definition,
CodeStatement
EmptyStatement
| ExpressionStatement Semicolon
| Blockblock
| LabeledStatement
| IfStatement
| SwitchStatement
| DoStatement Semicolon
| WhileStatement
| ForStatement
| WithStatement
| ContinueStatement Semicolon
| BreakStatement Semicolon
| ReturnStatement Semicolon
| ThrowStatement Semicolon
| TryStatement
| ImportStatement
Semicolonabbrev
;
| «empty»
SemicolonabbrevNonEmpty
;
| «empty»
SemicolonabbrevNoShortIf
;
| «empty»
Empty Statement
EmptyStatementabbrev
;
| «empty»
EmptyStatementabbrevNonEmpty ;
EmptyStatementabbrevNoShortIf
;
| «empty»
Expression Statement
ExpressionStatement Expressioninitial,allowIn
Block
Statements
Statement,abbrev
| StatementsPrefix Statement,abbrevNonEmpty
StatementsPrefix
Statement,full
| StatementsPrefix Statement,full
Labeled Statements
LabeledStatement Identifier :
CodeStatement
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
WhileStatement while
ParenthesizedExpression CodeStatement
For Statements
ForStatement
for
(
ForInitializer ;
OptionalExpression ;
OptionalExpression )
CodeStatement
| for
(
ForInBinding in
Expressionnormal,allowIn )
CodeStatement
ForInitializer
«empty»
| Expressionnormal,noIn
| VariableDefinitionKind VariableBindingListnoIn
ForInBinding
PostfixExpressionnormal
| VariableDefinitionKind VariableBindingnoIn
With Statement
WithStatement with
ParenthesizedExpression CodeStatement
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
Definition,
Visibility GlobalDefinition
| LocalDefinition,
GlobalDefinition
VersionDefinition Semicolon
| VariableDefinition Semicolon
| FunctionDefinition
| MemberDefinition
| ClassDefinition
LocalDefinitiontop,
VersionDefinition Semicolon
| VariableDefinition Semicolon
| FunctionDefinition
| ClassDefinition
LocalDefinitionclass,
VariableDefinition Semicolon
| FunctionDefinition
| MemberDefinition
| ClassDefinition
LocalDefinitionblock,
VariableDefinition Semicolon
| 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 Definition
VersionDefinition
version
Version
| version
Version >
VersionList
| version
Version =
Version
VersionList
Version
| VersionList ,
Version
Variable Definition
VariableDefinition VariableDefinitionKind VariableBindingListallowIn
VariableDefinitionKind
var
| const
VariableBindingList
VariableBinding
| VariableBindingList ,
VariableBinding
VariableBinding TypedIdentifier VariableInitializer
TypedIdentifier
Identifier
| TypeExpressionnormal, Identifier
VariableInitializer
«empty»
| =
AssignmentExpressionnormal,
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
MemberDefinition
FieldDefinition Semicolon
| MethodDefinition
| ConstructorDefinition
FieldDefinition field
VariableBindingListallowIn
MethodDefinition
ConcreteMethodDefinition
| AbstractMethodDefinition
ConcreteMethodDefinition MethodPrefix Identifier FunctionSignature Blockblock
AbstractMethodDefinition MethodPrefix Identifier FunctionSignature Semicolon
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