最後の項目「semantic valueの参照」について補足します。 kmyaccでは、アクション中のsemantic valueを、$$, $1, $2...の代わりに文法記号の名前で参照することができます(Cでは-nオプションの指定が必要)。 以下に例を示します。 foo: bar '+' baz { foo = bar + baz; } 上のアクションは、{ $$ = $1 + $3; }と同じです。 同じ文法記号が規則中に複数回現われる場合は、どの要素を指しているのかが曖昧なため、そのまま文法記号で参照するとエラーになってしまいます。 こういう場合には文法記号の前に「名前@」を前置することにより、その名前でsemantic valueを参照することができます。 result@expr: addendum@expr '+' addenda@expr { result = addend