From bfafa7dbc3325749358538a95cbb4831db66b03c Mon Sep 17 00:00:00 2001 From: Alex AUVOLAT Date: Wed, 12 Mar 2014 10:11:12 +0100 Subject: First commit --- khb/test.ml | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 khb/test.ml (limited to 'khb/test.ml') diff --git a/khb/test.ml b/khb/test.ml new file mode 100644 index 0000000..68e3697 --- /dev/null +++ b/khb/test.ml @@ -0,0 +1,101 @@ +open Khs_ast +open Khs_exec + +let primes_khs = [| + SGoto (EStr "proc_main"); + + (* integers *) + SLabel "proc_integers"; + SGoto ( + ETernary( + EBinary(ELoad(ELocal "n"), GT, ELoad(ELocal "nmax")), + EStr "_then1", EStr "_else1")); + + SLabel "_then1"; + SSend(EInt (-1), ELocal "qo"); + SGoto(EStr "_end1"); + + SLabel "_else1"; + SSend(ELoad(ELocal "n"), ELocal "qo"); + SSet(ELocal "n", + EBinary(ELoad(ELocal "n"), PLUS, EInt 1)); + SGoto (EStr "proc_integers"); + + SLabel "_end1"; + SSet(ELocal "retval", EEmpty); + SUnset [ELocal "qo"; ELocal "nmax"; ELocal "n"]; + SGoto(ELoad(ELocal "retpos")); + + (* filter *) + SLabel "proc_filter"; + SRecv(ELocal "val", ELocal "qi"); + SGoto(ETernary( + EBinary(ELoad(ELocal "val"), NEQUAL, EInt (-1)), + EStr "_then2", EStr "_else2")); + + SLabel "_then2"; + SGoto(ETernary( + EBinary(EBinary(ELoad(ELocal "val"), MOD, ELoad(ELocal "n")), NEQUAL, EInt 0), + EStr "_then3", EStr "_end3")); + + SLabel "_then3"; + SSend(ELoad(ELocal "val"), ELocal "qo"); + + SLabel "_end3"; + SGoto(EStr "proc_filter"); + + SLabel "_else2"; + SSend(EInt (-1), ELocal "qo"); + + SSet(ELocal "retval", EEmpty); + SUnset[ELocal "qo"; ELocal "qi"; ELocal "val"; ELocal "n"]; + SGoto(ELoad(ELocal "retpos")); + + (* primes *) + SLabel "proc_primes"; + SRecv(ELocal "val", ELocal "qi"); + SGoto(ETernary( + EBinary(ELoad(ELocal "val"), NEQUAL, EInt(-1)), + EStr "_then4", EStr "_end4")); + + SLabel "_then4"; + SSend(ELoad(ELocal "val"), EStr "stdout"); + SSet(ELocal "c", ENewChan); + SPar(EStr "_par_1"); + SSet(ELocal "qi", ELoad(ECat(ELocal "c", EStr "in"))); + SGoto(EStr "proc_primes"); + + SLabel "_end4"; + SSet(ELocal "retval", EEmpty); + SUnset[ELocal "qi"; ELocal "val"; ELocal "c"]; + SGoto(ELoad(ELocal "retpos")); + + SLabel "_par_1"; + SSet(ELocal "n", ELoad(ELocal "val")); + SSet(ELocal "qo", ELoad(ECat(ELocal "c", EStr "out"))); + SGoto(EStr "proc_filter"); + + + (* main *) + SLabel "proc_main"; + SSet(ELocal "c", ENewChan); + SPar(EStr "_par_2"); + + SSet(ELocal "qi", ELoad(ECat(ELocal "c", EStr "in"))); + SSet(ELocal "retpos", EStr "_ret1"); + SGoto(EStr "proc_primes"); + + SLabel "_par_2"; + SSet(ELocal "n", EInt 2); + SSet(ELocal "nmax", EInt 3000); + SSet(ELocal "qo", ELoad(ECat(ELocal "c", EStr "out"))); + SSet(ELocal "retpos", EStr "_ret1"); + SGoto(EStr "proc_integers"); + + SLabel "_ret1"; + SExit; +|] + +let () = + Array.iter Ksh_print.print_stmt primes_khs; + Khs_exec_seq.exec_program (load_program primes_khs) -- cgit v1.2.3