Konsolidierte Grammatik
Lexikalische Grammatik
lexical-unit:
lexical-elementsopt
lexical-elements:
lexical-element lexical-elementsopt
lexical-element:
whitespace
token
Kommentar
Leerzeichen
Leerzeichen:
Beliebiges Zeichen der Unicode-Klasse „Zs“
Horizontales Tabstoppzeichen (U+0009
)
Vertikales Tabstoppzeichen (U+000B
)
Seitenvorschubzeichen (U+000C
)
Wagenrücklaufzeichen (U+000D
), gefolgt von einem Zeilenvorschubzeichen (U+000A
) new-line-character
Neue-Zeile-Zeichen:
Wagenrücklaufzeichen (U+000D
)
Zeilenvorschubzeichen (U+000A
)
Zeilenumbruchzeichen (U+0085
)
Zeilentrennzeichen (U+2028
)
Absatztrennzeichen (U+2029
)
Comment
comment:
single-line-comment
delimited-comment
single-line-comment:
//
single-line-comment-charactersopt
single-line-comment-characters:
single-line-comment-character single-line-comment-charactersopt
single-line-comment-character:
Beliebiges Unicode-Zeichen mit Ausnahme eines new-line-character
delimited-comment:
/*
delimited-comment-textopt asterisks/
delimited-comment-text:
delimited-comment-section delimited-comment-textopt
delimited-comment-section:
/
asterisksopt not-slash-or-asterisk
Sternchen:
*
asterisksopt
not-slash-or-asterisk:
Beliebiges Unicode-Zeichen mit Ausnahme von *
oder /
Token
token:
Bezeichner
Schlüsselwort (keyword)
literal
operator-or-punctuator
Escapezeichensequenzen
Escapezeichensequenz:
#(
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
short-unicode-escape-sequence:
hex-digit hex-digit hex-digit hex-digit
control-character-escape-sequence:
control-character
Steuerzeichen:
cr
lf
tab
Escape-Escape:
#
Literale
literal:
logical-literal
number-literal
text-literal
null-literal
verbatim-literal
logical-literal:
true
false
number-literal:
decimal-number-literal
hexadecimal-number-literal
decimal-digits:
decimal-digit decimal-digitsopt
decimal-digit: einer der folgenden Werte
0 1 2 3 4 5 6 7 8 9
Hexadezimalliteral:
0x
hex-digits
0X
hex-digits
hex-digits:
hex-digit hex-digitsopt
hex-digit: einer der folgenden Werte
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
Vorzeichen: einer der folgenden Werte
+ -
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:
Beliebiges Zeichen außer "
(U+0022
) oder #
(U+0023
), gefolgt von (
(U+0028
)
Escapesequenz mit doppelten Anführungszeichen:
""
(U+0022
, U+0022
)
NULL-Literal:
null
Verbatim-Literal:
#!"
text-literal-charactersopt"
Bezeichner
identifier:
regular-identifier
quoted-identifier
regular-identifier:
available-identifier
available-identifier dot-character regular-identifier
available-identifier:
Ein keyword-or-identifier, der kein keyword ist
keyword-or-identifier:
letter-character
underscore-character
identifier-start-character identifier-part-characters
identifier-start-character:
letter-character
underscore-character
identifier-part-characters:
identifier-part-character identifier-part-charactersopt
identifier-part-character:
letter-character
decimal-digit-character
underscore-character
connecting-character
combining-character
formatting-character
generalized-identifier:
generalized-identifier-part
generalized-identifier nur durch Leerzeichen getrennt (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
)
Unterstrichzeichen:
_
(U+005F
)
Buchstabe:_
Ein Unicode-Zeichen der Klassen „Lu“, „Ll“, „Lt“, „Lm“, „Lo“ oder „Nl“
Kombinationszeichen:
Ein Unicode-Zeichen der Klassen „Mn“ oder „Mc“
Dezimalziffer:
Ein Unicode-Zeichen der Klasse „Nd“
Verbindungszeichen:
Ein Unicode-Zeichen der Klasse „Pc“
Formatierungszeichen:
Ein Unicode-Zeichen der Klasse „Cf“
Bezeichner in Anführungszeichen:
#"
text-literal-charactersopt"
Schlüsselwörter und vordefinierte Bezeichner
Vordefinierte Bezeichner und Schlüsselwörter können nicht neu definiert werden. Ein Bezeichner in Anführungszeichen kann verwendet werden, um Bezeichner zu behandeln, die andernfalls mit vordefinierten Bezeichnern oder Schlüsselwörtern kollidieren würden.
Schlüsselwort: einer der folgenden Werte and 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
Operatoren und Trennzeichen
operator-or-punctuator: one of
, ; = < <= > >= <> + - * / & ( ) [ ] { } @ ? ?? => .. ...
Syntaktische Grammatik
Dokumente
document:
section-document
expression-document
Abschnittsdokumente
section-document:
section
section:
literal-attributesoptsection
section-name;
section-membersopt
section-name:
Bezeichner
section-members:
section-member section-membersopt
section-member:
literal-attributesopt sharedopt section-member-name=
expression;
section-member-name:
identifier
Ausdrucksdokumente
Ausdrücke
expression-document:
expression
expression:
logical-or-expression
each-expression
function-expression
let-expression
if-expression
error-raising-expression
error-handling-expression
Logische Ausdrücke
logical-or-expression:
logical-and-expression
logical-and-expressionor
logical-or-expression
logical-and-expression:
is-expression
logical-and-expressionand
is-expression
Is-Ausdruck
is-expression:
as-expression
is-expressionis
nullable-primitive-type
nullable-primitive-type:
nullable
opt primitive-type
As-Ausdruck
as-expression:
equality-expression
as-expressionas
nullable-primitive-type
Gleichheitsausdruck
equality-expression:
relational-expression
relational-expression=
equality-expression
relational-expression<>
equality-expression
Relationaler Ausdruck
relational-expression:
additive-expression
additive-expression<
relational-expression
additive-expression>
relational-expression
additive-expression<=
relational-expression
additive-expression>=
relational-expression
Arithmetische Ausdrücke
additive-expression:
multiplicative-expression
multiplicative-expression+
additive-expression
multiplicative-expression-
additive-expression
multiplicative-expression&
_additive-expression
multiplicative-expression:
metadata-expression
metadata-expression*
multiplicative-expression
metadata-expression/
multiplicative-expression
Metadatenausdruck
metadata-expression:
unary-expression
unary-expressionmeta
unary-expression
Unärer Ausdruck
unary-expression:
type-expression
+
unary-expression
-
unary-expression
not
unary-expression
Primärer Ausdruck
primary-expression:
literal-expression
list-expression
record-expression
identifier-expression
section-access-expression
parenthesized-expression
field-access-expression
item-access-expression
invoke-expression
not-implemented-expression
Literalausdruck
literal-expression:
literal
Bezeichnerausdruck
identifier-expression:
identifier-reference
identifier-reference:
exclusive-identifier-reference
inclusive-identifier-reference
exclusive-identifier-reference:
Bezeichner
inclusive-identifier-reference:
@
identifier
Abschnittszugriffsausdruck
section-access-expression:
identifier!
identifier
Ausdruck in Klammern
Ausdruck in Klammern:
(
expression)
Nicht implementierter Ausdruck
Nicht implementierter Ausdruck:
...
Aufrufausdruck
invoke-expression:
primary-expression(
argument-listopt)
argument-list:
expression
expression,
argument-list
Listenausdruck
Listenausdruck:
{
item-listopt}
item-list:
item
item,
item-list
item:
expression
expression..
expression
Datensatzausdruck
Datensatzausdruck:
[
field-listopt]
field-list:
Feld
field,
field-list
field:
field-name=
expression
field-name:
generalized-identifier
quoted-identifier
Elementzugriffsausdruck
item-access-expression:
item-selection
optional-item-selection
item-selection:
primary-expression{
item-selector}
optional-item-selection:
primary-expression{
item-selector} ?
item-selector:
expression
Feldzugriffsausdrücke
field-access-expression:
field-selection
implicit-target-field-selection
Projektion (projection)
implicit-target-projection
field-selection:
primary-expression field-selector
field-selector:
required-field-selector
optional-field-selector
required-field-selector:
[
field-name]
optionaler Feldselektor:
[
field-name] ?
implicit-target-field-selection:
field-selector
projection:
primary-expression required-projection
primary-expression optional-projection
required-projection:_
[
required-selector-list]
optionale Projektion:
[
required-selector-list] ?
required-selector-list:
required-field-selector
required-field-selector,
required-selector-list
implicit-target-projection:
required-projection
optional-projection
Funktionsausdruck
Funktionsausdruck:
(
parameter-listopt)
return-typeopt=>
function-body
function-body:
expression
parameter-list:
fixed-parameter-list
fixed-parameter-list,
optional-parameter-list
optional-parameter-list
fixed-parameter-list:
parameter
parameter,
fixed-parameter-list
parameter:
parameter-name parameter-typeopt
parameter-name:
identifier
primitive-parameter-type:
primitive-assertion
return-type:
primitive-assertion
primitive-assertion:
as
nullable-primitive-type
optional-parameter-list:
optional-parameter
optional-parameter,
optional-parameter-list
optional-parameter:
optional
parameter
Each-Ausdruck
each-Ausdruck:
each
each-expression-body
each-expression-body:
function-body
Let-Ausdruck
Let-Ausdruck:
let
variable-listin
expression
variable-list:
-Variable
variable,
variable-list
variable:
variable-name=
expression
variable-name:
identifier
if-Ausdruck
if-Ausdruck:
if
if-conditionthen
true-expressionelse
false-expression
if-condition:
expression
true-expression:
expression
false-expression:
expression
Typausdruck
type-expression:
primary-expression
type
primary-type
-Typ:
primary-expression
primary-type
primary-type:
primitive-type
record-type
list-type
function-type
table-type
nullable-type
primitive-type: einer der folgenden Werte
any anynonnull binary date datetime datetimezone duration function
list logical none null number record table text time type
Datensatztyp:
[
open-record-marker]
[
field-specification-listopt]
[
field-specification-list,
open-record-marker]
field-specification-list:
field-specification
field-specification,
field-specification-list
field-specification:
optional
opt field-name field-type-specificationopt
field-type-specification:
=
field-type
field-type:
Typ
open-record-marker:
...
Listentyp:
{
item-type}
item-type:
Typ
function-type:
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:
parameter-specification
optional-parameter-specification-list:
optional-parameter-specification
optional-parameter-specification,
optional-parameter-specification-list
optional-parameter-specification:
optional
parameter-specification
parameter-specification:
parameter-name parameter-type
parameter-type:
assertion
assertion:
as
type
table-type:
table
row-type
row-type:
[
field-specification-listopt]
Nullable-Typ:
nullable
Typ
Fehlerauslösender Ausdruck
Fehlerauslösender Ausdruck:
error
expression_
Fehlerbehandlungsausdruck
Fehlerbehandlungsausdruck:
try
protected-expression-Fehlerhandleropt
protected-expression:
expression
Fehlerhandler:
Otherwise-Klausel
Catch-Klausel
otherwise-Klausel:
otherwise
Standardausdruck
Standardausdruck:
expression
Catch-Klausel:
catch
Catch-Funktion
Catch-Funktion:
(
Parameternameopt)
=>
Funktionsrumpf
Literalattribute
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
logical-literal
number-literal
text-literal
null-literal