equal
deleted
inserted
replaced
117 def i(args: Any*): String = " " ++ sc.s(args:_*) ++ "\n" |
117 def i(args: Any*): String = " " ++ sc.s(args:_*) ++ "\n" |
118 def l(args: Any*): String = sc.s(args:_*) ++ ":\n" |
118 def l(args: Any*): String = sc.s(args:_*) ++ ":\n" |
119 } |
119 } |
120 |
120 |
121 // this allows you to write things like |
121 // this allows you to write things like |
122 // i"add" and l"Lable" |
122 // i"add" and l"Label" |
123 |
123 |
124 |
124 |
125 // environments |
125 // environments |
126 type Env = Map[String, Int] |
126 type Env = Map[String, Int] |
127 |
127 |
203 } |
203 } |
204 |
204 |
205 // main compilation function for blocks |
205 // main compilation function for blocks |
206 def compile(bl: Block, class_name: String) : String = { |
206 def compile(bl: Block, class_name: String) : String = { |
207 val instructions = compile_block(bl, Map.empty)._1 |
207 val instructions = compile_block(bl, Map.empty)._1 |
208 (beginning ++ instructions.mkString ++ ending).replaceAllLiterally("XXX", class_name) |
208 (beginning ++ instructions ++ ending).replaceAllLiterally("XXX", class_name) |
209 } |
209 } |
210 |
210 |
211 |
211 |
212 // compiling and running files |
212 // compiling and running files |
213 // |
213 // |
255 } |
255 } |
256 |
256 |
257 |
257 |
258 // Fibonacci numbers as a bare-bone test-case |
258 // Fibonacci numbers as a bare-bone test-case |
259 val fib_test = |
259 val fib_test = |
260 List(Assign("n", Num(10)), // n := 10; |
260 List(Assign("n", Num(9)), // n := 10; |
261 Assign("minus1",Num(0)), // minus1 := 0; |
261 Assign("minus1",Num(0)), // minus1 := 0; |
262 Assign("minus2",Num(1)), // minus2 := 1; |
262 Assign("minus2",Num(1)), // minus2 := 1; |
263 Assign("temp",Num(0)), // temp := 0; |
263 Assign("temp",Num(0)), // temp := 0; |
264 While(Bop("<",Num(0),Var("n")), // while n > 0 do { |
264 While(Bop("<",Num(0),Var("n")), // while n > 0 do { |
265 List(Assign("temp",Var("minus2")), // temp := minus2; |
265 List(Assign("temp",Var("minus2")), // temp := minus2; |