66 lines
1.7 KiB
OCaml
66 lines
1.7 KiB
OCaml
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 ()
|
|
|