App::AnyBrainfuckを書いた

設定ファイルから好きな Brainfuckが作れたらいいんじゃなかろうか,
と思って書いてみた.

追記

すでに同様のモジュールを makamakaさんが書かれていました。調査不足でした.
makamaka/p5-acme-brainfucktory · GitHub
http://perl-users.jp/articles/advent-calendar/2010/acme/17

コンフィグファイル

一般的な Brainfuckの各演算子に対応する文字列を指定します。
形式は Perlの HashRefです。サンプルは以下のとおり

+{
    '>' => 'おっぱいおっぱい',
    '<' => 'おっぱいおっぱいおっぱい',
    '+' => 'おっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱい',
    '-' => 'おっぱいおっぱいおっぱいおっぱいおっぱい',
    '.' => 'おっぱいおっぱいおっぱいおっぱいおっぱいおっぱい',
    ',' => 'おっぱいおっぱいおっぱいおっぱい',
    '[' => 'おっぱい',
    ']' => 'おっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱいおっぱい',
    separator => 1,
}

'separator'オプションを指定すると, 空白で区切るので, 文法が完全一致しない限り
エラーにならなくなります.

helloworldオプション

'--helloworld'を指定すると, コンフィグファイルの情報を元に
helloworldプログラムを標準出力に出します.

プログラミング言語 ウメハラ

格ゲーマーしかわからないだろうけど。元ネタ動画.
私はどちらかというと sakoさん信者ですが・・・.


コンフィグファイル

+{
    '>' => 'ウメハラ',
    '<' => 'がぁ!!!',
    '+' => '捕まえてぇぇ!!!',
    '-' => '画面端ぃぃっ!!!!',
    '.' => 'バースト読んでえぇっ!!!',
    ',' => 'まだ入るぅぅ!!',
    '[' => '・・・つっ近づいてぇっ!!!',
    ']' => '決めたぁぁーっ!!!!',
}

ソース

  % any-brainfuck -c example/umehara.conf --helloworld | tee helloworld.ume
  捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!・・・つっ近づいてぇっ!!!
  ウメハラ捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!ウメハラ
  捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  捕まえてぇぇ!!!ウメハラ捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  捕まえてぇぇ!!!捕まえてぇぇ!!!がぁ!!!がぁ!!!がぁ!!!画面端ぃぃっ!!!!
  決めたぁぁーっ!!!!ウメハラバースト読んでえぇっ!!!ウメハラ捕まえてぇぇ!!!
  捕まえてぇぇ!!!バースト読んでえぇっ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  バースト読んでえぇっ!!!バースト読んでえぇっ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  捕まえてぇぇ!!!バースト読んでえぇっ!!!ウメハラ画面端ぃぃっ!!!!バースト読んでえぇっ!!!
  画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!
  画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!
  画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!
  バースト読んでえぇっ!!!がぁ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  バースト読んでえぇっ!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!
  画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!
  画面端ぃぃっ!!!!バースト読んでえぇっ!!!捕まえてぇぇ!!!捕まえてぇぇ!!!
  捕まえてぇぇ!!!バースト読んでえぇっ!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!
  画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!
  バースト読んでえぇっ!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!
  画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!画面端ぃぃっ!!!!
  画面端ぃぃっ!!!!バースト読んでえぇっ!!!ウメハラ捕まえてぇぇ!!!バースト読んでえぇっ!!!

実行

  % any-brainfuck -c example/umehara.conf helloworld.ume
  Hello, world!

プログラミング言語 堀江由衣

コンフィグファイル

+{
    '>' => 'ほっちゃーん!',
    '<' => 'ほ、',
    '+' => 'ほーっ、',
    '-' => 'ホアアーッ!!',
    '.' => 'ホアーッ!!',
    ',' => 'ほちゃ',
    '[' => 'ほっちゃーーーーん',
    ']' => 'ほ、ほーっ',
    separator => 1,
}


ソース

  % any-brainfuck -c example/hottyan.conf --helloworld |tee helloworld.hottyan
  ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほっちゃーーーーん
  ほっちゃーん! ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほっちゃーん!
  ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、
  ほーっ、 ほっちゃーん! ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほ、 ほ、 ほ、 ホアアーッ!!
  ほ、ほーっ ほっちゃーん! ホアーッ!! ほっちゃーん! ほーっ、 ほーっ、 ホアーッ!! ほーっ、
  ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ホアーッ!! ホアーッ!! ほーっ、
  ほーっ、 ほーっ、 ホアーッ!! ほっちゃーん! ホアアーッ!! ホアーッ!! ホアアーッ!!
  ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!!
  ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアーッ!!
  ほ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ほーっ、 ホアーッ!!
  ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!!
  ホアアーッ!! ホアアーッ!! ホアーッ!! ほーっ、 ほーっ、 ほーっ、 ホアーッ!! ホアアーッ!!
  ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアーッ!!
  ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!! ホアアーッ!!
  ホアアーッ!! ホアアーッ!! ホアーッ!! ほっちゃーん! ほーっ、 ホアーッ!!


実行

  % any-brainfuck -c example/hottyan.conf helloworld.hottyan
  Hello, world!

終わりに

Brainfuckって書いたことなかったので勉強になりました.
次は Whitespaceとかそのあたりにチャレンジしてみたいですね.