progs/scala/re-annotated2.sc
changeset 647 70c10dc41606
parent 645 304a12cdda6f
--- a/progs/scala/re-annotated2.sc	Fri May 26 08:09:30 2023 +0100
+++ b/progs/scala/re-annotated2.sc	Fri May 26 08:10:17 2023 +0100
@@ -211,7 +211,7 @@
       case (_, AZERO) => AZERO
       case (AONE(bs2), r2s) => fuse(bs1 ++ bs2, r2s)
       // needed in order to keep the size down
-      case (AALTS(bs, rs), r2) => AALTS(bs1 ++ bs, rs.map(ASEQ(Nil, _, r2)))
+      //case (AALTS(bs, rs), r2) => AALTS(bs1 ++ bs, rs.map(ASEQ(Nil, _, r2)))
       case (r1s, r2s) => ASEQ(bs1, r1s, r2s)
   }
   // distinctBy deletes copies of the same  "erased" regex
@@ -223,6 +223,11 @@
   case r => r
 }
 
+def bders_simp(r: ARexp, s: List[Char]) : ARexp = s match {
+  case Nil => r
+  case c::cs => bders_simp(bsimp(bder(c, r)), cs)
+}
+
 def blex_simp(r: ARexp, s: List[Char]) : Bits = s match {
   case Nil => if (bnullable(r)) bmkeps(r) 
               else throw new Exception("Not matched")
@@ -368,3 +373,16 @@
 val n = 200
 println(s"lexing fib program ($n times, size ${prog2.length * n})")
 println(time_needed(1, blexing_simp(WHILE_REGS, prog2 * n)))
+
+
+
+
+
+val reg2 = STAR("a" | "aa")
+
+println(bsize(bders_simp(internalise(reg2), ("a" * 0).toList)))
+println(bsize(bders_simp(internalise(reg2), ("a" * 1).toList)))
+println(bsize(bders_simp(internalise(reg2), ("a" * 2).toList)))
+println(bsize(bders_simp(internalise(reg2), ("a" * 3).toList)))
+println(bsize(bders_simp(internalise(reg2), ("a" * 4).toList)))
+println(bsize(bders_simp(internalise(reg2), ("a" * 50000).toList)))