compiler/test.rb
sjs 221efca282 [NEW] while, until, repeat, and break keywords.
While and until loops work as in C and Ruby.  Repeat loops infinitely
(or until a break is encountered).  Break is used to break out of the
innermost loop construct.
2009-05-17 08:13:43 -07:00

38 lines
932 B
Ruby

require 'compiler'
require 'stringio'
def error(msg) STDERR.puts(msg) end
def parse(input)
compiler = Compiler.new(input)
compiler.parse # tuple of [data, bss, code]
rescue ParseError => e
error("[error] #{e.message}")
error("[context] #{e.context}")
# error("Aborting!")
error(e.caller)
exit(1)
end
def interpolate(template, data)
data.inject(template) do |template, mapping|
token, replacement = *mapping
template.sub("{#{token}}", replacement)
end
end
def main(arg)
input = if File.readable?(arg)
File.open(arg)
else
# StringIO.new("5*(3-5)*2+2-9/3-8/2-4*(5+5+5)\n")
StringIO.new("abc=999\nabc-888\n")
end
data, bss, code = *parse(input)
template = File.read("template.asm")
asm = interpolate(template, :data => data, :bss => bss, :code => code)
File.open("test.asm", "w") { |f| f.puts(asm) }
end
main(ARGV[0].to_s)