BrainfuckとWhitespaceのインタープリタをCで書いてみた。
Brainfu*k
寝起きの頭の活性化に。+-.,<>[]の8文字で書く言語。見出しに*が使えないので伏せられない。
入力のchar配列をなぞって実行する。エラー処理とかはしていない。メモリを1024byte分しか確保してないので1024回ほど>すると落ちるハズ。解釈される8文字以外の文字が現れた場合はどうなるかわからない。Aを出力するプログラムとHelloworldを出力するプログラムのみ動作確認。
感想
処理系を作るのは意外と簡単だった。2時間程度。
Witespace
昼寝後の頭の活性化に。半角スペース、水平タブ、改行(LF)の3文字で書く言語。
本家で公開されているチュートリアルには詳しい動作定義がされていなくて、仕様はコードを見ろとのこと。しかし本家コードはHaskellなのでカンニングできない\(^o^)/。仕方がないので、サンプルコードを動作させながら実行して動作を固めていく。特にヒープ操作と入力の部分がよくわからなかったので、これで合っているのかはわからない。まぁ一応動く。もちろんエラー処理なんかしていない。
動作を確認したのはチュートリアル下のカウンタープログラムとHello, World!とフィボナッチ。Hello, user!とCalculatorは入力がうまく動かない*1。
そんなわけでこのでテストしながらwhitespaceのコードを書かないようにしてね。あとTwitterで公開した時点のものは致命的なバグが残っているのでご注意を。
なんかテストコードを書くぐらいはできるようになった。
感想
そのうちWhitespaceに翻訳するプログラムでも書いてみたい。デバッグ含めて6時間程度。
雑記
こんなゴミコードでよければ煮るなり焼くなり好きにどうぞ。
Whitespaceにはその気が向けばWikipediaに載っていない部分についてまとめるかも。
*1:自分で文字読んで出力するプログラム書いたところ動いたんだけど。