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
- Lexer complet corrigé
- Priorité du produit corrigé
- L'analyseur complet corrigé
- L'interpréteur corrigé
- Ajouter la division corrigé