【単純なスクリプトコンパイラを作る 第一部】

アドベンチャーゲームのプログラムを作る際、
シナリオデーターとプログラムを分割したかったけど、結局分割できずに
シナリオデーターなどをプログラムの中に入れては居ないでしょうか。 そんな人の為の物です
なお、知り合いに教えるために作ったので、説明は殆どありませんし、出来が良くないです。

目的は、以下のことです。
(1)1文字インタープリター
(2)1文字スクリプトコンパイラ
(3)文字列の切りだしで簡単なコンパイラ

極力難しい専門用語は使わないようにして作っています。
文法もシンプルで、大きく分けて3つしかありません。
(1)ラベル
(2)計算式
(3)命令

もし、複雑な物を使いたい場合、
スクリプトコンパイラを使うに乗っている拙作の acc.exe を使うか、lexとyaccで作った方が良いと思います。

【単純なスクリプトエンジン(1文字インタープリター)】
スクリプトエンジンで、直接 txt を読み込む場合

【スクリプトコンパイラとスクリプトエンジンの分割】
なぜ、分けた方が良いか。

【文字列の切り出し】
よりわかりやすい書式にする

【実用的な仕様にする】
実用的な範囲に拡張する

ちなみに、scr シリーズの使用、改良、改悪は自由にしてください。
こんな物で良ければソースコードをそのままでクライアントへ納品してもらってもOKです。


【サンプル1】

:start
    r0=0
:loop0
    m 選択してください
    s r1 続ける,終了する
    i r1=1 exit
    m 続けます
    g loop0
:exit
    m 終了します
    e

【サンプル2】

start:
    r0=0
loop0:
    mes 選択してください
    select r1 続ける,終了する
    if r1=1 exit
    mes 続けます
    goto loop0
exit:
    mes 終了します
    exit


【サンプル3+α】

donovan氏用に簡単なコンパイラとVMを造ったが、どうやら簡単に理解出来た模様
まあ、さわってみてね。
キャラクターレイアーの表示位置を変えられるようにした。
VM側が、うざいくらいやることを警告してくるので、学習用には良いかも。
次はWin用のVMを作り、その後にTinyCを造る。
今回は、ソースが汚いんで、ソースの公開は無し。ごめんね。
●簡易型コンパイラ及びゲームエンジン(猿でも使えるコンパイラw)
    globalレジスタr0-r255
    globalstring s0-s255(256文字まで)
    即値0-255
    小文字と大文字を同列に扱う
    インデント可。
    中間言語のbinファイルのサイズがは65535byteまで

●コンパイラの使用方法
    testi soc3.txt e:soc3.bin

●ゲームエンジンの使用方法
    testj soc3.bin

●命令群
    長いんで、readme.txtを読んでね。
●動作
    全てのスクリプトを読み込みコンパイルをする
    ラベルの解消はコンパイルの最後に刈り取る


●どうやらdonovan氏は、if-elseif-else/endと関数を理解出来たようなので、スクラッチで作り直します。TyneCにしようかと思っております。
●windowsのコマンドラインプロンプト用
  DOWNLOAD