ルールの途中にセマンティック アクションを追加したい場合、次のように置き換えます。
S->AB
と:
S->AMB
M->epsilon { //do something }
なぜそれが必要なのですか?代わりに次のように書くとどうなるでしょうか。
S->A { //do something } B
パーサーとの違いはありません。アクションをルールの途中に記述することは、アクションを使用して新しいイプシロン ルールを作成するための構文糖衣です。アクションはパーサーのリダクションによってトリガーされるため、アクションに関連付けられたリダクションのルールが必要です。Bison は自動的に変換を行います。
$1
唯一の違いは、アクション内の ...の意味にあります。埋め込みアクションでは、インデックスがオフに計算する値スタックのベース ポイントは異なります。つまり、イプシロン ルールではなく、包含ルールの開始に基づいています。