Лексическая структураLexical Structure

ДокументыDocuments

Документ M представляет собой упорядоченную последовательностью символов Юникода.An M document is an ordered sequence of Unicode characters. M допускает использование различных классов символов Юникода в разных частях документа M.M allows different classes of Unicode characters in different parts of an M document. Сведения о классах символов Юникода см. в разделе Стандарт Юникод, версия 3.0, подраздел 4.5.For information on Unicode character classes, see The Unicode Standard, Version 3.0, section 4.5.

Документ состоит либо только из одного выражения, либо из групп определений, упорядоченных в разделы.A document either consists of exactly one expression or of groups of definitions organized into sections. Разделы подробно описаны в Главе 10.Sections are described in detail in Chapter 10. По существу, для считывания выражения из документа используются следующие шаги.Conceptually speaking, the following steps are used to read an expression from a document:

  1. Документ декодируется в соответствии со схемой кодировки символов в последовательность символов Юникода.The document is decoded according to its character encoding scheme into a sequence of Unicode characters.

  2. Затем выполняется лексический анализ, в результате которого поток символов Юникода преобразуется в поток токенов.Lexical analysis is performed, thereby translating the stream of Unicode characters into a stream of tokens. В оставшихся подразделах этого раздела рассматривается лексический анализ.The remaining subsections of this section cover lexical analysis.

  3. После выполняется синтаксический анализ, целью которого является преобразование потока токенов в форму, которую можно вычислить.Syntactic analysis is performed, thereby translating the stream of tokens into a form that can be evaluated. Этот процесс рассматривается в последующих разделах.This process is covered in subsequent sections.

Грамматические соглашенияGrammar conventions

Лексическая и синтаксическая грамматика представлены с помощью грамматических правил.The lexical and syntactic grammars are presented using grammar productions. Каждое грамматическое правило определяет неконечный символ и возможные расширения этого неконечного символа в последовательности неконечных или конечных символов.Each grammar production defines a non-terminal symbol and the possible expansions of that nonterminal symbol into sequences of non-terminal or terminal symbols. В грамматических правилах _неконечные+символы обозначаются курсивом, а конечные символы — шрифтом с фиксированной шириной.In grammar productions, _non-terminal+ symbols are shown in italic type, and terminal symbols are shown in a fixed-width font.

Первая строка грамматического правила — это имя определяемого неконечного символа, за которым следует двоеточие.The first line of a grammar production is the name of the non-terminal symbol being defined, followed by a colon. Каждая последующая строка с отступом содержит возможное расширение неконечного символа, представленная в виде последовательности неконечных или конечных символов.Each successive indented line contains a possible expansion of the nonterminal given as a sequence of non-terminal or terminal symbols. Например, следующее правило:For example, the production:

выражение-if:if-expression:
      if условие-if then выражение-true else выражение-false      if if-condition then true-expression else false-expression

определяет, что выражение-if состоит из токена if, за которым следуют условие-if, токен then, выражение-true, токен else, выражение-false.defines an if-expression to consist of the token if, followed by an if-condition, followed by the token then, followed by a true-expression, followed by the token else, followed by a false-expression.

При наличии более одного возможного расширения неконечного символа альтернативные варианты перечисляются в разных строках.When there is more than one possible expansion of a non-terminal symbol, the alternatives are listed on separate lines. Например, следующее правило:For example, the production:

список-переменных:
      переменная
      список-переменных
, переменная
variable-list:
      variable
      variable-list
, variable

определяет, что список-переменных состоит либо из переменной, либо из списка-переменных, за которым следует переменная.defines a variable-list to either consist of a variable or consist of a variable-list followed by a variable. Иными словами, определение является рекурсивным и указывает, что список переменных состоит из одной или нескольких переменных, разделенных запятыми.In other words, the definition is recursive and specifies that a variable list consists of one or more variables, separated by commas.

Суффикс с индексом "необязательно" используется для указания необязательного символа.A subscripted suffix "opt" is used to indicate an optional symbol. Правило:The production:

спецификация-поля:field-specification:
      optionalопционально имя-поля = тип-поля      optionalopt field-name = field-type

является сокращенным вариантом следующего:is shorthand for:

спецификация-поля:
      имя-поля
= тип-поля
field-specification:
      field-name
= field-type

      optional имя-поля = тип-поля      optional field-name = field-type

