heptagon/compiler/main/heptc.ml

97 lines
2.9 KiB
OCaml
Raw Normal View History

2010-06-18 15:40:48 +02:00
(**************************************************************************)
(* *)
(* Heptagon *)
(* *)
(* Author : Marc Pouzet *)
(* Organization : Demons, LRI, University of Paris-Sud, Orsay *)
(* *)
(**************************************************************************)
2010-06-18 15:40:48 +02:00
open Misc
open Location
2010-06-18 15:40:48 +02:00
open Compiler_utils
open Hept_compiler
2010-06-18 15:40:48 +02:00
2010-06-18 15:40:48 +02:00
let compile_impl modname filename =
2010-06-18 15:40:48 +02:00
(* input and output files *)
let source_name = filename ^ ".ept"
and obj_interf_name = filename ^ ".epci"
and mls_name = filename ^ ".mls" in
2010-06-18 15:40:48 +02:00
let ic, lexbuf = lexbuf_from_file source_name
2010-06-18 15:40:48 +02:00
and itc = open_out_bin obj_interf_name
and mlsc = open_out mls_name in
2010-06-18 15:40:48 +02:00
let close_all_files () =
close_in ic;
close_out itc;
close_out mlsc in
2010-06-18 15:40:48 +02:00
try
init_compiler modname;
2010-06-18 15:40:48 +02:00
(* Parsing of the file *)
let p = parse_implementation lexbuf in
let p = { p with Hept_parsetree.p_modname = modname } in
2010-06-18 15:40:48 +02:00
(* Convert the parse tree to Heptagon AST *)
2010-07-05 16:05:43 +02:00
let p = Hept_scoping.translate_program p in
comment "Parsing";
pp p;
2010-06-18 15:40:48 +02:00
(* Process the Heptagon AST *)
let p = Hept_compiler.compile_impl pp p in
Modules.write itc;
(* Compile Heptagon to MiniLS *)
let p = Hept2mls.program p in
let pp = Mls_printer.print stdout in
comment "Translation into MiniLs";
Mls_printer.print mlsc p;
(* Process the MiniLS AST *)
let p = Mls_compiler.compile pp p in
(* Generate the sequential code *)
Mls2seq.program p;
close_all_files ()
with
2010-06-18 15:40:48 +02:00
| x -> close_all_files (); raise x
2010-06-18 15:40:48 +02:00
let main () =
try
Arg.parse
[
"-v",Arg.Set verbose, doc_verbose;
"-version", Arg.Unit show_version, doc_version;
"-i", Arg.Set print_types, doc_print_types;
"-I", Arg.String add_include, doc_include;
"-where", Arg.Unit locate_stdlib, doc_locate_stdlib;
"-stdlib", Arg.String set_stdlib, doc_stdlib;
"-c", Arg.Set create_object_file, doc_object_file;
2010-06-18 15:40:48 +02:00
"-s", Arg.String set_simulation_node, doc_sim;
2010-07-19 12:00:30 +02:00
"-inline", Arg.String add_inlined_node, doc_inline;
"-flatten", Arg.Set flatten, doc_flatten;
2010-06-27 23:27:54 +02:00
"-assert", Arg.String add_assert, doc_assert;
2010-06-18 15:40:48 +02:00
"-nopervasives", Arg.Unit set_no_pervasives, doc_no_pervasives;
"-target", Arg.String add_target_language, doc_target;
"-targetpath", Arg.String set_target_path, doc_target_path;
"-noinit", Arg.Clear init, doc_noinit;
2010-06-18 15:40:48 +02:00
"-fti", Arg.Set full_type_info, doc_full_type_info;
]
(compile compile_impl)
2010-06-18 15:40:48 +02:00
errmsg;
with
| Misc.Error -> exit 2;;
main ()