# HG changeset patch # User Christian Urban # Date 1638961697 0 # Node ID f5709803272b8a08f81496f582b4110dc93f47ec # Parent 6f80e6df34f73709149108dcd0105190721933db updated diff -r 6f80e6df34f7 -r f5709803272b progs/glue.sc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/progs/glue.sc Wed Dec 08 11:08:17 2021 +0000 @@ -0,0 +1,53 @@ +// Glue code for CW4 +//=================== +// generates j-files and runs class-files +// +// +// needs +// +// tokenise(s: String) : List[Token] +// +// Stmts - parser consuming Tokens +// +// compile(bl: Block, class_name: String) : String + + + +import ammonite.ops._ + +def parse_tks(tks : List[Token]) = { + Stmts.parse_all(tks).head +} + + + +def compile_to_file(bl: Block, class_name: String) : Unit = { + println(s"Start of compilation") + write.over(pwd / s"$class_name.j", compile(bl, class_name)) + println(s"generated $class_name.j file") + os.proc("java", "-jar", "jasmin.jar", s"$class_name.j").call() + println(s"generated $class_name.class file ") +} + + +@main +def main(fname: String) = { + val path = os.pwd / fname + val class_name = fname.stripSuffix("." ++ path.ext) + val tks = tokenise(os.read(path)) + val ast = parse_tks(tks) + compile_to_file(ast, class_name) +} + +@main +def run(fname: String) = { + val path = os.pwd / fname + val class_name = fname.stripSuffix("." ++ path.ext) + val tks = tokenise(os.read(path)) + val ast = parse_tks(tks) + compile_to_file(ast, class_name) + os.proc("java", s"${class_name}/${class_name}").call(stdout = os.Inherit) + println(s"done.") +} + +