Это правило определяет, что спецификация-поля при необходимости может начинаться с конечного символа optional, за которым следуют имя-поля, конечный символ = и тип-поля.and defines a field-specification to optionally begin with the terminal symbol optional followed by a field-name, the terminal symbol =, and a field-type.

Альтернативные варианты обычно перечисляются в отдельных строках, но в тех случаях, когда существует много альтернатив, списку расширений, заданных в одной строке, может предшествовать фраза "один из".Alternatives are normally listed on separate lines, though in cases where there are many alternatives, the phrase "one of" may precede a list of expansions given on a single line. Это простое сокращение для перечисления всех альтернативных вариантов в отдельной строке.This is simply shorthand for listing each of the alternatives on a separate line. Например, следующее правило:For example, the production:

десятичный-знак: один изdecimal-digit: one of
      0 1 2 3 4 5 6 7 8 9      0 1 2 3 4 5 6 7 8 9

является сокращенным вариантом следующего:is shorthand for:

десятичный-знак:decimal-digit:
      0      0
      1      1
      2      2
      3      3
      4      4
      5      5
      6      6
      7      7
      8      8
      9      9

Лексический анализLexical Analysis

Правило лексическая-единица в производстве определяет лексическую грамматику для документа M.The lexical-unit production defines the lexical grammar for an M document. Каждый допустимый документ M следует этой грамматике.Every valid M document conforms to this grammar.

лексическая-единица:
      лексические-элементынеобязательно
лексические-элементы:
      лексический-элемент
      лексический-элемент
      лексические-элементы
лексический-элемент:
      пробел
      комментарий к токену
lexical-unit:
      lexical-elementsopt
lexical-elements:
      lexical-element
      lexical-element
      lexical-elements
lexical-element:
      whitespace
      token comment

На лексическом уровне документ M состоит из потока элементов пробел, комментарий и токен.At the lexical level, an M document consists of a stream of whitespace, comment, and token elements. Каждое из этих правил описываются в следующих разделах.Each of these productions is covered in the following sections. В синтаксической грамматике учитываются только элементы токен.Only token elements are significant in the syntactic grammar.

ПробелWhitespace

Пробелы используются для разделения комментариев и токенов в документе M.Whitespace is used to separate comments and tokens within an M document. Пробелы включают символ пробела (который является частью класса Zs Юникода), а также горизонтальную и вертикальную табуляции, перевод страницы и последовательности символов новой строки.Whitespace includes the space character (which is part of Unicode class Zs), as well as horizontal and vertical tab, form feed, and newline character sequences. Последовательности символов новой строки включают возврат каретки, перевод строки, возврат каретки, за которым следует символ перевода строки, следующей строки и разделителя абзацев.Newline character sequences include carriage return, line feed, carriage return followed by line feed, next line, and paragraph separator characters.

пробел:whitespace:
      Любой символ с классом Zs Юникода      Any character with Unicode class Zs
      Символ горизонтальной табуляции (U+0009)      Horizontal tab character (U+0009)
      Символ вертикальной табуляции (U+000B)      Vertical tab character (U+000B)
      Символ перевода страницы (U+000C)      Form feed character (U+000C)
      Символ возврата каретки (U+000D), за которым следует символ перевода строки (U+000A)      Carriage return character (U+000D) followed by line feed character (U+000A)
      символ-новой-строки      new-line-character
символ-новой-строки:new-line-character:
      Символ возврата каретки (U+000D)      Carriage return character (U+000D)
      Символ перевода строки (U+000A)      Line feed character (U+000A)
      Символ следующей строки (U+0085)      Next line character (U+0085)
      Символ разделителя строк (U+2028)      Line separator character (U+2028)
      Символ разделителя абзацев (U+2029)      Paragraph separator character (U+2029)

Для обеспечения совместимости со средствами редактирования исходного кода, которые добавляют маркеры конца файла и позволяют просматривать документ в виде последовательности правильно завершенных строк, к документу M применяются следующие преобразования (по порядку).For compatibility with source code editing tools that add end-of-file markers, and to enable a document to be viewed as a sequence of properly terminated lines, the following transformations are applied, in order, to an M document:

  • Если последний символ документа является символом сочетания клавиш CTRL+Z (U+001A), этот символ удаляется.If the last character of the document is a Control-Z character (U+001A), this character is deleted.

  • Если этот документ не является пустым и если последний символ документа не является символом возврата каретки (U+000D), символом перевода строки (U+000A), разделителем строк (U+2028) или разделителем абзацев (U+2029), то в конец документа добавляется символ возврата каретки (U+000D).A carriage-return character (U+000D) is added to the end of the document if that document is non-empty and if the last character of the document is not a carriage return (U+000D), a line feed (U+000A), a line separator (U+2028), or a paragraph separator (U+2029).

