diff -r 56057198e4f5 -r 70c10dc41606 progs/scala/re-annotated2.sc --- 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)))