refactor: Use analyzer to parse rawtext into ast

This commit is contained in:
Lucàs
2024-07-04 00:41:32 +02:00
parent 6cbfb1c6a6
commit 0a42fbe3dc
5 changed files with 47 additions and 37 deletions
+11 -30
View File
@@ -3,35 +3,16 @@
open Printf
open Ast.Print
let get_lexbuf () =
if Array.length Sys.argv > 1 then (
let lexbuf = Lexing.from_channel (open_in Sys.argv.(1)) in
Lexing.set_filename lexbuf Sys.argv.(1);
lexbuf)
else
let lexbuf = Lexing.from_channel stdin in
Lexing.set_filename lexbuf "stdin";
lexbuf
exception Error of string
let () =
let lexbuf = get_lexbuf () in
let res =
try Parser.main Lexer.token lexbuf with
| Lexer.Error c ->
let file_name = lexbuf.lex_curr_p.pos_fname
and line_num = lexbuf.lex_curr_p.pos_lnum
and col_num = lexbuf.lex_curr_p.pos_cnum - lexbuf.lex_curr_p.pos_bol in
fprintf stderr "Fichier \"%s\", ligne %d, colonne %d\n%s: %s\n"
file_name line_num col_num "Erreur lexicale"
("Caractère '" ^ String.make 1 c ^ "' inconnu");
exit 1
| Parser.Error ->
let file_name = lexbuf.lex_curr_p.pos_fname
and line_num = lexbuf.lex_curr_p.pos_lnum
and col_num = lexbuf.lex_curr_p.pos_cnum - lexbuf.lex_curr_p.pos_bol in
fprintf stderr "Fichier \"%s\", ligne %d, colonne %d\n%s: %s\n"
file_name line_num col_num "Erreur syntaxique" "Syntaxe incorrecte";
exit 1
in
let _ = res in
Printf.printf "%s\n" (string_of_source_file res)
(* Array.iteri (fun i arg -> printf "%d: %s\n" i arg) Sys.argv; *)
let help_message = "Usage: croissant <file_path>\n"
and args_count = Array.length Sys.argv - 1 in
if args_count >= 2 then printf "%s" help_message
else if args_count = 1 then
let file_path = Sys.argv.(1) in
let ast = string_of_source_file (Analyzer.analyze_file file_path) in
printf "%s\n" ast
else raise (Error "interpreter from stdin is not implemented yet")
(* TODO: Implement interpreter from stdin *)