422
|
1 |
def simp(r: Rexp) : Rexp = r match {
|
262
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
2 |
case ALT(r1, r2) => {
|
343
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
3 |
(simp(r1), simp(r2)) match {
|
399
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
4 |
case (ZERO, r2s) => r2s
|
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
5 |
case (r1s, ZERO) => r1s
|
412
|
6 |
case (r1s, r2s) =>
|
|
7 |
if (r1s == r2s) r1s else ALT(r1s, r2s)
|
262
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
8 |
}
|
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
9 |
}
|
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
10 |
case SEQ(r1, r2) => {
|
343
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
11 |
(simp(r1), simp(r2)) match {
|
399
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
12 |
case (ZERO, _) => ZERO
|
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
13 |
case (_, ZERO) => ZERO
|
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
14 |
case (ONE, r2s) => r2s
|
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
15 |
case (r1s, ONE) => r1s
|
343
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
16 |
case (r1s, r2s) => SEQ(r1s, r2s)
|
262
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
17 |
}
|
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
18 |
}
|
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
19 |
case r => r
|
7
|
20 |
}
|
|
21 |
|
412
|
22 |
def ders(s: List[Char], r: Rexp) : Rexp = s match {
|
117
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
23 |
case Nil => r
|
435
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
24 |
case c::s => ders(s, simp(der(c, r))) /*@\label{simpline}@*/
|
117
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
25 |
}
|
Christian Urban <christian dot urban at kcl dot ac dot uk>
diff
changeset
|
26 |
|