brainfuck方言のB'z言語を作った

レビューさぼって何書いてんだおれは。

B’z言語の命令とbrainfuckの命令の対応は次の通り。

bf B’z言語
> ウルトラソウッ!
< ハァイ!
+ B’zの、
- シンパイナイモンダイナイナイナイザッツライフイッツオーライ
. B’zのLIVE-GYMにようこそ!!!
, 松本に相談しようか
[ (´.-`)
] (■∋■)ヴェイ!

以下のbrainfuckコードがあったとする。

>+++++++++
[<++++++++>-]
<.>+++++++
[<++++>-]
<+.+++++++..+++.
[-]
>++++++++
[<++++>-]
<.>+++++++++++
[<+++++>-]
<.>++++++++
[<+++>-]
<.+++.------.--------.
[-]
>++++++++
[<++++>-]
<+.
[-]
++++++++++.

B’z言語の文法規則ファイルを用意する。

{
    "rshift": "ウルトラソウッ!",
    "lshift": "ハァイ!",
    "inc": "B'zの、",
    "dec": "シンパイナイモンダイナイナイナイザッツライフイッツオーライ",
    "write": "B'zのLIVE-GYMにようこそ!!!",
    "read": "松本に相談しようか",
    "loop_begin": "(´.-`)",
    "loop_end": "(■∋■)ヴェイ!"
}

これを使って、前回紹介した拙作ツールでbrainfuckコードをB’z言語に変換する。

$ bft /path/to/code.bf -t /path/to/bz-lang-grammar-json > code.bz

こうなる。

ウルトラソウッ!B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、
(´.-`)ハァイ!B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、ウルトラソウッ!シンパイナイモンダイナイナイナイザッツライフイッツオーライ(■∋■)ヴェイ!
ハァイ!B'zのLIVE-GYMにようこそ!!!ウルトラソウッ!B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、
(´.-`)ハァイ!B'zの、B'zの、B'zの、B'zの、ウルトラソウッ!シンパイナイモンダイナイナイナイザッツライフイッツオーライ(■∋■)ヴェイ!
ハァイ!B'zの、B'zのLIVE-GYMにようこそ!!!B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zのLIVE-GYMにようこそ!!!B'zのLIVE-GYMにようこそ!!!B'zの、B'zの、B'zの、B'zのLIVE-GYMにようこそ!!!
(´.-`)シンパイナイモンダイナイナイナイザッツライフイッツオーライ(■∋■)ヴェイ!
ウルトラソウッ!B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、
(´.-`)ハァイ!B'zの、B'zの、B'zの、B'zの、ウルトラソウッ!シンパイナイモンダイナイナイナイザッツライフイッツオーライ(■∋■)ヴェイ!
ハァイ!B'zのLIVE-GYMにようこそ!!!ウルトラソウッ!B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、
(´.-`)ハァイ!B'zの、B'zの、B'zの、B'zの、B'zの、ウルトラソウッ!シンパイナイモンダイナイナイナイザッツライフイッツオーライ(■∋■)ヴェイ!
ハァイ!B'zのLIVE-GYMにようこそ!!!ウルトラソウッ!B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、
(´.-`)ハァイ!B'zの、B'zの、B'zの、ウルトラソウッ!シンパイナイモンダイナイナイナイザッツライフイッツオーライ(■∋■)ヴェイ!
ハァイ!B'zのLIVE-GYMにようこそ!!!B'zの、B'zの、B'zの、B'zのLIVE-GYMにようこそ!!!シンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライB'zのLIVE-GYMにようこそ!!!シンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライシンパイナイモンダイナイナイナイザッツライフイッツオーライB'zのLIVE-GYMにようこそ!!!
(´.-`)シンパイナイモンダイナイナイナイザッツライフイッツオーライ(■∋■)ヴェイ!
ウルトラソウッ!B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、
(´.-`)ハァイ!B'zの、B'zの、B'zの、B'zの、ウルトラソウッ!シンパイナイモンダイナイナイナイザッツライフイッツオーライ(■∋■)ヴェイ!
ハァイ!B'zの、B'zのLIVE-GYMにようこそ!!!
(´.-`)シンパイナイモンダイナイナイナイザッツライフイッツオーライ(■∋■)ヴェイ!
B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zの、B'zのLIVE-GYMにようこそ!!!

B’z言語の文法規則ファイルを指定してコードを実行。

$ bfi /path/to/code.bz -t /path/to/bz-lang-grammar-json

実行結果:

Hello World!

もっといい言語チョイスのアイデアがあれば、じゃんじゃん改造すればいいと思う。

余談

著作権的にまずければこの記事消します。
あとはてなブログのシンタックスハイライト機能にbrainfuckも指定できるなんて初めて知った。