Консолидированная грамматика
Лексическая грамматика
лексическая-единица:
лексические-элементынеобязательно
лексические-элементы:
лексический-элемент лексические-элементынеобязательно
лексический-элемент:
пробел
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-attributesoptsection
section-name;
section-membersopt
название-раздела:
идентификатор
элементы-раздела:
элемент-раздела элементы-разделанеобязательно
элемент-раздела:
литеральные-атрибутынеобязательно общийнеобязательно название-элемента-раздела=
выражение;
название-элемента-раздела:
идентификатор
Документы выражений
Выражения
документ-с-выражениями:
выражение
expression:
выражение-логического-ИЛИ выражение-each
выражение-функция
выражение-let
Выражение-if
выражение-вызывающее-ошибку
выражение-обработки-ошибок
Логические выражения
выражение-логического-ИЛИ:
выражение-логического-И
выражение-логического-Иor
выражение-логического-ИЛИ
выражение-логического-И:
выражение-is
выражение-логического-Иand
выражение-is
Выражение Is
выражение-is:
выражение-as
выражение-isis
тип-примитива-допускающий-значение-NULL
тип-примитива-допускающий-значение-NULL:
nullable
необязательно тип-примитива
Как выражение
выражение-as:
выражение-равенства
выражение-asas
тип-примитива-допускающий-значение-NULL
Выражение равенства
выражение-равенства:
relational-expression
выражение-отношения=
выражение-равенства
выражение-отношения<>
выражение-равенства
Реляционное выражение
выражение-отношения:
additive-expression
выражение-сложения<
выражение-отношения
выражение-сложения>
выражение-отношения
выражение-сложения<=
выражение-отношения
выражение-сложения>=
выражение-отношения
Арифметические выражения
выражение-сложения:
multiplicative-expression
выражение-умножения+
выражение-сложения
выражение-умножения-
выражение-сложения
выражение-умножения&
_выражение-сложения
выражение-умножения:
выражение-метаданных
выражение-метаданных*
выражение-умножения
выражение-метаданных/
выражение-умножения
Выражение метаданных
выражение-метаданных:
unary-expression
унарное-выражениеmeta
унарное-выражение
Унарное выражение
унарное-выражение:
выражение-типа
+
unary-expression
-
unary-expression
not
unary-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
список-необязательных-параметров:
необязательный-параметр
необязательный-параметр,
список-необязательных-параметров
необязательный-параметр:
optional
parameter
Каждое выражение
каждое выражение:
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:
nullable
type
Выражение при возникновении ошибок
выражение error-raising-expression:
error
выражение_
Выражение обработки ошибок
Выражение error-handling-expression:
try
Выборобработчика ошибок защищенного выражения
защищенное-выражение:
выражение
Обработчик ошибок:
Предложение в противном случае
предложение catch-
предложение-otherwise:
otherwise
выражение по умолчанию
выражение по умолчанию:
выражение
предложение catch-:
catch
catch-function
catch-function:
(
параметр-nameopt=>
)
function-body
Литеральные атрибуты
литеральные-атрибуты:
литерал-записи
литерал-записи:
[
список-литеральных-полейнеобязательно]
список-литеральных-полей:
литеральное-поле
литеральное-поле,
список-литеральных-полей
литеральное-поле:
имя-поля=
любой-литерал
литерал-списка:
{
список-литеральных-элементовнеобязательно}
список-литеральных-элементов:
любой-литерал
любой-литерал,
список-литеральных-элементов
любой-литерал:
литерал-записи
литерал-списка
логический-литерал
числовой-литерал
текстовый-литерал
null-литерал
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по