{ open Lo_parse open Lo } rule token fichier = parse | '#' ( [^'\n']* as s ) '\n' { prerr_string ">Commentaire :\n>"; prerr_string s; prerr_newline (); token fichier lexbuf } | ['\000'-'\032']+ { token fichier lexbuf } | ('-'? ['0'-'9']+) as num { NUMERIQUE (Num.num_of_string num) } | ('-'? ['0'-'9']+'.'['0'-'9']*) as num { REEL (float_of_string num) } | "\"" ( [^ '\"']* as ch ) "\"" { CHAINE ch } | "(" { PARG } | ")" { PARD } | "->" { FLECHE } | "*" { CROIX } | "O" { O } | "R" { TYPEREEL } | "bool" { TYPEBOOL } | "nat" { TYPENAT } | "fun" { FUN } | ":" { DEUX_POINTS } | "=>" { FLECHE_FUN } | "." { POINT } | "," { VIRGULE } | "fst" { FST } | "snd" { SND } | "fix" { FIX } | "prob" { PROB } | "if" { SI } | "then" { ALORS } | "else" { SINON } | "sample" { ECHANT } | "from" { DE } | "in" { DANS } | "S" { S } | "unprob" { DEPROB } | "eif" { ESI } | "let" { SOIT } | "rec" { REC } | "=" { EGALE } | ":=" { EGALE_ASSIGNE } | "and" { ET } | "true" { BOOL true } | "false" { BOOL false } | "variant" { VARIANT } | "invariant" { INVARIANT } | '%' { POURCENT } (* Mots réservés *) | "result" { failwith "Mot réservé : result" } | "Variable" { DEF_VARIABLE } (* Noms *) | (['a'-'z']['a'-'z' 'A'-'Z' '0'-'9']*) as nom { VARIABLE nom } | (['A'-'Z']['a'-'z' 'A'-'Z' '0'-'9']*) as nom { SPEC nom } | ( (['a'-'z']['a'-'z' 'A'-'Z' '0'-'9']*) as nom ) '_' (['0'-'9']+ as numero) { VAR_ABSTR (nom, int_of_string numero) } | ( (['A'-'Z']['a'-'z' 'A'-'Z' '0'-'9']*) as nom ) '_' (['0'-'9']+ as numero) { VAR_PROP (nom, int_of_string numero) } (* Opérateurs *) | ['~' '!' '#' '$' '^' '&' '*' '+' '-' '<' '>' '=' '/' ':' '|' '\\' ]+ as nom { OPERATEUR nom } | eof { if fichier then EOF else raise Lo.Exception_fin }