progs/fun.scala
changeset 311 6719e8d10a0d
parent 225 ef573e8fc86e
child 323 4ce07c4abdb4
equal deleted inserted replaced
310:d384fe01d0e8 311:6719e8d10a0d
   126 val WHITESPACE = PLUS(" " | "\n" | "\t")
   126 val WHITESPACE = PLUS(" " | "\n" | "\t")
   127 val RPAREN: Rexp = ")"
   127 val RPAREN: Rexp = ")"
   128 val LPAREN: Rexp = "("
   128 val LPAREN: Rexp = "("
   129 val ALL = SYM | DIGIT | OP | " " | ":" | ";" | "\"" | "=" | "," | "(" | ")"
   129 val ALL = SYM | DIGIT | OP | " " | ":" | ";" | "\"" | "=" | "," | "(" | ")"
   130 val ALL2 = ALL | "\n"
   130 val ALL2 = ALL | "\n"
   131 //val COMMENT2 = ("/*" ~ NOT(ALL.% ~ "*/" ~ ALL.%) ~ "*/")
       
   132 val COMMENT = ("/*" ~ ALL2.% ~ "*/") | ("//" ~ ALL.% ~ "\n")
   131 val COMMENT = ("/*" ~ ALL2.% ~ "*/") | ("//" ~ ALL.% ~ "\n")
   133 
   132 
   134 
   133 
   135 // token for While language
   134 // token for While language
   136 abstract class Token
   135 abstract class Token
   229   case Sequ(e1, e2) => List(max_stack_exp(e1), max_stack_exp(e2)).max
   228   case Sequ(e1, e2) => List(max_stack_exp(e1), max_stack_exp(e2)).max
   230 }
   229 }
   231 def max_stack_bexp(e: BExp): Int = e match {
   230 def max_stack_bexp(e: BExp): Int = e match {
   232   case Bop(_, a1, a2) => max_stack_exp(a1) + max_stack_exp(a2)
   231   case Bop(_, a1, a2) => max_stack_exp(a1) + max_stack_exp(a2)
   233 }
   232 }
   234 
       
   235 
       
   236 
   233 
   237 // Parser combinators
   234 // Parser combinators
   238 abstract class Parser[I <% Seq[_], T] {
   235 abstract class Parser[I <% Seq[_], T] {
   239   def parse(ts: I): Set[(T, I)]
   236   def parse(ts: I): Set[(T, I)]
   240 
   237 
   477   println("Time: " + time_needed(2, ("java " + class_name + "/" + class_name).!))
   474   println("Time: " + time_needed(2, ("java " + class_name + "/" + class_name).!))
   478 }
   475 }
   479 
   476 
   480 
   477 
   481 //examples
   478 //examples
   482 //compile_run("defs.rec")
   479 compile_run("defs.rec")
   483 compile_run("fact.rec")
   480 //compile_run("fact.rec")