Struttura lessicaleLexical Structure

DocumentiDocuments

Un documento M è una sequenza ordinata di caratteri Unicode.An M document is an ordered sequence of Unicode characters. Il linguaggio M consente di inserire diverse classi di caratteri Unicode in diverse parti di un documento M.M allows different classes of Unicode characters in different parts of an M document. Per informazioni sulle classi di caratteri Unicode, vedere Standard Unicode, versione 3.0, sezione 4.5.For information on Unicode character classes, see The Unicode Standard, Version 3.0, section 4.5.

Un documento può essere costituito da una sola espressione o da gruppi di definizioni organizzati in sezioni.A document either consists of exactly one expression or of groups of definitions organized into sections. Le sezioni vengono descritte in dettaglio nel capitolo 10.Sections are described in detail in Chapter 10. A livello concettuale, la lettura dell'espressione di un documento si articola nei passaggi seguenti:Conceptually speaking, the following steps are used to read an expression from a document:

  1. Il documento viene decodificato in base allo schema di codifica dei caratteri in una sequenza di caratteri Unicode.The document is decoded according to its character encoding scheme into a sequence of Unicode characters.

  2. Viene eseguita l'analisi lessicale, in modo che il flusso di caratteri Unicode venga convertito in un flusso di token.Lexical analysis is performed, thereby translating the stream of Unicode characters into a stream of tokens. L'analisi lessicale viene affrontata nelle sottosezioni rimanenti di questa sezione.The remaining subsections of this section cover lexical analysis.

  3. Viene eseguita l'analisi sintattica, in modo che il flusso di token venga convertito in un formato che possa essere valutato.Syntactic analysis is performed, thereby translating the stream of tokens into a form that can be evaluated. Questo processo viene affrontato nelle sezioni successive.This process is covered in subsequent sections.

Convenzioni grammaticaliGrammar conventions

Le grammatiche lessicali e sintattiche vengono presentate usando produzioni grammaticali.The lexical and syntactic grammars are presented using grammar productions. Ogni produzione grammaticale definisce un simbolo non terminale e le possibili espansioni del simbolo, in sequenze di simboli terminali o non terminali.Each grammar production defines a non-terminal symbol and the possible expansions of that nonterminal symbol into sequences of non-terminal or terminal symbols. Nelle produzioni grammaticali, i simboli _non-terminal+ vengono visualizzati in corsivo e i simboli terminal in un tipo di carattere a larghezza fissa.In grammar productions, _non-terminal+ symbols are shown in italic type, and terminal symbols are shown in a fixed-width font.

La prima riga di una produzione grammaticale corrisponde al nome del simbolo non terminale definito, seguito da due punti.The first line of a grammar production is the name of the non-terminal symbol being defined, followed by a colon. Ogni successiva riga rientrata contiene una possibile espansione del simbolo non terminale, specificata come sequenza di simboli terminali o non terminali.Each successive indented line contains a possible expansion of the nonterminal given as a sequence of non-terminal or terminal symbols. Ad esempio, la produzione:For example, the production:

if-expression:if-expression:
      if if-condition then true-expression else false-expression      if if-condition then true-expression else false-expression

definisce che una if-expression deve essere composta dal token if, seguito da una if-condition, seguita dal token then, seguito da una true-expression, seguita dal token else, seguito da una false-expression.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.

Se esiste più di un'espansione possibile per un simbolo non terminale, le alternative vengono elencate in righe separate.When there is more than one possible expansion of a non-terminal symbol, the alternatives are listed on separate lines. Ad esempio, la produzione:For example, the production:

variable-list:
      variable
      variable-list
, variable
variable-list:
      variable
      variable-list
, variable

definisce che una variable-list deve essere composta da una variable o da una variable-list seguita da una variable.defines a variable-list to either consist of a variable or consist of a variable-list followed by a variable. In altre parole, la definizione è ricorsiva e specifica che un elenco di variabili è costituito da una o più variabili, separate da virgole.In other words, the definition is recursive and specifies that a variable list consists of one or more variables, separated by commas.

Per indicare un simbolo facoltativo, viene usato un suffisso con indice "opt".A subscripted suffix "opt" is used to indicate an optional symbol. La produzione:The production:

field-specification:field-specification:
      optionalopt field-name = field-type      optionalopt field-name = field-type

