recup_char should work?

This commit is contained in:
Mylloon 2023-10-23 19:09:56 +02:00
parent 144b0bdc75
commit ca5b578afa
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -19,29 +19,26 @@
error msg (lex_join lexbuf.lex_start_p lexbuf.lex_curr_p) error msg (lex_join lexbuf.lex_start_p lexbuf.lex_curr_p)
(*Fonction qui va convertir une string de caractère ascii en vrai caractère. (* Fonction qui convertie une chaîne de caractère ascii en vrai caractère.
On en a besoin pour certains test *) * Notamment les escapes : "\n" ou "\000" *)
(*)
let recup_char charac lexbuf = let recup_char charac lexbuf =
let taille = String.length charac in let taille = String.length charac in
match charac with match charac with
| "\\n" -> '\n' | "\\n" -> Some '\n'
| "\\r" -> '\r' | "\\r" -> Some '\r'
| "\\t" -> '\t' | "\\t" -> Some '\t'
| "\\\'" -> '\'' | "\\\'" -> Some '\''
| "\\\\" -> '\\' | "\\\\" -> Some '\\'
| _ -> | _ -> (
(let s2 = String.get charac 1 in let s2 = String.get charac 1 in
if s2 = '0' || s2 = '1' || s2 = '2' then if s2 = '0' || s2 = '1' || s2 = '2' then (
(let s=String.sub charac 1 (taille - 1) in let s = String.sub charac 1 (taille - 1) in
let i = int_of_string s in let i = int_of_string s in
Char.chr i) Some (Char.chr i))
else error lexbuf ) else None )
*)
} }
let newline = ('\010' | '\013' | "\013\010") let newline = ('\010' | '\013' | "\013\010")
let blank = [' ' '\009' '\012'] let blank = [' ' '\009' '\012']
@ -153,14 +150,13 @@ rule token = parse
(* Characters *) (* Characters *)
| "'" (letter as c) "'" { CHAR c } | "'" (letter as c) "'" { CHAR c }
(*| "'" (atom as c) "'" {CHAR (recup_char c lexbuf )} (* On retire le \ du début | "'" (atom as a) "'" { match recup_char a lexbuf with
* TODO: fix *) | Some c -> CHAR c
(*) | None -> error lexbuf None "" }
let code = int_of_string (String.sub c 1 ((String.length c) - 2))
in CHAR (Char.chr (code)) } *) *)
(** Lexing error *) (** Lexing error *)
(* erreur qui advient pour le test 22-char-literal, le code renvoie bizarrement que "Error (during lexing) "*) (* erreur qui advient pour le test 22-char-literal,
* le code renvoie bizarrement que "Error (during lexing)" *)
| "'" ascii_trop_grand "'" { error lexbuf None "" } | "'" ascii_trop_grand "'" { error lexbuf None "" }
| _ as _c { error lexbuf None (* (Some _c) *) "unexpected character." } | _ as _c { error lexbuf None (* (Some _c) *) "unexpected character." }