

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Format skrip
<a name="grammar-ecmascript-spec"></a>

Amazon Lex V2 mendukung ECMAScript fitur-fitur berikut untuk mendefinisikan tata bahasa.

Amazon Lex V2 mendukung ECMAScript fitur berikut saat menentukan tag dalam tata bahasa. `tag-format`harus dikirim ke `semantics/1.0` ketika ECMAScript tag digunakan dalam tata bahasa. Untuk informasi lebih lanjut, lihat spesifikasi bahasa [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**
+ [

# Pernyataan variabel
](ecma-variable.md)
+ [

# Ekspresi
](ecma-expression.md)
+ [

# Jika pernyataan
](ecma-if.md)
+ [

# Pernyataan switch
](ecma-switch.md)
+ [

# Deklarasi fungsi
](ecma-function.md)
+ [

# Pernyataan iterasi
](ecma-iteration.md)
+ [

# Pernyataan blok
](ecma-block.md)
+ [

# Komentar
](ecma-comments.md)
+ [

# Pernyataan yang tidak didukung
](ecma-unsupported.md)

Dokumen ini berisi materi dari ECMAScript standar (tersedia di [https://www.ecma-international. org/publications-and-standards/standards/ecma-262/](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/)). Dokumen spesifikasi ECMAScript bahasa tersedia dari Ecma International di bawah lisensi berikut.

## Teks lisensi
<a name="ecma-license"></a>

© 2020 Ecma Internasional

Dokumen ini dapat disalin, diterbitkan, dan didistribusikan kepada orang lain, dan karya turunan tertentu darinya dapat disiapkan, disalin, diterbitkan, dan didistribusikan, secara keseluruhan atau sebagian, asalkan pemberitahuan hak cipta di atas dan Lisensi Hak Cipta dan Penafian ini disertakan pada semua salinan dan karya turunan tersebut. Satu-satunya karya turunan yang diizinkan berdasarkan Lisensi Hak Cipta dan Penafian ini adalah: 

(i) karya yang menggabungkan seluruh atau sebagian dokumen ini untuk tujuan memberikan komentar atau penjelasan (seperti versi dokumen yang dianotasi), 

(ii) karya yang menggabungkan semua atau sebagian dari dokumen ini untuk tujuan memasukkan fitur-fitur yang menyediakan aksesibilitas, 

(iii) terjemahan dokumen ini ke dalam bahasa selain bahasa Inggris dan ke dalam format yang berbeda dan 

(iv) bekerja dengan memanfaatkan spesifikasi ini dalam produk kesesuaian standar dengan menerapkan (misalnya, dengan menyalin dan menempel seluruhnya atau sebagian) fungsionalitas di dalamnya. 

Namun, isi dokumen ini sendiri tidak dapat diubah dengan cara apa pun, termasuk dengan menghapus pemberitahuan hak cipta atau referensi ke Ecma International, kecuali jika diperlukan untuk menerjemahkannya ke dalam bahasa selain bahasa Inggris atau ke dalam format yang berbeda. 

Versi resmi dokumen Ecma International adalah versi bahasa Inggris di situs web Ecma International. Dalam hal terjadi perbedaan antara versi terjemahan dan versi resmi, versi resmi akan mengatur. 

Izin terbatas yang diberikan di atas bersifat abadi dan tidak akan dicabut oleh Ecma International atau penerus atau penugasannya. Dokumen ini dan informasi yang terkandung di sini disediakan atas dasar “SEBAGAIMANA ADANYA” dan ECMA INTERNATIONAL MENYANGKAL SEMUA JAMINAN, TERSURAT MAUPUN TERSIRAT, TERMASUK TETAPI TIDAK TERBATAS PADA JAMINAN APA PUN BAHWA PENGGUNAAN INFORMASI DI SINI TIDAK AKAN MELANGGAR HAK KEPEMILIKAN ATAU JAMINAN TERSIRAT ATAS KELAYAKAN UNTUK MERCHANTABILITY ATAU KESESUAIAN UNTUK TUJUAN TERTENTU.”

# Pernyataan variabel
<a name="ecma-variable"></a>

Pernyataan variabel mendefinisikan satu atau lebih variabel.

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

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

Anda dapat menambahkan string ekspresi untuk menjalankan fungsi di Amazon Lex V2. Tabel ini menunjukkan sintaks dan contoh yang dapat digunakan dalam ekspresi SRGS.


| Jenis ekspresi | Sintaksis | Contoh | Didukung? | 
| --- | --- | --- | --- | 
| Ekspresi reguler literal | String literal yang berisi karakter khusus [regex](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) yang valid | <pre>"^\d\.$"</pre> | Tidak | 
| Fungsi | function functionName(parameters) \$1 functionBody\$1 | <pre>var x = function calc() {<br />    return 10;<br />}</pre> | Tidak | 
| Delete | delete expression | <pre>delete obj.property;</pre> | Tidak | 
| Kekosongan | void expression | <pre>void (2 == '2');</pre> | Tidak | 
| Tipeof | typeof expression | <pre>typeof 42;</pre> | Tidak | 
| Indeks anggota | expression [ expressions ] | <pre>var fruits = ["apple"];<br />fruits[0];</pre> | Ya | 
| Dot anggota | expression . identifier | <pre>out.value</pre> | Ya | 
| Pendapat | expression (arguments) | <pre>new Date('1994-10-11')</pre> | Ya | 
| Posting kenaikan | expression\$1\$1 | <pre>var x=10; x++;</pre> | Ya | 
| Posting penurunan | expression-- | <pre>var x=10; x--;</pre> | Ya | 
| Pra kenaikan | \$1\$1expression | <pre>var x=10; ++x;</pre> | Ya | 
| Pra penurunan | --expression | <pre>var x=10; --x;</pre> | Ya | 
| Unary plus/Unary minus | \$1expression / -expression | <pre>+x / -x;</pre> | Ya | 
| Sedikit tidak | \$1 expression | <pre>const a = 5;<br />console.log( ~a );</pre> | Ya | 
| Logis tidak | \$1 expression | <pre>!(a > 0 || b > 0)</pre> | Ya | 
| Multiplikatif | expression ('\$1' \$1 '/' \$1 '%') expression | <pre>(x + y) * (a / b)</pre> | Ya | 
| Aditif | expression ('\$1' \$1 '-') expression | <pre>(a + b) - (a - (a + b))</pre> | Ya | 
| Pergeseran bit | expression ('<<' \$1 '>>' \$1 '>>>') expression | <pre>(a >> b) >>> c</pre> | Ya | 
| Relatif | expression ('<' \$1 '>' \$1 '<=' \$1 '>=') expression | <pre>if (a > b) { ... }</pre> | Ya | 
| Masuk | expression in expression | <pre>fruits[0] in otherFruits;</pre> | Ya | 
| Kesetaraan | expression ('==' \$1 '\$1=' \$1 '===' \$1 '\$1===') expression | <pre>if (a == b) { ... }</pre> | Ya | 
| Bit dan/ xor/atau | expression ('&' \$1 '^' \$1 '\$1') expression | <pre>a & b / a ^ b / a | b</pre> | Ya | 
| Logis dan/atau | expression ('&&' \$1 '\$1\$1') expression | <pre>if (a && (b ||c)) { ...}</pre> | Ya | 
| Ternary  | expression ? expression : expression | <pre>a > b ? obj.prop : 0</pre> | Ya | 
| Penugasan | expression = expression | <pre>out.value = "string";</pre> | Ya | 
| Operator penugasan | expression ('\$1=' \$1 '/=' \$1 '\$1=' \$1 '-=' \$1 '%=') expression  | <pre>a *= 10;</pre> | Ya | 
| Penugasan operator bitwise | expression ('<<=' \$1 '>>=' \$1 '>>>=' \$1 '&=' \$1 '^=' \$1 '\$1=') expression | <pre>a <<= 10;</pre> | Ya | 
| Pengidentifikasi | identifierSequence[di mana *IdentifierSequence* adalah urutan karakter yang valid](https://developer.mozilla.org/en-US/docs/Glossary/Identifier) | <pre>fruits=[10, 20, 30];</pre> | Ya | 
| Null literal | null | <pre>x = null;</pre> | Ya | 
| Boolean harfiah | true \$1 false | <pre>x = true;</pre> | Ya | 
| String literal | 'string' / "string" | <pre>a = 'hello',<br />b = "world";</pre> | Ya | 
| Desimal literal | integer [.] digits [exponent] | <pre>111.11 e+12</pre> | Ya | 
| Hex literal | 0 (x \$1 X)[0-9a-fA-F] | <pre>0x123ABC</pre> | Ya | 
| Literal oktal | O [0-7] | <pre>"O51"</pre> | Ya | 
| Array literal | [ expression, ... ] | <pre>v = [a, b, c];</pre> | Ya | 
| Objek literal | \$1property: value, ...\$1 | <pre>out = {value: 1, flag: false};</pre> | Ya | 
| Kurung | ( expressions ) | <pre>x + (x + y)</pre> | Ya | 

# Jika pernyataan
<a name="ecma-if"></a>

Anda dapat menambahkan pernyataan if untuk menjalankan fungsi di Amazon Lex V2. Contoh ini menunjukkan sintaks yang dapat digunakan dalam ekspresi SRGS.

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

**Catatan:** Dalam contoh sebelumnya, `expressions` dan `statements` harus menjadi salah satu yang didukung dari dokumen ini.

# Pernyataan switch
<a name="ecma-switch"></a>

Anda dapat menambahkan pernyataan switch untuk menjalankan fungsi di Amazon Lex V2. Contoh ini menunjukkan sintaks yang dapat digunakan dalam ekspresi SRGS.

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

**Catatan:** Dalam contoh sebelumnya, `expressions` dan `statements` harus menjadi salah satu yang didukung dari dokumen ini.

# Deklarasi fungsi
<a name="ecma-function"></a>

Anda dapat menambahkan deklarasi fungsi untuk melakukan fungsi di Amazon Lex V2. Contoh ini menunjukkan sintaks yang dapat digunakan dalam ekspresi SRGS.

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

# Pernyataan iterasi
<a name="ecma-iteration"></a>

Pernyataan iterasi dapat berupa salah satu dari berikut ini:

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

# Pernyataan blok
<a name="ecma-block"></a>

Anda dapat menambahkan blok pernyataan untuk melakukan fungsi di Amazon Lex V2. Contoh ini menunjukkan sintaks yang dapat digunakan dalam ekspresi SRGS.

```
{
   statements
}

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

**Catatan:** Dalam contoh sebelumnya, yang `statements` disediakan di blok harus salah satu yang didukung dari dokumen ini.

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

Anda dapat menambahkan komentar di Amazon Lex V2. Contoh ini menunjukkan sintaks yang dapat digunakan dalam ekspresi SRGS.

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

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

# Pernyataan yang tidak didukung
<a name="ecma-unsupported"></a>

Amazon Lex V2 tidak mendukung ECMAScript fitur-fitur berikut.

**Topics**
+ [

## Pernyataan kosong
](#ecma-unsupported-empty)
+ [

## Lanjutkan pernyataan
](#ecma-unsupported-continue)
+ [

## Pernyataan istirahat
](#ecma-unsupported-break)
+ [

## Pernyataan pengembalian
](#ecma-unsupported-return)
+ [

## Lempar pernyataan
](#ecma-unsupported-throw)
+ [

## Coba pernyataan
](#ecma-unsupported-try)
+ [

## Pernyataan debugger
](#ecma-unsupported-debugger)
+ [

## Pernyataan berlabel
](#ecma-unsupported-labelled)
+ [

## Deklarasi kelas
](#ecma-unsupported-class)

## Pernyataan kosong
<a name="ecma-unsupported-empty"></a>

Pernyataan kosong digunakan untuk tidak memberikan pernyataan. Berikut ini adalah sintaks untuk pernyataan kosong:

```
;
```

## Lanjutkan pernyataan
<a name="ecma-unsupported-continue"></a>

Pernyataan lanjutkan tanpa label didukung dengan[Pernyataan iterasi](ecma-iteration.md). Pernyataan lanjutkan dengan label tidak didukung.

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

## Pernyataan istirahat
<a name="ecma-unsupported-break"></a>

Pernyataan break tanpa label didukung dengan[Pernyataan iterasi](ecma-iteration.md). Pernyataan break dengan label tidak didukung.

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

## Pernyataan pengembalian
<a name="ecma-unsupported-return"></a>

```
return expression;
```

## Lempar pernyataan
<a name="ecma-unsupported-throw"></a>

Pernyataan throw digunakan untuk melempar pengecualian yang ditentukan pengguna.

```
throw expression;
```

## Coba pernyataan
<a name="ecma-unsupported-try"></a>

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

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

Pernyataan debugger digunakan untuk memanggil fungsionalitas debugging yang disediakan oleh lingkungan.

```
debugger;
```

## Pernyataan berlabel
<a name="ecma-unsupported-labelled"></a>

Pernyataan berlabel dapat digunakan dengan `break` atau `continue` pernyataan.

```
label:
   statements


// Example
let str = '';

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

console.log(str);
```

## Deklarasi kelas
<a name="ecma-unsupported-class"></a>

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