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:
      0xhex-digits
      0Xhex-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:

      esignopt decimal-digits
      Esignopt 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-attributesopt
sectionsection-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-expression
orlogical-or-expression
logical-and-expression:
      is-expression
      logical-and-expression
andis-expression

Is-Ausdruck

is-expression:
      as-expression
      is-expression
isnullable-primitive-type
nullable-primitive-type:

      nullableopt primitive-type

As-Ausdruck

as-expression:
      equality-expression
      as-expression
asnullable-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-expression
metaunary-expression

Unärer Ausdruck

unary-expression:
      type-expression

      +unary-expression
      -unary-expression
      notunary-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:

      asnullable-primitive-type
optional-parameter-list:
      optional-parameter
      optional-parameter
,optional-parameter-list
optional-parameter:

      optionalparameter

Each-Ausdruck

each-Ausdruck:
      eacheach-expression-body
each-expression-body:
      function-body

Let-Ausdruck

Let-Ausdruck:
      letvariable-listinexpression
variable-list:
      -Variable
      variable
,variable-list
variable:
      variable-name
=expression
variable-name:
      identifier

if-Ausdruck

if-Ausdruck:
      ifif-conditionthentrue-expressionelsefalse-expression
if-condition:
      expression
true-expression:
      expression
false-expression:
      expression

Typausdruck

type-expression:
      primary-expression

      typeprimary-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:

      optionalopt 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:

      optionalparameter-specification
parameter-specification:
      parameter-name parameter-type
parameter-type:
      assertion
assertion:

      astype
table-type:

      tablerow-type
row-type:

      [field-specification-listopt]
Nullable-Typ:
      nullableTyp

Fehlerauslösender Ausdruck

Fehlerauslösender Ausdruck:
      error expression_

Fehlerbehandlungsausdruck

Fehlerbehandlungsausdruck:
      tryprotected-expression-Fehlerhandleropt
protected-expression:
      expression
Fehlerhandler:
      Otherwise-Klausel
      Catch-Klausel
otherwise-Klausel:

      otherwiseStandardausdruck
Standardausdruck:
      expression
Catch-Klausel:
      catchCatch-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