Guest User

Untitled

a guest
May 25th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. import Text.Parsec
  2.  
  3. data Term = Plus Term Term
  4. | Minus Term Term
  5. | Div Term Term
  6. | Mult Term Term
  7. | Number Integer
  8. deriving (Show)
  9.  
  10. type TermParser a = Parsec String () a
  11.  
  12. opParser :: TermParser (Term -> Term -> Term)
  13. opParser = choice [ char '+' >> return Plus
  14. , char '-' >> return Minus
  15. , char '/' >> return Div
  16. , char '*' >> return Mult ]
  17.  
  18. numberParser :: TermParser Term
  19. numberParser = Number . (read :: String -> Integer) <$> many1 digit
  20.  
  21. termParser :: TermParser Term
  22. termParser = chainl1 numberParser opParser
  23.  
  24. -- > runParser termParser () "" "231+4321*434"
  25. -- Right (Mult (Plus (Number 231) (Number 4321)) (Number 434))
Add Comment
Please, Sign In to add comment