КомментарииComments

Поддерживаются две формы комментариев: однострочные комментарии и комментарии с разделителями.Two forms of comments are supported: single-line comments and delimited comments. Однострочные комментарии начинаются с символов // и дополняются до конца исходной строки.Single-line comments start with the characters // and extend to the end of the source line. Комментарии с разделителями начинаются с символов /* и заканчиваются символами */.Delimited comments start with the characters /* and end with the characters */.

Комментарии с разделителями могут включать несколько строк.Delimited comments may span multiple lines.

комментарий:
      однострочный-комментарий
      комментарий-с-разделителями
однострочный-комментарий:
comment:
      single-line-comment
      delimited-comment
single-line-comment:

      // символы-однострочного-комментариянеобязательно
символы-однострочного-комментария:
      символ-однострочного-комментария символы-однострочного-комментариянеобязательно
символ-однострочного-комментария:
      // single-line-comment-charactersopt
single-line-comment-characters:
      single-line-comment-character single-line-comment-charactersopt
single-line-comment-character:

      Любой символ Юникода, кроме символа-новой-строки
с комментарием-с-разделителями:
      Any Unicode character except a new-line-character
delimited-comment:

      /* текст-комментария-с-разделителяминеобязательно звездочки /      /* delimited-comment-textopt asterisks /
текст-комментария-с-разделителями:
      раздел-комментария-с-разделителями текст-комментария-с-разделителяминеобязательно
раздел-комментария-с-разделителями:
delimited-comment-text:
      delimited-comment-section delimited-comment-textopt
delimited-comment-section:

      /      /
      звездочкинеобязательно не-косая-черта-или-звездочка
звездочки:
      asterisksopt not-slash-or-asterisk
asterisks:

      * звездочкинеобязательно
не-косая-черта-или-звездочка:
      * asterisksopt
not-slash-or-asterisk:

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

Комментарии не предусматривают вложения.Comments do not nest. Последовательности символов /* и */ не имеют специального значения в однострочном комментарии, а последовательности символов // и /* не имеют специального значения в комментариях с разделителями.The character sequences /* and */ have no special meaning within a single-line comment, and the character sequences // and /* have no special meaning within a delimited comment.

Комментарии не обрабатываются в текстовых литералах.Comments are not processed within text literals. ПримерThe example

/* Hello, world 
*/ 
    "Hello, world"

содержит комментарий с разделителями.includes a delimited comment.

ПримерThe example

// Hello, world 
// 
"Hello, world" // This is an example of a text literal

содержит несколько однострочных комментариев.shows several single-line comments.

ТокеныTokens

Токен — это идентификатор, ключевое слово, литерал, оператор или знак препинания.A token is an identifier, keyword, literal, operator, or punctuator. Пробелы и комментарии используются для разделения токенов, но не считаются токенами.Whitespace and comments are used to separate tokens, but are not considered tokens.

токен:
      идентификатор
      ключевое-слово
      литерал
      оператор-или-знак-препинания
token:
      identifier
      keyword
      literal
      operator-or-punctuator

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

Текстовые значения M могут содержать произвольные символы Юникода.M text values can contain arbitrary Unicode characters. Однако текстовые литералы ограничены графическими символами и требуют использования escape-последовательностей для неграфических символов.Text literals, however, are limited to graphic characters and require the use of escape sequences for non-graphic characters. Например, чтобы включить в текстовый литерал символ возврата каретки, перевода строки или табуляции, можно использовать escape-последовательности #(cr), #(lf) и #(tab) соответственно.For example, to include a carriage-return, linefeed, or tab character in a text literal, the #(cr), #(lf), and #(tab) escape sequences can be used, respectively. Чтобы внедрить символы начала escape-последовательности #( в текстовый литерал, необходимо экранировать сам символ #.To embed the escapesequence start characters #( in a text literal, the # itself needs to be escaped:

#(#)(

