Whitespace
ナビゲーションに移動
検索に移動
Whitespace(ホワイトスペース)は、FORTH系のスタック指向なプログラミング言語の一つ。GPLにより配布されている。通常インタプリタ言語であり、スクリプト言語として用いられる事が多い。
概要[編集]
Edwin BradyとChris Morrisによって2003年4月1日に公開され、FORTHの様なスタック指向のプログラミング言語であり、チューリング完全であって、逆ポーランド記法(RPN)で記述される。公開直後から様々な言語でインタプリタが作られている。高水準言語であるながら低水準言語の特徴も併せ持ち、それでいて逐次コンパイルによって高速インタプリタが実現され、スクリプト言語としても高い処理速度を持つ。英国で開発された言語にもかかわらず高度に国際化されており、英語由来のコマンドが存在しない。用いる文字も と 、 の3つのみであり、ラテン文字未習者にとっても習得が容易である。尚、その他の文字は全て空白文字としてコメントアウトされる。通常コメントとして用いられるのは や 、 、 、 、 、 、 、 、 であり、やも用いられる。 補完機能が実装されたインタプリタは知られていない。
サンプルプログラム[編集]
以下のソースコードをインタプリタに入力すると、標準出力に文字列「Hello, world!」が表示される。
文法[編集]
Whitespaceの特徴はIMP (Instruction Modification Parameter)の使用で、各IMPのもとにコマンド、パラメータが用いられる。
数値[編集]
数値は整数値が利用可能で、恒に二進表示を用いて、 が0を が1をそれぞれ表し、終端記号は である。
IMP[編集]
IMPには以下の種類がある。 :スタック操作, :演算, :ヒープアクセス, :フロー制御 :入出力I/O
スタック操作[編集]
スタック操作のIMP の後に続けて +数値:数値をスタックに積む。 :スタックの一番上を複製する。 +数値:スタックの数値番目をコピーして一番上に積む。 +数値:スタックの数値番目を削除する。 :上位2つのスタックを交換する。 :一番上のスタックを捨てる。
演算[編集]
に続き :加算、 :減算、 :乗算、 :商、 :剰余
ヒープアクセス[編集]
:まずスタックから値を取り出しpopし、スタックからアドレスを取り出しpopしてヒープ領域 (永続的なメモリ)のそのアドレスにその値を書き込む。 :スタックをアドレスとしてpopし、ヒープ上のそのアドレスにある値をスタックに積む。
入出力I/O[編集]
に続き :文字コードとして出力。 :二進整数値として出力。 :スタックをアドレスとしてpopしヒープ上のアドレスの位置の一文字分の文字コードをスタックに積む。 :スタックをアドレスとしてpopしヒープ上のアドレスの位置の数値を終端記号である まで読みスタックに積む。数値は が0を が1をそれぞれ表すのであった。
フロー制御[編集]
この節はまだ執筆途中です。加筆、訂正して下さる協力者を募集中!