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 => "" |