エラープロダクションを文法に追加するための戦略は何ですか?
-
28-10-2019 - |
質問
エラープロダクションは通常どのように追加されますか?エラープロダクションが浅すぎるという問題に遭遇しています。パーサーがステートメントのエラーで状態をポップし始めたとき、それが配置されているセクションのエラー生成にヒットし、無効なエラーを印刷するまでポップしますメッセージ。
すべての非ターミナルに記述的なエラー生産を追加するだけだと思いますか?
解決
エラープロダクションは、合理的または有用なエラーメッセージを印刷することではなく、入力の処理を継続しようとするために、エラーから回復することです。したがって、入力ストリームを適切に認識して再同期させる可能性が高い文法のポイントで使用する必要があります。たとえば、あなたの言語がで終わる一連の構造で構成されている場合 ;
キャラクター、良いエラーの生成は似ています construct: error ';'
, 、aのエラーから回復します construct
(それが何であれ)入力を前にスキップすることによって ;
そこから続けようとしています。
パーサーは最も近いものにのみ回復するため、多くのエラーリカバリルールが一般的なアイデアであり、多くの場合、最上位レベルで最もグローバルなものが最も有用であり、より細かい粒状を使用しようとすることは単につながるだけですエラー回復ルールが入力を適切に再調整できないため、エラーカスケードを使用すること。
所属していません StackOverflow