Files
lci/bin/main.ml

68 lines
2.0 KiB
OCaml
Raw Normal View History

2024-11-20 00:13:05 +01:00
open MiniImp
2024-12-03 17:18:42 +01:00
let colorred s =
"\027[31m" ^ s ^ "\027[0m"
2024-11-20 00:13:05 +01:00
let () =
2024-12-03 17:18:42 +01:00
let program = "
2024-12-21 02:16:04 +01:00
def main with input c output m as
a := 0;
b := a + 1;
c := c + b;
a := b * 2;
if a < 3 then
c := 4
else
c := 6
2024-12-03 17:18:42 +01:00
"
in
2024-12-12 16:37:36 +01:00
(* Printf.printf "%s\n%s\n" (colorred "Program is") program; *)
2024-11-20 00:13:05 +01:00
let get_result x = Lexing.from_string x |> Parser.prg Lexer.lex in
let p = get_result program in
2024-12-12 16:37:36 +01:00
(* Format.printf "%s\n%a\n@?" (colorred "AST is") Types.pp_p_exp p; *)
2024-12-03 17:18:42 +01:00
let convertedcfg = CfgImp.convert_io 10 p in
2024-11-27 20:18:30 +01:00
2024-12-12 16:37:36 +01:00
(* Printf.printf "%s\n%a" (colorred "Converted CFG is") CfgImp.SSCfg.pp convertedcfg; *)
2024-11-27 20:18:30 +01:00
let convertedrisccfg = CfgRISC.convert convertedcfg in
2024-11-20 00:13:05 +01:00
2024-12-03 17:18:42 +01:00
Printf.printf "%s\n%a" (colorred "Converted RISC CFG is") CfgRISC.RISCCfg.pp convertedrisccfg;
2024-12-12 16:37:36 +01:00
(* ---------------------------------- *)
let analysiscfg = DefinedVariables.compute_defined_variables convertedrisccfg in
2024-12-21 02:16:04 +01:00
(* Printf.printf "%s\n%a" (colorred "Analysis CFG is") DefinedVariables.DVCfg.pp analysiscfg; *)
2024-12-12 16:37:36 +01:00
2024-12-21 02:16:04 +01:00
(* Printf.printf "%s\n" (colorred "Undefined Variables are:"); *)
(* List.iter (fun v -> Printf.printf "%a, " DefinedVariables.Variable.pp v) (DefinedVariables.check_undefined_variables analysiscfg); *)
(* Printf.printf "\n"; *)
2024-12-12 16:37:36 +01:00
let convertedrisccfg = DefinedVariables.compute_cfg analysiscfg in
2024-12-21 02:16:04 +01:00
(* 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 "Analysis CFG is") LiveVariables.DVCfg.pp analysiscfg;
let convertedrisccfg = LiveVariables.optimize_cfg analysiscfg |> LiveVariables.compute_cfg in
2024-12-12 16:37:36 +01:00
(* ---------------------------------- *)
let _risc = RISC.convert convertedrisccfg in
2024-12-12 16:37:36 +01:00
(* Printf.printf "%s\n%a" (colorred "RISC code is") RISC.RISCAssembly.pp risc; *)
(* let computerisc = RISCSemantics.reduce risc in *)
2024-12-03 17:18:42 +01:00
2024-12-12 16:37:36 +01:00
(* Printf.printf "%s\n%d\n" (colorred "Output of RISC code is") computerisc; *)
2024-12-03 17:18:42 +01:00
2024-12-12 16:37:36 +01:00
()