equal
deleted
inserted
replaced
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)))) |