Adloun

OCaml (option informatique) · Chapitre 21 · Exercice de TD

Analyser un facteur

Analyse syntaxique et interprétation · niveau 2

Énoncé

Écrire parse_facteur (un nombre ou une expression parenthésée). Pourquoi a-t-il besoin de parse_expr ?

Corrigé

let rec parse_facteur lex =
  match lex with
  | Nombre v :: reste -> (Const v, reste)
  | ParenG :: reste ->
      let (e, r) = parse_expr reste in
      (match r with
       | ParenD :: r2 -> (e, r2)
       | _ -> failwith "parenthese fermante attendue")
  | _ -> failwith "facteur attendu"
and parse_expr lex = ...   (* mutuellement récursif *)

Un facteur entre parenthèses contient une expression complète : parse_facteur doit donc appeler parse_expr, qui à son tour redescend jusqu'aux facteurs. D'où la récursion mutuelle (let rec … and …, chapitre 1) entre tous les niveaux de la grammaire.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre