BFmetaのページ

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

Brainf*ckとの違い

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

言語仕様

最初に無限長の符号なし1byte整数型の配列の先頭にソースコードが読み込まれる。
配列はソースコードが終わったあとはすべて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