è una sintassi abbreviata per:is shorthand for:

field-specification:
      field-name
= field-type
field-specification:
      field-name
= field-type

      optional field-name = field-type      optional field-name = field-type

e definisce che una field-specification può iniziare con il simbolo del terminale optional seguito da un field-name, dal simbolo del terminale = e da un field-type.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.

Le alternative, in genere, sono elencate in righe separate ma, nel caso in cui esistano molte alternative, la frase "uno/a tra" può precedere un elenco di espansioni in una singola riga.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. Si tratta semplicemente di una sintassi abbreviata per elencare ognuna delle alternative in una riga distinta.This is simply shorthand for listing each of the alternatives on a separate line. Ad esempio, la produzione:For example, the production:

decimal-digit: uno tradecimal-digit: one of
      0 1 2 3 4 5 6 7 8 9      0 1 2 3 4 5 6 7 8 9

è una sintassi abbreviata per:is shorthand for:

decimal-digit:decimal-digit:
      0      0
      1      1
      2      2
      3      3
      4      4
      5      5
      6      6
      7      7
      8      8
      9      9

Analisi lessicaleLexical Analysis

La produzione lexical-unit definisce la grammatica lessicale per un documento M.The lexical-unit production defines the lexical grammar for an M document. Ogni documento M valido è conforme a questa grammatica.Every valid M document conforms to this grammar.

lexical-unit:
      lexical-elements opt
lexical-elements:
      lexical-element
      lexical-element
      lexical-elements
lexical-element:
      whitespace
      token comment
lexical-unit:
      lexical-elementsopt
lexical-elements:
      lexical-element
      lexical-element
      lexical-elements
lexical-element:
      whitespace
      token comment

A livello lessicale, un documento M è costituito da un flusso di elementi whitespace, comment e token.At the lexical level, an M document consists of a stream of whitespace, comment, and token elements. Ciascuna di queste produzioni viene trattata nelle sezioni seguenti.Each of these productions is covered in the following sections. Nella grammatica sintattica solo gli elementi token sono significativi.Only token elements are significant in the syntactic grammar.

Spazi vuotiWhitespace

In un documento M, per separare commenti e token viene usato uno spazio vuoto,Whitespace is used to separate comments and tokens within an M document. composto dal carattere di spazio (appartenente alla classe Unicode Zs), da un carattere di tabulazione orizzontale e uno verticale, da un carattere di avanzamento carta e da sequenze di caratteri di nuova riga.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. Le sequenze di caratteri di nuova riga includono: ritorno a capo, avanzamento riga, ritorno a capo seguito da avanzamento riga, riga successiva e separatore di paragrafo.Newline character sequences include carriage return, line feed, carriage return followed by line feed, next line, and paragraph separator characters.

whitespace:whitespace:
      Qualsiasi carattere con classe Unicode Zs      Any character with Unicode class Zs
      Carattere di tabulazione orizzontale (U+0009)      Horizontal tab character (U+0009)
      Carattere di tabulazione verticale (U+000B)      Vertical tab character (U+000B)
      Carattere di avanzamento carta (U+000C)      Form feed character (U+000C)
      Carattere di ritorno a capo (U+000D) seguito da un carattere di avanzamento riga (U+000A)      Carriage return character (U+000D) followed by line feed character (U+000A)
      new-line-character      new-line-character
new-line-character:new-line-character:
      Carattere di ritorno a capo (U+000D)      Carriage return character (U+000D)
      Carattere di avanzamento riga (U+000A)      Line feed character (U+000A)
      Carattere di nuova riga (U+0085)      Next line character (U+0085)
      Carattere separatore di riga (U+2028)      Line separator character (U+2028)
      Carattere separatore di paragrafo (U+2029)      Paragraph separator character (U+2029)

Per compatibilità con gli strumenti di modifica del codice sorgente che aggiungono marcatori di fine file e per consentire la visualizzazione di un documento come sequenza di righe con terminazioni appropriate, a un documento M vengono applicate (in ordine) le trasformazioni seguenti: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:

  • Se l'ultimo carattere del documento è un carattere Control-Z (U+001A), viene eliminato.If the last character of the document is a Control-Z character (U+001A), this character is deleted.

  • Alla fine del documento viene aggiunto un carattere di ritorno a capo (U+000D) se il documento non è vuoto e se l'ultimo carattere del documento non è un ritorno a capo (U+000D), un avanzamento riga (U+000A), un separatore di riga (U+2028) o un separatore di paragrafo (U+2029).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).

