土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

Tsukasa4U開発日記 1

 あけましておめでとうございます。今年もよろしくお願いします。

 2018年は昨年に引き続きUnityの勉強を継続していく予定で、技術書典4にサークル当選したら、シェーダー本の続編を作るつもりでいます。ただ、それはサブ目標で、今年のメインはUnity版司エンジン「Tsukasa4U」の完成です(タイトルは今決めました)。

 昨年初頭にようやくRuby版の司エンジンが安定してきたものの、その後開発が止まってしまっていたのを反省し、今年は年始から開発を再開しています。こちらのブログでも、時々こんな風に開発記録を書ければと思っています。

 実は、去年の中頃にもUnityへの移植を進めていて、それはいったん形になったのですが、あまりにもいびつな設計になってしまったため、没にしました(引き継げるコードは引き継ぐ予定です)。以下これをプレ版と呼称します。

 Ruby版の司エンジンは、Rubyの内部DSLとして実装しており、プレ版もそれに準じてC#の内部DSLとして実装しました。が、元々Rubyのパーサー解析能力とラムダコンテキストに強く依存しているRuby版をそのままC#に移植するのは無理があり、不完全な物しか作れませんでした。

 今回は内部DSL化をすっぱり諦め、Tsukasaスクリプトは、当該のファイルが評価された時点で全文をパースして抽象構文木(AST)化することにします。パースにはANTLR4で生成したジェネレーターを使うつもりです。というわけで、まずはANTLR4の習得からスタートします(道のりが遠いな……)。

 ANTLR4自体は以前もちょっとだけ触っていたので、セットアップ自体は問題なくできる……と思っていたら、なんとANTLRのVS用プラグインが、現時点ではVisualStudio2017に対応していないようで、vs2015のインストールからやる必要がありました……。

 しかしまあ、パーサジェネレーターから作るのであれば、本当に自分の好きなように言語仕様を構築できるわけで、Ruby版よりずっとすっきりした構文になるのではないかと思っています。次回からは、Tsukasaスクリプトの言語仕様について考えていきます。