Escape-последовательности также могут содержать короткие (четыре шестнадцатеричные цифры) или длинные (восемь шестнадцатеричных цифр) значения кодовых точек Юникода.Escape sequences can also contain short (four hex digits) or long (eight hex digits) Unicode code-point values. Таким образом, следующие три escape-последовательности эквивалентны:The following three escape sequences are therefore equivalent:

#(000D)     // short Unicode hexadecimal value 
#(0000000D) // long Unicode hexadecimal value 
#(cr)       // compact escape shorthand for carriage return

В одну escape-последовательность можно добавить несколько escape-кодов, разделенных запятыми; таким образом, следующие две последовательности эквивалентны:Multiple escape codes can be included in a single escape sequence, separated by commas; the following two sequences are thus equivalent:

#(cr,lf) 
#(cr)#(lf)

Ниже описан стандартный механизм экранирования символов в документе M.The following describes the standard mechanism of character escaping in an M document.

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

      cr      cr
      lf      lf
      tab      tab
escape-escape: escape-escape:
      #      #

ЛитералыLiterals

Литерал является представлением исходного кода значения.A literal is a source code representation of a value.

литерал:
      логический-литерал
      числовой-литерал
      текстовый-литерал
      литерал-NULL
      буквальный-литерал
literal:
      logical-literal
      number-literal
      text-literal
      null-literal
      verbatim-literal

Литералы NULLNull literals

Литерал NULL используется для записи значения null.The null literal is used to write the null value. Значение null представляет отсутствующее значение.The null value represents an absent value.

литерал-NULL:null-literal:
      null      null

Логические литералыLogical literals

Логический литерал используется для записи значений true и false и создает логическое значение.A logical literal is used to write the values true and false and produces a logical value.

логический-литерал:logical-literal:
      true      true
      false      false

Числовые литералыNumber literals

Числовой литерал используется для записи числового значения и дает числовое значение.A number literal is used to write a numeric value and produces a number value.

числовой-литерал:
      десятичный-числовой-литерал
      шестнадцатеричный-числовой-литерал
десятичный-числовой-литерал:
      десятичные-знаки
. экспоненциальная-часть-десятичных-знаковнеобязательно
number-literal:
      decimal-number-literal
      hexadecimal-number-literal
decimal-number-literal:
      decimal-digits
. decimal-digits exponent-partopt

      . экспоненциальная-часть-десятичных-знаковнеобязательно
      экспоненциальная-часть-десятичных-знаковнеобязательно
десятичные-знаки:
      десятичный-знак десятичные-знакинеобязательно
десятичный-знак:
один из
      . decimal-digits exponent-partopt
      decimal-digits exponent-partopt
decimal-digits:
      decimal-digit decimal-digitsopt
decimal-digit:
one of

      0 1 2 3 4 5 6 7 8 9      0 1 2 3 4 5 6 7 8 9
экспоненциальная-часть:exponent-part:
      e знакнеобязательно десятичные-знаки      e signopt decimal-digits
      E знакнеобязательно десятичные-знаки
знак:
один из следующего
      E signopt decimal-digits
sign:
one of

      + -      + -
шестнадцатеричный-числовой-литерал:hexadecimal-number-literal:
      0x шестнадцатеричные-знаки      0x hex-digits
      0X шестнадцатеричные-знаки
шестнадцатеричные-знаки:
      шестнадцатеричный-знак шестнадцатеричные-знакинеобязательно
шестнадцатеричный-знак:
один из
      0X hex-digits
hex-digits:
      hex-digit hex-digitsopt
hex-digit:
one of

      0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f      0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f

Число может быть представлено в шестнадцатеричном формате (шестнадцатеричные-знаки перед символами 0x).A number can be specified in hexadecimal format by preceding the hex-digits with the characters 0x. Например:For example:

0xff // 255

Обратите внимание, что если в числовой литерал включена десятичная запятая, то после нее должна содержаться хотя бы одна цифра.Note that if a decimal point is included in a number literal, then it must have at least one digit following it. Например, 1.3 является числовым литералом, но 1. и 1.e3 не являются таковыми.For example, 1.3 is a number literal but 1. and 1.e3 are not.

Текстовые литералыText literals

Текстовый литерал используется для записи последовательности символов Юникода и создает текстовое значение.A text literal is used to write a sequence of Unicode characters and produces a text value.

текстовый-литерал:text-literal:
      " символы-текстового-литераланеобязательно "      " text-literal-charactersopt "
символы-текстового-литерала:
      символ-текстового-литераланеобязательно
