次のように訂正してください。
| + | − | * | / | ( | ) | 識別子 | 終 | ||
|---|---|---|---|---|---|---|---|---|---|
| 始 | ⋖ | ⋖ | ⋖ | ⋖ | ⋖ | ⋖ | ≐ | ||
| + | ⋗ | ⋗ | ⋖ | ⋖ | ⋖ | ⋗ | ⋖ | ⋗ | |
| − | ⋗ | ⋗ | ⋖ | ⋖ | ⋖ | ⋗ | ⋖ | ⋗ | |
| * | ⋗ | ⋗ | ⋗ | ⋗ | ⋖ | ⋗ | ⋖ | ⋗ | |
| / | ⋗ | ⋗ | ⋗ | ⋗ | ⋖ | ⋗ | ⋖ | ⋗ | |
| ( | ⋖ | ⋖ | ⋖ | ⋖ | ⋖ | ≐ | ⋖ | ||
| ) | ⋗ | ⋗ | ⋗ | ⋗ | ⋗ | ⋗ | この行をまるまる追加してください。 | ||
| 識別子 | ⋗ | ⋗ | ⋗ | ⋗ | ⋗ | ⋗ |
教科書「コンパイラの仕組み」では、「≐」の動作を 「シフトと還元を一気に行う」ように説明しています。 しかし、その説明では「)」のあとに、他の演算子をはさまず 「(」や識別子が出現したときに、構文エラーになりません。
授業では、(他の標準的な教科書の説明と同じように)「≐」の動作を「シフト」 と説明します。その場合、表に「)」の行が必要になります。