72 lines
2 KiB
OCaml
Executable file
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");;
|