Поделиться через


Консолидированная грамматика

Лексическая грамматика

лексическая-единица:
      лексические-элементынеобязательно
лексические-элементы:
      лексический-элемент лексические-элементынеобязательно
лексический-элемент:
      пробел
      token
      комментарий

Пробел

Пробелы:
      Любой символ с классом Юникод Zs
      Символ горизонтальной вкладки (U+0009)
      Символ вертикальной вкладки (U+000B)
      Символ веб-канала формы (U+000C)
      Символ возврата каретки (U+000D), за которым следует символ перевода строки (U+000A) символ-новой-строки
символ-новой-строки:

      Возвращаемый символ каретки (U+000D)
      Символ канала строки (U+000A)
      Следующий символ строки (U+0085)
      Символ разделителя строк (U+2028)
      Символ разделителя абзаца (U+2029)

Комментарий

комментарий:
      однострочный-комментарий
      Примечание с разделителями

однострочный-комментарий:
      // Выбрать однострочные символы-комментарии
символы-однострочного-комментария:
      символ-однострочного-комментария символы-однострочного-комментариянеобязательно
символ-однострочного-комментария:

      Любой символ Юникода, кроме символа-новой-строки
комментарий-с-разделителями:

      /*Разделители-комментарий-текстотбирают звездочки /
текст-комментария-с-разделителями:
      раздел-комментария-с-разделителями текст-комментария-с-разделителяминеобязательно
раздел-комментария-с-разделителями:

      /
      звездочкинеобязательно не-косая-черта-или-звездочка
звездочки:

      *звездочки
не-косая-черта-или-звездочка:

      Любой символ Юникода, кроме * или /

Токены

токен:
      идентификатор
      keyword
      литерал
      оператор-или-знак-препинания

Escape-последовательности символов

последовательность символов и escape-последовательностей:
      #( escape-sequence-list )
список-escape-последовательностей:
      одиночная-escape-последовательность
      escape-sequence-list
, single-escape-sequence-sequence
одиночная-escape-последовательность:
      длинная-управляющая-последовательность-Юникода
      короткая-управляющая-последовательность-Юникода
      escape-последовательность-с-управляющим-символом
      escape-escape
длинная-управляющая-последовательность-Юникода:
      шестнадцатеричный-знак шестнадцатеричный-знак шестнадцатеричный-знак шестнадцатеричный-знак шестнадцатеричный-знак шестнадцатеричный-знак шестнадцатеричный-знак шестнадцатеричный-знак
короткая-управляющая-последовательность-Юникода:
      шестнадцатеричный-знак шестнадцатеричный-знак шестнадцатеричный-знак шестнадцатеричный-знак
escape-последовательность-с-управляющим-символом:
      управляющий-символ
управляющий-символ:

      cr
      lf
      tab
escape-escape:
      #

Литералы

литерал:
      логический-литерал
      числовой-литерал
      текстовый-литерал
      литерал-NULL
      буквальный-литерал
логический литерал:
      true
      false
числовой-литерал:
      десятичный-числовой-литерал
      шестнадцатеричный-числовой-литерал
десятичные-знаки:
      десятичный-знак десятичные-знакинеобязательно
десятичный-знак:
один из
      0 1 2 3 4 5 6 7 8 9
шестнадцатеричное число-литерал:
      0x шестнадцатеричные цифры
      0X шестнадцатеричные цифры
шестнадцатеричные-знаки:
      шестнадцатеричный-знак шестнадцатеричные-знакинеобязательно
шестнадцатеричный-знак:
один из
      0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
десятичный-числовой-литерал:
      десятичные цифры
.с десятичными цифрами экспонентной части
      . десятичные цифры экспонент-частьopt
      десятичные-знаки показатель-степенинеобязательно
показатель-степени:

      e подписатьдесятичные цифры
      E подписатьдесятичные цифры
знак:
один из
      + -
текстовый литерал:
      " Выбор текстовых литеральных символов "
символы-текстового-литерала:
      символ-текстового-литерала символы-текстового-литераланеобязательно
символ-текстового-литерала:
      одиночный-текстовый-символ
      escape-последовательность-символов
      escape-последовательность-двойных-кавычек
одиночный-текстовый-символ:

      Любой символ, кроме " (U+0022) или (U+0023) за # которым следует ( () (U+0028)
double-quote-escape-sequence:
      "" (U+0022, U+0022)
null-литерал:
      null
verbatim-literal:
      #!"Выбор текстовых литеральных символов "

Identifiers

идентификатор:
      обычный-идентификатор
      нестандартный-идентификатор
обычный-идентификатор:
      доступный-идентификатор
      доступный-идентификатор символ-точки обычный-идентификатор
доступный-идентификатор:

      ключевое-слово-или-идентификатор, не являющееся ключевым словом
ключевое-слово-или-идентификатор:
      буквенный-символ
      символ-подчеркивания
      начальный-символ-идентификатора символы-части-идентификатора
начальный-символ-идентификатора:
      буквенный-символ
      символ-подчеркивания
символы-части-идентификатора:
      символ-части-идентификатора символы-части-идентификаторанеобязательно
символ-части-идентификатора:
      буквенный-символ
      символ-десятичного-знака
      символ-подчеркивания
      символ-соединения
      символ-объединения
      символ-форматирования
обобщенный-идентификатор:
      часть-обобщенного-идентификатора
      обобщенный-идентификатор
разделяется только пробелами (U+0020) часть-обобщенного-идентификатора
часть-обобщенного-идентификатора:
      сегмент-обобщенного-идентификатора
      символ-десятичного-знака сегмент-обобщенного-идентификатора
сегмент-обобщенного-идентификатора:
      ключевое-слово-или-идентификатор
      ключевое-слово-или-идентификатор символ-точки ключевое-слово-или-идентификатор
символ-точки:

      . (U+002E)
символ подчеркивания:
      _ (U+005F)
letter-character:_
      Символ Юникода классов Lu, Ll, Lt, Lm, Lo или Nl
объединение символов:
      Символ Юникода классов Mn или Mc
десятичная цифра-символ:
      Символ Юникода класса Nd
connecting-character:
      Символ Юникода класса Pc
форматирование символа:
      Символ Юникода класса Cf
quoted-identifier:
      #" Выбор текстовых литеральных символов "

Ключевые слова и предопределенные идентификаторы

Предопределенные идентификаторы и ключевые слова не могут быть переопределены. Идентификатор кавычки можно использовать для обработки идентификаторов, которые в противном случае сталкиваются с предопределенными идентификаторами или ключевыми словами.

ключевое-слово: одно из
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

Операторы и пунктуаторы

оператор-или-знак-препинания: один из
      , ; = < <= > >= <> + - * / & ( ) [ ] { } @ ? ?? => .. ...

Синтаксическая грамматика

Документы

документ:
      документ-с-разделами
      документ-с-выражениями

Документы раздела

документ-с-разделами:
      конфигурации
раздел:
      Литерал-атрибутыopt section-name;section-members optsection
название-раздела:
      идентификатор
элементы-раздела:
      элемент-раздела элементы-разделанеобязательно
элемент-раздела:
      литеральные атрибутывыбирают выражение sharedopt section-member-name
= ;
название-элемента-раздела:
      идентификатор

Документы выражений

Выражения

документ-с-выражениями:
      выражение
expression:
      выражение-логического-ИЛИ
выражение-each
      выражение-функция
      выражение-let
      Выражение-if
      выражение-вызывающее-ошибку
      выражение-обработки-ошибок

Логические выражения

выражение-логического-ИЛИ:
      выражение-логического-И
      логическое или выражение логических выражений
or
выражение-логического-И:
      выражение-is
      логическое и выражение is-expression
and

Выражение Is

выражение-is:
      выражение-as
      is-expression
is nullable-primitive-type
тип-примитива-допускающий-значение-NULL:

      nullableнеобязательно тип-примитива

Как выражение

выражение-as:
      выражение-равенства
      as-expression
as nullable-primitive-type

Выражение равенства

выражение-равенства:
      relational-expression
      реляционное
= выражение равенства
      реляционное
<> выражение равенства

Реляционное выражение

выражение-отношения:
      additive-expression
      реляционное выражение аддитивного выражения
<
      реляционное выражение аддитивного выражения
>
      реляционное выражение аддитивного выражения
<=
      реляционное выражение аддитивного выражения
>=

Арифметические выражения

выражение-сложения:
      multiplicative-expression
      умножение-выражение
+ - аддитивное выражение
      умножение-выражение
- - аддитивное выражение
      умножение-выражение
& _additive-выражение
выражение-умножения:
      выражение-метаданных
      мультипликативное выражение метаданных
*
      мультипликативное выражение метаданных
/

Выражение метаданных

выражение-метаданных:
      unary-expression
      унарное выражение
meta унарное выражение

Унарное выражение

унарное-выражение:
      выражение-типа

      + unary-expression
      - unary-expression
      not unary-expression

Основное выражение

основное-выражение:
      выражение-литерала
      выражение-списка
      выражение-записи
      выражение-идентификатора
      выражение-доступа-к-разделу
      выражение-в-круглых-скобках
      выражение-доступа-к-полю
      выражение-доступа-к-элементу
      выражение-вызова
      выражение-отсутствия-реализации

Литеральное выражение

выражение-литерала:
      литерал

Выражение идентификатора

выражение-идентификатора:
      ссылка-на-идентификатор
ссылка-на-идентификатор:
      эксклюзивная-ссылка-на-идентификатор
      инклюзивная-ссылка-на-идентификатор
эксклюзивная-ссылка-на-идентификатор:
      идентификатор
инклюзивная-ссылка-на-идентификатор:

      @ идентификатор

Выражение "Доступ к разделу"

выражение-доступа-к-разделу:
      Идентификатор идентификатора
!

Скобки выражения

круглые скобки:
      ( выражение )

Не реализованное выражение

not-implemented-expression:
      ...

Выражение Invoke

выражение-вызова:
      Выбор аргумента первичного выражения
( )
список-аргументов:
      выражение
      список аргументов выражения
,

Выражение списка

list-expression:
      { Выбор спискаэлементов }
список-элементов:
      элемент
      элемент-список
,
item.
      выражение
      выражение выражения
..

Выражение записи

record-expression:
      [ выбор спискаполей ]
список-полей:
      field
      поле-список
,
поле:
      Выражение field-name
=
имя-поля:
      обобщенный-идентификатор
      quoted-identifier

Выражение доступа к элементам

выражение-доступа-к-элементу:
      выбор-элемента
      выбор-необязательного-элемента
выбор элемента:
элемент-селектор первичного выражения
{ }
выбор-необязательного-элемента:
      элемент-селектор первичного выражения
{ } ?
селектор-элементов:
      выражение

Выражения доступа к полям

выражение-доступа-к-полю:
      выбор-поля
      выбор-неявного-целевого-поля
      проекция
      неявная-целевая-проекция
выбор-поля:
      основное-выражение селектор-поля
селектор поля:
      селектор-обязательного-поля
      селектор-необязательного-поля
селектор-обязательного-поля:

      [ имя поля ]
необязательный селектор полей:
      [ имя поля ] ?
выбор-неявного-целевого-поля:
      селектор поля
проекция:
      основное-выражение обязательная-проекция
      основное-выражение необязательная-проекция
обязательный проекция:_
      [обязательный список селекторов ]
необязательная проекция:
      [обязательный список селекторов ] ?
список-обязательных-селекторов:
      селектор-обязательного-поля
      обязательный селектор
, поля обязательный селектор-список
неявная-целевая-проекция:
      обязательная-проекция
      необязательная-проекция

Выражение функции

function-expression:
      ( параметр-listopt return-typeopt)=>function-body
тело-функции:
      выражение
parameter-list:
      список-фиксированных-параметров
      fixed-parameter-list
, необязательный-параметр-list
      список-необязательных-параметров
список-фиксированных-параметров:
      параметр
      параметр
, fixed-parameter-list
parameter:
      параметр-name primitive-parameter-typeopt
имя-параметра:
      идентификатор
primitive-parameter-type:
      примитивное утверждение
тип-возвращаемого-значения:
      примитивное утверждение
примитивное утверждение:

      as nullable-primitive-type
список-необязательных-параметров:
      необязательный-параметр
      необязательный параметр
, необязательный-параметр-list
необязательный-параметр:

      optional параметр

Каждое выражение

каждое выражение:
      eachкаждый текст выражения
тело-выражения-each:
      тело-функции

Выражение Let

let-expression:
      let Выражение переменной спискаin
список переменных:
      переменная
      переменная списка переменных
,
variable:
      Выражение переменной имени
=
имя переменной:
      идентификатор

Если выражение

if-expression:
      ifУсловиеthen iffalse-expression true-expressionelse
условие-if:
      выражение
выражение-true:
      выражение
выражение-false:
      выражение

Выражение типа

выражение-типа:
      основное-выражение

      type primary-type
тип:
      основное-выражение
      основной-тип
основной-тип:
      тип-примитива
      тип-записи
      тип-списка
      тип-функции
      тип-таблицы
      тип-допускающий-значение-NULL
тип-примитива:
один-из
      any anynonnull binary date datetime datetimezone duration function
      list logical none null number record table text time type
тип записи:
      [ open-record-marker ]
      [ выбор спискаспецификаций поля ]
      [ field-specification-list , open-record-marker ]
список-спецификаций-поля:
      спецификация-поля
      field-specification field-specification-list
,
спецификация-поля:

      optionalнеобязательно имя-поля спецификация-типа-полянеобязательно
спецификация-типа-поля:

      =тип поля
тип-поля:
      type
маркер-открытой-записи:

      ...
list-type:
      { Тип элемента }
тип-элемента:
      type
тип-функции:

      function ( параметр-спецификация-listopt)return-type
список-спецификаций-параметров:
      список-спецификаций-обязательных-параметров
      required-parameter-specification-list
, optional-parameter-specification-list
      список-спецификаций-необязательных-параметров
список-спецификаций-обязательных-параметров:
      спецификация-обязательных-параметров
      required-parameter-specification
, required-parameter-specification-list
спецификация-обязательных-параметров:
      спецификация-параметров
список-спецификаций-необязательных-параметров:
      спецификация-необязательных-параметров
      необязательный-параметр-спецификация
, необязательный-параметр-list
спецификация-необязательных-параметров:

      optionalспецификация параметра
спецификация-параметров:
      имя-параметра тип-параметра
тип-параметра:
      assertion
assertion:

      asтип
тип-таблицы:

      table тип строки
тип-строки:

      [ выбор спискаспецификаций поля ]
Тип, допускающий значение NULL:
      nullable тип

Выражение при возникновении ошибок

выражение error-raising-expression:
      error выражение_

Выражение обработки ошибок

Выражение error-handling-expression:
      tryВыборобработчика ошибок защищенного выражения
защищенное-выражение:
      выражение
Обработчик ошибок:
      Предложение в противном случае
      предложение catch-
предложение-otherwise:

      otherwiseвыражение по умолчанию
выражение по умолчанию:
      выражение
предложение catch-:
      catchcatch-function
catch-function:
      (параметр-nameopt=>) function-body

Литеральные атрибуты

литеральные-атрибуты:
      литерал-записи
литерал-записи:

      [литерал-field-listopt ]
список-литеральных-полей:
      литеральное-поле
      литерал-поле-литерал-field-list
,
литеральное-поле:
      имя
= поля любой литерал
литерал-списка:

      {литерал-item-listopt }
список-литеральных-элементов:
      любой-литерал
      любой литерал-литерал-item-list
,
любой-литерал:
      литерал-записи
      литерал-списка
      логический-литерал
      числовой-литерал
      текстовый-литерал
      null-литерал