progs/re2.scala
changeset 414 065ca01b62ae
parent 343 539b2e88f5b9
child 415 4ae59fd3b174
equal deleted inserted replaced
413:b7221df9662a 414:065ca01b62ae
    39 
    39 
    40 
    40 
    41 //optional: one or zero times
    41 //optional: one or zero times
    42 def OPT(r: Rexp) = ALT(r, EMPTY)
    42 def OPT(r: Rexp) = ALT(r, EMPTY)
    43 
    43 
    44 def EVIL(n: Int) = SEQ(NTIMES(OPT(CHAR('a')), n), NTIMES(CHAR('a'), n))
    44 def EVIL1(n: Int) = SEQ(NTIMES(OPT(CHAR('a')), n), NTIMES(CHAR('a'), n))
       
    45 val EVIL2 = SEQ(STAR(CHAR('a')), CHAR('b'))
    45 
    46 
    46 def time_needed[T](i: Int, code: => T) = {
    47 def time_needed[T](i: Int, code: => T) = {
    47   val start = System.nanoTime()
    48   val start = System.nanoTime()
    48   for (j <- 1 to i) code
    49   for (j <- 1 to i) code
    49   val end = System.nanoTime()
    50   val end = System.nanoTime()
    50   (end - start)/(i * 1.0e9)
    51   (end - start)/(i * 1.0e9)
    51 }
    52 }
    52 
    53 
    53 //for (i <- 1 to 100) {
    54 //for (i <- 1 to 100) {
    54 //  println(i + ": " + "%.5f".format(time_needed(1, matches(EVIL(i), "a" * i))))
    55 //  println(i + ": " + "%.5f".format(time_needed(1, matches(EVIL1(i), "a" * i))))
    55 //}
    56 //}
    56 
    57 
    57 //a bit bolder test
    58 //a bit bolder test
    58 for (i <- 1 to 1000 by 50) {
    59 for (i <- 1 to 1000 by 50) {
    59   println(i + " " + "%.5f".format(time_needed(1, matches(EVIL(i), "a" * i))))
    60   println(i + " " + "%.5f".format(time_needed(1, matches(EVIL1(i), "a" * i))))
    60 }
    61 }
    61 
    62 
    62 
    63 
       
    64 for (i <- 1 to 4002 by 500) {
       
    65   println(i + " " + "%.5f".format(time_needed(4, matches(EVIL2, "a" * i))))
       
    66 }
       
    67 
       
    68