Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. parseTerm1 :: ReadP Term
  2. parseTerm1=parseVName +++ number
  3.  
  4. parseOpe :: OpTable -> ReadP Term
  5. parseOpe (OpTable [])= parseVName +++ number
  6. parseOpe (OpTable (c:cs)) =
  7.   case c of
  8.     (FLeft,ops) ->
  9.       chainl1 (parseOpe (OpTable cs)) (parserOp ops)
  10.     (FRight,ops) ->
  11.       chainr1 (parseOpe (OpTable cs)) (parserOp ops)
  12.  
  13.  
  14. opParser :: ReadP String
  15. opParser = token $ do
  16.   fL <- satisfy (`elem` ['!','@','#','+','-','*','/','\\','<','>','='])
  17.   rL <- munch (`elem` ['!','@','#','+','-','*','/','\\','<','>','='])
  18.   return $ fL:rL
  19.  
  20.  
  21. parserOp :: [String] -> ReadP (Term -> Term -> Term)
  22. parserOp operators = choice $ map f operators
  23.                       where f _= do
  24.                               op <- opParser
  25.                               return $ \l r -> TFun op [l, r]
  26.  
  27. parseTerm2 :: OpTable -> ReadP Term
  28. parseTerm2 a =token $ do
  29.               p <- parseOpe a
  30.               eof
  31.               return p
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement