Brainf*ckの概要はこちら参考にするとわかりやすいです。
#概要
- Rubyライブラリr-fxxkを利用してBrainf*ck派生言語「Siro」を実装した
- 電脳少女YouTuberシロちゃんのチャンネル登録数40万人おめでとう
##Siro言語仕様
- シロちゃんの名言を命令にする。
- 命令以外の文字は無視する。
いーねっ! ポインタを1進める
おほほい ポインタの指す要素の値を1増やす
キューイ ポインタを1戻す
ぱいーん ポインタの指す要素の値を1減らす
白組さん ポインタの指す要素の値が 0 だったら対応する次の "救済" までジャンプ
救済 対応する前の "白組さん" までジャンプ
なんて日だ! ポインタの指す要素の値を外に出力
ズンドコズンドコ♪ 外から値を入力して、 ポインタの指す場所へ入れる
##r-fxxkで実装
最初は1から書こうと思っていたのですが、便利なライブラリを見つけたので、とても簡単に実装できました。
r-fxxkではBrainf*ckの各命令を設定するだけでインタプリタが実装できます。インタプリタであるsiro.rbのコードです。サンプルコードの命令部分を置き換えるだけです。
Encoding.default_external = "UTF-8"
require 'r-fxxk'
class Siro < Brainfuck
nxt "いーねっ!"
inc "おほほい"
prv "キューイ"
dec "ぱいーん"
opn "白組さん"
cls "救済"
put "なんて日だ!"
get "ズンドコズンドコ♪"
end
puts Siro.new.fuck(ARGF.read)
こちらがsiro言語でHelloWorldを表示するコードHelloWorld.siroです
いーねっ!おほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほい白組さんキューイおほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほいいーねっ!ぱいーん救済キューイなんて日だ!いーねっ!おほほいおほほいおほほいおほほいおほほいおほほいおほほい白組さんキューイおほほいおほほいおほほいおほほいいーねっ!ぱいーん救済キューイおほほいなんて日だ!おほほいおほほいおほほいおほほいおほほいおほほいおほほいなんて日だ!なんて日だ!おほほいおほほいおほほいなんて日だ!白組さんぱいーん救済いーねっ!おほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほい白組さんキューイおほほいおほほいおほほいおほほいいーねっ!ぱいーん救済キューイなんて日だ!いーねっ!おほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほい白組さんキューイおほほいおほほいおほほいおほほいおほほいいーねっ!ぱいーん救済キューイなんて日だ!いーねっ!おほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほい白組さんキューイおほほいおほほいおほほいいーねっ!ぱいーん救済キューイなんて日だ!おほほいおほほいおほほいなんて日だ!ぱいーんぱいーんぱいーんぱいーんぱいーんぱいーんなんて日だ!ぱいーんぱいーんぱいーんぱいーんぱいーんぱいーんぱいーんぱいーんなんて日だ!白組さんぱいーん救済いーねっ!おほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほい白組さんキューイおほほいおほほいおほほいおほほいいーねっ!ぱいーん救済キューイおほほいなんて日だ!白組さんぱいーん救済おほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほいおほほいなんて日だ!
##実行してみる
>siro.rb HelloWorld.siro
Hello World!
ライブラリをインストールしてから10分程度で、Brainf*ck派生言語を実装することができました。派生言語作りたい放題ですね。
#ほかにも見つけたBrainf*ckライブラリ
orenono
r-fxxkと同じくgemです
php-fxxk
phpで実装できます
#後記
- 今回は、シロちゃんチャンネル登録数40万人記念として作りたかったので、実装速度を優先しましたが、いつかちゃんと全部実装してみたいです。
- C言語をBrainF*ckに変換→siro言語化するツールを作ったら面白いかも。