o****i 发帖数: 1706 | 1 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 |
|