equal
deleted
inserted
replaced
1 // A Small Compiler for the WHILE Language |
1 // A Small Compiler for the WHILE Language |
2 // |
2 // (it does not use a parser and lexer) |
3 |
3 |
4 // the abstract syntax trees |
4 // the abstract syntax trees |
5 abstract class Stmt |
5 abstract class Stmt |
6 abstract class AExp |
6 abstract class AExp |
7 abstract class BExp |
7 abstract class BExp |
91 |
91 |
92 return |
92 return |
93 |
93 |
94 .end method |
94 .end method |
95 """ |
95 """ |
|
96 |
|
97 println("starting") |
|
98 |
96 |
99 |
97 // for generating new labels |
100 // for generating new labels |
98 var counter = -1 |
101 var counter = -1 |
99 |
102 |
100 def Fresh(x: String) = { |
103 def Fresh(x: String) = { |
219 // |
222 // |
220 // and started with |
223 // and started with |
221 // |
224 // |
222 // java fib/fib |
225 // java fib/fib |
223 |
226 |
224 |
227 import scala.util._ |
225 |
228 import scala.sys.process._ |
226 |
229 import scala.io |
227 |
230 |
|
231 def compile_tofile(bl: Block, class_name: String) = { |
|
232 val output = compile(bl, class_name) |
|
233 val fw = new java.io.FileWriter(class_name + ".j") |
|
234 fw.write(output) |
|
235 fw.close() |
|
236 } |
|
237 |
|
238 def compile_and_run(bl: Block, class_name: String) : Unit = { |
|
239 compile_tofile(bl, class_name) |
|
240 println("compiled ") |
|
241 val test = ("java -jar jvm/jasmin-2.4/jasmin.jar " + class_name + ".j").!! |
|
242 println("assembled ") |
|
243 ("java " + class_name + "/" + class_name).!! |
|
244 } |
|
245 |
|
246 |
|
247 compile_and_run(fib_test, "fib") |
|
248 |