0

文法規則は次のとおりです。

ProcessExpression :  EventExpression "->" ProcessExpression

                    | ProcessName ;

最初のルールが 2 番目のルールよりも優先順位が高いことを bison に伝えるにはどうすればよいか教えてください。

私が試してみました:

%nonassoc PROC

%right "->"

ProcessExpression :  EventExpression "->" ProcessExpression

                    | ProcessName % prec PROC;

しかし、結果はありません。ありがとうございました。

4

2 に答える 2

1

リデュース/リデュースの競合を解決するために、bison はソース ファイルにある順序でルールに優先順位を与えます。しかし、それは明らかにあなたが望んでいることではありません。さもなければ、この質問をすることはないでしょう。

%nonassoc/%right を使用すると、shift/reduce の競合を解決するためにトークンが優先されます。この場合、重要なのは、削減されるルールの優先順位にシフトするトークンの優先順位です。関連するルールは 1 つだけです (ただし、他のルールが現在の状態で部分的に解析されている可能性があります)。したがって、この状況で、あるルールの優先順位が別のルールよりも高いまたは低いという話は意味がありません。

それで、あなたは何をしようとしていますか?正確に何がうまくいかないのですか?EventExpressionとProcessNameは多少似ているため、競合がありますか? それらのルールが何であるかについての情報を提供しません...

于 2010-03-14T07:48:35.310 に答える
0

左再帰がある場合にのみ、あなたが書いたものを適用できると思います。だから、このようなことを試してみてください。

%nonassoc PROC
%left EVENT

ProcessExpression :  EventExpression "->" ProcessExpression %prec EVENT

                    | ProcessName % prec PROC;

ありがとう、ゴクル。

于 2010-03-09T12:16:00.500 に答える