

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 文字起こし形式


Amazon Lex V2 では、次の文法定義の ECMAScript 機能がサポートされています。

Amazon Lex V2 では、文法でタグを指定する際に次の ECMAScript 機能がサポートされています。ECMAScript タグを使用する場合、`tag-format` を `semantics/1.0` に送信する必要があります。詳細については、「[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**
+ [

# 変数ステートメント
](ecma-variable.md)
+ [

# 表現
](ecma-expression.md)
+ [

# If ステートメント
](ecma-if.md)
+ [

# 切り替えステートメント
](ecma-switch.md)
+ [

# 関数宣言
](ecma-function.md)
+ [

# 反復ステートメント
](ecma-iteration.md)
+ [

# ブロックステートメント
](ecma-block.md)
+ [

# コメント
](ecma-comments.md)
+ [

# サポートされていないステートメント
](ecma-unsupported.md)

このドキュメントには ECMAScript 標準 ([https://www.ecma-international.org/publications-and-standards/standards/ecma-262/](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/) で入手可能) の資料が含まれています。ECMAScript 言語仕様書は、以下のライセンスに基づいて Ecma International から入手できます。

## ライセンステキスト


© 2,020 Ecma International

本文書は複製、出版、他者への配布が可能であり、その一部または一部の派生著作物は、その全部または一部を作成、複製、出版、配布することができます。ただし、上記の著作権表示および本著作権使用許諾書および免責事項が、かかる複製物および派生著作物のすべてに含まれている場合に限ります。本著作権ライセンスおよび免責事項のもとで許容される二次的著作物は以下に限定されます。

(i) 解説または説明を提供する目的で本書の全部または一部を組み込んだ作品 (文書の注釈付きバージョンなど) 

(ii) アクセシビリティを提供する機能を組み込む目的で本書の全部または一部を組み込んだ作品 

(iii) 本書の英語以外の言語および異なる形式への翻訳、および 

(iv) 本仕様書に含まれる機能を (全部または一部をコピーアンドペーストなどで) 実装することにより、この仕様書を標準適合製品で使用することで機能します。

ただし、英語以外の言語または異なる形式への翻訳に必要な場合を除き、著作権表示や Ecma International への参照を削除するなど、本書の内容自体を変更することはいかなる方法でもできません。

ECMA International ドキュメントの公式バージョンは、Ecma Internationalのウェブサイトにある英語版です。翻訳版と公式版の間に相違がある場合は、公式版が優先されるものとします。

上記で付与された限定的な許可は永続的であり、Ecma International またはその後継者または譲受人によって取り消されることはありません。本書および本書に含まれる情報は「現状のまま」提供され、ECMA International は、明示または黙示を問わず、一切の保証を否認します。これには、本書に記載されている情報の使用が、所有権、または商品性または特定目的への適合性に関する黙示的保証を侵害しないという保証が含まれますが、これらに限定されません。」

# 変数ステートメント


変数ステートメントは 1 つ以上の変数を定義します。

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

# 表現


式文字列を追加して、Amazon Lex V2 で関数を実行できます。この表は、SRGS 式で使用できる構文と例を示しています。


| 式タイプ | Syntax | 例 | サポート対象? | 
| --- | --- | --- | --- | 
| 正規表現リテラル | 有効な[正規表現特殊文字](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)を含む文字列リテラル | <pre>"^\d\.$"</pre> | いいえ | 
| 関数 | function functionName(parameters) \$1 functionBody\$1 | <pre>var x = function calc() {<br />    return 10;<br />}</pre> | いいえ | 
| Delete | delete expression | <pre>delete obj.property;</pre> | いいえ | 
| Void | void expression | <pre>void (2 == '2');</pre> | いいえ | 
| Typeof | typeof expression | <pre>typeof 42;</pre> | いいえ | 
| メンバーインデックス | expression [ expressions ] | <pre>var fruits = ["apple"];<br />fruits[0];</pre> | はい | 
| メンバードット | expression . identifier | <pre>out.value</pre> | はい | 
| 引数 | expression (arguments) | <pre>new Date('1994-10-11')</pre> | はい | 
| インクリメント後 | expression\$1\$1 | <pre>var x=10; x++;</pre> | はい | 
| デクリメント後 | expression-- | <pre>var x=10; x--;</pre> | はい | 
| インクリメント前 | \$1\$1expression | <pre>var x=10; ++x;</pre> | はい | 
| デクリメント後 | --expression | <pre>var x=10; --x;</pre> | はい | 
| 単項プラス/単項マイナス | \$1expression / -expression | <pre>+x / -x;</pre> | はい | 
| ビット否定 | \$1 expression | <pre>const a = 5;<br />console.log( ~a );</pre> | はい | 
| 論理否定 | \$1 expression | <pre>!(a > 0 || b > 0)</pre> | はい | 
| 乗算 | expression ('\$1' \$1 '/' \$1 '%') expression | <pre>(x + y) * (a / b)</pre> | はい | 
| 追加 | expression ('\$1' \$1 '-') expression | <pre>(a + b) - (a - (a + b))</pre> | はい | 
| ビットシフト | expression ('<<' \$1 '>>' \$1 '>>>') expression | <pre>(a >> b) >>> c</pre> | はい | 
| 相対 | expression ('<' \$1 '>' \$1 '<=' \$1 '>=') expression | <pre>if (a > b) { ... }</pre> | はい | 
| In (中にある) | expression in expression | <pre>fruits[0] in otherFruits;</pre> | はい | 
| 等価 | expression ('==' \$1 '\$1=' \$1 '===' \$1 '\$1===') expression | <pre>if (a == b) { ... }</pre> | はい | 
| ビット and / xor / or | expression ('&' \$1 '^' \$1 '\$1') expression | <pre>a & b / a ^ b / a | b</pre> | はい | 
| 論理的 and / or | expression ('&&' \$1 '\$1\$1') expression | <pre>if (a && (b ||c)) { ...}</pre> | はい | 
| 三項  | expression ? expression : expression | <pre>a > b ? obj.prop : 0</pre> | はい | 
| 代入 | expression = expression | <pre>out.value = "string";</pre> | はい | 
| 代入演算子 | expression ('\$1=' \$1 '/=' \$1 '\$1=' \$1 '-=' \$1 '%=') expression  | <pre>a *= 10;</pre> | はい | 
| 代入ビット演算子 | expression ('<<=' \$1 '>>=' \$1 '>>>=' \$1 '&=' \$1 '^=' \$1 '\$1=') expression | <pre>a <<= 10;</pre> | はい | 
| 識別子 | identifierSequence、ここでは識別子/シーケンスが[有効な文字](https://developer.mozilla.org/en-US/docs/Glossary/Identifier)のシーケンスです。 | <pre>fruits=[10, 20, 30];</pre> | はい | 
| Null リテラル | null | <pre>x = null;</pre> | はい | 
| ブールリテラル | true \$1 false | <pre>x = true;</pre> | はい | 
| 文字列リテラル | 'string' / "string" | <pre>a = 'hello',<br />b = "world";</pre> | はい | 
| 10 進リテラル | integer [.] digits [exponent] | <pre>111.11 e+12</pre> | はい | 
| 16 進リテラル | 0 (x \$1 X)[0-9a-fA-F] | <pre>0x123ABC</pre> | はい | 
| 8 進リテラル | O [0-7] | <pre>"O51"</pre> | はい | 
| 配列リテラル | [ expression, ... ] | <pre>v = [a, b, c];</pre> | はい | 
| オブジェクトリテラル | \$1property: value, ...\$1 | <pre>out = {value: 1, flag: false};</pre> | はい | 
| 括弧付き | ( expressions ) | <pre>x + (x + y)</pre> | はい | 

# If ステートメント


Amazon Lex V2 で関数を実行するための if ステートメントを追加できます。この例では、SRGS 式で使用できる構文を示しています。

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

**注:** 前述の例では、`expressions` と `statements` が、このドキュメントでサポートされているもののいずれかである必要があります。

# 切り替えステートメント


Amazon Lex V2 で関数を実行するスイッチステートメントを追加できます。この例では、SRGS 式で使用できる構文を示しています。

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

**注:** 前述の例では、`expressions` と `statements` が、このドキュメントでサポートされているもののいずれかである必要があります。

# 関数宣言


関数宣言を追加して、Amazon Lex V2 で関数を実行できます。この例では、SRGS 式で使用できる構文を示しています。

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

# 反復ステートメント


反復ステートメントは、次のいずれかを指定できます。

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

# ブロックステートメント


Amazon Lex V2 で関数を実行するためのステートメントブロックを追加できます。この例では、SRGS 式で使用できる構文を示しています。

```
{
   statements
}

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

**注:** 前述の例では、ブロックに提供された `statements` が、このドキュメントでサポートされているもののいずれかである必要があります。

# コメント


Amazon Lex V2 でコメントを追加できます。この例では、SRGS 式で使用できる構文を示しています。

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

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

# サポートされていないステートメント


Amazon Lex V2 は次の ECMAScript 機能をサポートしていません。

**Topics**
+ [

## 空のステートメント
](#ecma-unsupported-empty)
+ [

## Continue ステートメント
](#ecma-unsupported-continue)
+ [

## Break ステートメント
](#ecma-unsupported-break)
+ [

## Return ステートメント
](#ecma-unsupported-return)
+ [

## Throw ステートメント
](#ecma-unsupported-throw)
+ [

## Try ステートメント
](#ecma-unsupported-try)
+ [

## Debugger ステートメント
](#ecma-unsupported-debugger)
+ [

## ラベル付きステートメント
](#ecma-unsupported-labelled)
+ [

## クラス宣言
](#ecma-unsupported-class)

## 空のステートメント


空のステートメントはステートメントを指定しない場合に使用します。空のステートメントの構文は次のとおりです。

```
;
```

## Continue ステートメント


ラベルのない continue ステートメントは、[反復ステートメント](ecma-iteration.md) でサポートされています。ラベル付きの continue ステートメントは、サポートされていません。

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

## Break ステートメント


ラベルのない break ステートメントは、[反復ステートメント](ecma-iteration.md) でサポートされています。ラベル付きの break ステートメントは、サポートされていません。

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

## Return ステートメント


```
return expression;
```

## Throw ステートメント


throw ステートメントは、ユーザー定義の例外を投げるために使用されます。

```
throw expression;
```

## Try ステートメント


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

## Debugger ステートメント


debugger ステートメントは、環境によって提供されるデバッグ機能を呼び出すために使用されます。

```
debugger;
```

## ラベル付きステートメント


ラベル付きステートメントは `break` または `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);
```

## クラス宣言


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