символ-текстового-литерала:
      один-текстовый-символ
      escape-последовательность-символов
      escape-последовательность-двойных-кавычек
один-текстовый-символ:
text-literal-characters:
      text-literal-character text-literal-charactersopt
text-literal-character:
      single-text-character
      character-escape-sequence
      double-quote-escape-sequence
single-text-character:

      Любой символ, кроме " (U+0022) или # (U+0023), за которым следует ( (U+0028)      Any character except " (U+0022) or # (U+0023) followed by ( (U+0028)
escape-последовательность-двойных-кавычек:double-quote-escape-sequence:
      "" (U+0022, U+0022)      "" (U+0022, U+0022)

Чтобы включить кавычки в текстовое значение, знак кавычек повторяется следующим образом:To include quotes in a text value, the quote mark is repeated, as follows:

"The ""quoted"" text" // The "quoted" text

Правило символ-escape-последовательности можно использовать для записи символов в текстовые значения без необходимости непосредственно кодировать их как символы Юникода в документе.The character-escape-sequence production can be used to write characters in text values without having to directly encode them as Unicode characters in the document. Например, символ возврата каретки и перевода строки можно записать в текстовое значение следующим образом:For example, a carriage return and line feed can be written in a text value as:

"Hello world#(cr,lf)"

Буквальные литералыVerbatim literals

Буквальный литерал используется для хранения последовательности символов Юникода, которые введены пользователем как код, но не могут быть обработаны должным образом в виде кода.A verbatim literal is used to store a sequence of Unicode characters that were entered by a user as code, but which cannot be correctly parsed as code. Во время выполнения он выдает значение ошибки.At runtime, it produces an error value.

буквальный-литерал:verbatim-literal:
      #!" символы-текстового-литераланеобязательно "      #!" text-literal-charactersopt "

ИдентификаторыIdentifiers

Идентификатор — это имя, используемое для ссылки на значение.An identifier is a name used to refer to a value. Идентификаторы могут быть либо обычными идентификаторами, либо нестандартными идентификаторами.Identifiers can either be regular identifiers or quoted identifiers.

идентификатор:
      обычный-идентификатор
      нестандартный-идентификатор
обычный-идентификатор:
      доступный-идентификатор
      доступный-идентификатор символ-точки обычный-идентификатор
доступный-идентификатор:
identifier:
      regular-identifier
      quoted-identifier
regular-identifier:
      available-identifier
      available-identifier dot-character regular-identifier
available-identifier:

      ключевое-слово-или-идентификатор, не являющийся ключевым-словом
ключевое-слово-или-идентификатор:
      начальный-символ-идентификатора символы-идентификаторанеобязательно
начальный-символ-идентификатора:
      буква
      символ-подчеркивания
символы-идентификатора:
      символ-идентификаторанеобязательно
символ-идентификатора:
      буква
      десятичный-знак
      символ-подчеркивания
      символ-соединения
      символ-объединения
      символ-форматирования
символ-точки:
      A keyword-or-identifier that is not a keyword
keyword-or-identifier:
      identifier-start-character identifier-part-charactersopt
identifier-start-character:
      letter-character
      underscore-character
identifier-part-characters:
      identifier-part-character identifier-part-charactersopt
identifier-part-character:
      letter-character
      decimal-digit-character
      underscore-character
      connecting-character
      combining-character
      formatting-character
dot-character:

      . (U+002E)      . (U+002E)
символ-подчеркивания:underscore-character:
      _ (U+005F)      _ (U+005F)
буква:letter-character:
      Символ Юникода класса Lu, Ll, Lt, Lm, Lo или Nl      A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nl
символ-объединения:combining-character:
      Символ Юникода класса Mn или Mc      A Unicode character of classes Mn or Mc
десятичный-знак:decimal-digit-character:
      Символ Юникода класса Nd      A Unicode character of the class Nd
символ-соединения:connecting-character:
      Символ Юникода класса Pc      A Unicode character of the class Pc
символ-форматирования: formatting-character:
      Символ Юникода класса Cf      A Unicode character of the class Cf

Нестандартный идентификатор можно использовать, чтобы разрешить использование любой последовательности из нулей или других символов Юникода в качестве идентификатора, включая ключевые слова, пробелы, комментарии, операторы и знаки препинания.A quoted-identifier can be used to allow any sequence of zero or more Unicode characters to be used as an identifier, including keywords, whitespace, comments, operators and punctuators.

