Udostępnij za pośrednictwem


Gramatyka skonsolidowana

Gramatyka leksykalna

leksykalna jednostka:
      optykały-elementyleksykalne
elementy leksykalne:
      lexical-element lexical-elementsopt opt
element-leksykalny:
      znak odstępu
      token
      komentarz

Odstępu

Odstępu:
      Dowolny znak z klasą Unicode Zs
      Znak karty poziomej (U+0009)
      Znak karty pionowej (U+000B)
      Znak kanału informacyjnego formularza (U+000C)
      Znak powrotu karetki (U+000D), po którym następuje znak przesuwu wiersza (U+000A) znak nowego wiersza
znak nowego wiersza:

      Znak powrotu karetki (U+000D)
      Znak kanału informacyjnego wiersza (U+000A)
      Znak następnego wiersza (U+0085)
      Znak separatora linii (U+2028)
      Znak separatora akapitu (U+2029)

Komentarz

komentarz:
      komentarz jednowierszowy
      komentarz rozdzielany

komentarz jednowierszowy:
      // jednowierszowy znak komentarza
znaki komentarza jednowierszowego:
      jednowierszowy znak komentarza jednowierszowego z jednym wierszem i znakamikomentarza
jednowierszowy znak komentarza:

      Dowolny znak Unicode z wyjątkiem nowego znaku wiersza
