BFmetaのページ

Brainf*ckのシンプルさを失わずにリフレクションを可能にしたBrainf*ckの拡張、BFmetaの公式ページです。

Brainf*ckとの違い

配列の最初にソースコードが埋め込まれ、配列の値を書き換えることで命令を動的に書き換えることができるようになっています。
また、プログラムの終了条件がヌル文字に到達することに変更されています。

言語仕様

双方向に無限長の、符号なし1byte整数型の配列の0番地から順にソースコードがバイト列として読み込まれる。
配列はソースコードが終わったあとと、負番地の領域はすべて0で初期化される。

各命令は1byteから成る。
Brainf*ckに存在する命令の意味はBrainf*ckと同じ。
各命令が実行されたあと、プログラムポインタはひとつ進められる。

+ :
データポインタの指す値を1増やす
- :
データポインタの指す値を1減らす
> :
データポインタをインクリメントする
< :
データポインタをデクリメントする
[ :
もしデータポインタの指す値が0なら、プログラムポインタを対応する]にセットする。対応する]が存在しないときの動作は処理系依存。
] :
もしデータポインタの指す値が0でないならプログラムポインタを対応する[にセットする。対応する[が存在しないときの動作は処理系依存。
. :
データポインタの指す値を文字として標準出力に出力する
, :
標準入力から1バイト読み込み、データポインタの指す場所に代入する
\0(ヌル文字) :
プログラムを終了する
それ以外 :
何もしない

サンプル

Hello World!

[>]<<<<<<<<<<<<<[.>]Hello World!

処理系の入手

Rubyによるインタプリタ

primenumber/BFmeta | GitHub

C++によるインタプリタ

primenumber/bfmi-cpp | GitHub