Adloun

Langage non vide

Exercice · OCaml (option informatique), chapitre 18 — Automates finis

Énoncé

Écrire langage_non_vide a : existe-t-il un mot accepté ?

Corrigé

let langage_non_vide a =
  let vu = Array.make a.nb_etats false in
  let nb_sym = Array.length a.delta.(0) in
  let rec visite e =
    if not vu.(e) then begin
      vu.(e) <- true;
      for s = 0 to nb_sym - 1 do visite a.delta.(e).(s) done
    end
  in
  visite a.initial;
  let trouve = ref false in
  for e = 0 to a.nb_etats - 1 do
    if vu.(e) && a.acceptants.(e) then trouve := true
  done;
  !trouve

Le langage est non vide si et seulement si un état acceptant est accessible depuis l'état initial dans le graphe des transitions. C'est un parcours en profondeur (chapitre 15) : l'automate est un graphe orienté.

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.