【文字の切りだし】

より見やすい言語にしていきたいと思う

●各命令
  いままで 1 文字だった物を、文字列にして、よりわかりやすくする。

  ○レジスタセット(let,命令番号0x00)
    レジスタ番号 演算子 数字、もしくはレジスタ番号(即値/レジスタ番号)
    r20=100
    r20=r10
    r20+r30
    r20-100
    r20/5
    r20*5

  ○メッセージ
    文字と文字の区切りに space/tab を用いるので、メッセージ中に半角の space/tab は使用できない
    mes メッセージ

  ○ジャンプ
    goto start

  ○条件分岐
    if r20=10 start
    if r20!10 start
    if r20<10 start
    if r20>10 start
    if r20<=10 start
    if r20>=10 start

  ○終了命令
    exit

  ○grphロード
    load filename
    この命令は、サンプル命令なのでファイルネームを表示するだけです

  ○選択肢
    select r20 選択肢1,選択肢2,選択肢3

  ○ラベル
    文字列の最後に : がつく場合。行頭でなくても良い
    start:
    end:

  ○コメント
    ;コメント


●みやすい文法にする
  新しい変更点を記する

    1)命令を1文字ではなくす
      m メッセージ → mes メッセージ

    2)ラベルの ':' をラベル名の後に付ける
      :label → label:

  1)は文字列の切りだしを考えればいい。
  2)は、先の文字を判断する必要が出てくる。たとえば、:i と言うラベルは現在ではちゃんと処理される。
  しかし、i: とすると、i が if命令の i なのかラベルの i なのかは i の次の文字が ':' かどうかを判別しなくてはならない。
  1)の判別のために文字列を切り出すことをトークンの切りだしと言う。これを字句解析という。
  2)の文脈の判断は構文解析という。


●文字列の切りだし
  文字の切り出しのために、以下の物を設定する。
  これらを利用して、文字列の切り出しを行う。
  ●文字
    ○英字
      abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ の中の1文字
      半角のアルファベットの中の1文字

    ○数字
      0123456789 の中の1文字
      半角の数字の中の1文字

    ○アンダースコア
      '_' 1文字

    ○全角文字

  ●文字列
    文字が他の物に区切られず続く物。この言語では他の種類の文字が混じっても良い。
    例)abc
    例)0124
    例)a0123
    例)__a_
    例)あいうabc

  ●区切
    space/tab

  ●終了記号
    eof(0x1b)

  ●改行コード
    cr,lf
    lf,cr
    cr
    lf

  ●演算子
    <=
    >=
    <
    >
    !
    =
    +
    -
    /
    *

  ●ラベル記号
    :

  ●コメント記号
    ;

  ●パラメーターの区切り記号
    ,

  ●その他の記号
    エラーを発生する


●文字列の切りだし2
  load 命令のパラメーターはファイルネームである。
  しかし、: がラベル記号として登録されていると、そこで文字列を切られてしまう。
  同様に \ など、登録されていない記号でもそうなる。
  そこで、トークンの切りだし命令を2種類用意して対応する。
  ファイル名、メッセージ、選択肢はこちらを使用する。
  選択肢があるので、eof(0x1b) cr lf ',' を区切りとする

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

  >scr02.exe scr02.txt scr02.bin[ret]
  でtxtをコンパイルする。
  そして、
  >scr01a.exe scr02.bin[ret]
  でbinを実行する。
  scr01a.c は前章の物と全く同じだ。なお、ソースは単独でコンパイルできるように作っている。