Common Lisp で Lispインタプリタを作ってみた

投稿者: | 2014年12月17日

最近、Parserを書く or 書いたら楽になりそうな仕事が多いのでHaskellのParsecみたいなライブラリを探していたら

というアドバイスをもらったので、早速mpcの使い方を学びつつLispインタプリタ(もどき)を作ってみました。

Write_Yourself_a_Scheme_in_48_Hours でParsecの使い方を覚えたので、mpcでも同じような方針で Lispインタプリタを実装してみました。

なお、幾つか手を抜いています。

  • cons, equal, eq の実装がない
  • cond の実装がない
  • 例外処理をまともに実装していない

あたりがそうです。

コードはbitbucketに上げてみました。

https://bitbucket.org/lambda_sakura/lisp-parser/

使い方で困ることはなかったのですが、Parsecで最初にこの手のmonadic parserを覚えたので

  • カリー化のためにalexandriaのcurryを利用する
  • parsecだと標準であるletterとかの便利な関数がない

など細かいところが気になりました。
ほとんどが言語仕様の差なので慣れれば問題ないでしょう。
どうしても気になるならマクロを書けば解決するでしょう。

今後文字列解析をCommon Lispでやるならmpcを積極的に活用してみようかと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です