Haskellの構文解析 - ヴィアシュビニッヒ!?を考えていたとき
「Haskellで実装されたコンパイラというのは設計上何パスであろうとも
遅延評価のおかげで常に実質1パスになる」
と思っていたのだけど
よく考えてみれば、そんなに甘くない。
たとえば字句解析の戻り値がMaybeで
- 成功すれば、Just [Token]
- 失敗すれば、Nothing
を返す場合
最初のTokenが取得される前に、処理系は全体の字句解析を済ませて
戻り値がNothingでないことを確認しなければならない。
そうすると、ソースサイズに比例してメモリを消費するし
並列性も低くなる。