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

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

лексическая-единица:
      лексические-элементынеобязательно
лексические-элементы:
      лексический-элемент лексические-элементынеобязательно
лексический-элемент:
      пробел
      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-последовательностей)
список-escape-последовательностей:
      одиночная-escape-последовательность
      список-escape-последовательностей
,одиночная-escape-последовательность
одиночная-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
десятичный-числовой-литерал:
      десятичные-знаки
.десятичные-знаки показатель-степенинеобязательно
      .десятичные-знаки показатель-степенинеобязательно
      десятичные-знаки показатель-степенинеобязательно
показатель-степени:

      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

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

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

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

Документы

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

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

документ-с-разделами:
      конфигурации
раздел:
      literal-attributesopt
sectionsection-name;section-membersopt
название-раздела:
      идентификатор
элементы-раздела:
      элемент-раздела элементы-разделанеобязательно
элемент-раздела:
      литеральные-атрибутынеобязательно общийнеобязательно название-элемента-раздела
=выражение;
название-элемента-раздела:
      идентификатор

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

Выражения

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

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

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

Выражение Is

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      +unary-expression
      -unary-expression
      notunary-expression

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

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

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

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

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

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

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

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

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

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

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

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

not-implemented-expression:
      ...

Выражение Invoke

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

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

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

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

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

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

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

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

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

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

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

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

      asтип-примитива-допускающий-значение-NULL
список-необязательных-параметров:
      необязательный-параметр
      необязательный-параметр
,список-необязательных-параметров
необязательный-параметр:

      optionalparameter

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

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

Выражение Let

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

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

if-expression:
      ifусловие-ifthenвыражение-trueelseвыражение-false
условие-if:
      выражение
выражение-true:
      выражение
выражение-false:
      выражение

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

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

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

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

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

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

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

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

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

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

      [список-спецификаций-полянеобязательно]
Тип, допускающий значение NULL:
      nullabletype

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

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

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

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

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

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

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

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

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