Konsolideret grammatik

Leksikalsk grammatik

lexical-unit:
      lexical-elementsopt
lexical-elements:
      lexical-element lexical-elementsopt
lexical-element:
      blanktegn
      Token
      Kommentar

Blanktegn

Mellemrum:
      Ethvert tegn med Unicode-klasse Zs
      Vandret tabulatortegn (U+0009)
      Lodret tabulatortegn (U+000B)
      Formularfeedtegn (U+000C)
      Vognreturtegn (U+000D) efterfulgt af linjeskifttegn (U+000A) nyt linjetegn
new-line-character:

      Vognreturtegn (U+000D)
      Linjeskifttegn (U+000A)
      Næste linjetegn (U+0085)
      Linjeseparatortegn (U+2028)
      Afsnitsseparatortegn (U+2029)

Kommentar

Kommentar:
      enkeltlinjekommentar
      afgrænset kommentar

enkeltlinjekommentar:
      //enkelt-line-comment-charactersopt
enkeltlinjekommentartegn:
      single-line-comment-character single-line-comment-charactersopt
enkeltlinjekommentartegn:

      Alle Unicode-tegn undtagen et nyt linjetegn
afgrænset kommentar:

      /*delimited-comment-textopt asterisks/
delimited-comment-text:
      delimited-comment-section delimited-comment-textopt
delimited-comment-section:

      /
      stjernervælger not-slash-or-asterisk
Stjerner:

      *stjernervælger
not-slash-or-asterisk:

      Alle Unicode-tegn undtagen * eller /

Tokens

Token:
      Identifikator
      Søgeord
      Bogstavelig
      operator-or-punctuator

Escape-sekvenser for tegn

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:
      control-character
control-character:

      cr
      lf
      tab
escape-escape:
      #

Konstanter

Bogstavelig:
      logical-literal
      number-literal
      tekstkonstant
      null-literal
      verbatim-literal
logical-literal:
      true
      false
number-literal:
      decimal-number-literal
      hexadecimal-number-literal
decimal-digits:
      decimal-digit decimal-digitsopt
decimal-digit:
en af
      0 1 2 3 4 5 6 7 8 9
hexadecimal-number-literal:
      0xhex-cifre
      0Xhex-cifre
hex-cifre:
      hex-digit hex-digitsopt
hex-digit:
en af
      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
eksponentdel:

      esignopt decimal-digits
      Esignopt decimal-digits
tegn:
en af
      + -
text-literal:
      "text-literal-charactersopt"
text-literal-characters:
      text-literal-character text-literal-charactersopt
text-literal-character:
      enkelt-tekst-tegn
      character-escape-sequence
      double-quote-escape-sequence
enkelt-tekst-tegn:

      Alle tegn undtagen " (U+0022) eller # (U+0023) efterfulgt af ( (U+0028)
double-quote-escape-sequence:
      "" (U+0022, U+0022)
null-literal:
      null
verbatim-literal:
      #!"text-literal-charactersopt"

Identifiers

Id:
      regular-identifier
      quoted-identifier
regular-identifier:
      available-identifier
      available-identifier dot-character regular-identifier
available-identifier:

      Et nøgleord eller en identifikator , der ikke er et nøgleord
keyword-or-identifier:
      bogstav-tegn
      understregningstegn
      identifier-start-character identifier-part-characters
identifier-start-character:
      bogstav-tegn
      understregningstegn
identifier-part-characters:
      identifier-part-character identifier-part-charactersopt
identifier-part-character:
      bogstav-tegn
      decimal-digit-character
      understregningstegn
      connecting-character
      kombinationstegn
      formateringstegn
generalized-identifier:
      generalized-identifier-part
      generalized-identifier
adskilt kun af tomme værdier (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
priktegn:

      . (U+002E)
understregningstegn:
      _ (U+005F)
letter-character:_
      Et Unicode-tegn i klasserne Lu, Ll, Lt, Lm, Lo eller Nl
kombinationstegn:
      Et Unicode-tegn i klasse Mn eller Mc
decimal-digit-character:
      Et Unicode-tegn i klasse Nd
connecting-character:
      Et Unicode-tegn på klasse-pc'en
formateringstegn:
      Et Unicode-tegn i klassen Cf
quoted-identifier:
      #"text-literal-charactersopt"

Nøgleord og foruddefinerede id'er

Foruddefinerede id'er og nøgleord kan ikke omdefineres. En citeret identifikator kan bruges til at håndtere identifikatorer, der ellers kolliderer med foruddefinerede identifikatorer eller nøgleord.

nøgleord: et af
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

Operatorer og tegnsætningstegn

operator-or-punctuator: en af
      , ; = < <= > >= <> + - * / & ( ) [ ] { } @ ? ?? => .. ...

Syntaktisk grammatik

Dokumenter

Dokument:
      sektionsdokument
      expression-document

Sektionsdokumenter

section-document:
      Afsnit
Afsnit:
      literal-attributesopt
sectionsection-name;section-members opt
section-name:
      Identifikator
section-members:
      section-member section-membersopt
section-member:
      literal-attributesopt sharedopt section-member-name
=expression;
section-member-name:
      Id

Udtryksdokumenter

Udtryk

expression-document:
      Udtryk
Udtryk:
      logical-or-expression
each-expression
      funktionsudtryk
      let-expression
      if-expression
      error-raising-expression
      error-handling-expression

Logiske udtryk

logical-or-expression:
      logical-and-expression
      logical-and-expression
orlogical-or-expression
logical-and-expression:
      is-expression
      logical-and-expression
andis-expression

Er-udtryk

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

      nullableopt primitive-type

Som udtryk

as-expression:
      lighedsudtryk
      as-expression
asnullable-primitive-type

Lighedsudtryk

lighedsudtryk:
      relationsudtryk
      relationsudtryk
=lighedsudtryk
      relationsudtryk
<>lighedsudtryk

Relationsudtryk

relationelt-udtryk:
      additivt-udtryk
      additive-expression
<relational-expression
      additive-expression
>relational-expression
      additive-expression
<=relational-expression
      additive-expression
>=relational-expression

Aritmetiske udtryk

additivt-udtryk:
      multiplikativt-udtryk
      multiplicative-expression
+additive-expression
      multiplicative-expression
-additive-expression
      multiplicative-expression
& _additive-expression
multiplikativt-udtryk:
      metadata-udtryk
      metadata-expression
*multiplicative-expression
      metadata-expression
/multiplicative-expression

Metadataudtryk

metadata-udtryk:
      monadisk-udtryk
      monadisk-udtryk
metamonadisk-udtryk

Monadisk udtryk

monadisk-udtryk:
      type-expression

      +monadisk-udtryk
      -monadisk-udtryk
      notmonadisk-udtryk

Primært udtryk

primary-expression:
      literal-expression
      list-expression
      record-expression
      identifier-expression
      section-access-expression
      parentesiseret-udtryk
      field-access-expression
      item-access-expression
      invoke-expression
      ikke-implementeret-udtryk

Konstantudtryk

literal-expression:
      Bogstavelig

Id-udtryk

identifier-expression:
      identifier-reference
identifier-reference:
      exclusive-identifier-reference
      inclusive-identifier-reference
exclusive-identifier-reference:
      Identifikator
inclusive-identifier-reference:

      @Identifikator

Udtryk for sektionsadgang

section-access-expression:
      id-id
!

Udtryk med parentes

parentesiseret-udtryk:
      (Udtryk)

Ikke-implementeret udtryk

not-implemented-expression:
      ...

Aktivér udtryk

invoke-expression:
      primary-expression
(argument-listopt)
argument-list:
      Udtryk
      argumentliste for udtryk
,

Listeudtryk

list-expression:
      {elementlistevalg}
elementliste:
      Element
      elementelementliste
,
Element:
      Udtryk
      udtryksudtryk
..

Postudtryk

record-expression:
      [field-listopt]
field-list:
      Feltet
      feltfeltliste
,
Feltet:
      field-name-udtryk
=
field-name:
      generalized-identifier
      quoted-identifier

Elementadgangsudtryk

item-access-expression:
      elementvalg
      optional-item-selection
item-selection:
primary-expression
{item-selector}
optional-item-selection:
      primary-expression
{item-selector} ?
elementvælger:
      Udtryk

Udtryk for feltadgang

field-access-expression:
      feltmarkering
      implicit-target-field-selection
      Projektion
      implicit-target-projection
field-selection:
      primary-expression field-selector
field-selector:
      required-field-selector
      optional-field-selector
required-field-selector:

      [field-name]
optional-field-selector:
      [field-name] ?
implicit-target-field-selection:
      feltvælger
Projektion:
      primary-expression required-projection
      primary-expression optional-projection
required-projection:_
      [required-selector-list]
valgfri projektion:
      [required-selector-list] ?
required-selector-list:
      required-field-selector
      required-field-selector
,required-selector-list
implicit-target-projection:
      required-projection
      valgfri projektion

Funktionsudtryk

function-expression:
      (parameter-listopt)return-typeopt=>function-body
function-body:
      Udtryk
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 primitive-parameter-typeopt
parameter-name:
      Identifikator
primitive-parameter-type:
      primitiv-antagelse
return-type:
      primitiv-antagelse
primitiv-antagelse:

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

      optionalParameter

Hvert udtryk

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

Let-udtryk

let-expression:
      letvariable-list-udtrykin
variable-list:
      variabel
      variable
,variable-list
Variabel:
      variable-name-udtryk
=
variable-name:
      Id

If-udtryk

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

Typeudtryk

type-expression:
      primary-expression

      typeprimary-type
Type:
      primary-expression
      primary-type
primary-type:
      primitiv type
      posttype
      listetype
      funktionstype
      tabeltype
      nullable-type
primitiv-type:
en af
      any anynonnull binary date datetime datetimezone duration function
      list logical none null number record table text time type
record-type:
      [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:

      =felttype
field-type:
      type
open-record-marker:

      ...
listetype:
      {elementtype}
item-type:
      type
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:
      parameterspecifikation
optional-parameter-specification-list:
      optional-parameter-specification
      optional-parameter-specification
,optional-parameter-specification-list
optional-parameter-specification:

      optionalparameterspecifikation
parameter-specification:
      parameter-name parameter-type
parameter-type:
      assertion
Påstand:

      asType
table-type:

      tablerækketype
row-type:

      [field-specification-listopt]
nullable-type:
      nullabletype

Fejl under opløftning af udtryk

error-raising-expression:
      error Udtryk_

Udtryk for fejlhåndtering

error-handling-expression:
      tryprotected-expression error-handleropt
protected-expression:
      Udtryk
error-handler:
      otherwise-clause
      catch-clause
otherwise-clause:

      otherwisestandardudtryk
default-expression:
      Udtryk
catch-clause:
      catchcatch-function
catch-function:
      (parameter-nameopt=>)function-body

Konstantattributter

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
      tekstkonstant
      null-literal