progs/fun.scala
changeset 225 ef573e8fc86e
parent 223 e4b29b57f6a3
child 311 6719e8d10a0d
equal deleted inserted replaced
224:70198792c2aa 225:ef573e8fc86e
   219 case class Bop(o: String, a1: Exp, a2: Exp) extends BExp
   219 case class Bop(o: String, a1: Exp, a2: Exp) extends BExp
   220 
   220 
   221 // calculating the maximal needed stack size
   221 // calculating the maximal needed stack size
   222 def max_stack_exp(e: Exp): Int = e match {
   222 def max_stack_exp(e: Exp): Int = e match {
   223   case Call(_, args) => args.map(max_stack_exp).sum
   223   case Call(_, args) => args.map(max_stack_exp).sum
   224   case If(a, e1, e2) => max_stack_bexp(a) + (List(max_stack_exp(e1), max_stack_exp(e1)).max)
   224   case If(a, e1, e2) => max_stack_bexp(a) + (List(max_stack_exp(e1), max_stack_exp(e2)).max)
   225   case Write(e) => max_stack_exp(e) + 1
   225   case Write(e) => max_stack_exp(e) + 1
   226   case Var(_) => 1
   226   case Var(_) => 1
   227   case Num(_) => 1
   227   case Num(_) => 1
   228   case Aop(_, a1, a2) => max_stack_exp(a1) + max_stack_exp(a2)
   228   case Aop(_, a1, a2) => max_stack_exp(a1) + max_stack_exp(a2)
   229   case Sequ(e1, e2) => List(max_stack_exp(e1), max_stack_exp(e2)).max
   229   case Sequ(e1, e2) => List(max_stack_exp(e1), max_stack_exp(e2)).max
   477   println("Time: " + time_needed(2, ("java " + class_name + "/" + class_name).!))
   477   println("Time: " + time_needed(2, ("java " + class_name + "/" + class_name).!))
   478 }
   478 }
   479 
   479 
   480 
   480 
   481 //examples
   481 //examples
   482 compile_run("defs.rec")
   482 //compile_run("defs.rec")
   483 //compile_run("fact.rec")
   483 compile_run("fact.rec")