Annotated ECMAScript 5.1

‟Ex igne vita”

Annex A (informative) Grammar Summary #

A.1 Lexical Grammar #

SourceCharacter ::See clause 6

any Unicode code unit

InputElementDiv ::See clause 7

WhiteSpace
LineTerminator
Comment
Token
DivPunctuator

InputElementRegExp ::See clause 7

WhiteSpace
LineTerminator
Comment
Token
RegularExpressionLiteral

WhiteSpace ::See 7.2

<TAB>
<VT>
<FF>
<SP>
<#x0a>
<BOM>
<USP>

LineTerminator ::See 7.3

<LF>
<CR>
<LS>
<PS>

LineTerminatorSequence ::See 7.3

<LF>
<CR> [lookahead <LF> ]
<LS>
<PS>
<CR> <LF>

Comment ::See 7.4

MultiLineComment
SingleLineComment

MultiLineComment ::See 7.4

/* MultiLineCommentCharsopt*/

MultiLineCommentChars ::See 7.4

MultiLineNotAsteriskChar MultiLineCommentCharsopt
* PostAsteriskCommentCharsopt

PostAsteriskCommentChars ::See 7.4

MultiLineNotForwardSlashOrAsteriskChar MultiLineCommentCharsopt
* PostAsteriskCommentCharsopt

MultiLineNotAsteriskChar ::See 7.4

SourceCharacter but not asterisk *

MultiLineNotForwardSlashOrAsteriskChar ::See 7.4

SourceCharacter but not forward-slash / orasterisk *

SingleLineComment ::See 7.4

// SingleLineCommentCharsopt

SingleLineCommentChars ::See 7.4

SingleLineCommentChar SingleLineCommentCharsopt

SingleLineCommentChar ::See 7.4

SourceCharacter but not LineTerminator

Token ::See 7.5

IdentifierName
Punctuator
NumericLiteral
StringLiteral

Identifier ::See 7.6

IdentifierName but not ReservedWord

IdentifierName ::See 7.6

IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::See 7.6

UnicodeLetter
$
_

\ UnicodeEscapeSequence

IdentifierPart ::See 7.6

IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
<ZWNJ>
<ZWJ>

UnicodeLetter See 7.6

any character in the Unicode categories “Uppercase letter (Lu)”, “Lowercase letter (Ll)”, “Titlecase letter (Lt)”, “Modifier letter (Lm)”, “Other letter (Lo)”, or “Letter number (Nl)”.

UnicodeCombiningMark See 7.6

any character in the Unicode categories “Non-spacing mark (Mn)” or “Combining spacing mark (Mc)”

UnicodeDigit See 7.6

any character in the Unicode category “Decimal number (Nd)”

UnicodeConnectorPunctuation See 7.6

any character in the Unicode category “Connector punctuation (Pc)”

ReservedWord ::See 7.6.1

Keyword
FutureReservedWord
NullLiteral
BooleanLiteral

Keyword :: one ofSee 7.6.1.1

break

do

instanceof

typeof

case

else

new

var

catch

finally

return

void

continue

for

switch

while

debugger

function

this

with

default

if

throw

delete

in

try

FutureReservedWord :: one ofSee 7.6.1.2

class

enum

extends

super

const

export

import

or in strict mode code one of

implements

let

private

public

interface

package

protected

static

yield

Punctuator :: one ofSee 7.7

{

}

(

)

[

]

.

;

,

<

>

<=

>=

==

!=

===

!==

+

-

*

%

++

--

<<

>>

>>>

&

|

^

!

~

&&

||

?

:

=

+=

-=

*=

%=

<<=

>>=

>>>=

&=

|=

^=

DivPunctuator :: one ofSee 7.7

/

/=

Literal ::See 7.8

NullLiteral
BooleanLiteral
NumericLiteral
StringLiteral

RegularExpressionLiteral

NullLiteral ::See 7.8.1

null

BooleanLiteral ::See 7.8.2

true
false

NumericLiteral ::See 7.8.3

DecimalLiteral
HexIntegerLiteral

