Advertisement
Guest User

Untitled

a guest
Oct 7th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --After really struggling alot I just mostly followed what is described in the lecture slides.
  2. parseExpr :: [String] -> (Ast, [String])
  3. --parseExpr [] = (Var "Syntax error", [])
  4. parseExpr [] = error "Not a valid expression"
  5. parseExpr ("+":rs) = let (e1, r1) = parseExpr rs
  6.                          (e2, r2) = parseExpr r1 in (Sum e1 e2, r2)
  7.                        
  8. parseExpr ("*":rs) = let (e1, r1) = parseExpr rs
  9.                          (e2, r2) = parseExpr r1 in (Mult e1 e2, r2)
  10.  
  11. parseExpr ("-":rs) = let (e1, r1) = parseExpr rs
  12.                          (e2, r2) = parseExpr r1 in (Min e1 e2, r2)
  13.  
  14. --Changed to guards.
  15. parseExpr (s:rs)
  16.     | (onlyDigits s) = (Tall (read s :: Int), rs)
  17.     | otherwise = error ("Syntax error at: " ++ s)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement