Befungeエディタ

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

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

Befungeとは

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

特徴

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

プログラムは記号の命令を1つずつ実行していくわけですが、実行する向きは上下左右に変更でき、テキストの上をあちらこちらと駆けまわります。

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

言語仕様

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

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

2 3 5

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

2 3

になります。

また、ファイルの上下と左右はそれぞれループしています。したがって、ファイルの左端からさらに左へ移動すると、右端に移動します。ファイルが空の状態で実行すると無限ループとなってしまうので、注意しましょう。

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

命令の一覧

記号動作
<実行の向きを左にする。
^実行の向きを上にする。
>実行の向きを右にする。
v実行の向きを下にする。
_スタックをポップして、その値が0なら実行の向きを右に、0以外なら左にする。
|スタックをポップして、その値が0なら実行の向きを下に、0以外なら上にする。
?実行の向きを上下左右のどれかにランダムに変更する。
#次の文字の命令を実行しない。
@実行を終了する。
0〜9その数値をスタックにプッシュする。
"次の"までを文字列とみなし、ASCIIコードを順にスタックにプッシュする。
,スタックをポップして、それをASCIIコードとみなして1文字出力する。
.スタックをポップして、その値を出力し、さらに半角スペースを出力する。
~1文字入力させ、そのASCIIコードをスタックにプッシュする。
&数値を入力させ、その値をスタックにプッシュする。
+スタックからb,aを順にポップし、a+bの値をプッシュする。
-スタックからb,aを順にポップし、a-bの値をプッシュする。
*スタックからb,aを順にポップし、a*bの値をプッシュする。
/スタックからb,aを順にポップし、a/bの値をプッシュする。
%スタックからb,aを順にポップし、aをbで割ったあまりをプッシュする。
`スタックからb,aを順にポップし、a>bでなら1を、そうでなければ0をプッシュする。
!スタックをポップして、その値が0なら1を、0以外なら0をプッシュする。
$スタックをポップする(その値は使用しない)。
:スタックをポップして、その値を2回プッシュする。
\スタックから2つポップして、順を逆にして2つをプッシュする。
gスタックからy,xを順にポップして、プログラムの(x,y)の位置の文字のASCIIコードをスタックにプッシュする。
ただしプログラムの左上は(0,0)です。
pスタックからy,x,aを順にポップして、プログラムの(x,y)の位置の文字のASCIIコードをaに置き換える。

操作

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

エディタの操作

カーソル操作

各ファイルでは、ピンク色のカーソルがあり、カーソルキーやマウスで移動させることができます。

また、マウスでドラッグしたり、Shift+カーソルキーを使うことで、複数マスの範囲選択をすることができます。このときできる操作は、削除と範囲移動です。

範囲移動は、範囲選択をしているときにCtrl+カーソルキーを押すと、選択部分全体をその方向にずらすというものです。

入力

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

また、Insertキーを押すと固定モードとなり、入力した後にカーソルが移動しません。もう一度Insertキーを押すと解除できます。

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

ファイル操作

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

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

その他の操作

F1キーを押すと、現在カーソルがある文字のASCIIコードを表示します。

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

実行

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

実行

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

ステップ実行

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

停止

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

ブレークポイント

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

オプション

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

警告を出す
スタックが空の状態でポップしようとすると0がポップされることになっていますが、これはバグの原因になります。これをチェックしていると、このようなときに、プログラムの流れを止めずに「スタックが空です。」とメッセージを出します。
スタックを表示
実行時、スタックの中身を表示します。
危険な文字を置き換える
ソースコードがプログラムによって書き換えられたとき、0x00(NULL), 0x0A,0x0D(改行)が出現すると、プログラムもテキストであるので不具合が生じます。これにチェックすると、これらの文字を0xFF,0xFE,0xFDで置き換えます。この場合、これらの文字が代わりに使えなくなります。

フリーズを検知する
プログラムが無限ループに陥ってエディタがフリーズした場合、一定時間経つとステップ実行に移行し、安全に停止させることができます。

ファイル構成

befunge.exe

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

readme.html

このファイルです。

howto.html

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

filesフォルダ

中には起動に必要なファイルが入っています。buttons.bmpを編集すると、ツールバーのアイコンを変更することができます。

samplesフォルダ

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

更新履歴

v1.0
2010/08/05。
v1.1
2010/08/09。「フリーズを検知する」で、反応する時間を10秒から8秒に変更。このとき、ステップ実行に移行した直後にそこまでの実行結果が反映されなかったバグを修正。
v1.2
2010/10/15。「Shift+F5」(ステップ実行)のショートカットキーに対応。BF(0x8)に対応。