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;;