main_solution3/re.scala
changeset 494 253d1ccb65de
parent 475 59e005dcf163
--- a/main_solution3/re.scala	Sun Sep 15 12:57:59 2024 +0100
+++ b/main_solution3/re.scala	Mon Jul 21 16:38:07 2025 +0100
@@ -142,6 +142,34 @@
 }
 
 
+def draw_rs(rs: List[Rexp], prefix: String) : String = {
+  val rsi = rs.iterator
+  rsi.map(r => draw_r(r, prefix, rsi.hasNext)).mkString
+}
+
+def draw_r(e: Rexp, prefix: String, more: Boolean) : String = {
+  val full_prefix = s"$prefix${if more then "├" else "└"}"
+  val childPrefix = s"$prefix${if more then "│" else " "} "
+  s"\n${full_prefix}" ++
+  (e match {
+    case ZERO => s"0"
+    case ONE => s"1"
+    case CHAR(c) => s"$c"
+    case ALTs(rs) => s"ALTs" ++ draw_rs(rs, childPrefix)
+    case SEQs(rs) => s"SEQs" ++ draw_rs(rs, childPrefix)
+    case STAR(r) => s"STAR" ++ draw_r(r, childPrefix, false)
+  })
+}
+
+def draw(e: Rexp) = 
+    draw_r(e, "", false)
+
+
+val re = STAR(STAR("aa" | "aaa"))
+
+for (n <- 1 to 100) {
+  println(s"$n: ${size(ders(("a" * n).toList, re))}")
+}
 
 // some testing data
 /*