Brainfuck
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Brainfuckはプログラミング言語の一つ。名称が良いものではないため、Brainf*ckと呼称するのが一般的。
開発者Urban Müllerがコンパイラがなるべく小さくなる言語として考案した。 実際、Müllerが開発したコンパイラのサイズは123バイト(キロバイトではない!)、インタプリタは98バイトとなっている。
処理系には十分なサイズのbyte型配列とその要素のひとつを指すポインタがある。ポインタを「>」「<」命令で移動させながら、そのポインタが指す値を増減させて処理を進めていく(Hello world参照)。
実用性はほとんど無いように思われるが、これだけでチューリングマシンで実行可能なあらゆるプログラムが記述できる(チューリング完全である)とされている。
[編集] Brainfuckの言語仕様
実行可能な命令は「8つ」のみである。
>
ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;
」に相当する。<
ポインタをデクリメントする。C言語の「ptr--;
」に相当。+
ポインタが指す値をインクリメントする。C言語の「(*ptr)++;
」に相当。-
ポインタが指す値をデクリメントする。C言語の「(*ptr)--;
」に相当。.
ポインタが指す値を出力する。C言語の「putchar(*ptr);
」に相当。,
1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();
」に相当。[
ポインタが指す値が0なら、対応する]
までジャンプする。C言語の「while(*ptr){
」に相当。]
ポインタが指す値が0でないなら、対応する[
にジャンプする。C言語の「}
」に相当。
- 「各命令に使用する文字を、任意の文字列に置き換える」という遊びもある。
[編集] 関連項目
[編集] 外部リンク
- http://www.muppetlabs.com/~breadbox/bf/ 解説ページ(英語)
- http://esoteric.sange.fi/brainfuck/ 処理系のアーカイブ
- http://brainfuck.sourceforge.net/ Brainf*ck Golf(お題に沿ってなるべく短いBrainf*ckソースコードを書くコンテスト)
- http://home.arcor.de/partusch/html_en/bfd.html Brainfuck Compiler (Windows/DOS)