module Main (main) where import System.Environment import LrcPrelude import Funcs_Parser_Lazy import Data_Lazy import Visfun_Lazy -- runSemantics :: String -> [BibEntry] runSemantics inp pw = lrcEval (runParser inp) pw runEval fn pw = do s <- readFile fn let (code,errors,te,pp) = runSemantics s pw putStrLn "Pretty Printed Input:" putStrLn pp putStrLn "MSP Generated Code:" putStrLn (showCode code) putStrLn "Detected Semantic Errors:" putStrLn (show errors) putStrLn (show te) -- putStrLn pp_code return () main :: IO () main = do args <- getArgs putStrLn (show args) let fn = head args let pw = mytoint (head . tail $ args) runEval fn pw mytoint :: String -> Integer mytoint s = read s showCode [] = "\n" showCode (x:xs) = (showInstr x) ++ "\n" ++ (showCode xs) showInstr (C_ALabel_1 n) = (show n) ++ ":" showInstr C_Add_1 = "ADD" showInstr C_And_1 = "AND" showInstr (C_Call_1 n) = "CALL " ++ (showName n) showInstr C_Cod_1 = "CODIGO" showInstr C_Data_1 = "MEMORIA DE DADOS" showInstr C_Div_1 = "DIV" showInstr C_Eq_1 = "EQ" showInstr C_Gt_1 = "GT" showInstr C_Halt_1 = "HALT" showInstr C_IIn_1 = "IN" showInstr C_IOut_1 = "OUT" showInstr (C_Jump_1 n) = "JMP " ++ (showName n) showInstr (C_Jumpf_1 n) = "JMPF " ++ (showName n) showInstr C_Load_1 = "LOAD" showInstr C_Lt_1 = "LT" showInstr C_Minus_1 = "MIN" showInstr C_Mul_1 = "MUL" showInstr C_Neq_1 = "NEQ" showInstr C_Not_1 = "NOT" showInstr C_Or_1 = "OR" showInstr (C_Pusha_1 n i) = "PUSHa " ++ (showName n) ++ " " ++ (show i) showInstr (C_Pushb_1 b) = "PUSHb " ++ (show b) showInstr (C_Pushi_1 i) = "PUSHi " ++ (show i) showInstr (C_Pushr_1 r) = "PUSHr " ++ (show r) showInstr C_Ret_1 = "RET" showInstr C_Store_1 = "STORE" showInstr C_Sub_1 = "SUB" showInstr (C_Var_1 n i t) = (showName n) ++ " TAM " ++ (show i) showName (C_Ident_1 n) = show n