138 |
138 |
139 |
139 |
140 def retrieve(r: ARexp, v: Val): Bits = (r,v) match { |
140 def retrieve(r: ARexp, v: Val): Bits = (r,v) match { |
141 case (AONE(bs), Empty) => bs |
141 case (AONE(bs), Empty) => bs |
142 case (ACHAR(bs, c), Chr(d)) => bs |
142 case (ACHAR(bs, c), Chr(d)) => bs |
|
143 case (AALTS(bs, a::Nil), v) => bs ++ retrieve(a, v) |
143 case (AALTS(bs, as), Left(v)) => bs ++ retrieve(as.head,v) |
144 case (AALTS(bs, as), Left(v)) => bs ++ retrieve(as.head,v) |
144 case (AALTS(bs, as), Right(v)) => bs ++ retrieve(AALTS(Nil,as.tail),v) |
145 case (AALTS(bs, as), Right(v)) => bs ++ retrieve(AALTS(Nil,as.tail),v) |
145 case (AALTS(bs, a::Nil), v) => bs ++ retrieve(a, v) |
|
146 case (ASEQ(bs, a1, a2), Sequ(v1, v2)) => bs ++ retrieve(a1, v1) ++ retrieve(a2, v2) |
146 case (ASEQ(bs, a1, a2), Sequ(v1, v2)) => bs ++ retrieve(a1, v1) ++ retrieve(a2, v2) |
147 case (ASTAR(bs, a), Stars(Nil)) => bs ++ List(Z) |
147 case (ASTAR(bs, a), Stars(Nil)) => bs ++ List(Z) |
148 case (ASTAR(bs, a), Stars(v::vs)) => bs ++ List(S) ++ retrieve(a, v) ++ retrieve(ASTAR(Nil, a), Stars(vs)) |
148 case (ASTAR(bs, a), Stars(v::vs)) => bs ++ List(S) ++ retrieve(a, v) ++ retrieve(ASTAR(Nil, a), Stars(vs)) |
149 } |
149 } |
150 //erase function: extracts the regx from Aregex |
150 //erase function: extracts the regx from Aregex |
455 } |
455 } |
456 case STAR(r) => STAR(simp_weakened(r)) |
456 case STAR(r) => STAR(simp_weakened(r)) |
457 case r => r |
457 case r => r |
458 } |
458 } |
459 |
459 |
460 |
|
461 //----------------------------------------------------------------------------experiment bsimp |
|
462 /* |
|
463 def bders_simp (s: List[Char], r: ARexp) : ARexp = s match { |
460 def bders_simp (s: List[Char], r: ARexp) : ARexp = s match { |
464 case Nil => r |
461 case Nil => r |
465 case c::s => bders_simp(s, bsimp(bder(c, r))) |
462 case c::s => bders_simp(s, bsimp(bder(c, r))) |
466 } |
463 } |
|
464 //----------------------------------------------------------------------------experiment bsimp |
|
465 /* |
|
466 |
467 */ |
467 */ |
468 /* |
468 /* |
469 def time[T](code: => T) = { |
469 def time[T](code: => T) = { |
470 val start = System.nanoTime() |
470 val start = System.nanoTime() |
471 val result = code |
471 val result = code |
482 blex(der_res, cs) |
482 blex(der_res, cs) |
483 } |
483 } |
484 } |
484 } |
485 |
485 |
486 def bpre_lexing(r: Rexp, s: String) = blex(internalise(r), s.toList) |
486 def bpre_lexing(r: Rexp, s: String) = blex(internalise(r), s.toList) |
487 //def blexing(r: Rexp, s: String) : Val = decode(r, blex(internalise(r), s.toList)) |
487 def blexing(r: Rexp, s: String) : Val = decode(r, blex(internalise(r), s.toList)) |
488 |
488 |
489 var bder_time = 0L |
489 var bder_time = 0L |
490 var bsimp_time = 0L |
490 var bsimp_time = 0L |
491 var mkepsBC_time = 0L |
491 var mkepsBC_time = 0L |
492 var small_de = 2 |
492 var small_de = 2 |