CommentiComments

Sono supportati due tipi di commenti: commenti su riga singola e commenti delimitati.Two forms of comments are supported: single-line comments and delimited comments. I commenti su riga singola iniziano con i caratteri // e si estendono fino alla fine della riga di codice sorgente.Single-line comments start with the characters // and extend to the end of the source line. I commenti delimitati iniziano con i caratteri /* e terminano con i caratteri */.Delimited comments start with the characters /* and end with the characters */.

I commenti delimitati possono estendersi su più righe.Delimited comments may span multiple lines.

comment:
      single-line-comment
      delimited-comment
single-line-comment:
comment:
      single-line-comment
      delimited-comment
single-line-comment:

      // single-line-comment-characters opt
single-line-comment-characters:
      single-line-comment-character single-line-comment-characters opt
single-line-comment-character:
      // single-line-comment-charactersopt
single-line-comment-characters:
      single-line-comment-character single-line-comment-charactersopt
single-line-comment-character:

      Qualsiasi carattere Unicode ad eccezione di new-line-character
delimited-comment:
      Any Unicode character except a new-line-character
delimited-comment:

      /* delimited-comment-text opt asterisks /      /* delimited-comment-textopt asterisks /
delimited-comment-text:
      delimited-comment-section delimited-comment-text opt
delimited-comment-section:
delimited-comment-text:
      delimited-comment-section delimited-comment-textopt
delimited-comment-section:

      /      /
      asterisks opt not-slash-or-asterisk
asterisks:
      asterisksopt not-slash-or-asterisk
asterisks:

      * asterisks opt
not-slash-or-asterisk:
      * asterisksopt
not-slash-or-asterisk:

      Qualsiasi carattere Unicode ad eccezione di * o /      Any Unicode character except * or /

I commenti non vengono annidati.Comments do not nest. Le sequenze di caratteri /* e */ non hanno un significato speciale in un commento su riga singola, così come sequenze di caratteri // e /* non hanno un significato speciale in un commento delimitato.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.

I commenti non vengono elaborati all'interno di valori letterali di testo.Comments are not processed within text literals. L'esempio:The example

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

include un commento delimitato.includes a delimited comment.

L'esempio:The example

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

mostra vari commenti su riga singola.shows several single-line comments.

TokensTokens

Un token può essere rappresentato un identificatore, una parola chiave, un valore letterale, un operatore o un segno di punteggiatura.A token is an identifier, keyword, literal, operator, or punctuator. Per separare i token vengono usati spazi vuoti e commenti, che tuttavia non sono token.Whitespace and comments are used to separate tokens, but are not considered tokens.

token:
      identifier
      keyword
      literal
      operator-or-punctuator
token:
      identifier
      keyword
      literal
      operator-or-punctuator

Sequenze di escape dei caratteriCharacter Escape Sequences

I valori di testo M possono contenere caratteri Unicode arbitrari.M text values can contain arbitrary Unicode characters. I valori letterali di testo, tuttavia, sono limitati ai caratteri grafici e, per i caratteri non grafici, è necessario quindi usare sequenze di escape.Text literals, however, are limited to graphic characters and require the use of escape sequences for non-graphic characters. Ad esempio, per includere un carattere di ritorno a capo, di avanzamento riga o di tabulazione in un valore letterale di testo, è possibile usare, rispettivamente, le sequenze di escape #(cr), #(lf) e #(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. Per incorporare i caratteri di inizio di sequenza di escape #( in un valore letterale di testo, è necessario eseguire l'escape del carattere # stesso:To embed the escapesequence start characters #( in a text literal, the # itself needs to be escaped:

#(#)(

Le sequenze di escape possono contenere anche valori di punti di codice Unicode Short (quattro cifre esadecimali) o Long (otto cifre esadecimali).Escape sequences can also contain short (four hex digits) or long (eight hex digits) Unicode code-point values. Le tre sequenze di escape seguenti sono quindi equivalenti: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

In una singola sequenza di escape possono essere inclusi più codici di escape, separati da virgole; le due sequenze seguenti sono quindi equivalenti: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)

Di seguito viene descritto il meccanismo standard di escape dei caratteri in un documento M.The following describes the standard mechanism of character escaping in an M document.

character-escape-sequence:character-escape-sequence:
      #( escape-sequence-list )      #( escape-sequence-list )
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:
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:
      #      #

Valori letteraliLiterals

Un valore letterale è una rappresentazione del codice sorgente di un valore.A literal is a source code representation of a value.

literal:
      logical-literal
      number-literal
      text-literal
      null-literal
      verbatim-literal
literal:
      logical-literal
      number-literal
      text-literal
      null-literal
      verbatim-literal

Valori letterali NullNull literals

Per scrivere il valore null viene usato il valore letterale Null.The null literal is used to write the null value. Il valore null rappresenta un valore assente.The null value represents an absent value.

null-literal:null-literal:
      null      null

Valori letterali logiciLogical literals

Per scrivere i valori true e false viene usato un valore letterale logico, che produce un valore logico.A logical literal is used to write the values true and false and produces a logical value.

logical-literal:logical-literal:
      true      true
      false      false

Valori letterali numericiNumber literals

Per scrivere un valore numerico viene usato un valore letterale numerico, che produce un valore numerico.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-part opt
number-literal:
      decimal-number-literal
      hexadecimal-number-literal
decimal-number-literal:
      decimal-digits
. decimal-digits exponent-partopt

      . decimal-digits exponent-part opt
      decimal-digits exponent-part opt
decimal-digits:
      decimal-digit decimal-digits opt
decimal-digit:
one of
      . 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:exponent-part:
      e sign opt decimal-digits      e signopt decimal-digits
      E sign opt decimal-digits
sign:
uno tra
      E signopt decimal-digits
sign:
one of

      + -      + -
hexadecimal-number-literal:hexadecimal-number-literal:
      0x hex-digits      0x hex-digits
      0X hex-digits
hex-digits:
      hex-digit hex-digits opt
hex-digit:
uno tra
      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

È possibile specificare un numero in formato esadecimale anteponendo a hex-digits i caratteri 0x.A number can be specified in hexadecimal format by preceding the hex-digits with the characters 0x. ad esempio:For example:

0xff // 255

Se in un valore letterale numerico è incluso un separatore decimale, deve essere seguito almeno da una cifra.Note that if a decimal point is included in a number literal, then it must have at least one digit following it. Ad esempio, 1.3 è un valore letterale numerico, mentre 1. e 1.e3 non lo sono.For example, 1.3 is a number literal but 1. and 1.e3 are not.

Valori letterali di testoText literals

Un valore letterale di testo consente di scrivere una sequenza di caratteri Unicode e produce un valore di testo.A text literal is used to write a sequence of Unicode characters and produces a text value.

text-literal:text-literal:
      " text-literal-characters opt "      " text-literal-charactersopt "
text-literal-characters:
      text-literal-character text-literal-characters opt
text-literal-character:
      single-text-character
      character-escape-sequence
      double-quote-escape-sequence
single-text-character:
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:

      Qualsiasi carattere ad eccezione di " (U+0022) o # (U+0023), seguito da ( (U+0028)      Any character except " (U+0022) or # (U+0023) followed by ( (U+0028)
double-quote-escape-sequence:double-quote-escape-sequence:
      "" (U+0022, U+0022)      "" (U+0022, U+0022)

Per includere le virgolette in un valore di testo, il segno delle virgolette deve essere ripetuto, come illustrato di seguito:To include quotes in a text value, the quote mark is repeated, as follows:

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

La produzione character-escape-sequence può essere usata per scrivere caratteri in valori di testo senza doverli codificare direttamente come caratteri Unicode nel documento.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. Per inserire un ritorno a capo e un avanzamento di riga, ad esempio, è necessario digitare:For example, a carriage return and line feed can be written in a text value as:

"Hello world#(cr,lf)"

Valori letterali verbatimVerbatim literals

Un valore letterale verbatim viene usato per archiviare una sequenza di caratteri Unicode immessi da un utente come codice, ma che non possono essere analizzati correttamente come codice.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. In fase di esecuzione, viene generato un valore di errore.At runtime, it produces an error value.

verbatim-literal:verbatim-literal:
      #!" text-literal-characters opt "      #!" text-literal-charactersopt "

IdentificatoriIdentifiers

Con il termine identificatore si fa riferimento a un valore.An identifier is a name used to refer to a value. Gli identificatori possono essere regolari o delimitati.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:
identifier:
      regular-identifier
      quoted-identifier
regular-identifier:
      available-identifier
      available-identifier dot-character regular-identifier
available-identifier:

      Un elemento keyword-or-identifier diverso da keyword
keyword-or-identifier:
      identifier-start-character identifier-part-characters opt
identifier-start-character:
      letter-character
      underscore-character
identifier-part-characters:
      identifier-part-character identifier-part-characters opt
identifier-part-character:
      letter-character
      decimal-digit-character
      underscore-character
      connecting-character
      combining-character
      formatting-character
dot-character:
      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:underscore-character:
      _ (U+005F)      _ (U+005F)
letter-character:letter-character:
      Carattere Unicode di classe Lu, Ll, Lt, Lm, Lo o Nl      A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nl
combining-character:combining-character:
      Carattere Unicode di classe Mn o Mc      A Unicode character of classes Mn or Mc
decimal-digit-character:decimal-digit-character:
      Carattere Unicode di classe Nd      A Unicode character of the class Nd
connecting-character:connecting-character:
      Carattere Unicode di classe Pc      A Unicode character of the class Pc
formatting-character: formatting-character:
      Carattere Unicode di classe Cf      A Unicode character of the class Cf

Un quoted-identifier consente di usare come identificatore qualsiasi sequenza di zero o più caratteri Unicode, tra cui parole chiave, spazi vuoti, commenti, operatori e segni di punteggiatura.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:quoted-identifier:
      #" text-literal-characters opt "      #" text-literal-charactersopt "

Tenere presente che le sequenze di escape e le virgolette doppie per l'escape delle virgolette possono essere usate in un quoted-identifier, così come in un text-literal.Note that escape sequences and double-quotes to escape quotes can be used in a quoted identifier, just as in a text-literal.

Nell'esempio seguente viene usata la delimitazione dell'identificatore per i nomi contenenti un carattere spazio:The following example uses identifier quoting for names containing a space character:

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

Nell'esempio seguente viene usata la delimitazione dell'identificatore per includere l'operatore + in un identificatore:The following example uses identifier quoting to include the + operator in an identifier:

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

Identificatori generalizzatiGeneralized Identifiers

Nel linguaggio M esistono due posizioni in cui non vengono introdotte ambiguità dagli identificatori che contengono spazi vuoti o sono costituiti da parole chiave o da valori letterali numerici.There are two places in M where no ambiguities are introduced by identifiers that contain blanks or that are otherwise keywords or number literals. Queste posizioni sono costituite dai nomi dei campi di record in un record valore letterale e in un operatore di accesso ai campi ([ ]). Il linguaggio M consente quindi di inserire questi identificatori senza dover usare identificatori delimitati.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]
]

Gli identificatori usati per nominare e accedere ai campi prendono il nome di identificatori generalizzati e vengono definiti come illustrato di seguito:The identifiers used to name and access fields are referred to as generalized identifiers and defined as follows:

generalized-identifier:
      generalized-identifier-part
      generalized-identifier
separati solo da spazi vuoti (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
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

Parole chiaveKeywords

Una parola chiave è una sequenza riservata di caratteri di tipo identificatore che non è possibile usare come identificatore, tranne quando si usa il meccanismo identifier-quoting o è consentito un identificatore generalizzato.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: una trakeyword: 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

Operatori e segni di punteggiaturaOperators and punctuators

Esistono diversi tipi di operatori e segni di punteggiatura.There are several kinds of operators and punctuators. Gli operatori vengono usati nelle espressioni per descrivere le operazioni che includono uno o più operandi.Operators are used in expressions to describe operations involving one or more operands. L'espressione a + b, ad esempio, usa l'operatore + per aggiungere i due operandi a e b.For example, the expression a + b uses the + operator to add the two operands a and b. I segni di punteggiatura consentono invece di raggruppare e separare.Punctuators are for grouping and separating.

operator-or-punctuator: uno traoperator-or-punctuator: one of
      , ; = < <= > >= <> + - * / & ( ) [ ] { } @ ! ? => .. ...      , ; = < <= > >= <> + - * / & ( ) [ ] { } @ ! ? => .. ...