

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Amazon Lex V2 admite las siguientes ECMAScript funciones para definir gramáticas.

Amazon Lex V2 admite las siguientes ECMAScript características al especificar etiquetas en la gramática. `tag-format`debe enviarse a `semantics/1.0` cuando se utilicen ECMAScript etiquetas en la gramática. Para obtener más información, consulte la especificación de [idioma 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**
+ [Declaración variable](ecma-variable.md)
+ [Expressions](ecma-expression.md)
+ [Declaración IF](ecma-if.md)
+ [Declaración Switch](ecma-switch.md)
+ [Declaración de acciones](ecma-function.md)
+ [operación de instrucción](ecma-iteration.md)
+ [Declaración de bloque](ecma-block.md)
+ [Comentarios](ecma-comments.md)
+ [Declaraciones no compatibles](ecma-unsupported.md)

[Este documento contiene material de la ECMAScript norma (disponible en https://www.ecma-international). org/publications-and-standards/standards/ecma-262/](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/)). El documento de especificación del ECMAScript idioma está disponible en Ecma International con la siguiente licencia.

## Texto de licencia
<a name="ecma-license"></a>

© 2020 Ecma International

Este documento puede copiarse, publicarse y distribuirse a terceros, y algunas obras derivadas del mismo pueden prepararse, copiarse, publicarse y distribuirse, total o parcialmente, siempre que el aviso de derechos de autor anterior y esta licencia de derechos de autor y exención de responsabilidad estén incluidos en todas esas copias y obras derivadas. Las únicas obras derivadas que están permitidas en virtud de esta licencia de derechos de autor y descargo de responsabilidad son: 

(i) las obras que incorporan todo o parte de este documento con el fin de proporcionar comentarios o explicaciones (como una versión anotada del documento), 

(ii) obras que incorporen todo o parte de este documento con el fin de incorporar características que proporcionen accesibilidad, 

(iii) traducciones de este documento a idiomas distintos del inglés y a diferentes formatos y 

(iv) funciona haciendo uso de esta especificación en productos que cumplen con los estándares mediante la implementación (por ejemplo, copiando y pegando total o parcialmente) la funcionalidad de la misma. 

Sin embargo, el contenido de este documento en sí no puede modificarse de ninguna manera, ni siquiera mediante la eliminación del aviso de derechos de autor o las referencias a Ecma International, excepto cuando sea necesario traducirlo a idiomas distintos del inglés o a un formato diferente. 

La versión oficial de un documento de Ecma International es la versión en inglés del sitio web de Ecma International. En caso de discrepancias entre la versión traducida y la versión oficial, prevalecerá la versión oficial. 

Los permisos limitados otorgados anteriormente son perpetuos y no serán revocados por Ecma International ni sus sucesores o cesionarios. Este documento y la información aquí contenida se proporcionan «TAL CUAL» y ECMA INTERNATIONAL RENUNCIA A TODAS LAS GARANTÍAS, EXPRESAS O IMPLÍCITAS, INCLUIDA, ENTRE OTRAS, CUALQUIER GARANTÍA DE QUE EL USO DE LA INFORMACIÓN AQUÍ CONTENIDA NO INFRINGIRÁ NINGÚN DERECHO DE PROPIEDAD NI NINGUNA GARANTÍA IMPLÍCITA DE COMERCIABILIDAD O IDONEIDAD PARA UN PROPÓSITO PARTICULAR.

# Declaración variable
<a name="ecma-variable"></a>

Una declaración variable define una o más variables.

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

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

Puede agregar cadenas de expresiones para realizar funciones en Amazon Lex V2. En esta tabla se muestran la sintaxis y los ejemplos que se pueden utilizar en las expresiones de SRGS.


| Tipo de expresión | Sintaxis | Ejemplo | ¿Compatible? | 
| --- | --- | --- | --- | 
| Expresión regular: literal | Cadena literal que contiene [caracteres especiales de expresiones regulares](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) válidos | <pre>"^\d\.$"</pre> | No | 
| Función | function functionName(parameters) \$1 functionBody\$1 | <pre>var x = function calc() {<br />    return 10;<br />}</pre> | No | 
| Eliminar | delete expression | <pre>delete obj.property;</pre> | No | 
| Vacío | void expression | <pre>void (2 == '2');</pre> | No | 
| Tipo de | typeof expression | <pre>typeof 42;</pre> | No | 
| Índice de miembros | expression [ expressions ] | <pre>var fruits = ["apple"];<br />fruits[0];</pre> | Sí | 
| Punto de miembro | expression . identifier | <pre>out.value</pre> | yes | 
| Argumentos | expression (arguments) | <pre>new Date('1994-10-11')</pre> | Sí | 
| Después el incremento | expression\$1\$1 | <pre>var x=10; x++;</pre> | Sí | 
| Después de la disminución | expression-- | <pre>var x=10; x--;</pre> | Sí | 
| Antes del incremento | \$1\$1expression | <pre>var x=10; ++x;</pre> | Sí | 
| Antes de la disminución | --expression | <pre>var x=10; --x;</pre> | Sí | 
| Más unario / menos unario | \$1expression / -expression | <pre>+x / -x;</pre> | Sí | 
| Bit no | \$1 expression | <pre>const a = 5;<br />console.log( ~a );</pre> | Sí | 
| Lógico no | \$1 expression | <pre>!(a > 0 || b > 0)</pre> | Sí | 
| Multiplicativo | expression ('\$1' \$1 '/' \$1 '%') expression | <pre>(x + y) * (a / b)</pre> | Sí | 
| Aditivo | expression ('\$1' \$1 '-') expression | <pre>(a + b) - (a - (a + b))</pre> | Sí | 
| Cambio de bits | 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í | 
| Igualdad | expression ('==' \$1 '\$1=' \$1 '===' \$1 '\$1===') expression | <pre>if (a == b) { ... }</pre> | Sí | 
| Bit y / xor / o | expression ('&' \$1 '^' \$1 '\$1') expression | <pre>a & b / a ^ b / a | b</pre> | Sí | 
| Lógico y/o | expression ('&&' \$1 '\$1\$1') expression | <pre>if (a && (b ||c)) { ...}</pre> | Sí | 
| Ternario  | expression ? expression : expression | <pre>a > b ? obj.prop : 0</pre> | Sí | 
| Asignación | expression = expression | <pre>out.value = "string";</pre> | Sí | 
| Operador de asignación | expression ('\$1=' \$1 '/=' \$1 '\$1=' \$1 '-=' \$1 '%=') expression  | <pre>a *= 10;</pre> | Sí | 
| Operador de asignación bit a bit | expression ('<<=' \$1 '>>=' \$1 '>>>=' \$1 '&=' \$1 '^=' \$1 '\$1=') expression | <pre>a <<= 10;</pre> | Sí | 
| Identificador | identifierSequence donde identifierSequence es una secuencia de [caracteres válidos](https://developer.mozilla.org/en-US/docs/Glossary/Identifier) | <pre>fruits=[10, 20, 30];</pre> | Sí | 
| Literal nulo | null | <pre>x = null;</pre> | Sí | 
| Literal booleano | true \$1 false | <pre>x = true;</pre> | Sí | 
| Una cadena literal. | 'string' / "string" | <pre>a = 'hello',<br />b = "world";</pre> | Sí | 
| Literal decimal | integer [.] digits [exponent] | <pre>111.11 e+12</pre> | Sí | 
| Literal hexadecimal | 0 (x \$1 X)[0-9a-fA-F] | <pre>0x123ABC</pre> | Sí | 
| Literal octal | O [0-7] | <pre>"O51"</pre> | Sí | 
| Matriz literal | [ expression, ... ] | <pre>v = [a, b, c];</pre> | Sí | 
| Objeto literal | \$1property: value, ...\$1 | <pre>out = {value: 1, flag: false};</pre> | Sí | 
| Entre paréntesis | ( expressions ) | <pre>x + (x + y)</pre> | Sí | 

# Declaración IF
<a name="ecma-if"></a>

Puede agregar declaraciones if para realizar funciones en Amazon Lex V2. En este ejemplo, se muestra la sintaxis que se puede utilizar en las expresiones de SRGS.

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

**Nota:** En el ejemplo anterior, `expressions` y `statements` deben ser uno de los compatibles de este documento.

# Declaración Switch
<a name="ecma-switch"></a>

Puede agregar declaraciones switch para realizar funciones en Amazon Lex V2. En este ejemplo, se muestra la sintaxis que se puede utilizar en las expresiones de SRGS.

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

**Nota:** En el ejemplo anterior, `expressions` y `statements` deben ser uno de los compatibles de este documento.

# Declaración de acciones
<a name="ecma-function"></a>

Puede agregar declaraciones function para realizar funciones en Amazon Lex V2. En este ejemplo, se muestra la sintaxis que se puede utilizar en las expresiones de SRGS.

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

# operación de instrucción
<a name="ecma-iteration"></a>

Las declaraciones de iteración pueden ser cualquiera de las siguientes:

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

# Declaración de bloque
<a name="ecma-block"></a>

Puede agregar bloques de declaraciones para realizar funciones en Amazon Lex V2. En este ejemplo, se muestra la sintaxis que se puede utilizar en las expresiones de SRGS.

```
{
   statements
}

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

**Nota:** En el ejemplo anterior, las `statements` proporcionadas en el bloque deben ser una de las compatibles de este documento.

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

Puede agregar comentarios en Amazon Lex V2. En este ejemplo, se muestra la sintaxis que se puede utilizar en las expresiones de SRGS.

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

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

# Declaraciones no compatibles
<a name="ecma-unsupported"></a>

Amazon Lex V2 no admite las siguientes ECMAScript funciones.

**Topics**
+ [Declaración vacía](#ecma-unsupported-empty)
+ [Continuar la declaración](#ecma-unsupported-continue)
+ [Declaración de interrupción](#ecma-unsupported-break)
+ [Declaración RETURN](#ecma-unsupported-return)
+ [Declaración THROW](#ecma-unsupported-throw)
+ [Declaración de prueba](#ecma-unsupported-try)
+ [Declaración del depurador](#ecma-unsupported-debugger)
+ [Declaración etiquetada](#ecma-unsupported-labelled)
+ [Declaración de clase](#ecma-unsupported-class)

## Declaración vacía
<a name="ecma-unsupported-empty"></a>

La declaración vacía se utiliza para no proporcionar ninguna declaración. La siguiente es la sintaxis de una sentencia vacía:

```
;
```

## Continuar la declaración
<a name="ecma-unsupported-continue"></a>

La declaración de continuación sin etiqueta es compatible con la [operación de instrucción](ecma-iteration.md). La declaración de continuación con etiqueta no es compatible.

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

## Declaración de interrupción
<a name="ecma-unsupported-break"></a>

La declaración de interrupción sin etiqueta es compatible con la [operación de instrucción](ecma-iteration.md). La declaración de interrupción con etiqueta no es compatible.

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

## Declaración RETURN
<a name="ecma-unsupported-return"></a>

```
return expression;
```

## Declaración THROW
<a name="ecma-unsupported-throw"></a>

La declaración throw se utiliza para generar una excepción definida por el usuario.

```
throw expression;
```

## Declaración de prueba
<a name="ecma-unsupported-try"></a>

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

## Declaración del depurador
<a name="ecma-unsupported-debugger"></a>

La declaración del depurador se utiliza para invocar la funcionalidad de depuración proporcionada por el entorno.

```
debugger;
```

## Declaración etiquetada
<a name="ecma-unsupported-labelled"></a>

La declaración etiquetada se puede utilizar con declaraciones `break` o `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);
```

## Declaración de clase
<a name="ecma-unsupported-class"></a>

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