Ruby
PHP
Brainf*ck

10分で作れるBrainf*ck派生言語:シロ組さん専用のプログラミング言語「siro」を作ってみた

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言語化するツールを作ったら面白いかも。