| author | cu | 
| Tue, 03 Oct 2017 23:01:06 +0100 | |
| changeset 512 | 56550ad904d8 | 
| parent 95 | dbe49327b6c5 | 
| permissions | -rw-r--r-- | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 1 | import scala.language.implicitConversions | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 2 | import scala.language.reflectiveCalls | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 3 | |
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 4 | abstract class Rexp | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 5 | |
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 6 | case object NULL extends Rexp | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 7 | case object EMPTY extends Rexp | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 8 | case class CHAR(c: Char) extends Rexp | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 9 | case class ALT(r1: Rexp, r2: Rexp) extends Rexp | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 10 | case class SEQ(r1: Rexp, r2: Rexp) extends Rexp | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 11 | case class STAR(r: Rexp) extends Rexp | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 12 | |
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 13 | abstract class Pat | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 14 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 15 | case class VAR(x: String, r: Rexp) extends Pat | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 16 | case class GRP(x: String, p: Pat) extends Pat | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 17 | case class PSEQ(p1: Pat, p2: Pat) extends Pat | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 18 | case class PALT(p1: Pat, p2: Pat) extends Pat | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 19 | case class PSTAR(p: Pat) extends Pat | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 20 | |
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 21 | |
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 22 | def nullable (r: Rexp) : Boolean = r match {
 | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 23 | case NULL => false | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 24 | case EMPTY => true | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 25 | case CHAR(_) => false | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 26 | case ALT(r1, r2) => nullable(r1) || nullable(r2) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 27 | case SEQ(r1, r2) => nullable(r1) && nullable(r2) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 28 | case STAR(_) => true | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 29 | } | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 30 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 31 | def down (p: Pat) : Rexp = p match {
 | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 32 | case VAR(x: String, w: String, r: Rexp) => r | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 33 | case GRP(x: String, w: String, p: Pat) => down(p) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 34 | case PSEQ(p1: Pat, p2: Pat) => SEQ(down(p1), down(p2)) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 35 | case PALT(p1: Pat, p2: Pat) => ALT(down(p1), down(p2)) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 36 | case PSTAR(p: Pat) => STAR(down(p)) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 37 | } | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 38 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 39 | def patnullable (p: Pat) : Boolean = p match {
 | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 40 | case PVar(_, r) => nullable(r) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 41 | case PSEQ(p1, p2) => patnullable(p1) && patnullable(p2) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 42 | case PCHOICE(p1, p2) => patnullable(p1) || patnullable(p2) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 43 | case PSTAR(p) => true | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 44 | case PatVar(_, p) => patnullable(p) | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 45 | } | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 46 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 47 | //type Env = Set[List[(String, String)]] | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 48 | type Env = Map[Int, String] | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 49 | |
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 50 | def update(n: Int, c: Char) (env: Env) = | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 51 | env + (n -> (env.getOrElse(n, "") + c.toString)) | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 52 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 53 | def pderivPat (p: Pat, c: Char) : Set[(Pat, Env => Env)] = p match {
 | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 54 |   case PVar(n: Int, r: Rexp) => {
 | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 55 | val pds = pderiv(r, c) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 56 | if (pds.isEmpty) Set() | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 57 | else Set((PVar(n, toRexp(pds.toList)), update(n, c))) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 58 | } | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 59 |   case PSEQ(p1: Pat, p2: Pat) => {
 | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 60 | val pats : Set[(Pat, Env => Env)] = | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 61 | for ((p, f) <- pderivPat(p1, c)) yield (PSEQ(p, p2), f) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 62 | if (nullable(strip(p1))) pats ++ pderivPat(p2, c) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 63 | else pats | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 64 | } | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 65 | case PCHOICE(p1: Pat, p2: Pat) => pderivPat(p1, c) ++ pderivPat(p2, c) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 66 | case PSTAR(p1: Pat) => | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 67 | for ((p, f) <- pderivPat(p1, c)) yield (PSEQ(p, PSTAR(p1)), f) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 68 | case PatVar(n: Int, p1: Pat) => | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 69 | for ((p, f) <- pderivPat(p1, c)) yield (PatVar(n, p), f compose (update (n, c))) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 70 | } | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 71 | |
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 72 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 73 | val p2 = PSEQ(PVar(1, STAR("A")), PVar(2, STAR("A")))
 | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 74 | pderivPat(p2, 'A').mkString("\n")
 | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 75 | |
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 76 | |
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 77 | def greedy_aux(env: Set[(Pat, Env)], w: List[Char]) : Set[Env] = w match {
 | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 78 | case Nil => | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 79 | for ((p, e) <- env if patnullable(p)) yield e | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 80 |   case c::cs => {
 | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 81 | val env2 = for ((p, e) <- env; (p1, f) <- pderivPat(p, c)) yield (p1, f(e)) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 82 | greedy_aux(env2, cs) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 83 | } | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 84 | } | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 85 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 86 | def greedy(p: Pat, w: String) = {
 | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 87 | val res = greedy_aux(Set((p, Map())), w.toList) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 88 | if (res.isEmpty) None else Some(res) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 89 | } | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 90 | |
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 91 | // some convenience for typing in regular expressions | 
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 92 | def charlist2rexp (s : List[Char]) : Rexp = s match {
 | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 93 | case Nil => EMPTY | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 94 | case c::Nil => CHAR(c) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 95 | case c::s => SEQ(CHAR(c), charlist2rexp(s)) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 96 | } | 
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 97 | implicit def string2rexp (s : String) : Rexp = charlist2rexp(s.toList) | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 98 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 99 | implicit def RexpOps (r: Rexp) = new {
 | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 100 | def | (s: Rexp) = ALT(r, s) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 101 | def % = STAR(r) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 102 | def ~ (s: Rexp) = SEQ(r, s) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 103 | } | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 104 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 105 | implicit def stringOps (s: String) = new {
 | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 106 | def | (r: Rexp) = ALT(s, r) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 107 | def | (r: String) = ALT(s, r) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 108 | def % = STAR(s) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 109 | def ~ (r: Rexp) = SEQ(s, r) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 110 | def ~ (r: String) = SEQ(s, r) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 111 | } | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 112 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 113 | implicit def PatOps (p: Pat) = new {
 | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 114 | def | (q: Pat) = PALT(p, q) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 115 | def % = PSTAR(p) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 116 | def ~ (q: Pat) = PSEQ(p, q) | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 117 | } | 
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 118 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 119 | val p3 = PSTAR(PSEQ(PVar(1, "A"), PVar(2, "B"))) | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 120 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 121 | greedy2(Set((p3, Map())), "ABAB".toList) | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 122 | |
| 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 123 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 124 | val p4 = PVar(1, "A") | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 125 | greedy2(Set((p4, Map())), "A".toList) | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 126 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 127 | val p5 = PSEQ(PVar(1, "A"), PVar(1, "B")) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 128 | greedy2(Set((p5, Map())), "AB".toList) | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 129 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 130 | val res = pderivPat(p5, 'A') | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 131 | for ((_, f) <- res) yield f(Map()) | 
| 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 132 | |
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 133 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 134 | val p6 = PatVar(4,PSTAR(PCHOICE(PCHOICE(PVar(1, "A"), PVar(2, "AB")), PVar(3, "B")))) | 
| 94 
9ea667baf097
added first part of the Sulzmann paper
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 135 | |
| 95 
dbe49327b6c5
added new stuff
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
94diff
changeset | 136 | greedy(p6, "ABA") |