酔っぱらったので5分でBrainf*ck処理系を作ってみた

休みだったのでビールを飲みました.
その勢いを借りて5分程でBrainf*ck処理系を作ってみるなどしました.
ビールとRubyを一緒にキメたので非常に良い気分です.

動画

あわせて読みたい

Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~
とても面白いので是非買いましょう.

作った処理系

# Five minutes for cooking language by Ruby.
class Brainf_ck
  def self.run(src)
    b=check_bracket(src)
    pc=0
    p=0
    t=Array.new(1000, 0)

    while pc < src.size
      case src[pc]
      when ?> then p+=1
      when ?< then p-=1
      when ?+ then t[p]>255 ? t[p]=0 : t[p]+=1
      when ?- then t[p]<=0 ? t[p]=255 : t[p]-=1
      when ?. then print t[p].chr
      when ?, then t[p] = $stdin.getc.to_i
      when ?[ then pc = b[pc] if t[p].zero?
      when ?] then pc = b.invert[pc]-1
      else raise "#{src[pc].chr} is no order!"
      end
      pc+=1
    end
  end

  private
  def self.check_bracket(src)
    s = []
    l = []
    src.each_byte.with_index do |b, i|
      case b.chr
      when "["
        s << i
      when "]"
        raise "[ is none!" if s.empty?
        l << [s.pop, i]
      end
    end
    raise "] is none!" unless s.empty?
    return Hash[*l.flatten]
  end
end

Brainf_ck.run(ARGF.read)

動機

以前に「Railsなら5分でブログが作れるよー」というデモがあって,あぁかっこいいなぁー
と思っていたのでやってみました.
酔っぱらっていたのでやってしまった.後悔はしてない.

訂正

動画中のスライドにtypoが...

s/kurinton fox/KURIKINTON FOX/

でした.
すいません.大事な所で..