TP-automates/TP2/mainJava.ml
2023-06-21 19:58:18 +02:00

72 lines
2 KiB
OCaml
Executable file

open ParserJava
(* Fonction d'affichage des unités lexicales et des données qu'elles contiennent *)
let printToken t =
(print_endline
(match t with
| IMPORT -> "import"
| IDENT (texte) -> texte
| TYPEIDENT (texte) -> texte
| INT -> "int"
| FLOAT -> "float"
| BOOL -> "bool"
| CHAR -> "char"
| VOID -> "void"
| STRING -> "String"
| ACCOUV -> "{"
| ACCFER -> "}"
| PTVIRG -> ";"
| VIRG -> ","
| PAROUV -> "("
| PARFER -> ")"
| CROOUV -> "["
| CROFER -> "]"
| SI -> "if"
| SINON -> "else"
| TANTQUE -> "while"
| RETOUR -> "return"
| ENTIER (texte) -> (string_of_int texte)
| FLOTTANT (texte) -> (string_of_float texte)
| BOOLEEN (texte) -> (string_of_bool texte)
| CARACTERE (texte) -> (String.make 1 texte)
| CHAINE (texte) -> texte
| VIDE -> "null"
| NOUVEAU -> "new"
| FIN -> "EOF"
| ASSIGN -> "="
| OPINF -> "<"
| OPSUP -> ">"
| OPINFEG -> "<="
| OPSUPEG -> ">="
| OPEG -> "=="
| OPNONEG -> "!="
| OPPLUS -> "+"
| OPMOINS -> "-"
| OPOU -> "||"
| OPMULT -> "*"
| OPMOD -> "%"
| OPDIV -> "/"
| OPET -> "&&"
| OPNON -> "!"
| OPPT -> "."));;
(* Analyse lexicale du fichier passé en paramètre de la ligne de commande *)
if (Array.length Sys.argv > 1)
then
let lexbuf = (Lexing.from_channel (open_in Sys.argv.(1))) in
let token = ref (LexerJava.main lexbuf) in
while ((!token) != FIN) do
(printToken (!token));
(token := (LexerJava.main lexbuf))
done
else
(print_endline "MainMuJava fichier");;
(* Analyse lexicale, syntaxique et sémantique du fichier passé en paramètre de la ligne de commande *)
if (Array.length Sys.argv > 1)
then
let lexbuf = (Lexing.from_channel (open_in Sys.argv.(1))) in
(ParserJava.fichier LexerJava.main lexbuf)
else
(print_endline "MainJava fichier");;