2

LR 属性のパーサーで何ができるのか、どのように実装されているのか知りたいです。

属性のソースが、$0、$-1 などの指定構文を使用して左側に配置されている兄弟である場合、yacc 生成パーサーは継承された属性を許可します。B を使用S -> A Bすると、A から合成された属性を継承できますが、S から何かを継承することはできません。これは、A になるスタック内の B から 1 つの要素を調べることによって行われると思います。

現在、zyacc docは、LR 属性の文法を許可していると述べていますが、これは、yacc が許可するのとほぼ同じだと思います。zyacc を使用すると、これらの属性は非終端記号 (パラメーターなど) で指定され、セマンティック アクション内でアクセスされるだけではありません。LR 属性が yacc の継承された属性よりも強力である、または LR 属性が異なる方法で実装されている (スタックを調べるだけではない) など、他に違いはありますか。

4

1 に答える 1