Perl で S 式

わけあって Perl で S 式をいじっているのだが、最初 Data::SExpression というそのままのパッケージがあると思ったら、どうもシンボルに許される文字に日本語が入っていないらしく、ChaSen の辞書(IPADIC)は扱えないことが判明。そういえば shuya-a さんも「Python で IPADIC の S 式パーズするときシンボルに日本語使えるように書いた」と言っていたのを思い出した。

ないならどうするかなーということで Parse::RecDescent を使って書いてみる。Parse::RecDescent は柔軟なパーザで自分で文法を定義したら入力がその文法で解析できるかどうか調べてくれるもの。Damian Conway が書いているモジュールとして前々から名前は聞いていて、Perl データマンジングにもこのモジュールの紹介が書いてあったので、一度は使ってみてもいいかなと。しかしこのモジュールドキュメントが詳しいのはいいのだが、恐ろしく長い……。

というわけでちょろっと書いてみたのだが、なんか S 式パーザになってくれなかったので、時間もないし固定フォーマットで読んでお茶を濁すことに……。この程度なら正規表現でも書けたか。(と、ここまで以前 shuya-a さんと話していた通りの展開になった。) 最初 Mac OS X 上で書いていたのだが、いざ動くものを Linux に持ってくると、Parse::RecDescent のバージョンが違う(Mac OS XFink で入れたものは 1.80 で Gentoo LinuxPortage から入れたものは 1.94)せいか、動かない。なんとか直せたからいいようなものの……。