Add homework 3 solution for CS325
This commit is contained in:
@@ -46,6 +46,11 @@ translateStmt (FunctionDef s ps b) = block head body
|
||||
body = stmtBlock b
|
||||
translateStmt (Return e) = ["return " ++ translateExpr e]
|
||||
translateStmt (Standalone e) = [translateExpr e]
|
||||
translateStmt (Import s) = ["import " ++ s]
|
||||
translateStmt (FromImport s ss) =
|
||||
["from " ++ s ++ " import " ++ intercalate "," ss]
|
||||
translateStmt (Nonlocal vs) =
|
||||
["nonlocal " ++ intercalate "," vs]
|
||||
|
||||
precedence :: PyBinOp -> Int
|
||||
precedence Add = 3
|
||||
@@ -74,12 +79,12 @@ opString GreaterThan = ">"
|
||||
opString GreaterThanEq = ">="
|
||||
opString Equal = "=="
|
||||
opString NotEqual = "!="
|
||||
opString And = "and"
|
||||
opString Or = "or"
|
||||
opString And = " and "
|
||||
opString Or = " or "
|
||||
|
||||
translateOp :: PyBinOp -> PyBinOp -> PyExpr -> String
|
||||
translateOp o o' =
|
||||
if precedence o < precedence o'
|
||||
if precedence o > precedence o'
|
||||
then parenth . translateExpr
|
||||
else translateExpr
|
||||
|
||||
@@ -109,7 +114,7 @@ translateExpr (Lambda ps e) = parenth (head ++ ": " ++ body)
|
||||
head = "lambda " ++ intercalate ", " (map translatePat ps)
|
||||
body = translateExpr e
|
||||
translateExpr (Var s) = s
|
||||
translateExpr (Tuple es) = list "(" ")" es
|
||||
translateExpr (TupleLiteral es) = list "(" ")" es
|
||||
translateExpr (FunctionCall f ps) = translateExpr f ++ list "(" ")" ps
|
||||
translateExpr (Access (Var s) e) = s ++ list "[" "]" e
|
||||
translateExpr (Access e@Access{} i) = translateExpr e ++ list "[" "]" i
|
||||
|
||||
Reference in New Issue
Block a user