def simp(r: Rexp) : Rexp = r match {+ −
case ALT(r1, r2) => {+ −
(simp(r1), simp(r2)) match {+ −
case (ZERO, r2s) => r2s+ −
case (r1s, ZERO) => r1s+ −
case (r1s, r2s) => + −
if (r1s == r2s) r1s else ALT(r1s, r2s)+ −
}+ −
}+ −
case SEQ(r1, r2) => {+ −
(simp(r1), simp(r2)) match {+ −
case (ZERO, _) => ZERO+ −
case (_, ZERO) => ZERO+ −
case (ONE, r2s) => r2s+ −
case (r1s, ONE) => r1s+ −
case (r1s, r2s) => SEQ(r1s, r2s)+ −
}+ −
}+ −
case r => r+ −
}+ −
+ −
def ders(s: List[Char], r: Rexp) : Rexp = s match {+ −
case Nil => r+ −
case c::s => ders(s, simp(der(c, r))) /*@\label{simpline}@*/ + −
}+ −
+ −