DecimalLiteral ::See 7.8.3

DecimalIntegerLiteral . DecimalDigitsoptExponentPartopt
. DecimalDigits ExponentPartopt
DecimalIntegerLiteral ExponentPart
opt

DecimalIntegerLiteral ::See 7.8.3

0
NonZeroDigit DecimalDigits
opt

DecimalDigits ::See 7.8.3

DecimalDigit
DecimalDigits DecimalDigit

DecimalDigit :: one ofSee 7.8.3

0 1 2 3 4 5 6 7 8 9

NonZeroDigit:: one ofSee 7.8.3

1 2 3 4 5 6 7 8 9

ExponentPart:: See 7.8.3

ExponentIndicator SignedInteger

ExponentIndicator :: one ofSee 7.8.3

e E

SignedInteger ::See 7.8.3

DecimalDigits
+ DecimalDigits
- DecimalDigits

HexIntegerLiteral ::See 7.8.3

0x HexDigit
0X HexDigit
HexIntegerLiteral HexDigit

HexDigit :: one ofSee 7.8.3

0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

StringLiteral ::See 7.8.4

"DoubleStringCharactersopt "
'SingleStringCharactersopt'

DoubleStringCharacters ::See 7.8.4

DoubleStringCharacter DoubleStringCharactersopt

SingleStringCharacters ::See 7.8.4

SingleStringCharacter SingleStringCharactersopt

DoubleStringCharacter ::See 7.8.4

SourceCharacter but not double-quote " or backslash \ or LineTerminator
\ EscapeSequence
LineContinuation

SingleStringCharacter ::See 7.8.4

SourceCharacter but not single-quote ' orbackslash \ or LineTerminator
\ EscapeSequence
LineContinuation

LineContinuation ::See 7.8.4

\ LineTerminatorSequence

EscapeSequence ::See 7.8.4

CharacterEscapeSequence
0 [lookahead DecimalDigit]
HexEscapeSequence
UnicodeEscapeSequence

CharacterEscapeSequence ::See 7.8.4

SingleEscapeCharacter
NonEscapeCharacter

SingleEscapeCharacter :: one ofSee 7.8.4

' " \ b f n r t v

NonEscapeCharacter ::See 7.8.4

SourceCharacter but notEscapeCharacter or LineTerminator

EscapeCharacter ::See 7.8.4

SingleEscapeCharacter
DecimalDigit
x
u

HexEscapeSequence ::See 7.8.4

x HexDigit HexDigit

UnicodeEscapeSequence ::See 7.8.4

u HexDigit HexDigit HexDigit HexDigit

RegularExpressionLiteral ::See 7.8.5

/ RegularExpressionBody / RegularExpressionFlags

RegularExpressionBody ::See 7.8.5

RegularExpressionFirstChar RegularExpressionChars

RegularExpressionChars ::See 7.8.5

[empty]
RegularExpressionChars RegularExpressionChar

RegularExpressionFirstChar ::See 7.8.5

