1

何が起こるかというと、ASTを分析した後、ルールが終了したときにエラーがあるかどうかがわかるという特定のケースがあります。運が悪かったのでyyerror( "blah")を試しました。

エラーがあるとは言えないので、別のルールを終了し、reduce/reduceの競合が発生します。片方が無効で、もう片方を見ずに無効になっていることはわかっているが、ユーザーはbcに苦しんでいるので、これは面倒です。このブランチを無視する方法がわかりません。bc無効です。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

アクションを入れると、パーサーYYERRORはそのアクションを構文エラーにし、エラー回復モードに入ります(パーサーにエラー回復アクションがある場合は、それ以外の場合、これは多かれ少なかれ同等です)。 は、bisonがエラーメッセージを使用して呼び出すルーチンです(デフォルトの実装ではエラーメッセージを出力します)が、(特に)解析エラーや構文エラーとは関係ありません。yyerrorYYERRORYYABORTyyerror

これはreduce-reduce(またはshift-reduce)の競合とは関係がないことに注意してください-競合はエラーではなく、文法の中でそれを作らないものです-LALR(1)なので、バイソンで生成されたパーサーはできません確実に認識します。

于 2011-07-23T22:53:14.107 に答える
0

競合を減らす/減らすことのない構文を作成する必要があります

于 2011-07-23T22:37:35.417 に答える