@@ -33,7 +33,7 @@ let prove_mode_conv =
3333 [ (" batch" , Batch ); (" cached" , Cached ); (" incremental" , Incremental ) ]
3434
3535let parse_cmdline =
36- let aux files solver prover_mode debug print_statistics =
36+ let run debug files solver prover_mode print_statistics =
3737 let module Mappings =
3838 (val mappings_of_solver solver : Mappings_intf.S_with_fresh )
3939 in
@@ -72,24 +72,53 @@ let parse_cmdline =
7272 Solver. pp_statistics state.solver
7373 end
7474 in
75+
76+ let to_smt2 debug solver file =
77+ let module Mappings =
78+ (val mappings_of_solver solver : Mappings_intf.S_with_fresh )
79+ in
80+ Mappings. set_debug debug;
81+ let ast = Parse. from_file ~filename: file in
82+ let assertions =
83+ List. filter_map (function Ast. Assert e -> Some e | _ -> None ) ast
84+ in
85+ Format. printf " %a@." (Mappings. pp_smt ?status:None ) assertions
86+ in
87+
7588 let open Cmdliner in
89+ let file0 =
90+ Arg. (
91+ required
92+ & pos 0 (some string ) None
93+ & info [] ~docv: " files" ~doc: " files to read" )
94+ in
7695 let files =
7796 Arg. (value & pos_all string [] & info [] ~docv: " files" ~doc: " files to read" )
78- and prover =
97+ in
98+ let solver =
7999 Arg. (
80100 value & opt solver_conv Z3_solver
81101 & info [ " s" ; " solver" ] ~doc: " SMT solver to use" )
82- and prover_mode =
102+ in
103+ let solver_mode =
83104 Arg. (
84105 value & opt prove_mode_conv Batch & info [ " mode" ] ~doc: " SMT solver mode" )
85- and debug =
106+ in
107+ let debug =
86108 Arg. (value & flag & info [ " debug" ] ~doc: " Print debugging messages" )
87- and print_statistics =
109+ in
110+ let print_statistics =
88111 Arg. (value & flag & info [ " st" ] ~doc: " Print statistics" )
89112 in
90- Cmd. v
91- (Cmd. info " smtml" ~version: " %%VERSION%%" )
92- Term. (const aux $ files $ prover $ prover_mode $ debug $ print_statistics)
113+
114+ let run_cmd =
115+ Cmd. v (Cmd. info " run" )
116+ Term. (const run $ debug $ files $ solver $ solver_mode $ print_statistics)
117+ in
118+ let to_smt2 =
119+ Cmd. v (Cmd. info " to-smt2" ) Term. (const to_smt2 $ debug $ solver $ file0)
120+ in
121+ Cmd. group (Cmd. info " smtml" ~version: " %%VERSION%%" ) [ run_cmd; to_smt2 ]
93122
94123let () =
95124 match Cmdliner.Cmd. eval_value parse_cmdline with
0 commit comments