Brainfuck

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Brainfuck
パラダイム 構造化プログラミング
登場時期 1993年
設計者 Urban Müller
型付け なし
影響を受けた言語 P′′
影響を与えた言語 Ook!
  

Brainfuck(ブレインファック)は難解プログラミング言語のひとつ。なお名称に卑語が含まれるため、Brainf*ckなどと表記されることがある。

目次

[編集] 概要

開発者Urban Müllerがコンパイラがなるべく小さくなる言語として考案した。 実際、Müllerが開発したコンパイラのサイズはわずか123バイト(キロバイトではない!)、インタプリタは98バイトとなっている。

Brainfuck プログラムは非常に可読性・記述性が低いため実用性は期待できないが、それでもチューリング完全な(チューリングマシンで実行可能なあらゆるプログラムが記述できる)言語であり、理論上はC言語などの普通のプログラミング言語と同等の表現力を持つ。その簡潔から多くの派生言語を生み出すこととなった。

メモリを指す暗黙のポインタを「>」「<」命令で移動させながら、そのポインタが指す値を増減させて処理を進めていく。

[編集] Brainfuckの言語仕様

処理系には30000バイトの byte型の配列があり、配列の要素はゼロで初期化される。 また、その配列の要素のひとつを指す暗黙のポインタがあり、ポインタは最初配列の先頭を指している。

実行可能な命令は次の8つのみである。

  1. > ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。
  2. < ポインタをデクリメントする。C言語の「ptr--;」に相当。
  3. + ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。
  4. - ポインタが指す値をデクリメントする。C言語の「(*ptr)--;」に相当。
  5. . ポインタが指す値を出力する。C言語の「putchar(*ptr);」に相当。
  6. , 1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();」に相当。
  7. [ ポインタが指す値が0なら、対応する ] の直後までジャンプする。C言語の「while(*ptr){」に相当。
  8. ] ポインタが指す値が0でないなら、対応する [ にジャンプする。C言語の「}」に相当。

[編集] 派生言語

以上の8つの命令文字は可読性のために選ばれたものであり、これらが使われなければならない理由はない。したがって、より難解 (esoteric) にすることを目指したり、あるいは単なる遊びとして、各命令に使用する文字を置き換えた派生言語が考えられている。

  • A - 「A」だけで記述する。
  • MONAmona - 「MONAmona」の8文字を順に「><+-,.[]」に当てはめたもの。
  • Ook! - 「Ook.」「Ook!」「Ook?」のうち2つのトークンから成る文字列をBrainfuckの各命令に当てはめたもの。使用される記号(実際には文字列だが)の種類がわずか3つと、本家より少ない。
  • BrainCrash - 4つの命令「|&~^」を加えたもの。終了時にポインタの指す値が0になるまでポインタを進め値を出力する。また、実行前に"Hello, world!"が格納される。

[編集] 関連項目

[編集] 外部リンク