exps/bit.scala
changeset 317 db0ff630bbb7
parent 316 0eaa1851a5b6
equal deleted inserted replaced
316:0eaa1851a5b6 317:db0ff630bbb7
   390 
   390 
   391 //erase function: extracts a Rexp from Arexp
   391 //erase function: extracts a Rexp from Arexp
   392 def erase(r: ARexp) : Rexp = r match{
   392 def erase(r: ARexp) : Rexp = r match{
   393   case AZERO => ZERO
   393   case AZERO => ZERO
   394   case AONE(_) => ONE
   394   case AONE(_) => ONE
   395   case APRED(bs, f, s) => PRED(f, s)
   395   case APRED(_, f, s) => PRED(f, s)
   396   case AALTS(bs, rs) => ALTS(rs.map(erase(_)))
   396   case AALTS(_, rs) => ALTS(rs.map(erase(_)))
   397   case ASEQ(bs, r1, r2) => SEQ (erase(r1), erase(r2))
   397   case ASEQ(_, r1, r2) => SEQ(erase(r1), erase(r2))
   398   case ASTAR(cs, r)=> STAR(erase(r))
   398   case ASTAR(_, r)=> STAR(erase(r))
   399 }
   399 }
   400 
   400 
   401 
   401 
   402 // bnullable function: tests whether the aregular 
   402 // bnullable function: tests whether the aregular 
   403 // expression can recognise the empty string
   403 // expression can recognise the empty string
   440   case c::s => bders(s, bder(c, r))
   440   case c::s => bders(s, bder(c, r))
   441 }
   441 }
   442 
   442 
   443 def flats(rs: List[ARexp]): List[ARexp] = rs match {
   443 def flats(rs: List[ARexp]): List[ARexp] = rs match {
   444     case Nil => Nil
   444     case Nil => Nil
   445     case AZERO :: rs1 => flats(rs1)
   445     case AZERO::rs1 => flats(rs1)
   446     case AALTS(bs, rs1) :: rs2 => rs1.map(fuse(bs, _)) ::: flats(rs2)
   446     case AALTS(bs, rs1)::rs2 => rs1.map(fuse(bs, _)) ::: flats(rs2)
   447     case r1 :: rs2 => r1 :: flats(rs2)
   447     case r1::rs2 => r1::flats(rs2)
   448 }
   448 }
   449 
   449 
   450 def stack(r1: ARexp, r2: ARexp) = r1 match {
   450 def stack(r1: ARexp, r2: ARexp) = r1 match {
   451   case AONE(bs2) => fuse(bs2, r2)
   451   case AONE(bs2) => fuse(bs2, r2)
   452   case _ => ASEQ(Nil, r1, r2)
   452   case _ => ASEQ(Nil, r1, r2)
   736 //println(string(ders_simp(qs.toList, q)))
   736 //println(string(ders_simp(qs.toList, q)))
   737 //println(strings(pders(qs.toList, q)))
   737 //println(strings(pders(qs.toList, q)))
   738 println(strings(pders_simp(qs.toList, q)))
   738 println(strings(pders_simp(qs.toList, q)))
   739 
   739 
   740 
   740 
       
   741 val w : Rexp = ((("a" | "b") | "b".%) | "ab") ~ ("a".% | ("b" | "b"))
       
   742 val ws = "ab"
       
   743 
       
   744 lexing(w, ws)
       
   745 blexing_simp(w, ws)
       
   746 
       
   747 
       
   748         
       
   749 
       
   750 
       
   751 
   741 
   752 
   742 System.exit(0)
   753 System.exit(0)
   743 
   754 
   744 val re1 = STAR("a" | "aa")
   755 val re1 = STAR("a" | "aa")
   745 println(astring(bders_simp("".toList, internalise(re1))))
   756 println(astring(bders_simp("".toList, internalise(re1))))