たけをです。

2005年2月17日(木)[19:39:42] に ”[haskell-jp:565] Re: yacc/lex for Haskell (オフトピック)” で
shelarcy さんは書いたのであった。

> ええと「C++ の設計と進化」によると、最初の C++ 実装である Cfront は、最
> 初薦められるままに YACC を使って書いていたけれど、最終的には YACC とは
> 相性の悪い再帰下降型のテクニックを大量に放り込んだハイブリッド型になっ
> たようです。

 なるほど…
 知られた話ですが、C/C++はtypedef等による文脈依存性があるので、
文脈自由文法が対象な、純粋なLR解析器だと扱いきれないんですよね。

> ちょっと検索して調べてみたところ、「YACC  は少しずつ言語の機能を追加しつつ
> 作っていく場合には楽だけど、仕様が決まっている場合にはそうでもない」とか
> 「あまり変わらない」といった意見もあるようですね。

 うーん、機能を追加しつつ作っていく…というのは、BNFを規定しなが
ら、というイメージなのですかね。確かに、そういう側面もあるのかな
とも思います。

 yacc等のツールで書いたら書いたで、そのツールの記述の制約を受ける
など面倒くさいところは出てくるので、なかなか、どっちがいいとは
言いづらいですよね。やっぱり。

> あと、Haskell の方面ではパーサジェネレータならぬ parser combinator という
> ものがあります。Parsec は実はこれにあたるのですが

 なるほど。。。Parsecですか。今このMLの過去ログをたどって、花谷
さんのユーザガイドの訳を読ませてもらっているところです。
 まだ良くわかってませんが、モナドを使ってHaskellでゴリゴリ再帰
降下パーザを書いていく感じでしょうか。…これはこれで、便利かも。
最初からHaskellの中で書けるのが嬉しいですね。

> 難しいという評判があるた
> め、 yacc/lex に相当するツールを求めているのならば薦めるべきではないかな
> と思って特に持ち上げませんでした。
(略)
> ちょっとジェネレータじゃないからグレーゾーンかな、って思ってしまって……。

 うーん、yacc/lexとかいう名前を出さずに、「Haskellでパーザを書く
のにいい方法は?」みたいな質問にしとけばよかったですか…

 いずれにしろ、参考になりました。ありがとうございます。

---
IMAI Takeo <usitukai / osk.3web.ne.jp>


--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/