Konsoliderad grammatik
Lexikal grammatik
lexical-unit:
lexical-elementsopt
lexikala element:
lexical-element lexical-elementsopt
lexical-element:
tomt utrymme
token
kommentar
Tomt utrymme
blanksteg:
Alla tecken med Unicode-klass Zs
Vågrätt fliktecken (U+0009
)
Lodrätt fliktecken (U+000B
)
Formulärflödestecken (U+000C
)
Vagnreturtecken (U+000D
) följt av radmatningstecken (U+000A
) new-line-character
new-line-character:
Vagnreturtecken (U+000D
)
Radmatningstecken (U+000A
)
Nästa radtecken (U+0085
)
Radavgränsartecken (U+2028
)
Styckeavgränsartecken (U+2029
)
Kommentar
kommentar:
single-line-comment
avgränsad kommentar
single-line-comment:
//
opt single-line-comment-characters
single-line-comment-characters:
single-line-comment-character single-line-comment-charactersopt
single-line-comment-character:
Alla Unicode-tecken utom ett nytt linjetecken
avgränsad kommentar:
/*
avgränsad-kommentar-textopt asterisks /
avgränsad kommentarstext:
avgränsad-kommentar-avsnitt avgränsad-kommentar-textopt
avgränsat kommentarsavsnitt:
/
asteriskerväljer not-slash-or-asterisk
Asterisker:
*
asterisksopt
not-slash-or-asterisk:
Unicode-tecken utom *
eller /
Token
bevis:
identifierare
nyckelord
ordagrann
operator-or-punctuator
Escape-sekvenser för tecken
character-escape-sequence:
#(
escape-sequence-list )
escape-sequence-list:
single-escape-sequence
escape-sequence-list ,
single-escape-sequence
single-escape-sequence:
long-unicode-escape-sequence
short-unicode-escape-sequence
control-character-escape-sequence
escape-escape
long-unicode-escape-sequence:
hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit
short-unicode-escape-sequence:
hex-digit hex-digit hex-digit hex-digit
control-character-escape-sequence:
kontrolltecken
control-character:
cr
lf
tab
escape-escape:
#
Literaler
ordagrann:
logisk-literal
number-literal
textliteral
null-literal
verbatim-literal
logisk-literal:
true
false
number-literal:
decimal-tal-literal
hexadecimal-number-literal
decimalsiffror:
decimal-digit decimal-digitsopt
decimaltal: en av
0 1 2 3 4 5 6 7 8 9
hexadecimal-number-literal:
0x
hex-siffror
0X
hex-siffror
hex-siffror:
hex-digit hex-digitsopt
hex-digit: en av
0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
decimal-number-literal:
decimal-digits.
decimal-digits exponent-partopt
.
decimal-digits exponent-partopt
decimal-digits exponent-partopt
exponent-part:
e
signopt decimal-digits
E
signopt decimal-digits
sign: en av
+ -
textliteral:
"
text-literal-charactersopt "
text-literal-characters:
text-literal-character text-literal-charactersopt
text-literal-character:
single-text-character
character-escape-sequence
double-quote-escape-sequence
single-text-character:
Alla tecken utom "
(U+0022
) eller #
(U+0023
) följt av (
(U+0028
)
double-quote-escape-sequence:
""
(U+0022
, U+0022
)
null-literal:
null
verbatim-literal:
#!"
text-literal-charactersopt "
Identifiers
identifierare:
regular-identifier
quoted-identifier
regular-identifier:
available-identifier
available-identifier dot-character regular-identifier
available-identifier:
Ett nyckelord eller en identifierare som inte är ett nyckelord
keyword-or-identifier:
bokstavstecken
understreckstecken
identifier-start-character identifier-part-characters
identifier-start-character:
bokstavstecken
understreckstecken
identifier-part-characters:
opt identifier-part-character identifier-part-characters
identifier-part-character:
bokstavstecken
decimal-digit-character
understreckstecken
ansluta-tecken
kombinera tecken
formateringstecken
generalized-identifier:
generalized-identifier-part
generalized-identifier som endast avgränsas med blanktecken (U+0020
) generalized-identifier-part
generalized-identifier-part:
generalized-identifier-segment
decimal-digit-character generalized-identifier-segment
generalized-identifier-segment:
keyword-or-identifier
keyword-or-identifier dot-character keyword-or-identifier
dot-character:
.
(U+002E
)
understreckstecken:
_
(U+005F
)
letter-character:_
Ett Unicode-tecken i klasserna Lu, Ll, Lt, Lm, Lo eller Nl
kombinera tecken:
Ett Unicode-tecken i klasserna Mn eller Mc
decimal-digit-character:
Ett Unicode-tecken för klassen Nd
connecting-character:
Ett Unicode-tecken för klassen Pc
formateringstecken:
Ett Unicode-tecken i klassen Cf
quoted-identifier:
#"
text-literal-charactersopt "
Nyckelord och fördefinierade identifierare
Fördefinierade identifierare och nyckelord kan inte definieras om. En citerad identifierare kan användas för att hantera identifierare som annars skulle kollidera med fördefinierade identifierare eller nyckelord.
nyckelord: en avand as each else error false if in is let meta not null or otherwise
section shared then true try type #binary #date #datetime
#datetimezone #duration #infinity #nan #sections #shared #table #time
Operatorer och skiljetecken
operator-or-punctuator: en av
, ; = < <= > >= <> + - * / & ( ) [ ] { } @ ? ?? => .. ...
Syntaktisk grammatik
Dokument
dokument:
section-document
expression-document
Avsnittsdokument
section-document:
avsnitt
sektion:
literal-attributesoptsection
section-name;
section-members opt
section-name:
identifierare
section-members:
section-member section-membersopt
section-member:
literal-attributesopt sharedopt section-member-name =
expression ;
section-member-name:
identifierare
Uttrycksdokument
Uttryck
expression-document:
uttryck
uttryck:
logical-or-expression
each-expression
function-expression
let-expression
if-expression
error-raising-expression
error-handling-expression
Logiska uttryck
logical-or-expression:
logical-and-expression
logical-and-expression or
logical-or-expression
logical-and-expression:
is-expression
logical-and-expression and
is-expression
Är-uttryck
is-expression:
as-expression
is-expression is
nullable-primitive-type
nullable-primitive-type:
nullable
opt primitive-type
Som uttryck
as-expression:
likhetsuttryck
as-expression as
nullable-primitive-type
Likhetsuttryck
likhetsuttryck:
relationsuttryck
relational-expression =
equality-expression
relational-expression <>
equality-expression
Relationsuttryck
relational-expression:
additivt uttryck
relationellt uttryck för additivt uttryck<
relationellt uttryck för additivt uttryck>
relationellt uttryck för additivt uttryck<=
relationellt uttryck för additivt uttryck>=
Aritmetiska uttryck
additivt uttryck:
multiplicativt uttryck
multiplicativt uttryck +
additivt uttryck
multiplicativt uttryck -
additivt uttryck
multiplicative-expression &
_additive-expression
multiplicative-expression:
metadatauttryck
metadata-expression *
multiplicative-expression
metadata-expression /
multiplicative-expression
Metadatauttryck
metadata-expression:
unary-expression
unary-expression meta
unary-expression
Unary-uttryck
unary-expression:
type-expression
+
unary-expression
-
unary-expression
not
unary-expression
Primärt uttryck
primary-expression:
literal-expression
listuttryck
postuttryck
identifier-expression
section-access-expression
parentes-expression
field-access-expression
item-access-expression
invoke-expression
not-implemented-expression
Literalt uttryck
literal-expression:
ordagrann
Identifieraruttryck
identifier-expression:
identifier-reference
identifier-reference:
exclusive-identifier-reference
inclusive-identifier-reference
exclusive-identifier-reference:
identifierare
inclusive-identifier-reference:
@
identifierare
Avsnittsåtkomstuttryck
section-access-expression:
!
identifierare
Parenteserat uttryck
parentes-expression:
(
uttryck )
Inte implementerat uttryck
not-implemented-expression:
...
Anropa uttryck
invoke-expression:
primary-expression (
argument-listopt )
argument-list:
uttryck
expression ,
argument-list
Listuttryck
listuttryck:
{
alternativ för objektlista }
item-list:
sak
objektobjektlista,
sak:
uttryck
uttrycksuttryck..
Postuttryck
record-expression:
[
val av fältlista ]
fältlista:
fält
fältfältlista,
fält:
fältnamnsuttryck=
field-name:
generalized-identifier
quoted-identifier
Objektåtkomstuttryck
item-access-expression:
objektval
optional-item-selection
item-selection:
primary-expression {
item-selector }
optional-item-selection:
primary-expression {
item-selector } ?
item-selector:
uttryck
Fältåtkomstuttryck
field-access-expression:
fältval
implicit-target-field-selection
projektion
implicit målprojektion
fältval:
fältväljare för primärt uttryck
field-selector:
required-field-selector
optional-field-selector
required-field-selector:
[
fältnamn ]
optional-field-selector:
[
fältnamn ] ?
implicit-target-field-selection:
fältväljare
projektion:
primary-expression required-projection
primary-expression optional-projection
required-projection:_
[
required-selector-list ]
optional-projection:
[
required-selector-list ] ?
required-selector-list:
required-field-selector
required-field-selector ,
required-selector-list
implicit målprojektion:
obligatorisk projektion
optional-projection
Funktionsuttryck
function-expression:
(
parameter-listopt)
return-typeopt=>
function-body
function-body:
uttryck
parameter-list:
fixed-parameter-list
fixed-parameter-list ,
optional-parameter-list
optional-parameter-list
fixed-parameter-list:
parameter
parametern ,
fixed-parameter-list
parameter:
parameter-name primitive-parameter-typeopt
parameter-name:
identifierare
primitive-parameter-type:
primitiv-försäkran
return-type:
primitiv-försäkran
primitiv-assertion:
as
nullable-primitive-type
optional-parameter-list:
optional-parameter
optional-parameter ,
optional-parameter-list
optional-parameter:
optional
parameter
Varje uttryck
each-expression:
each
each-expression-body
each-expression-body:
function-body
Let-uttryck
let-expression:
let
variabel-listuttryckin
variable-list:
variabel
variable ,
variable-list
variabel:
variabelnamnuttryck=
variable-name:
identifierare
If-uttryck
if-expression:
if
if-conditionthen
true-expressionelse
false-expression
if-condition:
uttryck
true-expression:
uttryck
false-expression:
uttryck
Typuttryck
type-expression:
primary-expression
type
primär typ
typ:
primary-expression
primär typ
primär typ:
primitiv typ
posttyp
listtyp
funktionstyp
tabelltyp
nullable-type
primitiv-typ: en av
any anynonnull binary date datetime datetimezone duration function
list logical none null number record table text time type
posttyp:
[
open-record-marker ]
[
field-specification-listopt ]
[
field-specification-list ,
open-record-marker ]
field-specification-list:
fältspecifikation
field-specification,
field-specification-list
fältspecifikation:
optional
opt field-name field-type-specificationopt
field-type-specification:
=
fälttyp
field-type:
type
open-record-marker:
...
listtyp:
{
objekttyp }
objekttyp:
type
funktionstyp:
function (
parameter-specification-listopt)
return-type
parameter-specification-list:
required-parameter-specification-list
required-parameter-specification-list ,
optional-parameter-specification-list
optional-parameter-specification-list
required-parameter-specification-list:
required-parameter-specification
required-parameter-specification ,
required-parameter-specification-list
required-parameter-specification:
parameterspecifikation
optional-parameter-specification-list:
optional-parameter-specification
optional-parameter-specification ,
optional-parameter-specification-list
optional-parameter-specification:
optional
parameterspecifikation
parameterspecifikation:
parameter-name parameter-type
parametertyp:
assertion
påstående:
as
typ
tabelltyp:
table
radtyp
radtyp:
[
field-specification-listopt ]
nullable-type:
nullable
typ
Fel vid höjning av uttryck
error-raising-expression:
error
uttryck_
Felhanteringsuttryck
error-handling-expression:
try
felhanterarval förskyddat uttryck
protected-expression:
uttryck
error-handler:
otherwise-clause
catch-clause
otherwise-clause:
otherwise
standarduttryck
default-expression:
uttryck
catch-clause:
catch
catch-function
catch-function:
(
parameter-nameopt=>
)
function-body
Literala attribut
literal-attributes:
record-literal
record-literal:
[
literal-field-listopt ]
literal-field-list:
literal-field
literal-field ,
literal-field-list
literal-field:
field-name =
any-literal
list-literal:
{
literal-item-listopt }
literal-item-list:
any-literal
any-literal ,
literal-item-list
any-literal:
record-literal
list-literal
logisk-literal
number-literal
textliteral
null-literal