(** Main module, parses command-line arguments and cycles through phases. *) (** Command-line arguments are first parsed and the result saved them in {!Globals.args}. Then all phases are executed successively. Run [./civicc -help] in a terminal to see the available command-line options. Exceptions defined in {!Types} are caught and error messages printed accordingly. *) (** Main function of a phase. Each phase exports a function of this signature that is called by the main module. *) type phase_func = Types.intermediate -> Types.intermediate