Whitespace Interpreter


上段左からソース入力エリア, 実行結果出力エリア, デバッグ情報エリアです.

Tabキーの代わりに全角スペースを使います. Tabが使われたソースでも実行出来ます.

入力する場合は, 実行時に右下のテキストボックスに入力してenterボタンを押して下さい.

Whitespaceのコマンドは以下の表の通りです.

ここで, {Num}や{Label}は[Space]もしくは[Tab]を1個以上並べ[LF]を最後に付加したものです. 数値を表す場合, 一文字目が[Space]の場合正の整数, [Tab]の場合負の整数になります. 以降は[Space]を0, [Tab]を1と見なした2進数として考えます.

例えば, [Space][Tab][Tab][Tab][Space][LF] は +1110 つまり, 14を表します.

Labelに関しては, そのような文字列のラベルを付けるだけなので, 他に同じラベルが出現しなければ問題ありません.

スタック操作デバッグ名ソース説明
入力push[Space][Space]{Num}スタックにNumをpushします.
複製dup[Space][LF][Space]スタックの一番上にある数値を複製してpushします.
コピーcopy[Space][Tab][Space]{Num}Num番目の数字をコピーしてスタックにpushします.
スワップswap[Space][LF][Tab]スタックの上2つを入れ替えます.
廃棄discard[Space][LF][LF]スタックの1番上の値を廃棄します.
スライドslide[Space][Tab][LF]{Num}2番目からn番目までのスタックの値を廃棄します.
算術計算デバッグ名ソース説明
加法add[Tab][Space][Space][Space]スタックの上2つの数値を足してpushします.
減法sub[Tab][Space][Space][Tab]スタックの1番上を2番目の数から引いた数をpushします.
乗法mul[Tab][Space][Space][LF]スタックの上2つの数値を掛けてpushします.
除法div[Tab][Space][Tab][Space]スタックの1番上を2番目の数で割った商をpushします.
剰余mod[Tab][Space][Tab][Tab]スタックの1番上を2番目の数で割った剰余をpushします.
ヒープ操作デバッグ名ソース説明
ヒープ書込heap_w[Tab][Tab][Space]スタックの1番上の数値を上から2番目のアドレスのヒープ領域に書き込みます.
ヒープ読込heap_r[Tab][Tab][Tab]スタックの1番上の数値のアドレスの値を読み込み, スタックにpushします.
フロー制御デバッグ名ソース説明
ラベルlabel[LF][Space][Space]{Label}現在の位置にラベル{Label}を設定します.
コールcall[LF][Space][Tab]{Label}{Label}の位置にジャンプします. return命令に出会うとこの位置に戻って来ます.
(サブルーチンの呼び出し)
ジャンプjump[LF][Space][LF]{Label}{Label}の位置にジャンプします.
零ジャンプjump_zero[LF][Tab][Space]{Label}スタックの1番上の値が0だったら{Label}の位置にジャンプします.
負ジャンプjump_neg[LF][Tab][Tab]{Label}スタックの1番上の値が負だったら{Label}の位置にジャンプします.
リターンreturn[LF][Tab][LF]callされた位置に戻ります.
終了exit[LF][LF][LF]終了します.
入出力デバッグ名ソース説明
文字出力char_o[Tab][LF][Space][Space]スタックの一番上の値のASCIIにあたる文字を出力します.
数値出力num_o[Tab][LF][Space][Tab]スタックの一番上の値を数字として出力します.
文字入力char_i[Tab][LF][Tab][Space]入力された文字のASCIIコードをスタックにpushします.
数値入力num_i[Tab][LF][Tab][Tab]}入力された数値をスタックにpushします.