# HG changeset patch # User Christian Urban # Date 1363100603 0 # Node ID d682591c63e1110191229b8192c92e01bcb44372 # Parent 18905d086cbbe21764bdacee855585b0218d558e better printing of register programs in Scala diff -r 18905d086cbb -r d682591c63e1 paper.pdf Binary file paper.pdf has changed diff -r 18905d086cbb -r d682591c63e1 scala/abacus.scala --- a/scala/abacus.scala Sun Mar 10 07:10:50 2013 +0000 +++ b/scala/abacus.scala Tue Mar 12 15:03:23 2013 +0000 @@ -4,10 +4,18 @@ import lib._ // Abacus instructions -sealed abstract class AInst -case class Inc(n: Int) extends AInst -case class Dec(n: Int, l: Int) extends AInst -case class Goto(l: Int) extends AInst +sealed abstract class AInst { + def print : String +} +case class Inc(n: Int) extends AInst { + override def print = "Inc(" + n.toString + ")\n" +} +case class Dec(n: Int, l: Int) extends AInst { + override def print = "Dec(" + n.toString + "," + l.toString + ")\n" +} +case class Goto(l: Int) extends AInst { + override def print = "Goto(" + l.toString + ")\n" +} type AProg = List[AInst] type Regs = Map[Int, Int] @@ -17,6 +25,7 @@ // Abacus machines case class Abacus(p: AProg) { + def print = p.foldLeft[String]("")(_ + _.print) //simple composition def ++ (that: Abacus) = Abacus(p ::: that.p) diff -r 18905d086cbb -r d682591c63e1 scala/ex.scala --- a/scala/ex.scala Sun Mar 10 07:10:50 2013 +0000 +++ b/scala/ex.scala Tue Mar 12 15:03:23 2013 +0000 @@ -5,6 +5,8 @@ import comp1._ import comp2._ +print(compile_rec(S)._1.print) + // Turing machine examples val TMCopy = TM((WBk, 5), (R, 2), (R, 3), (R, 2), (WOc, 3), (L, 4), (L, 4), (L, 5), (R, 11), (R, 6), @@ -94,7 +96,7 @@ val res = (abc_f.run(abc_map))(arity) val end = System.nanoTime() val time = (end - start)/1.0e9 - ("Result: " + res + " length: " + abc_f.p.length + " time: " + "%.5f".format(time)) + ("Result: " + res + " length: " + abc_f.p.length + " time: " + "%.5f".format(time) + "\n Prog:" + abc_f) } println("S(3) " + test_comp2(S, 3))