Dela via


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 av
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 och skiljetecken

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

Syntaktisk grammatik

Dokument

dokument:
      section-document
      expression-document

Avsnittsdokument

section-document:
      avsnitt
sektion:
      literal-attributesopt
sectionsection-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:

      nullableopt 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:
      eacheach-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:
      ifif-conditionthentrue-expressionelsefalse-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:

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

      optionalparameterspecifikation
parameterspecifikation:
      parameter-name parameter-type
parametertyp:
      assertion
påstående:

      astyp
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:
      tryfelhanterarval förskyddat uttryck
protected-expression:
      uttryck
error-handler:
      otherwise-clause
      catch-clause
otherwise-clause:

      otherwisestandarduttryck
default-expression:
      uttryck
catch-clause:
      catchcatch-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