上段左からソース入力エリア, 実行結果出力エリア, デバッグ情報エリアです.
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します. |