ゲームに簡単なプログラムを組み込むためにスクリプト言語とそれを実行するインタープリタをC++で作ってしまおうというコーナーです。
プログラムのソースコードを実行可能な形式に変換する基礎的な話を一通りしたのでその話ををまとめます。
今までで、人間の書いたソースコードを字句解析でコンピュータにもわかる字句(トークンというらしいですね)に変換し、更に構文解析によりどのように実行するのかがわかる解析木を作る話をしました。
ここらで小手調べに今まで例に使っていた簡単な数式のインタープリタを作ろうと思ったのですが、ちょっとその前に今までの話を簡単にまとめておこうと思います。
まずファイルを読み込んで、その結果の文字列を字句解析(これを行う部分はスキャナと呼ばれるそうですね。ファイル読み込みを兼ねていることが多いです)に渡して、その結果のトークン列を構文解析(これを行うのはパーサと呼ばれるそうで)に渡して、その結果の木構造を実行環境である、今回はゲームが受け取って、実行するわけです。
ここでコンパイラならば更に木をコンピュータが実行できる形式に変換するという作業が入って完了となります。
で、ここではゲームに使うという事情があるので、それにあわせてゲームに使うようなスクリプトの使い方ができるようなスクリプトにしたいわけです。
ゲームを作りたいから作ってみましたなんて中途半端な心構えでも使えるのはもちろんのこと、いつどんなスクリプトが使われるかわからんという事情も考慮する必要があります。
例えば、スライムが10匹出てきても、行動パターンは同じはずなので、スライムのスクリプトを読み込むのは1回で充分で、わざわざ個別にスライムスクリプトを10回読み込んだりせず、一度読み込んだものをスライムみんなで分け合えばよいのです。
ですから、変数の値は個別に持っておかなければいけないとして、木構造までは共通で持っておけるわけです。
似たようなことは画像に対しても言えるので、画像やらスクリプトを解析した結果の木などを分け合って使うauto_resourceなんてのを作ってみました。
auto_resourceが本当によい設計なのかはわかりませんが、MifuminScriptは今後auto_resourceを前提に作ってゆくことにします。
すなわち、木構造を作るまでの段階とそれを実行する段階をはっきり分けて作ります。