读书人

How to Parsing function in haskell?

发布时间: 2012-12-31 11:57:51 作者: rapoo

How to Parsing function in haskell?
It need to parse function in Lisp format. For example...
(+ 3 4) or (* 3 4 2)
I got a something like below, but it only can parse experession like (3 + 4)
, any advice to improve this? Thanks...

mulop = do{ symbol "*"; return (SExp "*")}
<|> do{ symbol "/"; return (SExp "/")}

addop = do{ symbol "+"; return (SExp "+")}
<|> do{ symbol "-"; return (SExp "-")}

anInt = do d <- digits
ws
return $ IntExp (read d)
anSym = oneOf ['-','*','+','/',':',''','?','>','<','=']
anVar = do first <- letter <|> anSym
rest <- many (letter <|> adigit <|> anSym)
ws
return (SymExp (first:rest))

anAtom = anInt
<|> anVar
<|> parens anAtom

anExp = parens expr
<|> anAtom

expr = term `chainl1` term
term = factor `chainl1` factor
factor = parens expr
<|> anAtom

[解决办法]
blind to read

读书人网 >软件架构设计

热点推荐