Консолидированная грамматика
Лексическая грамматика
лексическая-единица:
лексические-элементынеобязательно
лексические-элементы:
лексический-элемент лексические-элементынеобязательно
лексический-элемент:
пробел
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-expressionand
Выражение 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-:
catch
catch-function
catch-function:
(
параметр-nameopt=>
)
function-body
Литеральные атрибуты
литеральные-атрибуты:
литерал-записи
литерал-записи:
[
литерал-field-listopt ]
список-литеральных-полей:
литеральное-поле
литерал-поле-литерал-field-list ,
литеральное-поле:
имя =
поля любой литерал
литерал-списка:
{
литерал-item-listopt }
список-литеральных-элементов:
любой-литерал
любой литерал-литерал-item-list ,
любой-литерал:
литерал-записи
литерал-списка
логический-литерал
числовой-литерал
текстовый-литерал
null-литерал