нестандартный-идентификатор:quoted-identifier:
      #" символы-текстового-литераланеобязательно "      #" text-literal-charactersopt "

Обратите внимание, что в нестандартном идентификаторе можно использовать escape-последовательности и двойные кавычки для экранирования так же, как в текстовых литералах.Note that escape sequences and double-quotes to escape quotes can be used in a quoted identifier, just as in a text-literal.

В следующем примере используется идентификатор, указывающий на имя, содержащее символ пробела:The following example uses identifier quoting for names containing a space character:

[ 
    #"1998 Sales" = 1000, 
    #"1999 Sales" = 1100, 
    #"Total Sales" = #"1998 Sales" + #"1999 Sales"
]

В следующем примере используется идентификатор, указывающий на включение оператора + в идентификатор:The following example uses identifier quoting to include the + operator in an identifier:

[ 
    #"A + B" = A + B, 
    A = 1, 
    B = 2 
]

Обобщенные идентификаторыGeneralized Identifiers

В M есть два места, где в идентификаторах, содержащих пробелы, ключевые слова или числовые литералы, нет неоднозначностей.There are two places in M where no ambiguities are introduced by identifiers that contain blanks or that are otherwise keywords or number literals. Это имена полей записей в литерале записи и в операторе доступа к полю ([ ]). M позволяет использовать такие идентификаторы без необходимости использования нестандартных идентификаторов.These places are the names of record fields in a record literal and in a field access operator ([ ]) There, M allows such identifiers without having to use quoted identifiers.

[ 
    Data = [ Base Line = 100, Rate = 1.8 ], 
    Progression = Data[Base Line] * Data[Rate]
]

Идентификаторы, используемые для именования полей и доступа к ним, называются обобщенными идентификаторами и определяются следующим образом:The identifiers used to name and access fields are referred to as generalized identifiers and defined as follows:

обобщенный-идентификатор:
      часть-обобщенного-идентификатора
      обобщенный-идентификатор
, разделенный только пробелами (U+0020)
generalized-identifier:
      generalized-identifier-part
      generalized-identifier
separated only by blanks (U+0020)

часть-обобщенного-идентификатора
часть-обобщенного-идентификатора:
      сегмент-обобщенного-идентификатора
      десятичный-знак сегмент-обобщенного-идентификатора
сегмент-обобщенного-идентификатора:
      ключевое-слово-или-идентификатор
      ключевое-слово-или-идентификатор символ-точки ключевое-слово-или-идентификатор
generalized-identifier-part
generalized-identifier-part:
      generalized-identifier-segment
      decimal-digit-character generalized-identifier-segment
generalized-identifier-segment:
      keyword-or-identifier
      keyword-or-identifier dot-character keyword-or-identifier

Ключевые словаKeywords

Ключевое слово является последовательностью символов, аналогичных идентификатору, которая зарезервирована и не может использоваться в качестве идентификатора, кроме случаев, когда используется нестандартный идентификатор или разрешено использование обобщенного идентификатора.A keyword is an identifier-like sequence of characters that is reserved, and cannot be used as an identifier except when using the identifier-quoting mechanism or where a generalized identifier is allowed.

ключевое-слово: одно изkeyword: one of
       and as each else error false if in is let meta not null or otherwise       and as each else error false if in is let meta not null or otherwise
       section shared then true try type #binary #date #datetime       section shared then true try type #binary #date #datetime
       #datetimezone #duration #infinity #nan #sections #shared #table #time       #datetimezone #duration #infinity #nan #sections #shared #table #time

Операторы и знаки препинанияOperators and punctuators

Существует несколько видов операторов и знаков препинания.There are several kinds of operators and punctuators. Операторы используются в выражениях для описания операций, включающих один или несколько операндов.Operators are used in expressions to describe operations involving one or more operands. Например, выражение a + b использует оператор + для добавления двух операндов a и b.For example, the expression a + b uses the + operator to add the two operands a and b. Знаки препинания предназначены для группирования и разделения.Punctuators are for grouping and separating.

оператор-или-знак-препинания: один из следующегоoperator-or-punctuator: one of
      , ; = < <= > >= <> + - * / & ( ) [ ] { } @ ! ? => .. ...      , ; = < <= > >= <> + - * / & ( ) [ ] { } @ ! ? => .. ...