Execute HQ9+/Ruby: Difference between revisions
m (make dispatch table a class constant) |
m (moved RCHQ9+/Ruby to Execute HQ9+/Ruby) |
(No difference)
|
Revision as of 14:30, 6 February 2010
Execute HQ9+/Ruby is an implementation of HQ9+.
Other implementations of HQ9+.
Execute HQ9+/Ruby is part of RCHQ9+. You may find other members of RCHQ9+ at Category:RCHQ9+.
This Ruby program implements an HQ9+ interpreter. <lang ruby>class HQ9plus
Dispatch = Hash.new(:unknown).merge({ 'h' => :hello, 'q' => :quine, '9' => :beer, '+' => :accumulate })
def initialize(opts={}) @program = if opts[:program] then opts[:program] elsif opts[:filename] then File.read(opts[:filename]) else end @accumulator = 0 end attr_reader :accumulator
def run @program.downcase.each_char {|char| self.send Dispatch[char]} end
def hello puts "Hello, world!" end
def quine puts @program end
def beer puts '99 bottles here ...' end
def accumulate @accumulator += 1 end
def unknown # do nothing end
end
hq9 = HQ9plus.new(:program => '+qhp;+9Q') hq9.run puts hq9.accumulator</lang>
Output:
+qhp;+9Q Hello, world! 99 bottles here ... +qhp;+9Q 2