exps/bit.scala
changeset 315 ab7fe342e004
parent 314 20a57552d722
child 316 0eaa1851a5b6
equal deleted inserted replaced
314:20a57552d722 315:ab7fe342e004
   101   case ALTS(rs) => rs.map(string).mkString("[", "|", "]")
   101   case ALTS(rs) => rs.map(string).mkString("[", "|", "]")
   102   case SEQ(r1, r2) => s"(${string(r1)} ~ ${string(r2)})"
   102   case SEQ(r1, r2) => s"(${string(r1)} ~ ${string(r2)})"
   103   case STAR(r) => s"{${string(r)}}*"
   103   case STAR(r) => s"{${string(r)}}*"
   104   case RECD(x, r) => s"(${x}! ${string(r)})"
   104   case RECD(x, r) => s"(${x}! ${string(r)})"
   105 }
   105 }
       
   106 
       
   107 def strings(rs: Set[Rexp]): String =
       
   108   rs.map(string).mkString("{", "|", "}")
   106 
   109 
   107 // string of an annotated regular expressions - for testing purposes
   110 // string of an annotated regular expressions - for testing purposes
   108 
   111 
   109 def astring(a: ARexp): String = a match {
   112 def astring(a: ARexp): String = a match {
   110   case AZERO => "0"
   113   case AZERO => "0"
   433 def bsimp(r: ARexp): ARexp = r match {
   436 def bsimp(r: ARexp): ARexp = r match {
   434   case ASEQ(bs1, r1, r2) => (bsimp(r1), bsimp(r2)) match {
   437   case ASEQ(bs1, r1, r2) => (bsimp(r1), bsimp(r2)) match {
   435       case (AZERO, _) => AZERO
   438       case (AZERO, _) => AZERO
   436       case (_, AZERO) => AZERO
   439       case (_, AZERO) => AZERO
   437       case (AONE(bs2), r2s) => fuse(bs1 ++ bs2, r2s)
   440       case (AONE(bs2), r2s) => fuse(bs1 ++ bs2, r2s)
       
   441       //case (AALTS(bs2, rs), r2s) =>  
       
   442       //  AALTS(bs1 ++ bs2, rs.map(ASEQ(Nil, _, r2s)))
   438       case (r1s, r2s) => ASEQ(bs1, r1s, r2s)
   443       case (r1s, r2s) => ASEQ(bs1, r1s, r2s)
   439   }
   444   }
   440   case AALTS(bs1, rs) => distinctBy(flats(rs.map(bsimp)), erase) match {
   445   case AALTS(bs1, rs) => distinctBy(flats(rs.map(bsimp)), erase) match {
   441     case Nil => AZERO
   446     case Nil => AZERO
   442     case r :: Nil => fuse(bs1, r)
   447     case r :: Nil => fuse(bs1, r)
   472 def bsimp_full(r: ARexp): ARexp = r match {
   477 def bsimp_full(r: ARexp): ARexp = r match {
   473   case ASEQ(bs1, r1, r2) => (bsimp_full(r1), bsimp_full(r2)) match {
   478   case ASEQ(bs1, r1, r2) => (bsimp_full(r1), bsimp_full(r2)) match {
   474       case (AZERO, _) => AZERO
   479       case (AZERO, _) => AZERO
   475       case (_, AZERO) => AZERO
   480       case (_, AZERO) => AZERO
   476       case (AONE(bs2), r2s) => fuse(bs1 ++ bs2, r2s)
   481       case (AONE(bs2), r2s) => fuse(bs1 ++ bs2, r2s)
       
   482       //case (AALTS(bs2, rs), r2s) =>  
       
   483       //  AALTS(bs1 ++ bs2, rs.map(ASEQ(Nil, _, r2s)))
   477       case (r1s, r2s) => ASEQ(bs1, r1s, r2s)
   484       case (r1s, r2s) => ASEQ(bs1, r1s, r2s)
   478   }
   485   }
   479   case AALTS(bs1, rs) => distinctBy(flats(rs.map(bsimp_full)), erase) match {
   486   case AALTS(bs1, rs) => distinctBy(flats(rs.map(bsimp_full)), erase) match {
   480     case Nil => AZERO
   487     case Nil => AZERO
   481     case r :: Nil => fuse(bs1, r)
   488     case r :: Nil => fuse(bs1, r)
   672 // Some Small Tests
   679 // Some Small Tests
   673 //==================
   680 //==================
   674 
   681 
   675 println("Small tests")
   682 println("Small tests")
   676 
   683 
   677 val q = STAR(STAR("bb" | "ab"))
   684 val q = STAR(STAR("bb" | ("a" | "b")))
   678 val qs = "bbb"
   685 val qs = "bb"
   679 
   686 
   680 println("Size Bit  " + asize(bders_simp(qs.toList, internalise(q))))
   687 println("Size Bit  " + asize(bders_simp(qs.toList, internalise(q))))
   681 println("Size Bitf " + asize(bders_simp_full(qs.toList, internalise(q))))
   688 println("Size Bitf " + asize(bders_simp_full(qs.toList, internalise(q))))
   682 println("Size Bit2 " + asize(bders2_simp(qs.toList, internalise(q))))
   689 println("Size Bit2 " + asize(bders2_simp(qs.toList, internalise(q))))
   683 println("Size Old  " + size(ders_simp(qs.toList, q)))
   690 println("Size Old  " + size(ders_simp(qs.toList, q)))
   684 println("Size Pder " + psize(pders_simp(qs.toList, q)))
   691 println("Size Pder " + psize(pders(qs.toList, q)))
   685 
   692 println("Size Pder simp " + psize(pders_simp(qs.toList, q)))
       
   693 
       
   694 println(astring(bders_simp(qs.toList, internalise(q))))
       
   695 println(astring(bders_simp_full(qs.toList, internalise(q))))
       
   696 println(string(ders_simp(qs.toList, q)))
       
   697 println(strings(pders(qs.toList, q)))
       
   698 println(strings(pders_simp(qs.toList, q)))
       
   699 
       
   700 System.exit(0)
   686 
   701 
   687 val re1 = STAR("a" | "aa")
   702 val re1 = STAR("a" | "aa")
   688 println(astring(bders_simp("".toList, internalise(re1))))
   703 println(astring(bders_simp("".toList, internalise(re1))))
   689 println(astring(bders_simp("a".toList, internalise(re1))))
   704 println(astring(bders_simp("a".toList, internalise(re1))))
   690 println(astring(bders_simp("aa".toList, internalise(re1))))
   705 println(astring(bders_simp("aa".toList, internalise(re1))))