1

Beaverを使用して、reduce/reduce 競合を含む文法を解析しようとしています。競合が予想されます。他のパーサー ジェネレーター%expect 0 1は、1 つの reduce/reduce 競合が予想されることを指定するようなことをサポートしていますが、Beaver はこれをサポートしていないようです。Beaver に、既知の reduce/reduce 競合を無視してパーサーを生成するように指示するにはどうすればよいですか?

4

1 に答える 1

3

Beaver ではできませんが、%left、%right、または %nonassoc ディレクティブを使用して、結合性と優先順位の規則を定義できます。

競合が発生した場合にどのreduceが実行されるかは気にしないと思います(解析ツリーが同一であるため、または目的に対して同一であるため)。したがって、どの優先順位を定義するかは問題ではなく、十分な優先順位を定義するだけです。

競合が演算子 OP1 と OP2 の間であると仮定すると、次のディレクティブが競合を解決します。

%nonassoc OP1;
%nonassoc OP2;

ただし、同じ演算子 (OP) を持つ 2 つの控除規則間で競合が発生している場合は、次のいずれかが必要です。

%left OP;

また

%right OP;
于 2013-10-06T11:53:33.203 に答える