open Affichage open Typing type entry = Simple of Lam.lam | AlphaEquiv of Lam.lam * Lam.lam let interpret e = begin print_expr e; print_newline(); print_ty (typeinfer [] e); print_newline() end let nom_fichier = ref "" let equiv_fichier = ref "" let parse_channel c = let lexbuf = Lexing.from_channel c in Parser.main Lexer.token lexbuf let recupere_entree () = let optlist = [ ("-alphaequiv", Arg.Set_string equiv_fichier, "Vérifie l'alpha équivalence avec un autre fichier"); ] in let usage = "Bienvenue à bord." in (* message d'accueil, option -help *) Arg.parse (* ci-dessous les 3 arguments de Arg.parse : *) optlist (* la liste des options definie plus haut *) (fun s -> nom_fichier := s) (* la fonction a declencher lorsqu'on recupere un string qui n'est pas une option : ici c'est le nom du fichier, et on stocke cette information dans la reference nom_fichier *) usage; (* le message d'accueil *) let lam1 = try let where_from = match !nom_fichier with | "" -> stdin | s -> open_in s in parse_channel where_from with e -> (Printf.printf "problème de saisie\n"; raise e) in if !equiv_fichier <> "" then let lam2 = try parse_channel (open_in !equiv_fichier) with e -> (Printf.printf "problème de saisie\n"; raise e) in AlphaEquiv (lam1, lam2) else Simple lam1 (* la fonction principale *) let run () = try match recupere_entree () with Simple l -> let _ = interpret l in () | AlphaEquiv (l1, l2) -> begin if ((Lam.(=~)) l1 l2) then print_string "true\n" else print_string "false\n" end; flush stdout with e -> raise e let _ = run ()