RegularExpressionNonTerminator but not * or \ or / or [
RegularExpressionBackslashSequence
RegularExpressionClass

RegularExpressionChar ::See 7.8.5

RegularExpressionNonTerminator but not \ or / or [
RegularExpressionBackslashSequence
RegularExpressionClass

RegularExpressionBackslashSequence ::See 7.8.5

\ RegularExpressionNonTerminator

RegularExpressionNonTerminator ::See 7.8.5

SourceCharacter but not LineTerminator

RegularExpressionClass ::See 7.8.5

[ RegularExpressionClassChars ]

RegularExpressionClassChars ::See 7.8.5

[empty]
RegularExpressionClassChars
RegularExpressionClassChar

RegularExpressionClassChar ::See 7.8.5

RegularExpressionNonTerminator but not ] or \
RegularExpressionBackslashSequence

RegularExpressionFlags ::See 7.8.5

[empty]
RegularExpressionFlags IdentifierPart

A.2 Number Conversions #

StringNumericLiteral :::See 9.3.1

StrWhiteSpaceopt
StrWhiteSpace
optStrNumericLiteral StrWhiteSpaceopt

StrWhiteSpace :::See 9.3.1

StrWhiteSpaceChar StrWhiteSpaceopt

StrWhiteSpaceChar :::See 9.3.1

WhiteSpace
LineTerminator

StrNumericLiteral :::See 9.3.1

StrDecimalLiteral
HexIntegerLiteral

StrDecimalLiteral :::See 9.3.1

StrUnsignedDecimalLiteral
+ StrUnsignedDecimalLiteral
- StrUnsignedDecimalLiteral

StrUnsignedDecimalLiteral :::See 9.3.1

Infinity
DecimalDigits
. DecimalDigitsoptExponentPartopt
. DecimalDigits ExponentPartopt
DecimalDigits ExponentPart
opt

DecimalDigits :::See 9.3.1

DecimalDigit
DecimalDigits DecimalDigit

DecimalDigit ::: one ofSee 9.3.1

0 1 2 3 4 5 6 7 8 9

ExponentPart :::See 9.3.1

ExponentIndicator SignedInteger

ExponentIndicator ::: one ofSee 9.3.1

e E

SignedInteger :::See 9.3.1

DecimalDigits
+ DecimalDigits
- DecimalDigits

HexIntegerLiteral :::See 9.3.1

0x HexDigit
0X HexDigit
HexIntegerLiteral HexDigit

HexDigit ::: one ofSee 9.3.1

0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

A.3 Expressions #

PrimaryExpression :See 11.1

this
Identifier
Literal
ArrayLiteral
ObjectLiteral
( Expression )

ArrayLiteral :See 11.1.4

[ Elisionopt ]
[
ElementList ]
[
ElementList , Elisionopt ]

ElementList :See 11.1.4

Elisionopt AssignmentExpression
ElementList , Elision
opt AssignmentExpression

Elision :See 11.1.4

,
Elision ,

ObjectLiteral :See 11.1.5

{ }
{ PropertyNameAndValueList }
{
PropertyNameAndValueList , }

PropertyNameAndValueList :See 11.1.5

PropertyAssignment
PropertyNameAndValueList
, PropertyAssignment

PropertyAssignment :See 11.1.5

PropertyName : AssignmentExpression
get PropertyName() { FunctionBody }
set
PropertyName( PropertySetParameterList ) { FunctionBody }

PropertyName :See 11.1.5

IdentifierName
StringLiteral
NumericLiteral

PropertySetParameterList :See 11.1.5

Identifier

MemberExpression :See 11.2

PrimaryExpression
FunctionExpression
MemberExpression
[ Expression ]
MemberExpression . IdentifierName
new MemberExpression Arguments

NewExpression :See 11.2

MemberExpression
new
NewExpression

CallExpression :See 11.2

MemberExpression Arguments
CallExpression Arguments
CallExpression [ Expression ]
CallExpression . IdentifierName

Arguments :See 11.2

( )
(
ArgumentList )

ArgumentList :See 11.2

AssignmentExpression
ArgumentList
, AssignmentExpression

LeftHandSideExpression :See 11.2

NewExpression
CallExpression

PostfixExpression :See 11.3

LeftHandSideExpression
LeftHandSideExpression
[noLineTerminator here] ++
LeftHandSideExpression
[noLineTerminator here] --

UnaryExpression :See 11.4

PostfixExpression
delete
UnaryExpression
void UnaryExpression
typeof UnaryExpression
++
UnaryExpression
-- UnaryExpression
+ UnaryExpression
- UnaryExpression
~ UnaryExpression
! UnaryExpression

MultiplicativeExpression :See 11.5

UnaryExpression
MultiplicativeExpression
* UnaryExpression
MultiplicativeExpression
/ UnaryExpression
MultiplicativeExpression
% UnaryExpression

AdditiveExpression :See 11.6

MultiplicativeExpression
AdditiveExpression
+ MultiplicativeExpression
AdditiveExpression
- MultiplicativeExpression

ShiftExpression :See 11.7

AdditiveExpression
ShiftExpression
<< AdditiveExpression
ShiftExpression
>> AdditiveExpression
ShiftExpression
>>> AdditiveExpression

RelationalExpression :See 11.8

ShiftExpression
RelationalExpression
< ShiftExpression
RelationalExpression
> ShiftExpression
RelationalExpression
<= ShiftExpression
RelationalExpression
>= ShiftExpression
RelationalExpression
instanceof ShiftExpression
RelationalExpression
in ShiftExpression

RelationalExpressionNoIn :See 11.8

ShiftExpression
RelationalExpressionNoIn
< ShiftExpression
RelationalExpressionNoIn
> ShiftExpression
RelationalExpressionNoIn
<= ShiftExpression
RelationalExpressionNoIn
>= ShiftExpression
RelationalExpressionNoIn
instanceof ShiftExpression

EqualityExpression :See 11.9

RelationalExpression
EqualityExpression
== RelationalExpression
EqualityExpression
!= RelationalExpression
EqualityExpression
=== RelationalExpression
EqualityExpression
!== RelationalExpression

EqualityExpressionNoIn :See 11.9

RelationalExpressionNoIn
EqualityExpressionNoIn
== RelationalExpressionNoIn
EqualityExpressionNoIn
!= RelationalExpressionNoIn
EqualityExpressionNoIn
=== RelationalExpressionNoIn
EqualityExpressionNoIn
!== RelationalExpressionNoIn

BitwiseANDExpression :See 11.10

EqualityExpression
BitwiseANDExpression
& EqualityExpression

BitwiseANDExpressionNoIn :See 11.10

EqualityExpressionNoIn
BitwiseANDExpressionNoIn
& EqualityExpressionNoIn

BitwiseXORExpression :See 11.10

BitwiseANDExpression
BitwiseXORExpression
^ BitwiseANDExpression

BitwiseXORExpressionNoIn :See 11.10

BitwiseANDExpressionNoIn
BitwiseXORExpressionNoIn
^ BitwiseANDExpressionNoIn

BitwiseORExpression :See 11.10

BitwiseXORExpression
BitwiseORExpression
| BitwiseXORExpression

BitwiseORExpressionNoIn :See 11.10

BitwiseXORExpressionNoIn
BitwiseORExpressionNoIn
| BitwiseXORExpressionNoIn

LogicalANDExpression :See 11.11

BitwiseORExpression
LogicalANDExpression
&& BitwiseORExpression

LogicalANDExpressionNoIn :See 11.11

BitwiseORExpressionNoIn
LogicalANDExpressionNoIn
&& BitwiseORExpressionNoIn

LogicalORExpression :See 11.11

LogicalANDExpression
LogicalORExpression
|| LogicalANDExpression

LogicalORExpressionNoIn :See 11.11

LogicalANDExpressionNoIn
LogicalORExpressionNoIn
|| LogicalANDExpressionNoIn

ConditionalExpression :See 11.12

LogicalORExpression
LogicalORExpression
? AssignmentExpression : AssignmentExpression

ConditionalExpressionNoIn :See 11.12

LogicalORExpressionNoIn
LogicalORExpressionNoIn
? AssignmentExpressionNoIn : AssignmentExpressionNoIn

AssignmentExpression :See 11.13

ConditionalExpression
LeftHandSideExpression AssignmentOperator AssignmentExpression

AssignmentExpressionNoIn :See 11.13

ConditionalExpressionNoIn
LeftHandSideExpression AssignmentOperator AssignmentExpressionNoIn

AssignmentOperator : one ofSee 11.13

=

*=

/=

%=

+=

-=

<<=

>>=

>>>=

&=

^=

|=

Expression :See 11.14

AssignmentExpression
Expression
, AssignmentExpression

ExpressionNoIn :See 11.14

AssignmentExpressionNoIn
ExpressionNoIn
, AssignmentExpressionNoIn

A.4 Statements #

Statement :See clause 12

Block
VariableStatement
EmptyStatement
ExpressionStatement
IfStatement
IterationStatement
ContinueStatement
BreakStatement
ReturnStatement
WithStatement
LabelledStatement
SwitchStatement
ThrowStatement
TryStatement
DebuggerStatement

Block :See 12.1

{ StatementListopt}

StatementList :See 12.1

Statement
StatementList Statement

VariableStatement :See 12.2

var VariableDeclarationList ;

VariableDeclarationList :See 12.2

VariableDeclaration
VariableDeclarationList
, VariableDeclaration

VariableDeclarationListNoIn :See 12.2

VariableDeclarationNoIn
VariableDeclarationListNoIn
, VariableDeclarationNoIn

VariableDeclaration :See 12.2

Identifier Initialiseropt

VariableDeclarationNoIn :See 12.2

Identifier InitialiserNoInopt

Initialiser :See 12.2

= AssignmentExpression

InitialiserNoIn :See 12.2

= AssignmentExpressionNoIn

EmptyStatement :See 12.3

;

ExpressionStatement :See 12.4

[lookahead {{, function}]Expression ;

IfStatement :See 12.5

if ( Expression ) Statement else Statement
if ( Expression ) Statement

IterationStatement :See 12.6

do Statement while ( Expression );
while ( Expression ) Statement
for ( ExpressionNoInopt; Expressionopt; Expressionopt) Statement
for ( var VariableDeclarationListNoIn; Expressionopt; Expressionopt) Statement
for ( LeftHandSideExpression in Expression ) Statement
for ( var VariableDeclarationNoIn in Expression ) Statement

ContinueStatement :See 12.7

continue [noLineTerminator here]Identifieropt;

BreakStatement :See 12.8

break [noLineTerminator here]Identifieropt;

ReturnStatement :See 12.9

return [noLineTerminator here]Expressionopt;

WithStatement :See 12.10

with ( Expression ) Statement

SwitchStatement :See 12.11

switch ( Expression ) CaseBlock

CaseBlock :See 12.11

{ CaseClausesopt}
{ CaseClausesoptDefaultClause CaseClausesopt}

CaseClauses :See 12.11

CaseClause
CaseClauses CaseClause

CaseClause :See 12.11

case Expression : StatementListopt

DefaultClause :See 12.11

default : StatementListopt

LabelledStatement :See 12.12

Identifier : Statement

ThrowStatement :See 12.13

throw [noLineTerminator here] Expression ;

TryStatement :See 12.14

try Block Catch
try Block Finally
try Block Catch Finally

Catch :See 12.14

catch ( Identifier ) Block

Finally :See 12.14

finally Block

DebuggerStatement :See 12.15

debugger ;

A.5 Functions and Programs #

FunctionDeclaration :See clause 13

function Identifier ( FormalParameterListopt) { FunctionBody }

FunctionExpression :See clause 13

function Identifieropt( FormalParameterListopt) { FunctionBody }

FormalParameterList :See clause 13

Identifier
FormalParameterList
, Identifier

FunctionBody :See clause 13

SourceElementsopt

Program :See clause 14

SourceElementsopt

SourceElements :See clause 14

SourceElement
SourceElements SourceElement

SourceElement :See clause 14

Statement
FunctionDeclaration

A.6 Universal Resource Identifier Character Classes #

uri :::See 15.1.3

uriCharactersopt

uriCharacters :::See 15.1.3

uriCharacter uriCharactersopt

uriCharacter :::See 15.1.3

uriReserved
uriUnescaped
uriEscaped

uriReserved ::: one ofSee 15.1.3

; / ? : @ & = + $ ,

uriUnescaped :::See 15.1.3

uriAlpha
DecimalDigit
uriMark

uriEscaped :::See 15.1.3

% HexDigit HexDigit

uriAlpha ::: one ofSee 15.1.3

a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

uriMark ::: one ofSee 15.1.3

- _ . ! ~ * ‘ ( )

A.7 Regular Expressions #

Pattern ::See 15.10.1

Disjunction

Disjunction ::See 15.10.1

Alternative
Alternative
| Disjunction

Alternative ::See 15.10.1

[empty]
Alternative Term

Term ::See 15.10.1

Assertion
Atom
Atom Quantifier

Assertion ::See 15.10.1

^
$
\ b
\ B
( ? = Disjunction )
( ? ! Disjunction )

Quantifier ::See 15.10.1

QuantifierPrefix
QuantifierPrefix
?

QuantifierPrefix ::See 15.10.1

*
+

?
{ DecimalDigits }
{ DecimalDigits , }
{ DecimalDigits , DecimalDigits }

Atom ::See 15.10.1

PatternCharacter
.
\ AtomEscape
CharacterClass

(
Disjunction )
( ? : Disjunction )

PatternCharacter :: SourceCharacter but not any of:See 15.10.1

^ $ \ . * + ? ( ) [ ] { } |

AtomEscape ::See 15.10.1

DecimalEscape
CharacterEscape
CharacterClassEscape

CharacterEscape ::See 15.10.1

ControlEscape
c ControlLetter
HexEscapeSequence
UnicodeEscapeSequence
IdentityEscape

ControlEscape :: one ofSee 15.10.1

f n r t v

ControlLetter :: one ofSee 15.10.1

a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

IdentityEscape ::See 15.10.1

SourceCharacter but not IdentifierPart
<ZWJ>
<ZWNJ>

DecimalEscape ::See 15.10.1

DecimalIntegerLiteral [lookahead DecimalDigit]

CharacterClassEscape :: one ofSee 15.10.1

d D s S w W

CharacterClass ::See 15.10.1

[ [lookahead {^}] ClassRanges ]
[ ^ ClassRanges ]

ClassRanges ::See 15.10.1

[empty]
NonemptyClassRanges

NonemptyClassRanges ::See 15.10.1

ClassAtom
ClassAtom NonemptyClassRangesNoDash
ClassAtom
ClassAtom ClassRanges

NonemptyClassRangesNoDash ::See 15.10.1

ClassAtom
ClassAtomNoDash NonemptyClassRangesNoDash
ClassAtomNoDash
ClassAtom ClassRanges

ClassAtom ::See 15.10.1

-
ClassAtomNoDash

ClassAtomNoDash ::See 15.10.1

SourceCharacter but not one of \ or ] or -
\ ClassEscape

ClassEscape ::See 15.10.1

DecimalEscape
b
CharacterEscape

CharacterClassEscape

A.8 JSON #

A.8.1 JSON Lexical Grammar #

JSONWhiteSpace ::See 15.12.1.1

<TAB>
<CR>
<LF>
<SP>

JSONString ::See 15.12.1.1

" JSONStringCharactersopt"

JSONStringCharacters ::See 15.12.1.1

JSONStringCharacter JSONStringCharactersopt

JSONStringCharacter ::See 15.12.1.1

SourceCharacter but not double-quote " or backslash \ or U+0000 thru U+001F

\ JSONEscapeSequence

JSONEscapeSequence ::See 15.12.1.1

JSONEscapeCharacter

UnicodeEscapeSequence

JSONEscapeCharacter :: one ofSee 15.12.1.1

" / \ b f n r t

JSONNumber ::See 15.12.1.1

-optDecimalIntegerLiteral JSONFractionoptExponentPartopt

JSONFraction ::See 15.12.1.1

. DecimalDigits

JSONNullLiteral ::See 15.12.1.1

NullLiteral

JSONBooleanLiteral ::See 15.12.1.1

BooleanLiteral

A.8.2 JSON Syntactic Grammar #

JSONText :See 15.12.1.2

JSONValue

JSONValue :See 15.12.1.2

JSONNullLiteral
JSONBooleanLiteral
JSONObject
JSONArray
JSONString
JSONNumber

JSONObject :See 15.12.1.2

{ }
{ JSONMemberList }

JSONMember :See 15.12.1.2

JSONString : JSONValue

JSONMemberList :See 15.12.1.2

JSONMember
JSONMemberList
, JSONMember

JSONArray :See 15.12.1.2

[ ]
[ JSONElementList ]

JSONElementList :See 15.12.1.2

JSONValue
JSONElementList
, JSONValue