Adloun

OCaml (option informatique) · Chapitre 21 · Application directe du cours

Lexer à un chiffre

Analyse syntaxique et interprétation · niveau 1 (application)

É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.)

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre