COLLECTED BY
Organization:
Alexa Crawls
Starting in 1996,
Alexa Internet has been donating their crawl data to the Internet Archive. Flowing in every day, these data are added to the
Wayback Machine after an embargo period.
Crawl AUG from Alexa Internet. This data is currently not publicly accessible.
TIMESTAMPS
This is a LR(1) grammar written by waldemar that describes the state of ECMAScript
as of February 1999. The grammar is complete except for semicolon insertion (the OptionalSemicolon
grammar state can sometimes reduce to «empty») and distinguishing RegularExpression
from /
and /=
. Also, there is some controversy about elision in array literals, so this feature has been
omitted for now.
Grammar syntax
Grammar productions may expand nonterminals into empty right sides. Such right sides are indicated as «empty».
A number of rules in the grammar occur in groups of analogous rules. Rather than list them individually, these groups have
been summarized using the shorthand illustrated by the example below:
Statements such as
a {normal, initial}
b {allowIn, noIn}
introduce grammar arguments a and b. If these arguments later parametrize the nonterminal on the left side of a rule, that
rule is implicitly replicated into a set of rules in each of which a grammar argument is consistently substituted by one of
its variants. For example,
AssignmentExpressiona,b
ConditionalExpressiona,b
| LeftSideExpressiona =
AssignmentExpressionnormal,b
| LeftSideExpressiona CompoundAssignment AssignmentExpressionnormal,b
expands into the following four rules:
AssignmentExpressionnormal,allowIn
ConditionalExpressionnormal,allowIn
| LeftSideExpressionnormal =
AssignmentExpressionnormal,allowIn
| LeftSideExpressionnormal CompoundAssignment AssignmentExpressionnormal,allowIn
AssignmentExpressionnormal,noIn
ConditionalExpressionnormal,noIn
| LeftSideExpressionnormal =
AssignmentExpressionnormal,noIn
| LeftSideExpressionnormal CompoundAssignment AssignmentExpressionnormal,noIn
AssignmentExpressioninitial,allowIn
ConditionalExpressioninitial,allowIn
| LeftSideExpressioninitial =
AssignmentExpressionnormal,allowIn
| LeftSideExpressioninitial CompoundAssignment AssignmentExpressionnormal,allowIn
AssignmentExpressioninitial,noIn
ConditionalExpressioninitial,noIn
| LeftSideExpressioninitial =
AssignmentExpressionnormal,noIn
| LeftSideExpressioninitial CompoundAssignment AssignmentExpressionnormal,noIn
AssignmentExpressionnormal,allowIn is now an unparametrized nonterminal and processed normally by the
grammar.
Some of the expanded rules (such as the fourth one in the example above) may be unreachable from the starting nonterminal
Program; these are ignored.
Expressions
a {normal, initial}
b {allowIn, noIn}
Primary Expressions
PrimaryExpressionnormal
SimpleExpression
| FunctionExpression
| ObjectLiteral
PrimaryExpressioninitial SimpleExpression
SimpleExpression
this
| null
| true
| false
| Number
| String
| Identifier
| RegularExpression
| ParenthesizedExpression
| ArrayLiteral
ParenthesizedExpression (
Expressionnormal,allowIn )
Function Expressions
FunctionExpression
AnonymousFunction
| NamedFunction
Object Literals
ObjectLiteral
{
}
| {
FieldList }
FieldList
LiteralField
| FieldList ,
LiteralField
LiteralField Identifier :
AssignmentExpressionnormal,allowIn
Array Literals
ArrayLiteral
[
]
| [
ElementList ]
ElementList
LiteralElement
| ElementList ,
LiteralElement
LiteralElement AssignmentExpressionnormal,allowIn
Left-Side Expressions
LeftSideExpressiona
CallExpressiona
| ShortNewExpression
CallExpressiona
PrimaryExpressiona
| FullNewExpression
| CallExpressiona MemberOperator
| CallExpressiona Arguments
FullNewExpression new
FullNewSubexpression Arguments
ShortNewExpression new
ShortNewSubexpression
FullNewSubexpression
PrimaryExpressionnormal
| FullNewExpression
| FullNewSubexpression MemberOperator
ShortNewSubexpression
FullNewSubexpression
| ShortNewExpression
MemberOperator
[
Expressionnormal,allowIn ]
| .
Identifier
Arguments
(
)
| (
ArgumentList )
ArgumentList
AssignmentExpressionnormal,allowIn
| ArgumentList ,
AssignmentExpressionnormal,allowIn
Postfix Operators
PostfixExpressiona
LeftSideExpressiona
| LeftSideExpressiona ++
| LeftSideExpressiona --
Unary Operators
UnaryExpressiona
PostfixExpressiona
| delete
LeftSideExpressionnormal
| void
UnaryExpressionnormal
| typeof
UnaryExpressionnormal
| ++
LeftSideExpressionnormal
| --
LeftSideExpressionnormal
| +
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
Assignment Operators
AssignmentExpressiona,b
ConditionalExpressiona,b
| LeftSideExpressiona =
AssignmentExpressionnormal,b
| LeftSideExpressiona CompoundAssignment AssignmentExpressionnormal,b
CompoundAssignment
*=
| /=
| %=
| +=
| -=
| <<=
| >>=
| >>>=
| &=
| ^=
| |=
Expressions
Expressiona,b
AssignmentExpressiona,b
| Expressiona,b ,
AssignmentExpressionnormal,b
OptionalExpression
Expressionnormal,allowIn
| «empty»
Statements
w {noShortIf, full}
Statementw
EmptyStatement
| ExpressionStatement OptionalSemicolon
| VariableDefinition OptionalSemicolon
| Block
| LabeledStatementw
| IfStatementw
| SwitchStatement
| DoStatement OptionalSemicolon
| WhileStatementw
| ForStatementw
| WithStatementw
| ContinueStatement OptionalSemicolon
| BreakStatement OptionalSemicolon
| ReturnStatement OptionalSemicolon
| ThrowStatement OptionalSemicolon
| TryStatement
Empty Statement
Expression Statement
ExpressionStatement Expressioninitial,allowIn
Variable Definition
VariableDefinition var
VariableDeclarationListallowIn
VariableDeclarationListb
VariableDeclarationb
| VariableDeclarationListb ,
VariableDeclarationb
VariableDeclarationb Identifier VariableInitializerb
VariableInitializerb
«empty»
| =
AssignmentExpressionnormal,b
Block
Block {
BlockStatements }
BlockStatements
«empty»
| BlockStatementsPrefix
BlockStatementsPrefix
Statementfull
| BlockStatementsPrefix Statementfull
Labeled Statements
LabeledStatementw Identifier :
Statementw
If Statement
IfStatementfull
if
ParenthesizedExpression Statementfull
| if
ParenthesizedExpression StatementnoShortIf else
Statementfull
IfStatementnoShortIf if
ParenthesizedExpression StatementnoShortIf else
StatementnoShortIf
Switch Statement
SwitchStatement
switch
ParenthesizedExpression {
}
| switch
ParenthesizedExpression {
CaseGroups LastCaseGroup }
CaseGroups
«empty»
| CaseGroups CaseGroup
CaseGroup CaseGuards BlockStatementsPrefix
LastCaseGroup CaseGuards BlockStatements
CaseGuards
CaseGuard
| CaseGuards CaseGuard
CaseGuard
case
Expressionnormal,allowIn :
| default
:
Do-While Statement
DoStatement do
Statementfull while
ParenthesizedExpression
While Statement
WhileStatementw while
ParenthesizedExpression Statementw
For Statements
ForStatementw
for
(
ForInitializer ;
OptionalExpression ;
OptionalExpression )
Statementw
| for
(
ForInBinding in
Expressionnormal,allowIn )
Statementw
ForInitializer
«empty»
| Expressionnormal,noIn
| var
VariableDeclarationListnoIn
ForInBinding
LeftSideExpressionnormal
| var
VariableDeclarationnoIn
With Statement
WithStatementw with
ParenthesizedExpression Statementw
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
Block CatchClauses
| try
Block FinallyClause
| try
Block CatchClauses FinallyClause
CatchClauses
CatchClause
| CatchClauses CatchClause
CatchClause catch
(
Identifier )
Block
FinallyClause finally
Block
Function Definition
FunctionDefinition NamedFunction
AnonymousFunction function
FormalParametersAndBody
NamedFunction function
Identifier FormalParametersAndBody
FormalParametersAndBody (
FormalParameters )
{
TopStatements }
FormalParameters
«empty»
| FormalParametersPrefix
FormalParametersPrefix
FormalParameter
| FormalParametersPrefix ,
FormalParameter
FormalParameter Identifier
Programs
TopStatements
«empty»
| TopStatementsPrefix
TopStatementsPrefix
TopStatement
| TopStatementsPrefix TopStatement
TopStatement
Statementfull
| FunctionDefinition