DOSEIの日記

技術メモ+日常ログ

#10 誤りの処理

誤りを発見・報告・修復する方法。誤りには次のようなものがある。

  • 構文上の誤り
  • 意味上の誤り
  • アルゴリズミックな誤り

構文上の誤りは構造解析ですぐに発見できるが、先読みで処理をしているため、検出した時点ではその誤り位置を越してしまっている。1つ前のトークンをバッファして、1つ遅延して表示すればいい。また、想定される誤りを表す文法を組み込んで、誤り訂正をすることが出来ることもある。
意味上の誤りは、完全な発見は困難だが、一般には記号表と比較して、使い方が矛盾しているものは発見できる。また、最適化のためにプログラムの流れ解析*1やデータの流れ解析*2を行う。
誤りの処理で重要なのは、恐慌(panic)を起こさないこと。つまり、1つの誤りが後続のプログラムの解析に影響しないようにすることで、簡単にはその誤りを含むステートメントを読み飛ばすなどで対応。

*1:CFA: control flow analysis

*2:DFA: data flow analysis