pieuvre/main.ml

66 lines
1.7 KiB
OCaml
Raw Normal View History

2024-04-09 11:30:52 +02:00
open Affichage
2024-04-16 10:07:09 +02:00
open Typing
2024-04-09 11:09:33 +02:00
2024-04-16 11:40:08 +02:00
type entry =
Simple of Lam.lam
| AlphaEquiv of Lam.lam * Lam.lam
2024-04-09 11:09:33 +02:00
let interpret e =
begin
2024-04-09 11:30:52 +02:00
print_expr e;
2024-04-09 11:09:33 +02:00
print_newline();
2024-04-16 10:07:09 +02:00
print_ty (typeinfer [] e);
2024-04-09 11:09:33 +02:00
print_newline()
end
2024-04-16 11:40:08 +02:00
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
2024-04-09 11:09:33 +02:00
2024-04-16 11:40:08 +02:00
(* 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
2024-04-09 11:09:33 +02:00
2024-04-16 11:40:08 +02:00
let _ = run ()
2024-04-09 11:09:33 +02:00