Advertisement
Patasuss

Untitled

Apr 10th, 2017
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.83 KB | None | 0 0
  1. trans :: Expression -> String
  2. trans = trans_E []
  3.  
  4. trans_E :: Tab -> Expression -> String
  5. trans_E varDefs ex = case ex of
  6. Val valOfNum -> "top++; S[top] = " ++ (show valOfNum :: Int)
  7. Idf valName -> "top++; S[top] = L[" ++ (show (lookup valName varDefs)) ++ "];"
  8. Binary lhs op rhs -> case op of
  9. Plus -> (trans varDefs lhs) ++ (trans varDefs rhs) ++ "top--;S[top]=S[top]+S[top+1];"
  10. Minus -> (trans varDefs lhs) ++ (trans varDefs rhs) ++ "top--;S[top]=S[top]-S[top+1];"
  11. Times -> (trans varDefs lhs) ++ (trans varDefs rhs) ++ "top--;S[top]=S[top]*S[top+1];"
  12. Div -> (trans varDefs lhs) ++ (trans varDefs rhs) ++ "top--;S[top]=S[top]/S[top+1];"
  13. Let valName valExpr inExpr -> (trans varDefs valExpr) ++ "L["++(show (lookup valName varDefs))++"]=S[top]; top--,"++(trans (valName,(lookup valName varDefs)):varDefs inExpr)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement