2012-02-28 6 views
3

私は、エラーシンボルyyerrokなどの使用に関するマニュアルを読んできました。私の懸念事項は、パーサーにエラールールを追加する方法です。YACC/Bisonでのエラー検出/回復

簡略化されたJavaプログラムを解析すると考えて、私が従うべきである一般的なガイドラインはありますか?すべてのルールに何らかのエラー検出/回復が含まれていますか?これらのタスクの実行に堪能であることが証明される最も簡単なアプローチはありますか?私は現在のところ、構文エラーを探しているだけです。

あらかじめご了承ください。

答えて

3

一般に、yacc/bisonファイルではエラーリカバリルールを控えめに使いたいと思っています。実際にはリーフルールで適切に再同期するのは非常に難しいため、リーフプロダクションでは多くのエラールールではなく、1つまたは2つのトップレベルエラールールしか持たないのがベストです。文を解析中にあなたが構文エラーのいずれかの種類を取得した場合、パーサはちょうどスローされます。この場合、

BlockStatement: error ';' 

Javaのような言語のための最も簡単な方法は、のようなだけのルールを持つことです離れた入力トークンが;に到達し、ちょうどそのステートメントを完了したかのように振る舞います。これは、ブロックの最後に欠けている;以外のエラーに対して適切に機能します。