Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. data Type = Int | Bool deriving (Show)
  2.  
  3. emptyMap = Map.empty
  4.  
  5. vars :: Cmd -> Map String Type -> Map String Type
  6. vars (Seq a b) m = Map.union (vars a m) (vars b m)
  7. vars (DeclareIntVar v) m = (Map.insert (v) (Int) m)
  8. vars (DeclareBoolVar v) m = (Map.insert (v) (Bool) m)
  9. vars _ m = emptyMap
  10.  
  11. symToData :: Map String Type -> String
  12. symToData x = computeList (Map.toList (x))
  13.  
  14. computeList :: [(String, Type)] -> String
  15. computeList [] = ".data\n"
  16. computeList ((a,Int):xs) = computeList xs ++ (stringEscape a ++ ":" ++ " .space 4\n")
  17. computeList ((a,Bool):xs) = computeList xs ++ (stringEscape a ++ ":" ++ " .space 1\n")
  18.  
  19. -- no main:
  20.  
  21. putStr $ symToData (vars (removeMain $ parse $ scanTokens s) emptyMap)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement