progs/compile-lexer.scala
changeset 704 6d9c960a2b26
parent 323 4ce07c4abdb4
child 906 2bf1516d730f
equal deleted inserted replaced
703:57b3ae5ba5e2 704:6d9c960a2b26
   447   case While(b, bl) => 
   447   case While(b, bl) => 
   448     if (eval_bexp(b, env)) eval_stmt(While(b, bl), eval_bl(bl, env))
   448     if (eval_bexp(b, env)) eval_stmt(While(b, bl), eval_bl(bl, env))
   449     else env
   449     else env
   450   case WriteS(s: String) => { println(s); env }
   450   case WriteS(s: String) => { println(s); env }
   451   case Write(s: String) => { println(env(s)); env }
   451   case Write(s: String) => { println(env(s)); env }
   452   case Read(s: String) => tokenizer(Console.readLine) match {
   452   //case Read(s: String) => tokenizer(Console.readLine) match {
   453     case List(T_NUM(n)) => env + (s -> n.toInt)
   453   //  case List(T_NUM(n)) => env + (s -> n.toInt)
   454     case _ => { println("not a number"); eval_stmt(Read(s: String), env) }
   454   //  case _ => { println("not a number"); eval_stmt(Read(s: String), env) }
   455   }
   455   //}
   456 }
   456 }
   457 
   457 
   458 def eval_bl(bl: Block, env: Env) : Env = bl match {
   458 def eval_bl(bl: Block, env: Env) : Env = bl match {
   459   case Nil => env
   459   case Nil => env
   460   case s::bl => eval_bl(bl, eval_stmt(s, env))
   460   case s::bl => eval_bl(bl, eval_stmt(s, env))
   669 
   669 
   670 
   670 
   671 //examples
   671 //examples
   672 //println(compile("test", p9))
   672 //println(compile("test", p9))
   673 //compile_run("loops.while")
   673 //compile_run("loops.while")
   674 compile_run("p.while")
   674 //compile_run("p.while")
       
   675 compile_run("fib.while")
   675 //compile_run("test.while")
   676 //compile_run("test.while")