Brainfuck
非常に小さい難解プログラミング言語 ウィキペディアから
Brainfuck(ブレインファック)はプログラミング言語のひとつ。なお名称に含まれるfuckが卑語であるため、Brainf*ck または Brainf**kなどと表記されることがある。
![]() |
概要
開発者Urban Müllerがコンパイラがなるべく小さくなる言語として考案した。 実際、Müllerが開発したコンパイラのサイズはわずか123バイト、インタプリタは98バイトであった。
Brainfuckプログラムは非常に可読性・記述性が低いため実用性は期待できないが、チューリング完全である。その簡潔さから多くの派生言語を生み出すこととなった。
Brainfuckの言語仕様
処理系は次の要素から成る: Brainfuckプログラム、インストラクションポインタ(プログラム中のある文字を指す)、少なくとも30000個の要素を持つバイトの配列(各要素はゼロで初期化される)、データポインタ(前述の配列のどれかの要素を指す。最も左の要素を指すよう初期化される)、入力と出力の2つのバイトストリーム。
Brainfuckプログラムは、以下の8個の実行可能な命令から成る(他の文字は無視され、読み飛ばされる)。
>
ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;
」に相当する。<
ポインタをデクリメントする。C言語の「ptr--;
」に相当。+
ポインタが指す値をインクリメントする。C言語の「(*ptr)++;
」に相当。-
ポインタが指す値をデクリメントする。C言語の「(*ptr)--;
」に相当。.
ポインタが指す値を出力に書き出す。C言語の「putchar(*ptr);
」に相当。,
入力から1バイト読み込んで、ポインタが指す先に代入する。C言語の「*ptr=getchar();
」に相当。[
ポインタが指す値が0なら、対応する]
の直後にジャンプする。C言語の「while(*ptr){
」に相当。]
ポインタが指す値が0でないなら、対応する[
(の直後[注釈 1])にジャンプする。C言語の「}
」に相当[注釈 2]。
Brainfuckプログラミング例
Hello World!
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
派生言語
以上の8つの命令文字は可読性のために選ばれたものであり、これらが使われなければならない理由はなく、より難解にすることを目指したり、あるいは単なる遊びとして、各命令に使用する文字を置き換えた派生言語が考えられている。以下はその代表例である。
脚注
関連項目
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.