Adloun

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.