Whitespaceエディタ

Whitespaceeエディタは、プログラミング言語Whitespaceの開発環境です。

逆に、

  1. Whitespaceとは
  2. 操作
  3. ファイル構成
  4. 更新履歴

Whitespaceとは

Whitespaceは、2003年くらいに作られた難解プログラミング言語の1つです。

特徴

Whitespace最大の特徴は、3つの文字しか使わないということです。しかも、その3つの文字とは半角スペース・タブ・改行です。他の文字は全て無視されるので、普通の文章に混ぜてプログラムを書けるかもしれません。

言語仕様

Whitespaceには、符号付き整数のスタックが1つだけあります。スタックとは、値を順番に積んだり(追加したり)取り出したりできるというものです。値をスタックの一番上に積むことをプッシュといい、一番上を取り出すことをポップといいます。

例えば、空のスタックに2・3・5を順番に積むと、スタックは

2 3 5

という状態になります。ここでポップすると、スタックは

2 3

になります。

さらに、ヒープアクセスというものがあります。実はよく分からないのですが、整数を要素とした連想配列で、値も整数です。これは、整数を変数名とした変数であると思うとよいでしょう。

また、ラベルが存在します。ラベルがあると、他のところからラベルに実行位置を移動することができます。また、サブルーチンもあり、これも実行位置がラベルの位置に移動しますが、サブルーチンが終了すると元の位置に戻ることができます。

命令の表し方

Whitespaceは、半角スペース([Space])、タブ([Tab])、改行([LF])の3つの文字のみを使用して全てを表します。そこで、命令の表し方を解説します。

命令はIMP命令名に分かれ、IMPと命令名を続けて書きます。たくさんある命令をIMPで大きく分類し、その中から具体的な命令を選ぶという感じです。

例えば、IMPが[Tab][Space]で、命令名が[Space][LF](掛け算)だとすると、命令全体は[Tab][Space][Space][LF]と表されることになります。

さらに、一部の命令には引数が必要です。これは、命令に与えるパラメータで、命令の後に続けて書きます。引数には数値ラベルの二種類があります。

数値の表し方は、まず値が+(正)なら[Space]を、-(負)なら[Tab]を書き、その後はビットが0なら[Space]、1なら[Tab]として二進数で書きます。例えば、25(二進数で+11001)なら[Space][Tab][Tab][Space][Space][Tab]と書き、-18(二進数で-10010)なら[Tab][Tab][Space][Space][Tab][Space]と書きます。終了は[LF]です。

ラベルの場合は、自由な[Space]と[Tab]の組み合わせです。つまり、この二種類の文字を組み合わせて自由にラベル名を作るということです。これも[LF]で終了です。

IMPの一覧

IMPは5種類あります。

IMP意味
[Space]スタック操作
[Tab][Space]算術
[Tab][Tab]ヒープアクセス
[LF]フローコントロール
[Tab][LF]入出力

命令の一覧

[Space] スタック操作

命令引数動作
[Space]数値引数の数値をスタックにプッシュする。
[LF][Space]なしスタックの一番上を複製する。
[Tab][Space]数値スラックの上から(数値)番目をコピーして一番上に置く。
[LF][Tab]なしスタックの一番上とその次を交換する。
[LF][LF]なしスタックの一番上を破棄する。
[Tab][LF]数値スタックの一番上をそのままに、その次から(数値)個を破棄する。

[Tab][Space] 算術

算術では、スタックを2つポップし、その2つについて計算して結果をスタックにプッシュします。

引き算や割り算のように数値の順番が関係あるものについては、先にポップしたほう(一番上にあったほう)が左側にきます。

命令引数動作
[Space][Space]なし足し算
[Space][Tab]なし引き算
[Space][LF]なし掛け算
[Tab][Space]なし割り算
[Tab][Tab]なし割った余り

[Tab][Tab] ヒープアクセス

命令引数動作
[Space]なしストア(スタックから順にx,yをポップし、y番目のヒープ領域にxを書き込む)
[Tab]なしリトリヴ(スタックからxをポップし、x番目のヒープ領域の値をプッシュする)

[LF] フローコントロール

フローコントロールは、プログラムの流れ(ラベル・条件分岐など)に関する命令です。

