Concurrent Clean : Parser Combinator

ちょっと分かってきた

module paren

import StdEnv
import Parsers

Start
    # res = parse wholeparse ['()((()*1'] "" ""
    = case res of
        Succ r = hd r
        Err a b pos  = abort (foldl printPos "error" pos)
            with
                printPos s (At pos)
                    = s +++ " at " +++ (toString pos)
                printPos s (EndAt pos)
                    = s +++ " end at " +++ (toString pos)


Tree = Bin (Tree,Tree)
| Nil wholeparse = parens <&&> empty <@ (\(x,_) -> x) parens = (open &> parens <& close) <&&> parens //<@ (\(x,y) -> max (x+1) y) <@ (\(x,y) -> Bin (x,y)) <|> yield Nil //empty // <@ (\(x,y) -> 0) open = symbolH '(' close = symbolH ')'

*1:))r)(