open MiniImp let colorred s = "\027[31m" ^ s ^ "\027[0m" let () = let program = " def main with input in output out as out := in; a := 1; b := 2; c := a + a; " in (* Printf.printf "%s\n%s\n" (colorred "Program is") program; *) let get_result x = Lexing.from_string x |> Parser.prg Lexer.lex in let p = get_result program in (* Format.printf "%s\n%a\n@?" (colorred "AST is") Types.pp_p_exp p; *) let convertedcfg = CfgImp.convert_io 10 p in (* Printf.printf "%s\n%a" (colorred "Converted CFG is") CfgImp.SSCfg.pp convertedcfg; *) let convertedrisccfg = CfgRISC.convert convertedcfg in Printf.printf "%s\n%a" (colorred "Converted RISC CFG is") CfgRISC.RISCCfg.pp convertedrisccfg; (* ---------------------------------- *) let analysiscfg = DefinedVariables.compute_defined_variables convertedrisccfg in (* Printf.printf "%s\n%a" (colorred "Analysis CFG is") DefinedVariables.DVCfg.pp analysiscfg; *) (* Printf.printf "%s" (colorred "Undefined Variables are:"); *) (* ( *) (* match DefinedVariables.check_undefined_variables analysiscfg with *) (* | None -> Printf.printf " none"; *) (* | Some l -> Printf.printf " %a" DefinedVariables.Variable.pplist l; *) (* ); *) (* Printf.printf "\n"; *) let convertedrisccfg = DefinedVariables.compute_cfg analysiscfg in (* Printf.printf "%s\n%a" (colorred "Converted RISC after analysis CFG is") CfgRISC.RISCCfg.pp convertedrisccfg; *) (* let analysiscfg = LiveVariables.compute_live_variables convertedrisccfg in *) (* Printf.printf "%s\n%a" (colorred "Live Analysis CFG is") LiveVariables.DVCfg.pp analysiscfg; *) (* let convertedrisccfg = LiveVariables.compute_cfg analysiscfg in *) (* Printf.printf "%s\n%a" (colorred "Converted RISC with no analysis CFG is") CfgRISC.RISCCfg.pp convertedrisccfg; *) (* let convertedrisccfg = LiveVariables.compute_cfg (LiveVariables.optimize_cfg analysiscfg) in *) (* Printf.printf "%s\n%a" (colorred "Converted RISC after analysis CFG is") CfgRISC.RISCCfg.pp convertedrisccfg; *) let convertedrisccfg = ReduceRegisters.reduceregisters 4 convertedrisccfg in Printf.printf "%s\n%a" (colorred "Converted RISC after reducing registers CFG is") CfgRISC.RISCCfg.pp convertedrisccfg; (* ---------------------------------- *) let risc = RISC.convert convertedrisccfg in Printf.printf "%s\n%a" (colorred "RISC code is") RISC.RISCAssembly.pp risc; let computerisc = RISCSemantics.reduce risc in Printf.printf "%s\n%d\n" (colorred "Output of RISC code is") computerisc; ()