

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Formato dello script
<a name="grammar-ecmascript-spec"></a>

Amazon Lex V2 supporta le seguenti ECMAScript funzionalità per la definizione delle grammatiche.

Amazon Lex V2 supporta le seguenti ECMAScript funzionalità quando si specificano i tag nella grammatica. `tag-format`deve essere inviato a `semantics/1.0` quando i ECMAScript tag vengono utilizzati nella grammatica. Per ulteriori informazioni, vedere le specifiche del linguaggio [ECMA-262 2021 ECMAScript ](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/).

```
<grammar version="1.0"
xmlns="http://www.w3.org/2001/06/grammar"
xml:lang="en-US"
tag-format="semantics/1.0"
root="card_number">
```

**Topics**
+ [Dichiarazione variabile](ecma-variable.md)
+ [Espressioni](ecma-expression.md)
+ [Dichiarazione If](ecma-if.md)
+ [Istruzione Switch](ecma-switch.md)
+ [Dichiarazioni di funzioni](ecma-function.md)
+ [Dichiarazione di iterazione](ecma-iteration.md)
+ [Dichiarazione di blocco](ecma-block.md)
+ [Commenti](ecma-comments.md)
+ [Dichiarazioni non supportate](ecma-unsupported.md)

[Questo documento contiene materiale tratto dallo ECMAScript standard (disponibile all'indirizzo https://www.ecma-international). org/publications-and-standards/standards/ecma-262/](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/)). Il documento con le specifiche della ECMAScript lingua è disponibile presso Ecma International con la seguente licenza.

## Testo della licenza
<a name="ecma-license"></a>

© 2020 Ecma International

Questo documento può essere copiato, pubblicato e distribuito ad altri e alcune sue opere derivate possono essere preparate, copiate, pubblicate e distribuite, in tutto o in parte, a condizione che la suddetta nota sul copyright e la presente licenza di copyright e dichiarazione di non responsabilità siano incluse in tutte queste copie e opere derivate. Le uniche opere derivate consentite ai sensi della presente Licenza di copyright e del Disclaimer sono: 

(i) opere che incorporano tutto o parte di questo documento allo scopo di fornire commenti o spiegazioni (come una versione annotata del documento), 

(ii) opere che incorporano tutto o parte del presente documento allo scopo di incorporare caratteristiche che garantiscano l'accessibilità, 

(iii) traduzioni del presente documento in lingue diverse dall'inglese e in diversi formati e 

(iv) opera facendo uso di questa specifica in prodotti conformi allo standard implementando (ad esempio, copiando e incollando in tutto o in parte) le funzionalità ivi contenute. 

Tuttavia, il contenuto di questo documento stesso non può essere modificato in alcun modo, inclusa la rimozione dell'avviso di copyright o dei riferimenti a Ecma International, ad eccezione di quanto richiesto per tradurlo in lingue diverse dall'inglese o in un formato diverso. 

La versione ufficiale di un documento di Ecma International è la versione in lingua inglese sul sito web di Ecma International. In caso di discrepanze tra una versione tradotta e la versione ufficiale, prevarrà la versione ufficiale. 

Le autorizzazioni limitate concesse sopra sono perpetue e non saranno revocate da Ecma International o dai suoi successori o cessionari. Questo documento e le informazioni in esso contenute sono fornite «COSÌ COME SONO» ed ECMA INTERNATIONAL DECLINA TUTTE LE GARANZIE, ESPRESSE O IMPLICITE, INCLUSA, A TITOLO ESEMPLIFICATIVO MA NON ESAUSTIVO, QUALSIASI GARANZIA CHE L'USO DELLE INFORMAZIONI QUI CONTENUTE NON VIOLERÀ ALCUN DIRITTO DI PROPRIETÀ O GARANZIE IMPLICITE DI COMMERCIABILITÀ O IDONEITÀ PER UNO SCOPO PARTICOLARE.»

# Dichiarazione variabile
<a name="ecma-variable"></a>

Un'istruzione variabile definisce una o più variabili.

```
var x = 10;
var x = 10, var y = <expression>;
```

# Espressioni
<a name="ecma-expression"></a>

Puoi aggiungere stringhe di espressioni per eseguire funzioni in Amazon Lex V2. Questa tabella mostra la sintassi e gli esempi che possono essere utilizzati nelle espressioni SRGS.


| Tipo di espressione | Sintassi | Esempio | Supportato? | 
| --- | --- | --- | --- | 
| Espressione regolare (letterale) | Stringa letterale contenente caratteri speciali [regex](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) validi | <pre>"^\d\.$"</pre> | No | 
| Funzione | function functionName(parameters) \$1 functionBody\$1 | <pre>var x = function calc() {<br />    return 10;<br />}</pre> | No | 
| Elimina | delete expression | <pre>delete obj.property;</pre> | No | 
| Void | void expression | <pre>void (2 == '2');</pre> | No | 
| Tipo di | typeof expression | <pre>typeof 42;</pre> | No | 
| Indice dei membri | expression [ expressions ] | <pre>var fruits = ["apple"];<br />fruits[0];</pre> | Sì | 
| Punto del membro | expression . identifier | <pre>out.value</pre> | sì | 
| Arguments (Argomenti) | expression (arguments) | <pre>new Date('1994-10-11')</pre> | Sì | 
| Incremento del post | expression\$1\$1 | <pre>var x=10; x++;</pre> | Sì | 
| Decremento successivo | expression-- | <pre>var x=10; x--;</pre> | Sì | 
| Preincremento | \$1\$1expression | <pre>var x=10; ++x;</pre> | Sì | 
| Pre-decremento | --expression | <pre>var x=10; --x;</pre> | Sì | 
| Unario più/ Unario meno | \$1expression / -expression | <pre>+x / -x;</pre> | Sì | 
| Ma no | \$1 expression | <pre>const a = 5;<br />console.log( ~a );</pre> | Sì | 
| Logico no | \$1 expression | <pre>!(a > 0 || b > 0)</pre> | Sì | 
| Moltiplicativo | expression ('\$1' \$1 '/' \$1 '%') expression | <pre>(x + y) * (a / b)</pre> | Sì | 
| Additivo | expression ('\$1' \$1 '-') expression | <pre>(a + b) - (a - (a + b))</pre> | Sì | 
| Spostamento di bit | expression ('<<' \$1 '>>' \$1 '>>>') expression | <pre>(a >> b) >>> c</pre> | Sì | 
| Relativo | expression ('<' \$1 '>' \$1 '<=' \$1 '>=') expression | <pre>if (a > b) { ... }</pre> | Sì | 
| In | expression in expression | <pre>fruits[0] in otherFruits;</pre> | Sì | 
| Parità | expression ('==' \$1 '\$1=' \$1 '===' \$1 '\$1===') expression | <pre>if (a == b) { ... }</pre> | Sì | 
| Bit e/xor/or | expression ('&' \$1 '^' \$1 '\$1') expression | <pre>a & b / a ^ b / a | b</pre> | Sì | 
| Logico e/o | expression ('&&' \$1 '\$1\$1') expression | <pre>if (a && (b ||c)) { ...}</pre> | Sì | 
| Ternaria  | expression ? expression : expression | <pre>a > b ? obj.prop : 0</pre> | Sì | 
| Assegnazione | expression = expression | <pre>out.value = "string";</pre> | Sì | 
| Operatore di assegnazione | expression ('\$1=' \$1 '/=' \$1 '\$1=' \$1 '-=' \$1 '%=') expression  | <pre>a *= 10;</pre> | Sì | 
| Operatore di assegnazione bit per bit | expression ('<<=' \$1 '>>=' \$1 '>>>=' \$1 '&=' \$1 '^=' \$1 '\$1=') expression | <pre>a <<= 10;</pre> | Sì | 
| Identificatore | identifierSequence[dove *identifierSequence è una sequenza* di caratteri validi](https://developer.mozilla.org/en-US/docs/Glossary/Identifier) | <pre>fruits=[10, 20, 30];</pre> | Sì | 
| Letterale nullo | null | <pre>x = null;</pre> | Sì | 
| Letterale booleano | true \$1 false | <pre>x = true;</pre> | Sì | 
| Stringa letterale | 'string' / "string" | <pre>a = 'hello',<br />b = "world";</pre> | Sì | 
| Letterale decimale | integer [.] digits [exponent] | <pre>111.11 e+12</pre> | Sì | 
| Letterale esadecimale | 0 (x \$1 X)[0-9a-fA-F] | <pre>0x123ABC</pre> | Sì | 
| Letterale ottale | O [0-7] | <pre>"O51"</pre> | Sì | 
| Matrice letterale | [ expression, ... ] | <pre>v = [a, b, c];</pre> | Sì | 
| Oggetto letterale | \$1property: value, ...\$1 | <pre>out = {value: 1, flag: false};</pre> | Sì | 
| Tra parentesi | ( expressions ) | <pre>x + (x + y)</pre> | Sì | 

# Dichiarazione If
<a name="ecma-if"></a>

Puoi aggiungere istruzioni if per eseguire funzioni in Amazon Lex V2. Questo esempio mostra la sintassi che può essere utilizzata nelle espressioni SRGS.

```
if (expressions) {
    statements;
} else {
    statements;
}
```

**Nota:** nell'esempio precedente, `expressions` e `statements` deve essere una di quelle supportate da questo documento.

# Istruzione Switch
<a name="ecma-switch"></a>

Puoi aggiungere istruzioni switch per eseguire funzioni in Amazon Lex V2. Questo esempio mostra la sintassi che può essere utilizzata nelle espressioni SRGS.

```
switch (expression) {
    case (expression):
     statements
     .
     .
     .
   default:
      statements
}
```

**Nota:** nell'esempio precedente, `expressions` e `statements` deve essere una di quelle supportate da questo documento.

# Dichiarazioni di funzioni
<a name="ecma-function"></a>

Puoi aggiungere dichiarazioni di funzioni per eseguire funzioni in Amazon Lex V2. Questo esempio mostra la sintassi che può essere utilizzata nelle espressioni SRGS.

```
function functionIdentifier([parameterList, ...]) {
     <function body>
}
```

# Dichiarazione di iterazione
<a name="ecma-iteration"></a>

Le istruzioni di iterazione possono essere le seguenti:

```
// Do..While statement
do {
   statements
} while (expressions)


// While Loop
while (expressions) {
   statements
}

// For Loop
for ([initialization]; [condition]; [final-expression])
   statement

// For..In
for (variable in object) {
  statement
}
```

# Dichiarazione di blocco
<a name="ecma-block"></a>

Puoi aggiungere blocchi di istruzioni per eseguire funzioni in Amazon Lex V2. Questo esempio mostra la sintassi che può essere utilizzata nelle espressioni SRGS.

```
{
   statements
}

// Example
{
    x = 10;
   if (x > 10) {
     console.log("greater than 10");
   }
}
```

**Nota:** nell'esempio precedente, nel blocco deve essere `statements` fornito uno di quelli supportati da questo documento.

# Commenti
<a name="ecma-comments"></a>

Puoi aggiungere commenti in Amazon Lex V2. Questo esempio mostra la sintassi che può essere utilizzata nelle espressioni SRGS.

```
// Single Line Comments
"// <comment>"

// Multineline comments
/**
<comment>
**/
```

# Dichiarazioni non supportate
<a name="ecma-unsupported"></a>

Amazon Lex V2 non supporta le seguenti ECMAScript funzionalità.

**Topics**
+ [Dichiarazione vuota](#ecma-unsupported-empty)
+ [Dichiarazione Continua](#ecma-unsupported-continue)
+ [Dichiarazione Break](#ecma-unsupported-break)
+ [Dichiarazione di reso](#ecma-unsupported-return)
+ [Lancia una dichiarazione](#ecma-unsupported-throw)
+ [Prova l'istruzione](#ecma-unsupported-try)
+ [Dichiarazione del debugger](#ecma-unsupported-debugger)
+ [Dichiarazione etichettata](#ecma-unsupported-labelled)
+ [Dichiarazione di classe](#ecma-unsupported-class)

## Dichiarazione vuota
<a name="ecma-unsupported-empty"></a>

L'istruzione vuota viene utilizzata per non fornire alcuna dichiarazione. Di seguito è riportata la sintassi per un'istruzione vuota:

```
;
```

## Dichiarazione Continua
<a name="ecma-unsupported-continue"></a>

L'istruzione continue senza etichetta è supportata da[Dichiarazione di iterazione](ecma-iteration.md). L'istruzione continue con etichetta non è supportata.

```
// continue with label
// this allows the program to jump to a
// labelled statement (see labelled statement below)
continue <label>;
```

## Dichiarazione Break
<a name="ecma-unsupported-break"></a>

L'istruzione break senza etichetta è supportata con[Dichiarazione di iterazione](ecma-iteration.md). L'istruzione break con etichetta non è supportata.

```
// break with label
// this allows the program to break out of a
// labelled statement (see labelled statement below)
break <label>;
```

## Dichiarazione di reso
<a name="ecma-unsupported-return"></a>

```
return expression;
```

## Lancia una dichiarazione
<a name="ecma-unsupported-throw"></a>

L'istruzione throw viene utilizzata per generare un'eccezione definita dall'utente.

```
throw expression;
```

## Prova l'istruzione
<a name="ecma-unsupported-try"></a>

```
try {
  statements
}
catch (expression) {
  statements
}
finally {
  statements
}
```

## Dichiarazione del debugger
<a name="ecma-unsupported-debugger"></a>

L'istruzione debugger viene utilizzata per richiamare la funzionalità di debug fornita dall'ambiente.

```
debugger;
```

## Dichiarazione etichettata
<a name="ecma-unsupported-labelled"></a>

L'istruzione etichettata può essere utilizzata con le istruzioni `break` or`continue`.

```
label:
   statements


// Example
let str = '';

loop1:
for (let i = 0; i < 5; i++) {
  if (i === 1) {
    continue loop1;
  }
  str = str + i;
}

console.log(str);
```

## Dichiarazione di classe
<a name="ecma-unsupported-class"></a>

```
class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}
```