equal
deleted
inserted
replaced
33 else SEQ(der(c, r1), r2) |
33 else SEQ(der(c, r1), r2) |
34 case STAR(r1) => SEQ(der(c, r1), STAR(r1)) |
34 case STAR(r1) => SEQ(der(c, r1), STAR(r1)) |
35 case NTIMES(r1, i) => |
35 case NTIMES(r1, i) => |
36 if (i == 0) ZERO else |
36 if (i == 0) ZERO else |
37 if (nullable(r1)) SEQ(der(c, r1), UPNTIMES(r1, i - 1)) |
37 if (nullable(r1)) SEQ(der(c, r1), UPNTIMES(r1, i - 1)) |
38 else SEQ(der(c, r1), NTIMES(r1, i)) |
38 else SEQ(der(c, r1), NTIMES(r1, i - 1)) |
39 case UPNTIMES(r1, i) => |
39 case UPNTIMES(r1, i) => |
40 if (i == 0) ZERO |
40 if (i == 0) ZERO |
41 else SEQ(der(c, r1), UPNTIMES(r1, i - 1)) |
41 else SEQ(der(c, r1), UPNTIMES(r1, i - 1)) |
42 } |
42 } |
43 |
43 |
65 } |
65 } |
66 |
66 |
67 |
67 |
68 // main matcher function |
68 // main matcher function |
69 def matcher(r: Rexp, s: String) : Boolean = nullable(ders(s.toList, r)) |
69 def matcher(r: Rexp, s: String) : Boolean = nullable(ders(s.toList, r)) |
70 |
|
71 |
70 |
72 //one or zero |
71 //one or zero |
73 def OPT(r: Rexp) = ALT(r, ONE) |
72 def OPT(r: Rexp) = ALT(r, ONE) |
74 |
73 |
75 //evil regular expressions |
74 //evil regular expressions |