コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

Brainfuck

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

これはこのページの過去の版です。1uisaavow (会話 | 投稿記録) による 2018年3月20日 (火) 13:03個人設定で未設定ならUTC)時点の版 (派生言語)であり、現在の版とは大きく異なる場合があります。

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

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

概要

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

Brainfuckプログラムは非常に可読性・記述性が低いため実用性は期待できないが、チューリング完全である。その簡潔さから多くの派生言語を生み出すこととなった。

Brainfuckの言語仕様

処理系は次の要素から成る: Brainfuckプログラム、インストラクションポインタ(プログラム中のある文字を指す)、少なくとも30000個の要素を持つバイトの配列(各要素はゼロで初期化される)、データポインタ(前述の配列のどれかの要素を指す。最も左の要素を指すよう初期化される)、入力と出力の2つのバイトストリーム。

Brainfuckプログラムは、以下の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でないなら、対応する [ (の直後[1])にジャンプする。C言語の「}」に相当[2]

派生言語

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

  • A[3] - 「A」だけで記述する。
  • BF-BASIC'n[1] - 命令をそれぞれべーしっ君風に置き換えたもの。
  • BrainCrash[4] - 4つの命令「|&~^」を加えたもの。終了時にポインタの指す値が0になるまでポインタを進め値を出力する。また、実行前に"Hello, world!"が格納される。
  • Misa[2] - みさくらなんこつの作品に登場する人物の口調(通称:みさくら語)で表記できるよう、各命令に「あ お っ ☆ !」などを割り当てたもの。
  • MONAmona[3] - 「MONAmona」の8文字を順に「><+-,.[]」に当てはめたもの。
  • Nyaruko[4] - 「這いよれ! ニャル子さん」に関する文字列だけからなる言語。
  • Ook! - 「Ook.」「Ook!」「Ook?」のうち2つのトークンから成る文字列をBrainfuckの各命令に当てはめたもの。使用される記号(実際には文字列だが)の種類がわずか3つと、本家より少ない。
  • おっぱい言語[5] - おっぱいに関連する言葉に置き換えたもの。
  • ジョジョ言語[6] - ジョジョの奇妙な冒険のセリフで置き換えたもの。
  • Gochiusa[7] - ご注文はうさぎですか?のオープニングテーマ歌詞の一部で置き換えたもの。
  • コミュ障プログラミング言語[8] -「アッ…」「エット…」「サセン…」などに置き換えたもの。
  • Kemono[9] - 「けものフレンズ」のセリフに置き換えたもの。
  • NEET[10] - ニートに関する言葉に置き換えたもの。
  • てってってー言語[9] - 「てってー」「てっててー」「てってってー」などに置き換えたもの。

  1. ^ 現在言語仕様として参照されているBrian Raiterによる記述には「直後」とは書いてないが、意味を考えると直後とするのが妥当
  2. ^ 無条件に、対応する [ にジャンプしている、と考えることもできる。
  3. ^ アーカイブ 2011年3月19日 - ウェイバックマシン
  4. ^ アーカイブ 2008年2月10日 - ウェイバックマシン

関連項目

外部リンク