

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

O Amazon Lex V2 oferece suporte aos seguintes ECMAScript recursos para definir gramáticas.

O Amazon Lex V2 oferece suporte aos seguintes ECMAScript recursos ao especificar tags na gramática. `tag-format`deve ser enviado para `semantics/1.0` quando as ECMAScript tags são usadas na gramática. Para obter mais informações, consulte a especificação de [linguagem ECMA-262 ECMAScript 2021.](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**
+ [Declaração de variável](ecma-variable.md)
+ [Expressões](ecma-expression.md)
+ [Instrução If](ecma-if.md)
+ [Instrução switch](ecma-switch.md)
+ [Declarações de função](ecma-function.md)
+ [Instrução de iteração](ecma-iteration.md)
+ [Instrução de bloco](ecma-block.md)
+ [Comentários](ecma-comments.md)
+ [Instruções sem suporte](ecma-unsupported.md)

Este documento contém material do ECMAScript padrão (disponível em [https://www.ecma-international). org/publications-and-standards/standards/ecma-26/2)](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/). O documento de especificação do ECMAScript idioma está disponível na Ecma International sob a seguinte licença.

## Texto da licença
<a name="ecma-license"></a>

© 2020 Ecma International

Este documento pode ser copiado, publicado e distribuído a terceiros, e determinados trabalhos derivados dele podem ser preparados, copiados, publicados e distribuídos, no todo ou em parte, desde que o aviso de direitos autorais acima e esta Licença e Isenção de Responsabilidade de Direitos Autorais estejam incluídos em todas essas cópias e trabalhos derivados. Os únicos trabalhos derivados permitidos sob esta Licença de Direitos Autorais e Isenção de Responsabilidade são: 

(i) trabalhos que incorporem todo ou parte deste documento com a finalidade de fornecer comentários ou explicações (como uma versão comentada do documento); 

(ii) trabalhos que incorporem todo ou parte deste documento com o objetivo de incorporar atributos que forneçam acessibilidade; 

(iii) traduções deste documento para outros idiomas além do inglês e em diferentes formatos; e 

(iv) trabalhos que fazem uso desta especificação em produtos em conformidade com o padrão, implementando (por exemplo, copiando e colando total ou parcialmente) a funcionalidade nela contida. 

No entanto, o conteúdo deste documento em si não pode ser modificado de forma alguma, inclusive removendo o aviso de direitos autorais ou as referências à Ecma International, exceto conforme necessário para traduzi-lo para outros idiomas além do inglês ou em um formato diferente. 

A versão oficial de um documento da Ecma International é a versão em inglês no site da Ecma International. Em caso de discrepâncias entre uma versão traduzida e a versão oficial, a versão oficial prevalecerá. 

As permissões limitadas concedidas acima são perpétuas e não serão revogadas pela Ecma International ou seus sucessores ou cessionários. Este documento e as informações aqui contidas são fornecidos “NO ESTADO EM QUE SE ENCONTRAM” E A ECMA INTERNATIONAL SE ISENTA DE TODAS AS GARANTIAS, EXPRESSAS OU IMPLÍCITAS, INCLUINDO, MAS NÃO SE LIMITANDO A, QUALQUER GARANTIA DE QUE O USO DAS INFORMAÇÕES AQUI CONTIDAS NÃO INFRINGIRÁ NENHUM DIREITO DE PROPRIEDADE OU QUALQUER GARANTIA IMPLÍCITA DE COMERCIALIZAÇÃO OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.”

# Declaração de variável
<a name="ecma-variable"></a>

Uma declaração de variável define uma ou mais variáveis.

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

# Expressões
<a name="ecma-expression"></a>

Você pode adicionar strings de expressões para executar funções no Amazon Lex V2. Esta tabela mostra a sintaxe e os exemplos que podem ser usados em expressões SRGS.


| Tipo de expressão | Sintaxe | Exemplo | Compatível? | 
| --- | --- | --- | --- | 
| Literal de expressão regular | Literal de string contendo [caracteres especiais regex](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) válidos | <pre>"^\d\.$"</pre> | Não | 
| Função | function functionName(parameters) \$1 functionBody\$1 | <pre>var x = function calc() {<br />    return 10;<br />}</pre> | Não | 
| Delete | delete expression | <pre>delete obj.property;</pre> | Não | 
| Nulo | void expression | <pre>void (2 == '2');</pre> | Não | 
| Typeof | typeof expression | <pre>typeof 42;</pre> | Não | 
| Índice de membros | expression [ expressions ] | <pre>var fruits = ["apple"];<br />fruits[0];</pre> | Sim | 
| Ponto de membro | expression . identifier | <pre>out.value</pre> | sim | 
| Argumentos | expression (arguments) | <pre>new Date('1994-10-11')</pre> | Sim | 
| Pós-incremento | expression\$1\$1 | <pre>var x=10; x++;</pre> | Sim | 
| Pós-decremento | expression-- | <pre>var x=10; x--;</pre> | Sim | 
| Pré-incremento | \$1\$1expression | <pre>var x=10; ++x;</pre> | Sim | 
| Pré-incremento | --expression | <pre>var x=10; --x;</pre> | Sim | 
| Mais unário/Menos unário | \$1expression / -expression | <pre>+x / -x;</pre> | Sim | 
| Negação de bits | \$1 expression | <pre>const a = 5;<br />console.log( ~a );</pre> | Sim | 
| Negação de lógica | \$1 expression | <pre>!(a > 0 || b > 0)</pre> | Sim | 
| Multiplicativo | expression ('\$1' \$1 '/' \$1 '%') expression | <pre>(x + y) * (a / b)</pre> | Sim | 
| Aditivo | expression ('\$1' \$1 '-') expression | <pre>(a + b) - (a - (a + b))</pre> | Sim | 
| Mudança de bits | expression ('<<' \$1 '>>' \$1 '>>>') expression | <pre>(a >> b) >>> c</pre> | Sim | 
| Relativo | expression ('<' \$1 '>' \$1 '<=' \$1 '>=') expression | <pre>if (a > b) { ... }</pre> | Sim | 
| Em | expression in expression | <pre>fruits[0] in otherFruits;</pre> | Sim | 
| Igualdade | expression ('==' \$1 '\$1=' \$1 '===' \$1 '\$1===') expression | <pre>if (a == b) { ... }</pre> | Sim | 
| Bit e/xor/ou | expression ('&' \$1 '^' \$1 '\$1') expression | <pre>a & b / a ^ b / a | b</pre> | Sim | 
| Lógico e/ou | expression ('&&' \$1 '\$1\$1') expression | <pre>if (a && (b ||c)) { ...}</pre> | Sim | 
| Ternários  | expression ? expression : expression | <pre>a > b ? obj.prop : 0</pre> | Sim | 
| Atribuição | expression = expression | <pre>out.value = "string";</pre> | Sim | 
| Operador de atribuição | expression ('\$1=' \$1 '/=' \$1 '\$1=' \$1 '-=' \$1 '%=') expression  | <pre>a *= 10;</pre> | Sim | 
| Operador de atribuição bitwise | expression ('<<=' \$1 '>>=' \$1 '>>>=' \$1 '&=' \$1 '^=' \$1 '\$1=') expression | <pre>a <<= 10;</pre> | Sim | 
| Identificador | identifierSequence onde identifierSequence é uma sequência de [caracteres válidos](https://developer.mozilla.org/en-US/docs/Glossary/Identifier) | <pre>fruits=[10, 20, 30];</pre> | Sim | 
| Nulo literal | null | <pre>x = null;</pre> | Sim | 
| Booleano literal | true \$1 false | <pre>x = true;</pre> | Sim | 
| String literal | 'string' / "string" | <pre>a = 'hello',<br />b = "world";</pre> | Sim | 
| Literal decimal | integer [.] digits [exponent] | <pre>111.11 e+12</pre> | Sim | 
| Literal hexadecimal | 0 (x \$1 X)[0-9a-fA-F] | <pre>0x123ABC</pre> | Sim | 
| Literal octal | O [0-7] | <pre>"O51"</pre> | Sim | 
| Matriz literal | [ expression, ... ] | <pre>v = [a, b, c];</pre> | Sim | 
| Objeto literal | \$1property: value, ...\$1 | <pre>out = {value: 1, flag: false};</pre> | Sim | 
| Entre parênteses | ( expressions ) | <pre>x + (x + y)</pre> | Sim | 

# Instrução If
<a name="ecma-if"></a>

Você pode adicionar instruções if para executar funções no Amazon Lex V2. Este exemplo mostra a sintaxe que pode ser usada em expressões SRGS.

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

**Nota:** no exemplo anterior, `expressions` e `statements` devem ser uma das instruções compatíveis neste documento.

# Instrução switch
<a name="ecma-switch"></a>

Você pode adicionar instruções switch para executar funções no Amazon Lex V2. Este exemplo mostra a sintaxe que pode ser usada em expressões SRGS.

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

**Nota:** no exemplo anterior, `expressions` e `statements` devem ser uma das instruções compatíveis neste documento.

# Declarações de função
<a name="ecma-function"></a>

Você pode adicionar declarações de função para executar funções no Amazon Lex V2. Este exemplo mostra a sintaxe que pode ser usada em expressões SRGS.

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

# Instrução de iteração
<a name="ecma-iteration"></a>

As instruções de iteração podem ser qualquer uma das seguintes:

```
// 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
}
```

# Instrução de bloco
<a name="ecma-block"></a>

Você pode adicionar blocos de instrução para executar funções no Amazon Lex V2. Este exemplo mostra a sintaxe que pode ser usada em expressões SRGS.

```
{
   statements
}

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

**Nota:** no exemplo anterior, a instrução `statements` fornecida no bloco deve ser uma das compatíveis neste documento.

# Comentários
<a name="ecma-comments"></a>

Você pode adicionar comentários no Amazon Lex V2. Este exemplo mostra a sintaxe que pode ser usada em expressões SRGS.

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

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

# Instruções sem suporte
<a name="ecma-unsupported"></a>

O Amazon Lex V2 não oferece suporte aos seguintes ECMAScript recursos.

**Topics**
+ [Instrução vazia](#ecma-unsupported-empty)
+ [Instrução de continuação](#ecma-unsupported-continue)
+ [Instrução de interrupção](#ecma-unsupported-break)
+ [Instrução de retorno](#ecma-unsupported-return)
+ [Instrução de lançamento](#ecma-unsupported-throw)
+ [Instrução de tentativa](#ecma-unsupported-try)
+ [Instrução do depurador](#ecma-unsupported-debugger)
+ [Instruções rotuladas](#ecma-unsupported-labelled)
+ [Instrução de classe](#ecma-unsupported-class)

## Instrução vazia
<a name="ecma-unsupported-empty"></a>

A instrução vazia é usada para não fornecer nenhuma instrução. Veja a seguir a sintaxe de uma instrução vazia:

```
;
```

## Instrução de continuação
<a name="ecma-unsupported-continue"></a>

A instrução de continuação sem um rótulo é compatível com a [Instrução de iteração](ecma-iteration.md). A instrução de continuação com um rótulo não é compatível.

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

## Instrução de interrupção
<a name="ecma-unsupported-break"></a>

A instrução de interrupção sem um rótulo é compatível com a [Instrução de iteração](ecma-iteration.md). A instrução de interrupção com um rótulo não é compatível.

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

## Instrução de retorno
<a name="ecma-unsupported-return"></a>

```
return expression;
```

## Instrução de lançamento
<a name="ecma-unsupported-throw"></a>

A instrução de lançamento é usada para lançar uma exceção definida pelo usuário.

```
throw expression;
```

## Instrução de tentativa
<a name="ecma-unsupported-try"></a>

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

## Instrução do depurador
<a name="ecma-unsupported-debugger"></a>

A instrução do depurador é usada para invocar a funcionalidade de depuração fornecida pelo ambiente.

```
debugger;
```

## Instruções rotuladas
<a name="ecma-unsupported-labelled"></a>

A instrução rotulada pode ser usada com instruções `break` ou `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);
```

## Instrução de classe
<a name="ecma-unsupported-class"></a>

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