書くのも読むのも難しい Grass 言語のインタプリタを書きました。Rust 実装です。
cargo install --git https://github.com/todays-mitsui/rusty-grass.git でインストールして遊べます。
モチベーション
Grass 言語は言語仕様がカッチリしていて、かつ難解でいかにも面白げなのでいつかちゃんと理解していと考えていました。
しかし、狙った文字列を標準出力に出すのも一筋縄ではいかない言語仕様なのでインタプリタを叩きながら理解するのもなかなか難しい。
ふと思ったのが『これインタプリタの実装を自分でやるほうが分かりよいのでは?』ということでした。
参考にしたのは Grass 言語の作者である UENO Katsuhiro さんの 公式ドキュメント と、 id:susisu さんの JavaScript 実装 Grass-JS です。
実際に実装をやってみると Grass コードのパーザや隠れた状態を表現するための構造体をすべて自作することになるので理解が深まりました。実装してよかった。
実行方法とサンプルコード
インストールが完了すると grass コマンドが使えるようになります。
$ grass path/to/progfile
とすると path/to/progfile のコードを実行できます。
リポジトリにはサンプルコードを含めています。例えば HelloWorld のコードは rusty-grass/example/helloworld.grass これです。
まとめ
難解で、楽しかった。
私からは以上です。