git @ Cat's Eye Technologies Parc / 3ba7aa8
Rename the combinator. Chris Pressey 2 years ago
2 changed file(s) with 5 addition(s) and 5 deletion(s). Raw diff Collapse all Expand all
11
22 import ParcSt2St
33
4 transform :: (ParseState a -> ParseState b) -> (a -> b -> c) -> ParseState a -> ParseState c
5 transform c f =
4 merge :: (ParseState a -> ParseState b) -> (a -> b -> c) -> ParseState a -> ParseState c
5 merge c f =
66 (\st ->
77 case st of
88 Failure -> Failure
1111
1212 -- Grammar
1313
14 expr0 = seq (expr1) (many (transform (seq (char '+') expr1) (\v0 v1 -> v0 + v1)))
15 expr1 = seq (expr2) (many (transform (seq (char '*') expr2) (\v0 v1 -> v0 * v1)))
14 expr0 = seq (expr1) (many (merge (seq (char '+') expr1) (\v0 v1 -> v0 + v1)))
15 expr1 = seq (expr2) (many (merge (seq (char '*') expr2) (\v0 v1 -> v0 * v1)))
1616 expr2 = alt number parenthesized
1717 parenthesized = seq (char '(') (seq expr0 (char ')'))
1818
2929 '9' -> Just 9
3030 _ -> Nothing)
3131
32 accDigit = transform digit (\v0 v1 -> v0 * 10 + v1)
32 accDigit = merge digit (\v0 v1 -> v0 * 10 + v1)
3333
3434 number = seq (update $ \v -> 0) (many1 accDigit)
3535