OCaml (option informatique) · Chapitre 21 · Exercice de TD
Ajouter la division
Analyse syntaxique et interprétation · niveau 3 (difficile)
Énoncé
Étendre l'interpréteur avec la division / (même priorité que *). Indiquer les endroits à modifier.
Corrigé
Quatre ajouts cohérents traversent toute la chaîne :
- le lexème : ajouter
Divau typelexeme, et le cas'/'danslexer;
- l'arbre : ajouter
Divi of expr * exprau typeexpr;
- le parser : dans
boucle_mul, traiterDiv :: restecommeFois(même niveau) en construisantDivi;
- l'évaluateur : le cas
Divi (a, b) -> evalue a / evalue b.
| Div :: reste -> let (d, r) = parse_facteur reste in boucle_mul (Divi (g, d)) r
(* ... *)
| Divi (a, b) -> evalue a / evalue b
À chaque ajout, le compilateur signale les match devenus non exhaustifs (chapitre 3) : il guide l'extension. Une grammaire bien structurée se prolonge sans effort.
Exercices semblables
- Analyser un facteur corrigé
- Priorité du produit corrigé
- L'analyseur complet corrigé
- L'interpréteur corrigé
- Détecter les erreurs de syntaxe corrigé