【単純なスクリプトエンジン(1文字インタープリター)】

スクリプトエンジンで、直接 txt を読み込む場合


●言語仕様
  レジスタを r0 番から r255番まで作る。
  有効数字は 0 〜 255。
  インタープリター形式。
  命令やパラメーターの区切りには space/tab を使いう。選択肢同士の区切りは ',' を使う。
  行の終わりは改行で終わる ( 参考までに c 言語は ';' で終わる )。
  行は、ラベルの行と、命令の行に分かれる。
  スクリプトエンジンはコマンドライン用。


●細かい使用   ラベルの解決は毎回する。
  データーエリアと命令エリアは分岐しない
  最初の1文字を読み込めば、命令の見当が付き、殆ど文脈から判断することはない。

●命令リスト
  ○メッセージ(message)
    文字と文字の区切りに space/tab を用いるので、メッセージ中に半角の space/tab は使用できない
    m メッセージ
  ○レジスタセット(let)
    r レジスタ番号 演算子 数字、もしくはレジスタ番号(即値/レジスタ番号)
    r r20 = 20
    r r20 = r10
    r r20 + r30
    r r20 - 100
    r r20 / 5
    r r20 * 5
  ○ラベル(label)
    行頭で : がつく場合のみ
    :start
    :end
  ○ジャンプ(goto)
    g start
  ○条件分岐(if)
    i r20 = 10 start
    i r20 > 10 start
    i r20 < 10 start
    i r20 ! 10 start
  ○終了命令(exit)
    e
  ○grphロード
    f filename
    この命令は、サンプル命令なのでファイルネームを表示するだけです
  ○選択肢(select)
    s r20 選択肢1,選択肢2,選択肢3
  ○コメント
    ;コメント


●処理の流れ
  (1) ファイルをメモリーに読み込み、ファイルの最後に eof を付ける
  (2) eof の場合、終了
  (3) 行頭が : の場合にはラベル。その場所では改行を探し、次の行へ行き (2) へ戻る
  (4) space/tab の読み飛ばし
  (5) e の場合、終了
  (6) 改行コードの場合、次の行へ行き (2) へ戻る
  (7) ; の場合には改行を探し、次の行へ行き (2) へ戻る
  (8) g ラベルを読み込み、行の最初から該当する行を探して、現在の行をそこへ移動させる
  (9) i の場合には条件を調べて、条件が合わない場合、行の残りを全てスキップし、次の行へ行き (2) へ戻る。
    条件が合う場合ラベルを読み込み、行の最初から該当する行を探して、現在の行をそこへ移動させる
  (10)m l f s の場合にはおのおのの命令実行後、次の行へ行き (2) へ戻る


●注意する点
  命令やパラメーターの区切りを気を付けること。
  たとえば、s 命令の選択肢同士は ',' で区切られているが、他の場合には space/tab で区切る。


●サンプルソース(windowsのコマンドラインプロンプト用)
  DOWNLOAD


●改良できる場所1
  r 命令を改良する。
  r 命令では、左辺に必ずレジスターが来るので、
  r r20 = 20
  ではなく r を無くして
  r20 = 20
  とした方が記述性が上がる


●改良できる場所2
  1で改良した部分だが、
  r20 = 20
  ではなく
  r20=20
  とした方が記述性が上がる。space/tab のスキップをなくせばいい。
  同様に i 命令の
  i r20 = 20 label
  を
  i r20=20 label
  に変更する。
  そして、'<=' と '>=' の記述を出来るようにする。
  幸い、'<' や '>' の後にはレジスタか即値しか来ないので、次の文字をチェックするだけだ。


●サンプルソース(windowsのコマンドラインプロンプト用)
  DOWNLOAD


●改造後の言語仕様
  行は、ラベルの行、命令の行、計算式の行の三種類に分かれる
●改造後の命令リスト
  ○フラグセット(let)
    レジスタ番号 演算子 数字、もしくはレジスタ番号(即値/レジスタ番号)
    r20=20
    r20=r10
    r20+r30
    r20-100
    r20/5
    r20*5
  ○条件分岐(if)
    i r20=10 start
    i r20>10 start
    i r20<10 start
    i r20>=10 start
    i r20<=10 start


●大きな懸念事項
  毎回、命令の為に文字を読み込むので実行スピードが遅くなる。
  ラベルの解決を毎回し直すので、g 命令と i 命令の実行スピードが遅くなる。