Trefungeエディタ

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

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

Trefungeとは

Trefungeは、1998年に作られたいわゆる難解プログラミング言語の1つです。

Funge-98と言われる一連の言語のうちの一つであり、Trefungeとはそのうち3次元のものを示します。

Funge-98に関する唯一の資料

特徴

記号1つにつき1つの命令を表し、記号は一列に並んでいるのではなく、三次元的に並んでいます。

すなわち、プログラムは記号の命令を1つずつ実行していくわけですが、実行する向きは上下左右に加えて手前・奥の全六方向に変更でき、3次元空間上を動き回ります。

また、大きな特徴として、自己変更的であるという点があります。後述のg命令やp命令は、プログラムのテキスト自体を参照したり変更したりします。ただし、ファイルそのものが変更されるわけではなく、あくまで実行中のみです。

言語仕様

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

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

2 3 5

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

2 3

になります。

また、ファイルの上下・左右・手前と奥はそれぞれループしています。したがって、プログラム空間の左端からさらに左へ行くと右端へ行くなどします。ファイルが空の状態で実行すると無限ループとなってしまうので、注意しましょう。

実行の最初の位置は左上(0, 0, 0)で、向きは右(1, 0, 0)になっています。

命令の一覧

ここでは、メジャーな命令のみ紹介しています。より詳細な情報を得るには、http://quadium.net/funge/spec98.htmlを参照して下さい。このマニュアルに載っていない命令でもサポートしているものがあります。

記号動作
実行の向き
<実行の向きを左(-1, 0, 0)にする。
^実行の向きを上(0, -1, 0)にする。
>実行の向きを右(1, 0, 0)にする。
v実行の向きを下(0, 1, 0)にする。
l実行の向きを手前(0, 0, -1)にする。
h実行の向きを奥(0, 0, 1)にする。
]実行の向きを90度右に回転する。Z軸中心(Z軸方向に影響はない)。
[実行の向きを90度左に回転する。Z軸中心(Z軸方向に影響はない)。
r実行の向きを逆にする。
xスタックからz,y,xを順にポップし、実行の向きを(x, y, z)にする。
?実行の向きを6方向のどれかにランダムに変更する。
条件分岐
!スタックをポップして、その値が0なら1をプッシュ、0でないなら0をプッシュする(論理否定)。
`スタックからb,aをポップして、a>bならば1、そうでないならば0をプッシュする。
_スタックをポップして、その値が0なら実行の向きを右に、0以外なら左にする。
|スタックをポップして、その値が0なら実行の向きを下に、0以外なら上にする。
mスタックをポップして、その値が0なら実行の向きを手前に、0以外なら奥にする。
wスタックからb,aをポップして、a<bならば[と同様に90度左に回転、a>bならば]と同様に90度右に回転、a=bならば何もせずに直進する。
その他のプログラムフロー
#次の文字の命令を実行しない。
;次に";"が出現するまでの文字列を無視する(コメント)。
@現在の実行ポインタを終了する(後述)。全てのポインタがなくなると実行を終了する。
q実行を終了する。
jスタックをポップして、その数だけ実行位置を先にジャンプする。1ならば、1個とばすので#と同じ。負の数を指定すると逆に飛ぶ。
kスタックをポップして、その数だけ次の命令を繰り返して実行する。
算術
0~9その数値をスタックにプッシュする。a~fは10から15。
a~f
+スタックからb,aを順にポップし、a+bの値をプッシュする。
-スタックからb,aを順にポップし、a-bの値をプッシュする。
*スタックからb,aを順にポップし、a*bの値をプッシュする。
/スタックからb,aを順にポップし、a/bの値をプッシュする。
%スタックからb,aを順にポップし、aをbで割ったあまりをプッシュする。
文字列
"次の"までを文字列とみなし、ASCIIコードを順にスタックにプッシュする。
'プログラムで次に現れた文字(スペースなどでもよい)を読み込み、そのASCIIコードをプッシュする。その文字は#のようにとばす。
sスタックをポップして、プログラムの次の位置をそれに書き換える('の逆)。その位置はとばす。
スタック操作
$スタックをポップする(その値は使用しない)。
:スタックをポップして、その値を2回プッシュする。
\スタックから2つポップして、順を逆にして2つをプッシュする。
nスタックを全て消去する。
プログラム書き換え
gスタックかz,y,xを順にポップして、プログラムの(x,y,z)の位置の文字のASCIIコードをスタックにプッシュする。ただしプログラムの左上は(0,0,0)です。
pスタックからz,y,x,aを順にポップして、プログラムの(x,y,z)の位置の文字のASCIIコードをaに置き換える。
入出力
,スタックをポップして、それをASCIIコードとみなして1文字出力する。
.スタックをポップして、その値を出力し、さらに半角スペースを出力する。
~1文字入力させ、そのASCIIコードをスタックにプッシュする。
&数値を入力させ、その値をスタックにプッシュする。
入出力
,スタックをポップして、それをASCIIコードとみなして1文字出力する。
.スタックをポップして、その値を出力し、さらに半角スペースを出力する。
~1文字入力させ、そのASCIIコードをスタックにプッシュする。
&数値を入力させ、その値をスタックにプッシュする。
マルチスレッド
t現在の実行ポインタを複製する。ただし、そのうち1つは実行の向きが逆になる。スタックも複製される。

操作

開いているプログラム中の文字は赤色の枠で表示されています。

エディタの操作

カーソル操作

カーソルは黄色の枠で示され、カーソルキー・PageUp/PageDownキーで移動させることができます。

PageUpは手前、PageDownは奥方向に移動しますが、X軸・Y軸・Z軸のどれであるかは現在の表示モードによって変わります。

表示モード

平面
F2,F3,F4キーを押すと、それぞれXY平面・XZ平面・YZ平面モードになります。その平面が画面手前を向いて表示されます。例えばXZ平面では、カーソルキーの上下はZ軸に対応し、PageUp・PageDownがY軸に対応します。
拡大・縮小
F7・F8キーで、拡大・縮小ができます。表示範囲を変更できます。
描画モード
F9キーを押すと、描画方式が切り替わります。初期状態では現在の平面モードに応じてカーソルと同平面上にある文字のみを表示します。一度押すと、XY・XZ・YZの3平面のいずれかにおいてカーソルと同平面上にある文字は全て表示します。さらにもう一度押すと、関係ない位置にある文字も全て表示します。もう一度押すと初期状態に戻ります。多くの文字を表示すると重くなるので注意しましょう。

向き変更文字の表示について

< ^ > v l hの6つの文字は、プログラムの実行の向きを変更する命令です。これらを分かりやすくするため、これらの文字はその文字を表示する代わりに矢印で示されます。画面の上下左右へ向かうものは上下左右の矢印で、手前に向かうものは「・」で、奥へ向かうものは「×」で示します。これらは、同じ文字でも、平面モードによって画面上の表示と対応するように変化します。

F11キーを押すと、この矢印表示を用いるか、文字をそのまま表示するかを切り替えることができます。

入力

通常のテキストエディタと同様に、キーボードから入力できます。ただし、半角文字しか入力できません。入力すると、カーソルは次に移ります。このとき移動する方向は、カーソルキーで移動したり「<」「^」「>」「v」「l」「h」を入力するとその方向に変わります。

入力した文字の削除は、半角スペースで上書きするか、Backspace(1つ戻って削除)・Delete(その場で削除)を使用します。

また、Insertキーを押しながらカーソルキー・PageUp/PageDownキーを押すと、コードをその向きへ向かって一つずらします。

また、Ctrlキーを押しながらカーソルキー・PageUp/PageDownキーを押すと、その方向へ実行方向を変更する文字(< ^ > v l h)を入力します。XY,XZ,YZのどの平面であるかにかかわらず、画面表示に応じた方向を指定することができます。

視点操作

画面を右クリックしてそのままドラッグすると、視点変更することができます。

ファイル操作

「ファイル」メニューから、「新規作成」「開く」「上書き保存」「名前を付けて保存」ができます。

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

ファイル形式はテキストファイルで、テキストファイルの「.txt」と、Trefungeの「.t98」が用意されています。中身は全く同じです。

3次元の領域をテキストファイルとして表す方法は、改行(0x0A)でy座標がひとつ進み、改ページ(0x0C)でz座標がひとつ進みます。

実行

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

実行

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

実行時には、下の部分に出力表示領域、右のほうに現在のスタックの状態(ステップ実行時)表示領域が出現します。

ステップ実行

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

停止

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

オプション

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

フリーズを検知する
プログラムが無限ループに陥ってエディタがフリーズした場合、一定時間経つとステップ実行に移行し、安全に停止させることができます。
警告を出す
プログラムによってセキュリティ上の危険が生じた際に、それを許可するかどうか訪ねます。

ファイル構成

trefunge.exe

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

readme.html

このファイルです。

howto.html

Trefungeプログラミングのコツなどを書いてあります。

samplesフォルダ

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

更新履歴

v1.0
2010-10-17。

使用モジュール

d3module