thys2/blexer2.sc
changeset 516 6fecb7fe8cd0
parent 514 036600af4c30
child 518 ff7945a988a3
equal deleted inserted replaced
515:84938708781d 516:6fecb7fe8cd0
   981             starPrint(r1)
   981             starPrint(r1)
   982             println("+")
   982             println("+")
   983             starPrint(r2)
   983             starPrint(r2)
   984             println(")")
   984             println(")")
   985           case ZERO => println("0")
   985           case ZERO => println("0")
   986         
       
   987       }
   986       }
   988 
   987 
   989 // @arg(doc = "small tests")
   988 // @arg(doc = "small tests")
   990 val STARREG = //((( (STAR("aa")) | STAR("aaa") ).%).%)
   989 def n_astar_list(d: Int) : Rexp = {
       
   990   if(d == 0) STAR("a") 
       
   991   else ALTS(STAR("a" * d), n_astar_list(d - 1))
       
   992 }
       
   993 def n_astar_alts(d: Int) : Rexp = d match {
       
   994   case 0 => n_astar_list(0)
       
   995   case d => STAR(n_astar_list(d))
       
   996   // case r1 :: r2 :: Nil => ALTS(r1, r2)
       
   997   // case r1 :: Nil => r1
       
   998   // case r :: rs => ALTS(r, n_astar_alts(rs))
       
   999   // case Nil => throw new Error("should give at least 1 elem")
       
  1000 }
       
  1001 def n_astar_aux(d: Int) = {
       
  1002   if(d == 0) n_astar_alts(0)
       
  1003   else ALTS(n_astar_alts(d), n_astar_alts(d - 1))
       
  1004 }
       
  1005 
       
  1006 def n_astar(d: Int) : Rexp = STAR(n_astar_aux(d))
       
  1007 //val STARREG = n_astar(3)
       
  1008 // ( STAR("a") | 
       
  1009 //                  ("a" | "aa").% | 
       
  1010 //                 ( "a" | "aa" | "aaa").% 
       
  1011 //                 ).%
       
  1012                 //( "a" | "aa" | "aaa" | "aaaa").% |
       
  1013                 //( "a" | "aa" | "aaa" | "aaaa" | "aaaaa").% 
   991 (((STAR("a") | ( STAR("aaa")) | STAR("aaaaa"| ( STAR("aaaaaaa")) | STAR("aaaaaaaaaaa"))).%).%).%
  1014 (((STAR("a") | ( STAR("aaa")) | STAR("aaaaa"| ( STAR("aaaaaaa")) | STAR("aaaaaaaaaaa"))).%).%).%
   992 
  1015 
   993 // @main
  1016 // @main
   994 
  1017 
   995 
  1018 def lcm(list: Seq[Int]):Int=list.foldLeft(1:Int){
       
  1019   (a, b) => b * a /
       
  1020   Stream.iterate((a,b)){case (x,y) => (y, x%y)}.dropWhile(_._2 != 0).head._1.abs
       
  1021 }
   996 
  1022 
   997 def small() = {
  1023 def small() = {
   998 
  1024   //val pderSTAR = pderUNIV(STARREG)
   999 
  1025 
  1000 //   println(lexing_simp(NOTREG, prog0))
  1026   //val refSize = pderSTAR.map(size(_)).sum
  1001 //   val v = lex_simp(NOTREG, prog0.toList)
  1027   for(n <- 6 to 6){
  1002 //   println(v)
  1028     val STARREG = n_astar(n)
  1003 
  1029     val iMax = (lcm((1 to n).toList))
  1004 //   val d =  (lex_simp(NOTREG, prog0.toList))
  1030     for(i <- 1 to iMax + 50){// 100, 400, 800, 840, 841, 900 
  1005 //   println(d)
  1031       val prog0 = "a" * i
  1006   val pderSTAR = pderUNIV(STARREG)
  1032       //println(s"test: $prog0")
  1007 
  1033       print(n)
  1008   val refSize = pderSTAR.map(size(_)).sum
  1034       print(" ")
  1009   // println("different partial derivative terms:")
  1035       // print(i)
  1010   // pderSTAR.foreach(r => r match {
  1036       // print(" ")
  1011       
  1037       println(asize(bders_simp(prog0.toList, internalise(STARREG))))
  1012   //       case SEQ(head, rstar) =>
  1038     }
  1013   //         println(shortRexpOutput(head) ++ "~STARREG")
  1039   }
  1014   //       case STAR(rstar) =>
       
  1015   //         println("STARREG")
       
  1016       
       
  1017   //   }
       
  1018   //   )
       
  1019   // println("the total number of terms is")
       
  1020   // //println(refSize)
       
  1021   // println(pderSTAR.size)
       
  1022 
       
  1023   // val A : Rexp= ("c" | (ONE | "b") ~ "d") ~((ONE).%)
       
  1024   // val B : Rexp = ((ONE).%)
       
  1025   // val C : Rexp = ("d") ~ ((ONE).%)
       
  1026   // val PRUNE_REG : Rexp = (C | B | A)
       
  1027   // val APRUNE_REG = internalise(PRUNE_REG)
       
  1028   // val program_solution = pruneRexp(APRUNE_REG, breakIntoTerms(PRUNE_REG))
       
  1029   // println("program executes and gives: as disired!")
       
  1030   // println(shortRexpOutput(erase(program_solution)))
       
  1031   // val simpedPruneReg = strongBsimp(APRUNE_REG)
       
  1032 
       
  1033   // println(shortRexpOutput(erase(simpedPruneReg)))
       
  1034 
       
  1035 
       
  1036   for(i <- List(1,2,3,4,10, 100, 400, 841, 900 ) ){// 100, 400, 800, 840, 841, 900
       
  1037     val prog0 = "a" * i
       
  1038     //println(s"test: $prog0")
       
  1039     println(s"testing with $i a's" )
       
  1040     //val bd = bdersSimp(prog0, STARREG)//DB
       
  1041     val sbd = bdersStrongRexp(prog0, STARREG)//strongDB
       
  1042     starPrint(erase(sbd))
       
  1043     val subTerms = breakIntoTerms(erase(sbd))
       
  1044     //val subTermsLarge = breakIntoTerms(erase(bd))
       
  1045     
       
  1046     println(s"subterms of regex with strongDB: ${subTerms.length}")//, standard DB: ${subTermsLarge.length}")
       
  1047 
       
  1048 
       
  1049 
       
  1050     println("the number of distinct subterms for bsimp with strongDB")
       
  1051     println(subTerms.distinct.size)
       
  1052     //println(subTermsLarge.distinct.size)
       
  1053     if(pderSTAR.size > subTerms.length)
       
  1054       println(s"which is less than or equal to the number of PDER terms: ${pderSTAR.size}")
       
  1055 
       
  1056 
       
  1057     // println(shortRexpOutput(erase(sbd)))
       
  1058     // println(shortRexpOutput(erase(bd)))
       
  1059     
       
  1060     println("pdersize, original, strongSimp")
       
  1061     println(refSize, size(STARREG),  asize(sbd))
       
  1062 
       
  1063     //val vres = strong_blexing_simp( STARREG, prog0)
       
  1064     //println(vres)
       
  1065   }
       
  1066   // println(vs.length)
       
  1067   // println(vs)
       
  1068    
       
  1069 
       
  1070   // val prog1 = """read  n; write n"""  
       
  1071   // println(s"test: $prog1")
       
  1072   // println(lexing_simp(WHILE_REGS, prog1))
       
  1073   // val display = ("a"| "ab").%
       
  1074   // val adisplay = internalise(display)
       
  1075   // bders_simp( "aaaaa".toList, adisplay)
       
  1076 }
  1040 }
  1077 
  1041 
  1078 def generator_test() {
  1042 def generator_test() {
  1079 
  1043 
  1080   // test(rexp(7), 1000) { (r: Rexp) => 
  1044   // test(rexp(7), 1000) { (r: Rexp) => 
  1159     !boolList.exists(b => b == false)
  1123     !boolList.exists(b => b == false)
  1160   }
  1124   }
  1161 
  1125 
  1162 
  1126 
  1163 }
  1127 }
  1164 // small()
  1128 small()
  1165 generator_test()
  1129 // generator_test()
  1166 
  1130 
  1167 1
  1131 // 1
  1168 
  1132 
  1169 SEQ(SEQ(SEQ(ONE,CHAR('b')),STAR(CHAR('b'))),
  1133 // SEQ(SEQ(SEQ(ONE,CHAR('b')),STAR(CHAR('b'))),
  1170 SEQ(ALTS(ALTS(ZERO,STAR(CHAR('b'))),
  1134 // SEQ(ALTS(ALTS(ZERO,STAR(CHAR('b'))),
  1171 STAR(ALTS(CHAR('a'),SEQ(SEQ(STAR(ALTS(STAR(CHAR('c')),CHAR('a'))),
  1135 // STAR(ALTS(CHAR('a'),SEQ(SEQ(STAR(ALTS(STAR(CHAR('c')),CHAR('a'))),
  1172 SEQ(CHAR('a'),SEQ(ALTS(CHAR('b'),ZERO),SEQ(ONE,CHAR('b'))))),ONE)))),ONE))
  1136 // SEQ(CHAR('a'),SEQ(ALTS(CHAR('b'),ZERO),SEQ(ONE,CHAR('b'))))),ONE)))),ONE))
  1173 
  1137 
  1174 
  1138 
  1175 // Sequ(Sequ(Sequ(Empty,Chr(b)),Stars(List(Chr(b), Chr(b)))),Sequ(Right(Stars(List(Right(Sequ(Sequ(Stars(List(Right(Chr(a)), Right(Chr(a)))),Sequ(Chr(a),Sequ(Left(Chr(b)),Sequ(Empty,Chr(b))))),Empty)), Right(Sequ(Sequ(Stars(List(Right(Chr(a)), Right(Chr(a)))),Sequ(Chr(a),Sequ(Left(Chr(b)),Sequ(Empty,Chr(b))))),Empty))))),Empty))
  1139 // Sequ(Sequ(Sequ(Empty,Chr(b)),Stars(List(Chr(b), Chr(b)))),Sequ(Right(Stars(List(Right(Sequ(Sequ(Stars(List(Right(Chr(a)), Right(Chr(a)))),Sequ(Chr(a),Sequ(Left(Chr(b)),Sequ(Empty,Chr(b))))),Empty)), Right(Sequ(Sequ(Stars(List(Right(Chr(a)), Right(Chr(a)))),Sequ(Chr(a),Sequ(Left(Chr(b)),Sequ(Empty,Chr(b))))),Empty))))),Empty))
  1176 // Sequ(Sequ(Sequ(Empty,Chr(b)),Stars(List(Chr(b), Chr(b)))),Sequ(Right(Stars(List(Right(Sequ(Sequ(Stars(List(Right(Chr(a)), Right(Chr(a)))),Sequ(Chr(a),Sequ(Left(Chr(b)),Sequ(Empty,Chr(b))))),Empty)), Right(Sequ(Sequ(Stars(List(Right(Chr(a)), Right(Chr(a)))),Sequ(Chr(a),Sequ(Left(Chr(b)),Sequ(Empty,Chr(b))))),Empty))))),Empty))
  1140 // Sequ(Sequ(Sequ(Empty,Chr(b)),Stars(List(Chr(b), Chr(b)))),Sequ(Right(Stars(List(Right(Sequ(Sequ(Stars(List(Right(Chr(a)), Right(Chr(a)))),Sequ(Chr(a),Sequ(Left(Chr(b)),Sequ(Empty,Chr(b))))),Empty)), Right(Sequ(Sequ(Stars(List(Right(Chr(a)), Right(Chr(a)))),Sequ(Chr(a),Sequ(Left(Chr(b)),Sequ(Empty,Chr(b))))),Empty))))),Empty))