Freigeben über


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:
      // Einzeilige Kommentarzeichen
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:

      /*Durch Trennzeichen getrenntes Kommentartext-Sternchen /
delimited-comment-text:
      delimited-comment-section delimited-comment-textopt
delimited-comment-section:

      /
      asterisksopt not-slash-or-asterisk
Sternchen:

      *Sternchen- und Sternchen-Opt
not-slash-or-asterisk:

      Beliebiges Unicode-Zeichen mit Ausnahme von * oder /

Token

token:
      Bezeichner
      Schlüsselwort (keyword)
      literal
      operator-or-punctuator

Escapezeichensequenzen

Escapezeichensequenz:
      #( Escapesequenzliste )
escape-sequence-list:
      single-escape-sequence
      escape-sequence-list
, single-escape-sequence-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 Hexadezimiert
      0X Hexadezimiert
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:
      Dezimalstellende
.Dezimalziffern-Exponent-Part-Opt
      . Dezimalstellen-Exponent-Part-Opt
      decimal-digits exponent-partopt
exponent-part:

      e dezimale Dezimalziffern signieren
      E dezimale Dezimalziffern signieren
Vorzeichen:
einer der folgenden Werte
      + -
Textliteral:
      " textliteral-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:
      #!"textliteral-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:
      #" textliteral-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-members opt
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
      logischer und ausdruckslogischer
or Oder-Ausdruck
logical-and-expression:
      is-expression
      Logischer Ausdruck und Ausdruck
and

Is-Ausdruck

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

      nullableopt primitive-type

As-Ausdruck

as-expression:
      equality-expression
      as-Ausdruck
as Primitiver Typ, der Nullwerte zulässt

Gleichheitsausdruck

equality-expression:
      relational-expression
      Relationaler Ausdruck
= Gleichheitsausdruck
      Relationaler Ausdruck
<> Gleichheitsausdruck

Relationaler Ausdruck

relational-expression:
      additive-expression
      Additiver Ausdruck
< Relationaler Ausdruck
      Additiver Ausdruck
> Relationaler Ausdruck
      Additiver Ausdruck
<= Relationaler Ausdruck
      Additiver Ausdruck
>= Relationaler Ausdruck

Arithmetische Ausdrücke

additive-expression:
      multiplicative-expression
      Additivausdruck mit multiplizierten Ausdrücken
+
      Additivausdruck mit multiplizierten Ausdrücken
-
      Multipliktiver Ausdruck
& _additive-Ausdruck
multiplicative-expression:
      metadata-expression
      Multipliktiver Metadatenausdruck
*
      Multipliktiver Metadatenausdruck
/

Metadatenausdruck

metadata-expression:
      unary-expression
      Unärer Ausdruck
meta Unärer Ausdruck

Unärer Ausdruck

unary-expression:
      type-expression

      + unärer-Ausdruck
      - unärer-Ausdruck
      not unärer-Ausdruck

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:

      @ Bezeichner

Abschnittszugriffsausdruck

section-access-expression:
      Bezeichner
!

Ausdruck in Klammern

Ausdruck in Klammern:
      ( Ausdruck )

Nicht implementierter Ausdruck

Nicht implementierter Ausdruck:
      ...

Aufrufausdruck

invoke-expression:
      Argumentliste für primärer Ausdruck
( )
argument-list:
      expression
      Ausdrucksargumentliste
,

Listenausdruck

Listenausdruck:
      { Elementlisten-Opt }
item-list:
      item
      Elementelementliste
,
item:
      expression
      Ausdruck
..

Datensatzausdruck

Datensatzausdruck:
      [ Feldlisten-Opt ]
field-list:
      Feld
      Feldfeldliste
,
field:
      Feldnameausdruck
=
field-name:
      generalized-identifier
      quoted-identifier

Elementzugriffsausdruck

item-access-expression:
      item-selection
      optional-item-selection
Elementauswahl:
Elementauswahl des primären Ausdrucks
{ }
optional-item-selection:
      Primärer Ausdruck
{ Elementauswahl } ?
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:

      [ Feldname ]
optionaler Feldselektor:
      [ Feldname ] ?
implicit-target-field-selection:
      field-selector
projection:
      primary-expression required-projection
      primary-expression optional-projection
required-projection:_
      [ Erforderliche Selektorliste ]
optionale Projektion:
      [ Erforderliche Selektorliste ] ?
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-primitiver Typ
optional-parameter-list:
      optional-parameter
      optional-parameter
, optional-parameter-list
optional-parameter:

      optional Parameter

Each-Ausdruck

each-Ausdruck:
      eachjeder Ausdruckstext
each-expression-body:
      function-body

Let-Ausdruck

Let-Ausdruck:
      let Ausdruck der Variablenlistein
variable-list:
      -Variable
      Variable
, Variable-Liste
variable:
      Ausdruck mit variablem Namen
=
variable-name:
      identifier

if-Ausdruck

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

Typausdruck

type-expression:
      primary-expression

      type Primärtyp
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
      Feldspezifikationsfeld-Spezifikationsliste
,
field-specification:

      optionalopt field-name field-type-specificationopt
field-type-specification:

      =Feldtyp
field-type:
      Typ
open-record-marker:

      ...
Listentyp:
      { Elementtyp }
item-type:
      Typ
function-type:

      function ( Rückgabetyp der Parameterspezifikationsliste)
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-specification-list
required-parameter-specification:
      parameter-specification
optional-parameter-specification-list:
      optional-parameter-specification
      optional-parameter-specification
, optional-parameter-specification-list
optional-parameter-specification:

      optionalParameterspezifikation
parameter-specification:
      parameter-name parameter-type
parameter-type:
      assertion
assertion:

      asArt
table-type:

      table Zeilentyp
row-type:

      [ Field-specification-listopt ]
Nullable-Typ:
      nullable Art

Fehlerauslösender Ausdruck

Fehlerauslösender Ausdruck:
      error expression_

Fehlerbehandlungsausdruck

Fehlerbehandlungsausdruck:
      tryFehlerhandlerfür geschützten Ausdruck
protected-expression:
      expression
Fehlerhandler:
      Otherwise-Klausel
      Catch-Klausel
otherwise-Klausel:

      otherwiseStandardausdruck
Standardausdruck:
      expression
Catch-Klausel:
      catchCatch-Funktion
Catch-Funktion:
      (Parametername-Opt-Funktionstext) =>

Literalattribute

literal-attributes:
      record-literal
record-literal:

      [literal-field-listopt ]
literal-field-list:
      literal-field
      literal-field-literal-field-list
,
literal-field:
      feldname
= 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