Adloun

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.