Analyser un facteur
Exercice · OCaml (option informatique), chapitre 21 — Analyse syntaxique et interprétation
É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.
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.