2 def initialize parser, code_generator, output
4 @generator = code_generator
9 # Map for magic words whose code generator method has
10 # a name different from the magic word
15 'tail-call' => :tail_call,
19 words = @parser.parse_line
24 while words[0] =~ /^\w+:$/
25 label = words[0][0..-2]
26 @generator.label label
32 action, args = words[0], words[1..-1]
40 @generator.ifnonzero words[2..-1]
42 raise "Invalid action: #{action} #{words[1]}"
48 @generator.end_function
52 raise "Unknown action: #{action} #{words[1]}"
55 if names_map.has_key? action
56 @generator.send names_map[action], *args
65 if sym != nil && @generator.respond_to?(action.to_sym)
66 @generator.send action.to_sym, *args
68 raise "Unknown action: #{words[0]}"
74 @generator.write @output