equal
  deleted
  inserted
  replaced
  
    
    
    41   case c::s => SEQ(CHAR(c), charlist2rexp(s))  | 
    41   case c::s => SEQ(CHAR(c), charlist2rexp(s))  | 
    42 }  | 
    42 }  | 
    43   | 
    43   | 
    44 given Conversion[String, Rexp] = (s => charlist2rexp(s.toList))  | 
    44 given Conversion[String, Rexp] = (s => charlist2rexp(s.toList))  | 
    45   | 
    45   | 
    46 //extension (s: String) { | 
    46   | 
    47 //  def $ (r: Rexp) = RECD(s, r)  | 
         | 
    48 //}  | 
         | 
    49 extension (s: String) { | 
    47 extension (s: String) { | 
    50   def $ (r: Rexp) = RECD(s, r)  | 
    48   def $ (r: Rexp) = RECD(s, r)  | 
    51   def | (r: Rexp) = ALT(s, r)  | 
    49   def | (r: Rexp) = ALT(s, r)  | 
    52   def | (r: String) = ALT(s, r)  | 
    50   def | (r: String) = ALT(s, r)  | 
    53   def % = STAR(s)  | 
    51   def % = STAR(s)  | 
    79   case ALT(r1, r2) => ALT(der(c, r1), der(c, r2))  | 
    77   case ALT(r1, r2) => ALT(der(c, r1), der(c, r2))  | 
    80   case SEQ(r1, r2) =>   | 
    78   case SEQ(r1, r2) =>   | 
    81     if (nullable(r1)) ALT(SEQ(der(c, r1), r2), der(c, r2))  | 
    79     if (nullable(r1)) ALT(SEQ(der(c, r1), r2), der(c, r2))  | 
    82     else SEQ(der(c, r1), r2)  | 
    80     else SEQ(der(c, r1), r2)  | 
    83   case STAR(r) => SEQ(der(c, r), STAR(r))  | 
    81   case STAR(r) => SEQ(der(c, r), STAR(r))  | 
    84   case RECD(_, r1) => der(c, r1)  | 
    82   case RECD(label, r1) => der(c, r1)  | 
    85 }  | 
    83 }  | 
    86   | 
    84   | 
    87 // extracts a string from a value  | 
    85 // extracts a string from a value  | 
    88 def flatten(v: Val) : String = v match { | 
    86 def flatten(v: Val) : String = v match { | 
    89   case Empty => ""  | 
    87   case Empty => ""  |