progs/app6.scala
changeset 117 25999de692b2
parent 93 4794759139ea
child 262 ee4304bc6350
equal deleted inserted replaced
116:010ae7288327 117:25999de692b2
     1 def deriv (r: Rexp, c: Char) : Rexp = r match {
     1 def der (r: Rexp, c: Char) : Rexp = r match {
     2   case NULL => NULL
     2   case NULL => NULL
     3   case EMPTY => NULL
     3   case EMPTY => NULL
     4   case CHAR(d) => if (c == d) EMPTY else NULL
     4   case CHAR(d) => if (c == d) EMPTY else NULL
     5   case ALT(r1, r2) => ALT(deriv(r1, c), deriv(r2, c))
     5   case ALT(r1, r2) => ALT(der(r1, c), der(r2, c))
     6   case SEQ(r1, r2) => 
     6   case SEQ(r1, r2) => 
     7     if (nullable(r1)) ALT(SEQ(deriv(r1, c), r2), deriv(r2, c))
     7     if (nullable(r1)) ALT(SEQ(der(r1, c), r2), der(r2, c))
     8     else SEQ(deriv(r1, c), r2)
     8     else SEQ(der(r1, c), r2)
     9   case STAR(r) => SEQ(deriv(r, c), STAR(r))
     9   case STAR(r) => SEQ(der(r, c), STAR(r))
    10 }
    10 }
    11 
    11 
       
    12 def ders (s: List[Char], r: Rexp) : Rexp = s match {
       
    13   case Nil => r
       
    14   case c::s => ders(s, der(c, r))
       
    15 }
       
    16