| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Fri, 14 Oct 2022 00:31:47 +0100 | |
| changeset 889 | c40a182af075 | 
| parent 170 | fa187fa5b642 | 
| permissions | -rw-r--r-- | 
| 170 
fa187fa5b642
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 1 | class AltParser[I, T](p: => Parser[I, T], | 
| 
fa187fa5b642
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 2 | q: => Parser[I, T]) | 
| 
fa187fa5b642
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 3 |                           extends Parser[I, T] {
 | 
| 
fa187fa5b642
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 4 | def parse(sb: I) = p.parse(sb) ++ q.parse(sb) | 
| 
fa187fa5b642
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 5 | } | 
| 
fa187fa5b642
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 6 | |
| 66 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 7 | class SeqParser[I, T, S](p: => Parser[I, T], | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 8 | q: => Parser[I, S]) | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 9 |                              extends Parser[I, (T, S)] {
 | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 10 | def parse(sb: I) = | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 11 | for ((head1, tail1) <- p.parse(sb); | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 12 | (head2, tail2) <- q.parse(tail1)) | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 13 | yield ((head1, head2), tail2) | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 14 | } | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 15 | |
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 16 | class FunParser[I, T, S](p: => Parser[I, T], f: T => S) | 
| 170 
fa187fa5b642
added slides
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
93diff
changeset | 17 |                                   extends Parser[I, S] {
 | 
| 66 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 18 | def parse(sb: I) = | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 19 | for ((head, tail) <- p.parse(sb)) | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 20 | yield (f(head), tail) | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 21 | } | 
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 22 | |
| 
9215b9fb8852
tuned
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: diff
changeset | 23 |