Lexer à un chiffre
Exercice · OCaml (option informatique), chapitre 21 — Analyse syntaxique et interprétation
Énoncé
Écrire une version simplifiée de lexer pour des chiffres uniques (pas de nombres à plusieurs chiffres), sur une chaîne sans espaces.
Corrigé
let lexer_simple s =
let lex = ref [] in
for i = String.length s - 1 downto 0 do (* à l'envers : pas de renverse *)
let c = s.[i] in
let l =
if c = '+' then Plus else if c = '-' then Moins
else if c = '*' then Fois else if c = '(' then ParenG
else if c = ')' then ParenD
else Nombre (int_of_char c - int_of_char '0')
in
lex := l :: !lex
done;
!lex
En parcourant de droite à gauche et en ajoutant en tête, on obtient directement la liste dans le bon ordre, sans renversement. (downto déborde du sous-ensemble strict ; avec to et un renversement final, on retrouve la version du cours.)
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.