読者です 読者をやめる 読者になる 読者になる

親子丼の備忘録(改)

親子丼の日常を綴った何か。専門的なことも書くかも?

BrainF*ck

おやこどぅぉーーん。
今回は、「BrainFuck」(卑語ですが正式名称なのでここでは書きます)について技術的なn備忘録を
書き記しておきます。

さて、「BrainFuck」とは、

Brainfuck(ブレインファック)は難解プログラミング言語のひとつ。 開発者Urban Müllerがコンパイラがなるべく小さくなる言語として考案した。 (BrainFuck - Wikipedia)

というものです。
まあ、8つというとても少ない命令で構成されている言語ですが、
プログラミング言語について根本を学んだり、考え方を鍛えたり、
頭がFuckされるような言語です(←語源は知りませんが)
で、8つの命令、というのは、

  1. 「+」ポインタが示す値をインクリメント(1プラス)する
  2. 「-」ポインタが示す値をデクリメント(1マイナス)する
  3. 「>」ポインタをインクリメントする
  4. 「<」ポインタがデクリメントする 
  5. 「.」ポインタの示す値を出力する 
  6. 「,」入力から1文字読み込んでポインタの示す先に代入する 
  7. 「[」 ポインタが指す値が0なら、対応する ] の直後にジャンプする。 
  8. 「]」 ポインタが指す値が0でないなら、対応する [ (の直後)にジャンプする。 

※7,8はループのようなイメージ。
です。
まあ、実際に一つ書いてみると、

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

こうすると出力は「A」となります。
やってることは、Shift-Jisでは「A は 65」なので65という数字を作って、表示させる
ということをやってます。
まあ、+で値を6まで増やして[]でループに入っています。右にシフトして、10プラスして、
左に戻して1マイナスをしています。これを続けるとループを抜けた時には、
60ができていて、さらにプラス5することで、65という数を作っています。
この状態で.コマンドで出力すると、その値(65)をShift-JISで文字列に変換したものが
出力されます。65はAなので、こうすることで、Aが出力される、というわけです。

ね?簡単でしょ?
(↑意味わからん)

これは実際に動かさないとわからないやつなので、
コンパイラ的な何かを今作っています。
まあ、僕の環境では動いているのですが、
バグ取りが終わってないので、まだ出せません。
一応スクショを出しておきます。
f:id:oyakodon2109:20151216000333p:plain:w250

完成したら、バイナリとソースをあげるので、お楽しみに!
では、今回は「BrainFuck」の話でした。
親子丼でした。

広告を非表示にする