69 lines
1.9 KiB
OCaml
69 lines
1.9 KiB
OCaml
|
open List
|
||
|
|
||
|
type token =
|
||
|
| UL_ACCOUV
|
||
|
| UL_ACCFER
|
||
|
| UL_PT
|
||
|
| UL_MACHINE
|
||
|
| UL_TO
|
||
|
| UL_ON
|
||
|
| UL_EVENT
|
||
|
| UL_FROM
|
||
|
| UL_REGION
|
||
|
| UL_ENDS
|
||
|
| UL_STARTS
|
||
|
| UL_STATE
|
||
|
| UL_FIN
|
||
|
| UL_IDENT of string
|
||
|
| UL_ERREUR
|
||
|
;;
|
||
|
|
||
|
type inputStream = token list;;
|
||
|
|
||
|
(* string_of_token : token -> string *)
|
||
|
(* Converti un token en une chaîne de caractère*)
|
||
|
let string_of_token token =
|
||
|
match token with
|
||
|
| UL_MACHINE -> "machine"
|
||
|
| UL_ACCOUV -> "{"
|
||
|
| UL_ACCFER -> "}"
|
||
|
| UL_PT -> "."
|
||
|
| UL_TO -> "to"
|
||
|
| UL_ON -> "on"
|
||
|
| UL_EVENT -> "event"
|
||
|
| UL_FROM -> "from"
|
||
|
| UL_REGION -> "region"
|
||
|
| UL_ENDS -> "ends"
|
||
|
| UL_STARTS -> "starts"
|
||
|
| UL_STATE -> "state"
|
||
|
| UL_FIN -> "EOF"
|
||
|
| UL_ERREUR -> "Erreur Lexicale"
|
||
|
| UL_IDENT (texte) -> texte
|
||
|
;;
|
||
|
|
||
|
(* string_of_stream : inputStream -> string *)
|
||
|
(* Converti un inputStream (liste de token) en une chaîne de caractère *)
|
||
|
let string_of_stream stream =
|
||
|
List.fold_right (fun t tq -> (string_of_token t) ^ " " ^ tq ) stream "";;
|
||
|
|
||
|
|
||
|
(* peekAtFirstToken : inputStream -> token *)
|
||
|
(* Renvoie le premier élément d'un inputStream *)
|
||
|
(* Erreur : si l'inputStream est vide *)
|
||
|
let peekAtFirstToken stream =
|
||
|
match stream with
|
||
|
(* Normalement, ne doit jamais se produire sauf si la grammaire essaie de lire *)
|
||
|
(* après la fin de l'inputStream. *)
|
||
|
| [] -> failwith "Impossible d'acceder au premier element d'un inputStream vide"
|
||
|
|t::_ -> t;;
|
||
|
|
||
|
(* advanceInStream : inputStream -> inputStream *)
|
||
|
(* Consomme le premier élément d'un inputStream *)
|
||
|
(* Erreur : si l'inputStream est vide *)
|
||
|
let advanceInStream stream =
|
||
|
match stream with
|
||
|
(* Normalement, ne doit jamais se produire sauf si la grammaire essaie de lire *)
|
||
|
(* après la fin de l'inputStream. *)
|
||
|
| [] -> failwith "Impossible de consommer le premier element d'un inputStream vide"
|
||
|
| _::q -> q;;
|