概要
バーチャルYoutuber ミライアカリ ちゃんの独自プログラミング言語Akariを作ってみたという記事です。
r-fxxkというライブラリを使って、Brainf*ckの派生言語という形で実装してみました。素晴らしいライブラリをありがとうございます。制作者様にはこの場を借りてお礼申し上げます。
Brainf*ck って何?という方はこちらをご参照ください。
経緯
- 0分で作れるBrainf*ck派生言語:シロ組さん専用のプログラミング言語「siro」を作ってみた に感動して、自分も独自言語を作ってみたい!という気持ちが高まる。
- 大好きなミライアカリちゃんのLINEスタンプが発売される。スタンプランキング1位おめでとう!
- これしかない!と思い、勢いで実装する。
Akari言語の仕様
Akari命令 | Brainf*ck命令 | 動作 |
---|---|---|
ピロリンッ | > | ポインタをインクリメントする。 |
悪い子ちゃん | < | ポインタをデクリメントする。 |
ハロー! | + | ポインタが指す値をインクリメントする。 |
ヤミ | - | ポインタが指す値をデクリメントする。 |
あ、カラスだ | . | ポインタが指す値を出力に書き出す。 |
おけまる | , | 入力から1バイト読み込んで、ポインタが指す先に代入する。 |
いきま→しょう! | [ | ポインタが指す値が0なら、対応する 卍 の直後にジャンプする。 |
卍 | ] | ポインタが指す値が0でないなら、対応する いきま→しょう! にジャンプする。 |
LINEスタンプのセリフを使わせていただきました。
サンプルコード
とりあえずHello Worldのコードはこんな感じです。HelloWorld.akariというファイルを作って、以下をコピペしてください。
ハロー!ハロー!ハロー!ハロー!ハロー!ハロー!ハロー!ハロー!ハロー!
いきま→しょう!ピロリンッハロー!ハロー!ハロー!ハロー!ハロー!ハロー!
ハロー!ハロー!ピロリンッハロー!ハロー!ハロー!ハロー!ハロー!ハロー!
ハロー!ハロー!ハロー!ハロー!ハロー!ピロリンッハロー!ハロー!ハロー!
ハロー!ハロー!悪い子ちゃん悪い子ちゃん悪い子ちゃんヤミ卍ピロリンッ
あ、カラスだピロリンッハロー!ハロー!あ、カラスだハロー!ハロー!ハロー!
ハロー!ハロー!ハロー!ハロー!あ、カラスだあ、カラスだハロー!ハロー!
ハロー!あ、カラスだピロリンッヤミあ、カラスだヤミヤミヤミヤミヤミヤミヤミ
ヤミヤミヤミヤミヤミあ、カラスだ悪い子ちゃんハロー!ハロー!ハロー!
ハロー!ハロー!ハロー!ハロー!ハロー!あ、カラスだヤミヤミヤミヤミヤミ
ヤミヤミヤミあ、カラスだハロー!ハロー!ハロー!あ、カラスだヤミヤミヤミ
ヤミヤミヤミあ、カラスだヤミヤミヤミヤミヤミヤミヤミヤミあ、カラスだ
ピロリンッハロー!あ、カラスだ
r-fxxkで実装
先ほど決めた仕様をr-fxxkに設定します。akari.rbというファイルを作って、以下をコピペしてください。これだけでインタプリタが完成します。
Encoding.default_external = "UTF-8"
require 'r-fxxk'
# Akari言語の定義
class Akari < Brainfuck
nxt "ピロリンッ"
inc "ハロー!"
prv "悪い子ちゃん"
dec "ヤミ"
opn "いきま→しょう!"
cls "卍"
put "あ、カラスだ"
get "おけまる"
end
# 第一引数からソースコードを読み込む
program = ARGF.read
# ソースコードを表示
# puts program
# 実行して結果を表示
puts Akari.new.fuck(program)
サンプルコードの実行
先ほどのHelloWorld.akariを実行してみます。実行にはRubyが必要です。
$ ruby akari.rb HelloWorld.akari
Hello, world!
ちゃんと Hello, world!と表示されました!
まとめ
- ミライアカリちゃんのLINEスタンプを記念して独自言語を作ってみました。
- LINEスタンプにあるセリフを使ってコマンドを作ったから、LINEスタンプを押すだけでコーディングができるように開発環境を作れるかもしれません。やり方がまだわからないですが。。。