命令引数動作
[Space][Space]ラベルラベル(その場所をラベルにする)
[Space][Tab]ラベルサブルーチンとしてラベルの場所に移動する(終了後戻る)
[Space][LF]ラベルジャンプ(ラベルの場所に移動する)
[Tab][Space]ラベルスタックをポップして、0ならばジャンプする。
[Tab][Tab]ラベルスタックをポップして、0でないならばジャンプする。
[Tab][LF]なしサブルーチンを終了して元の場所に戻る。
[LF][LF]なしプログラムを終了する。

[Tab][LF] 入出力

命令引数動作
[Space][Space]なしスタックをポップして、その数値をASCIIコードに持つ文字を出力する。
[Space][Tab]なしスタックをポップして、その数値を出力する。
[Tab][Space]なしユーザーに一文字入力してもらう。スタックからポップして、その値の位置に入力結果のASCIIコードをストアする。
[Tab][Tab]なしユーザーに数値を入力してもらう。スタックからポップして、その値の位置に入力結果をストアする。

操作

Whitespaceエディタでは、複数のファイルを同時に開くことができます。

エディタの操作

カーソル操作・スクロール

カーソルは青い線で表されます。上下キーで移動し、またマウスクリックでも移動できます。スクロールは、マウスホイールや、Home/Endキー、PageUp/PageDownキーにも対応しています。

入力

スペースキー、タブキー、エンターキーの3つを使って入力します。「ヘルプを表示する」の設定を利用する場合には、画面の右側にヘルプが表示されます。

テキストエディタに[Space]、[Tab]、[LF]を使うのと同じように入力できます。ヘルプを表示する場合、IMPを入力中の際にはIMPの一覧、命令を入力中の場合には命令の一覧が表示され、数値・ラベルを入力中の場合にはそれが表示されます。

入力したコードは、スペース・タブ・改行そのままではなく1行1命令として各命令の意味を同時に表示します。

また、命令と命令を区切るために空白をShift+Enterで入力することが可能です。これは、実行時には無視されます。BackSpaceキーでカーソルの前、Deleteキーでカーソルの後の命令を削除します。

入力を途中でやめたい場合、Escキーを押すと中止されます。

命令を入力した後、続けて数値を入力する場合は、0〜9のキーを使う方法と、スペースキーとタブキーを使ってプログラムそのままで入力する方法があり、両方使うことができます。ラベルを入力する場合は、プログラムと同様にそのまま入力します。どちらもエンターキーで入力完了します。

ファイル操作

「ファイル」メニューから、「新規作成」「開く」「上書き保存」「名前を付けて保存」「テキストファイルを出力」ができます。「上書き保存」は、Ctrl+Sのショートカットキーが使用可能です。

また、ウィンドウにファイルをドラッグ&ドロップすることでもファイルを開くことができます。

ファイル形式は二種類あります。プログラムは、内部で独自形式で扱われています。「上書き保存」「名前をつけて保存」では、この独自形式で扱われます。拡張子は.wsbになります。「テキストファイルを出力」では、編集したものを、Whitespaceのソースコードとして出力します。

ファイルを開く場合は、両方の形式を開くことができます。拡張子が.wsbの場合独自形式として、それ以外の場合はテキストファイルのソースコードとして開きます。

また、現在開いているタブを閉じるには、タブを右クリックして「閉じる」を選択します。

実行

実行に関するコマンドは、「実行」「ステップ実行」「停止」の3種類があります。

実行

普通に現在開いているコードを実行します。F5キーでも実行することができます。

ステップ実行

一命令ずつ実行する方法です。Shift+F5でもステップ実行できます。Enterキーを押すと次に進みます。この状態で「実行」すると、続きから通常の実行を行ないます。

停止

ステップ実行を中止したり、また、実行すると出てくる出力欄などを消去します。

ブレークポイント

編集時、F9キーを押すとその地点をブレークポイントに設定します。通常の実行中でも、ここを通るとステップ実行に切り替わります。同じ場所でF9キーを押すと、解除できます。

オプション

メニューの「実行」で、次のオプションが設定できます。

警告を出す
スタックが空の状態でポップしようとすると、プログラムの流れを止めずに「スタックが空です。」とメッセージを出します。この場合0がポップされます。
スタックを表示
実行時、スタックの中身を表示します。
フリーズを検知する
プログラムが無限ループに陥ってエディタがフリーズした場合、一定時間経つとステップ実行に移行し、安全に停止させることができます。

ファイル構成

whitespace.exe

ソフトの本体です。このファイルを起動すると、ソフトが起動します。

readme.html

このファイルです。

samplesフォルダ

Whitespaceのコードのサンプルがいくつか入っています。

更新履歴

v1.0
2010/10/05。