komentarz rozdzielany:

      /*ogranicznik-komentarz-tekstopt a gwiazdki /
rozdzielany tekst komentarza:
      Rozdzielana sekcja komentarza rozdzielana tekstem komentarza
rozdzielana sekcja komentarza:

      /
      gwiazdkiopt not-slash-or-asterisk
Gwiazdki:

      *gwiazdkiopt
not-slash-or-asterisk:

      Dowolny znak Unicode z wyjątkiem * lub /

Tokeny

żeton:
      identifier
      słowo kluczowe
      literal
      operator-or-interpunkcyjny

Sekwencje ucieczki znaków

znak-ucieczka-sekwencja:
      #( escape-sequence-list )
escape-sequence-list:
      pojedyncza sekwencja ucieczki
      escape-sequence-list
, single-escape-sequence
pojedyncza sekwencja ucieczki:
      long-unicode-escape-sequence
      short-unicode-escape-sequence
      control-character-escape-sequence
      ucieczka ucieczki
long-unicode-escape-sequence:
      szesnastkowy cyfra-szesnastkowy-
short-unicode-escape-sequence:
      cyfra-szesnastkowy-cyfra-szesnastkowy-cyfra-szesnastkowy
control-character-escape-sequence:
      znak kontrolny
znak kontrolny:

      cr
      lf
      tab
ucieczka ucieczki:
      #

Literały

dosłowny:
      literał logiczny
      literał liczbowy
      literał tekstowy
      literał null
      literał dosłowny
literał logiczny:
      true
      false
literał liczbowy:
      literał-liczba-dziesiętna
      literał-liczby szesnastkowej
cyfry dziesiętne:
      cyfra-dziesiętna-cyfra-dziesiętna— wyrażenie zgody
cyfra-dziesiętna:
jedna z
      0 1 2 3 4 5 6 7 8 9
literał-liczbowy szesnastkowy:
      0x cyfry szesnastowe
      0X cyfry szesnastowe
cyfry szesnastkowej:
      szesnastkowy cyfra-cyfra-szesnastkowy
cyfra-szesnastkowy:
jeden z
      0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
Literał-liczby dziesiętnej:
      Cyfry-dziesiętne cyfry-dziesiętne
.wykładniczo-częściowej
      . wyrażenie-cyfr-dziesiętne wykładniczo-częściowe
      wyrażenie-cyfr-dziesiętne wykładniczo-częściowe
część wykładnicza:

      e znakopt-digits decimal-digits
      E znakopt-digits decimal-digits
znak:
jeden z
      + -
literał tekstowy:
      " wybór znakówliterałów tekstowych "
znaki tekstowe literału:
      Wyrażenie zgody na zamianę znakówtekstowych literałów tekstowych
znak-literał-tekstu:
      jednotekstowy znak
      znak-ucieczka-sekwencja
      podwójna sekwencja ucieczki cudzysłowu
jednotekstowy znak:

      Dowolny znak z wyjątkiem " () lub # (), po którym ( następuje (U+0023U+0028)U+0022
double-quote-escape-sequence:
      "" (U+0022, U+0022)
literał null:
      null
literał dosłowny:
      #!"wybór znakówliterałów tekstowych "

Identifiers

identyfikator:
      zwykły identyfikator
      identyfikator cytowany
zwykły identyfikator:
      dostępny identyfikator
      identyfikator-dostępny-kropka-znak zwykły-identyfikator
dostępny identyfikator:

      Słowo kluczowe lub identyfikator , który nie jest słowem kluczowym
słowo kluczowe lub identyfikator:
      znak litery
      znak podkreślenia
      identyfikator-identyfikator-znak-część-znaków
identyfikator-start-znak:
      znak litery
      znak podkreślenia
identifier-part-characters:
      identifier-part-character identifier-part-charactersopt
identyfikator— część znaku:
      znak litery
      znak-cyfra-dziesiętna
      znak podkreślenia
      znak połączenia
      łączenie znaku
      znak formatowania
uogólniony-identyfikator:
      uogólniona część identyfikatora
      uogólniony-identyfikator
oddzielony tylko wartościami pustymi (U+0020) uogólnioną częścią-identyfikatora
generalized-identifier-part:
      uogólniony segment identyfikatora
      Segment uogólniony-identyfikator-identyfikator-cyfra-dziesiętna
uogólniony segment identyfikatora:
      słowo kluczowe lub identyfikator
      słowo kluczowe lub identyfikator dot-znak słowa kluczowego lub identyfikatora
znak kropki:

      . (U+002E)
znak podkreślenia:
      _ (U+005F)
litera-znak:_
      Znak Unicode klas Lu, Ll, Lt, Lm, Lo lub Nl
znak łączący:
      Znak Unicode klas Mn lub Mc
znak-cyfra-dziesiętna:
      Znak Unicode klasy Nd
znak połączenia:
      Znak Unicode klasy Pc
znak formatowania:
      Znak Unicode klasy Cf
identyfikator cytowany:
      #" wybór znakówliterałów tekstowych "

Słowa kluczowe i wstępnie zdefiniowane identyfikatory

Nie można ponownie zdefiniować wstępnie zdefiniowanych identyfikatorów i słów kluczowych. Identyfikator cytowany może służyć do obsługi identyfikatorów, które w przeciwnym razie zderzają się ze wstępnie zdefiniowanymi identyfikatorami lub słowami kluczowymi.

słowo kluczowe: jeden z
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

Operatory i znaki interpunkcyjne

operator-or-interpunkcyjny: jeden z
      , ; = < <= > >= <> + - * / & ( ) [ ] { } @ ? ?? => .. ...

Gramatyka składniowa

Dokumenty

dokument:
      dokument-sekcja
      dokument wyrażenie-dokument

Dokumenty sekcji

sekcja-dokument:
      section
sekcja:
      atrybuty-literałuopt-nazwa-sekcji-składowe-zgody
section;
nazwa-sekcji:
      identifier
elementy członkowskie sekcji:
      section-member section-membersopt
składowa sekcji:
      atrybuty-literału opt wyrażenie współużytkowanejnazwy składowej=sekcji
;
nazwa-składowa-sekcji:
      identyfikator

Dokumenty wyrażeń

Wyrażenia

wyrażenie-dokument:
      wyrażenie
wyrażenie:
      wyrażenie logiczne lub wyrażenie-każde wyrażenie

      wyrażenie-funkcji
      wyrażenie let
      wyrażenie-if
      wyrażenie-podnoszenie błędu
      wyrażenie-obsługi błędów

Wyrażenia logiczne

wyrażenie logiczne lub wyrażenie:
      wyrażenie logiczne i wyrażenie
      wyrażenie logiczne i
or wyrażenie-logiczne lub wyrażenie
wyrażenie logiczne i wyrażenie:
      is-expression
      wyrażenie logiczne i wyrażenie
and -is-expression

Wyrażenie is

is-expression:
      as-expression
      is-expression
is nullable-primitive-type
typ-pierwotny dopuszczany do wartości null:

      nullableopt typ pierwotny

Wyrażenie jako

as-expression:
      wyrażenie równości
      as-expression
as nullable-primitive-type

Wyrażenie równości

wyrażenie równości:
      wyrażenie-relacyjne
      wyrażenie-relacyjne
= wyrażenie-równości
      wyrażenie-relacyjne
<> wyrażenie-równości

Wyrażenie relacyjne

wyrażenie-relacyjne:
      wyrażenie-addytywne
      wyrażenie-addytywne wyrażenie-relacyjne
<
      wyrażenie-addytywne wyrażenie-relacyjne
>
      wyrażenie-addytywne wyrażenie-relacyjne
<=
      wyrażenie-addytywne wyrażenie-relacyjne
>=

Wyrażenia arytmetyczne

wyrażenie-addytywne:
      wyrażenie mnożenia
      wyrażenie-addytywne wyrażenie-mnożenia
+
      wyrażenie-addytywne wyrażenie-mnożenia
-
      wyrażenie-mnożenia
& wyrażenie-_additive
wyrażenie-mnożenia:
      wyrażenie-metadanych
      wyrażenie-metadanych
* wyrażenie mnożenia
      wyrażenie-metadanych
/ wyrażenie mnożenia

Wyrażenie metadanych

wyrażenie-metadanych:
      wyrażenie jednoargumentowe
      jednoargumentowe wyrażenie-jednoargumentowe
meta

Wyrażenie jednoargumentowe

jednoargumentowe wyrażenie:
      wyrażenie-typ

      + wyrażenie jednoargumentowe
      - wyrażenie jednoargumentowe
      not wyrażenie jednoargumentowe

Wyrażenie podstawowe

wyrażenie-podstawowe:
      wyrażenie-literału
      wyrażenie-listy
      wyrażenie-rekordu
      wyrażenie-identyfikatora
      wyrażenie-dostępu do sekcji
      wyrażenie-nawiasowe
      wyrażenie-dostępu do pola
      wyrażenie-dostępu do elementu
      invoke-expression
      wyrażenie nie implementowane

Wyrażenie literału

wyrażenie-literału:
      dosłowny

Wyrażenie identyfikatora

wyrażenie-identyfikatora:
      odwołanie do identyfikatora
odwołanie do identyfikatora:
      wyłączność-identyfikator-odwołanie
      odwołanie do identyfikatora inkluzywnego
wyłączność-identyfikator-odwołanie:
      identifier
inkluzywne odwołanie do identyfikatora:

      @ identyfikator

Wyrażenie dostępu do sekcji

wyrażenie-dostępu do sekcji:
      identyfikator identyfikatora
!

Wyrażenie nawiasowe

wyrażenie-nawiasowe:
      ( wyrażenie )

Nie zaimplementowane wyrażenie

wyrażenie-nie implementowane:
      ...

Wywołaj wyrażenie

wyrażenie-wywołania:
      opcja listy argumentów
(wyrażenia podstawowego )
lista argumentów:
      wyrażenie
      lista argumentów wyrażeń
,

Wyrażenie listy

wyrażenie-listy:
      { opcja listy elementów }
lista elementów:
      element
      lista elementów
,
przedmiot:
      wyrażenie
      wyrażenie wyrażenia
..

Wyrażenie rekordu

wyrażenie-rekordu:
      [ wybór listypól ]
lista-pól:
      pole
      pole
, listy pól
pole:
      wyrażenie nazwy
=pola
nazwa-pola:
      uogólniony identyfikator
      identyfikator cytowany

Wyrażenie dostępu do elementu

wyrażenie-dostępu do elementu:
      wybór elementu
      wybór opcjonalnego elementu
wybór elementu:
selektor elementów wyrażeń{
podstawowych }
wybór opcjonalnego elementu:
      selektor elementów wyrażeń
{ podstawowych } ?
selektor elementów:
      wyrażenie

Wyrażenia dostępu do pól

wyrażenie-dostępu do pola:
      wybór pola
      niejawne zaznaczenie pola docelowego
      projekcja
      niejawna projekcja docelowa
wybór pola:
      selektor pól wyrażenia podstawowego
selektor pól:
      selektor pola wymaganego
      opcjonalny selektor pól
selektor-wymagane pole:

      [ nazwa-pola ]
opcjonalny selektor pól:
      [ nazwa-pola ] ?
niejawne zaznaczenie pola docelowego:
      selektor pól
projekcja:
      wyrażenie-podstawowe wymagane-projekcja
      wyrażenie-podstawowe opcjonalne-projekcja
projekcja wymagana:_
      [lista selektorów wymaganych ]
projekcja opcjonalna:
      [lista selektorów wymaganych ] ?
required-selector-list:
      selektor pola wymaganego
      required-field-selector required-selector-list
,
niejawna projekcja docelowa:
      projekcja wymagana
      projekcja opcjonalna

Wyrażenie funkcji

wyrażenie-funkcji:
      ( parametr-listopt)return-typeopt=>function-body
function-body:
      wyrażenie
parametr-lista:
      stała lista parametrów
      fixed-parameter-list optional-parameter-list
,
      opcjonalna lista parametrów
fixed-parameter-list:
      parametr
      parametr
, fixed-parameter-list
parametr:
      parametr-nazwa-pierwotny-typ-parametruopt
nazwa-parametru:
      identifier
typ-pierwotny-parametru:
      asercji pierwotnej
zwracany typ:
      asercji pierwotnej
asercji pierwotnej:

      as typ-pierwotny dopuszczany do wartości null
opcjonalna lista parametrów:
      opcjonalny parametr
      optional-parameter
, optional-parameter-list
opcjonalny parametr:

      optional parametr

Każde wyrażenie

wyrażenie-każde:
      eachkażda treść wyrażenia
każda treść wyrażenia:
      treść funkcji

Wyrażenie Let

wyrażenie let:
      let inwyrażenie listy zmiennych
lista zmiennych:
      zmienna
      lista zmiennych
,
zmienna:
      wyrażenie zmiennej nazwy
=
nazwa-zmiennej:
      identyfikator

Wyrażenie If

wyrażenie-if:
      ifif-conditionthenWyrażenie-true-false-expressionelse
warunek if:
      wyrażenie
wyrażenie-true:
      wyrażenie
wyrażenie-fałsz:
      wyrażenie

Wyrażenie typu

wyrażenie-typ:
      wyrażenie-podstawowe

      type typ podstawowy
type:
      wyrażenie-podstawowe
      typ podstawowy
typ podstawowy:
      typ pierwotny
      typ rekordu
      typ listy
      typ funkcji
      typ tabeli
      typ dopuszczalny do wartości null
typ-pierwotny:
jeden z
      any anynonnull binary date datetime datetimezone duration function
      list logical none null number record table text time type
typ rekordu:
      [ open-record-marker ]
      [ opcja field-specification-list ]
      [ field-specification-list , open-record-marker ]
lista-specyfikacji pól:
      specyfikacja pola
      field-specification
, field-specification-list
specyfikacja pola:

      optionalopt-name field-type-specificationopt
specyfikacja typu pola:

      =typ-pola
typ-pola:
      type
open-record-marker:

      ...
typ listy:
      { typ elementu }
typ elementu:
      type
typ funkcji:

      function ( parametr-specification-listopt)return-type
parametr-specification-list:
      required-parameter-specification-list
      required-parameter-specification-list
, optional-parameter-specification-list
      opcjonalna lista-specyfikacji parametrów
required-parameter-specification-list:
      required-parameter-specification
      required-parameter-specification
, required-parameter-specification-list
required-parameter-specification:
      specyfikacja parametrów
optional-parameter-specification-list:
      opcjonalna specyfikacja parametrów
      optional-parameter-specification
, optional-parameter-specification-list
opcjonalna specyfikacja parametrów:

      optionalspecyfikacja parametrów
specyfikacja parametrów:
      parametr-nazwa parametru typ-parametru
typ parametru:
      assertion
twierdzenie:

      astyp
typ tabeli:

      table typ wiersza
typ wiersza:

      [ opcja field-specification-list ]
typ dopuszczalny do wartości null:
      nullable typ

Błąd podczas podnoszenia wyrażenia

wyrażenie-zgłaszania błędów:
      error wyrażenie_

Wyrażenie obsługi błędów

wyrażenie-obsługi błędów:
      tryopcja obsługibłędów wyrażeń chronionych
wyrażenie-chronione:
      wyrażenie
program obsługi błędów:
      klauzula w przeciwnym razie
      catch-klauzula
w przeciwnym razie klauzula:

      otherwisewyrażenie domyślne
wyrażenie-domyślne:
      wyrażenie
catch-klauzula:
      catchcatch-function
catch-function:
      (parametr-nameopt=>) function-body

Atrybuty literału

atrybuty literału:
      literał rekordu
literał rekordu:

      [wybór listypól literałów ]
literał-lista-pól:
      pole-literału
      literał-pole-literał-lista-pól
,
pole-literału:
      nazwa-pola literał-dowolny
=
literał listy:

      {wybór listy literałów }
literał-lista-elementów:
      dowolny literał
      lista-elementów-literałów dowolnych literałów
,
dowolny literał:
      literał rekordu
      literał listy
      literał logiczny
      literał liczbowy
      literał tekstowy
      literał null