Joel VanderWerf
3/3/2008 5:35:00 AM
Going back to the original....
require 'ostruct'
class BProgram
class Context < OpenStruct
def extrn(*)
end
def putchar char
print char.gsub(/\*n/) {"\n"}
end
end
def self.run_in_ruby(&block)
new(&block).run
end
def initialize(&block)
@ctx = Context.new
instance_eval(&block)
end
def run
@ctx.instance_eval(&@main)
end
def main(&block)
@main = block
end
def method_missing(name, arg)
@ctx.send("#{name}=", arg)
end
end
BProgram.run_in_ruby {
main( ) {
extrn a, b, c;
putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';
}
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407