チェックポイントを念頭に置いて文法を設計する必要があります。チェックポイントとは、Cのセミコロン、Pythonの改行、またはCOBOLのピリオドを意味します(例として)。このチェックポイントは、最初に見つかったエラー以外のものを報告できるように、回復するコンパイラの数です。
私はBisonを使用していませんが、YACCを使用するとエラー処理をオーバーライドでき、同等のGNUツールが少なくとも古いUNIXクランカーと同じくらい強力であることを願っています。
私は以前に設定ファイルYACC文法でこれを行いました。次の正しく形成されたセグメントがあるとします。
item = "bread" {
quantity = 7
price = 1.50
taxrate = 10
}
そして、いくつかの奇妙な理由で、ユーザーは「量」のつづりを間違えて、それを間違ってレンダリングします。コールバックのその時点で、チェックポイントに到達するまでそれ以上の処理を妨げるエラーフラグを立てることができます。パーサーを続行させ(さらなるエラーをキャッチして無視し)、破損した構文での誤った成功に応答してコールバックが何もしないことを確認します。
これは、閉じ中括弧までのすべてのスタンザを単に無視するか、または価格のデフォルト値を設定し、改行までのみ無視することによって(少なくとも部分的に形成されたオブジェクトを取得するために)可能性があります。
ただし、チェックポイントに到達したらエラーフラグをリセットするだけで、処理を続行できます。
私はまだユーザーに通知されていることを確認します。顧客が望まないデータを続行することは悪い形式と見なされることがあります:-)。