Ruby
Brainf*ck
orenono

Ruby で Brainf*ck の派生言語を作成するための gem 『orenono』を作成してみた

More than 3 years have passed since last update.


Ruby で Brainf*ck の派生言語を作成するための gem 『orenono』 を作成してみた


概要

Ruby で Brainf*ck の派生言語を作成するための gem 『orenono』 を作成してみました

Brainf*ck を知らない、という方はこちらを参照ください。

http://ja.wikipedia.org/wiki/Brainfuck


経緯

CodeIQ の出題をしている関係で、 Brainf*ck と戯れる機会は多かったのですが、

書籍「Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~」

の購入をきっかけに Brainf*ck の処理系を作ってみることに。

ここで、処理系を作った後に基本命令の 8 つをネタ系の内容に置き換えるところまでが定番になりますが、

どうせなら自由に Brainf*ck 派生言語を作成できる gem を作ろう、と思い立ちました。

既に誰かが同じことをしていたらごめんなさい。


仕様


  • gem 名 orenono

    俺の脳(みんな自分の脳内の好きなワードで Brainf*ck を派生させてね、ということで。


  • 文法は Orenonofile で管理

    Gemfile とかと同じように使う Ruby の内部DSL形式の設定ファイル。

    orenono init または orenono i でひな形を生成できる。

    デフォルトのままか、このファイルを生成しないで orenono コマンドを実行すると、

    通常の Brainf*ck の文法で動作します。


  • 実行

    orenono execute some_file.bf または orenono e some_file.bf で実行。

    拡張子はなんでもいい。

    カレントディレクトリにある、 Orenonofile ファイルの内容で採用する文法を決定します。



利用例


デフォルト


  • orenono.bf

Brainf*ck のソースコードを用意。

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

------------.<++++++++.--------.+++.------.--------.>+.


  • execute

実行するだけ。

$ orenono execute sample.bf

Hello, world!

execute は e だけでもよい。

$ orenono e sample.bf

Hello, world!


文法を変更する場合


  • Orenonofile のひな形生成

$ orenono init


  • Orenonofile に好きな文法を定義

※各ワードを正規表現で /足す|引く|はじめ|おわり|次|前|出|入/ のようにして

トークン分割を行うので、この正規表現で一意の文法として抽出できないような設定の場合は正しく動作しない


Orenonofile

# encoding: utf-8

increment "足す"
decrement "引く"
start_loop "はじめ"
end_loop "おわり"
next_cursol "次"
previous_cursol "前"
display "出"
read "入"



orenono.bf

足す足す足す足す足す足す足す足す足すはじめ次足す足す足す足す足す足す足す足す次足す足す足す足す足す足す足す足す足す足す足す次足す足す足す足す足す前前前引くおわり次出次足す足す出足す足す足す足す足す足す足す出出足す足す足す出次引く出

引く引く引く引く引く引く引く引く引く引く引く引く出前足す足す足す足す足す足す足す足す出引く引く引く引く引く引く引く引く出足す足す足す出引く引く引く引く引く引く出引く引く引く引く引く引く引く引く出次足す出


  • execute

$ orenono e orenono.bf

Hello, world!


オリジナルの派生言語を作りましょう

Orenonofile + 何か好きなネタ(アニメや時事ネタなど)でオリジナル言語を作って遊んで貰えれば幸いです。


補足

その他詳細は、 GitHub の README 参照。

https://github.com/tbpgr/orenono


orenonoスライドショー

http://tbpgr.github.io/orenono_slide/#/


参照