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