This appendix contains summaries of the lexical and syntactic grammars found in the main text, and of the grammar extensions for unsafe code. Grammar productions appear here in the same order that they appear in the main text.
input:
input-sectionopt
input-section:
input-section-part
input-section input-section-part
input-section-part:
input-elementsopt new-line
pp-directive
input-elements:
input-element
input-elements input-element
input-element:
whitespace
comment
token
new-line:
Carriage return character (U+000D
)
Line feed character (U+000A
)
Carriage return character (U+000D
) followed by line feed character (U+000A
)
Next line character (U+0085
)
Line separator character (U+2028
)
Paragraph separator character (U+2029
)
comment:
single-line-comment
delimited-comment
single-line-comment:
//
input-charactersopt
input-characters:
input-character
input-characters input-character
input-character:
Any Unicode character except a new-line-character
new-line-character:
Carriage return character (U+000D
)
Line feed character (U+000A
)
Next line character (U+0085
)
Line separator character (U+2028
)
Paragraph separator character (U+2029
)
delimited-comment:
/*
delimited-comment-textopt asterisks /
delimited-comment-text:
delimited-comment-section
delimited-comment-text delimited-comment-section
delimited-comment-section:
/
asterisksopt not-slash-or-asterisk
asterisks:
*
asterisks *
not-slash-or-asterisk:
Any Unicode character except /
or *
whitespace:
Any character with Unicode class Zs
Horizontal tab character (U+0009
)
Vertical tab character (U+000B
)
Form feed character (U+000C
)
token:
identifier
keyword
integer-literal
real-literal
character-literal
string-literal
operator-or-punctuator
unicode-escape-sequence:
u
hex-digit hex-digit hex-digit hex-digit
U
hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit
identifier:
available-identifier
@
identifier-or-keyword
available-identifier:
An identifier-or-keyword that is not a keyword
identifier-or-keyword:
identifier-start-character identifier-part-charactersopt
identifier-start-character:
letter-character
_
(the underscore character U+005F
)
identifier-part-characters:
identifier-part-character
identifier-part-characters identifier-part-character
identifier-part-character:
letter-character
decimal-digit-character
connecting-character
combining-character
formatting-character
letter-character:
A Unicode character of class Lu, Ll, Lt, Lm, Lo, or Nl
A unicode-escape-sequence representing a character of class Lu, Ll, Lt, Lm, Lo, or Nl
combining-character:
A Unicode character of class Mn or Mc
A unicode-escape-sequence representing a character of class Mn or Mc
decimal-digit-character:
A Unicode character of the class Nd
A unicode-escape-sequence representing a character of class Nd
connecting-character:
A Unicode character of the class Pc
A unicode-escape-sequence representing a character of class Pc
formatting-character:
A Unicode character of the class Cf
A unicode-escape-sequence representing a character of class Cf
keyword: one of
literal:
boolean-literal
integer-literal
real-literal
character-literal
string-literal
null-literal
boolean-literal:
true
false
integer-literal:
decimal-integer-literal
hexadecimal-integer-literal
decimal-integer-literal:
decimal-digits integer-type-suffixopt
decimal-digits:
decimal-digit
decimal-digits decimal-digit
decimal-digit: one of
0 1 2 3 4 5 6 7 8 9
integer-type-suffix: one of
U u L l UL Ul uL ul LU Lu lU lu
hexadecimal-integer-literal:
0x
hex-digits integer-type-suffixopt
0X
hex-digits integer-type-suffixopt
hex-digits:
hex-digit
hex-digits hex-digit
hex-digit: one of
0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
real-literal:
decimal-digits .
decimal-digits exponent-partopt real-type-suffixopt
.
decimal-digits exponent-partopt real-type-suffixopt
decimal-digits exponent-part real-type-suffixopt
decimal-digits real-type-suffix
exponent-part:
e
signopt decimal-digits
E
signopt decimal-digits
sign: one of
+ -
real-type-suffix: one of
F f D d M m
character-literal:
'
character '
character:
single-character
simple-escape-sequence
hexadecimal-escape-sequence
unicode-escape-sequence
single-character:
Any character except '
(U+0027
), (
U+005C
), and new-line-character
simple-escape-sequence: one of
' " \