RailsからRubyに入った俺がBrainf*ckを実装してみた

まあこれくらいできないとねぇ、みたいな。今変な言語を実装するのが流行ってるみたいですし。

#!/usr/bin/env ruby
 
unless ARGV[0]
    puts "usage: ruby brainf*ck.rb [source file]"
    exit
end
 
def read_source_char
    open ARGV[0],"r" do |f|
        while c = f.getc()
            yield c
        end
    end
end
 
source = ""
 
read_source_char() do |char|
    case char
    when ?>
        source << "ptr += 1\n"
    when ?<
        source << "ptr -= 1\n"
    when ?+
        source << "data[ptr] += 1\n"
    when ?-
        source << "data[ptr] -= 1\n"
    when ?.
        source << "putc data[ptr]\n"
    when ?,
        source << "data[ptr] = STDIN.getc()\n"
    when ?[
        source << "while data[ptr] != 0\n"
    when ?]
        source << "end\n"
    end
end
 
ptr = 0; data = (1..1000).map{|_|0}
eval(source) rescue exit

初心者丸出しなコードですよね、すいません。エラー処理とかしていません。こんな私でも1時間ほどで実装できました。
githubにアカウント作ったので記念に置いておきます。
http://github.com/craccho/hello/tree/master