Langages réguliers et hors-contexte
Cours M1 INaLCO, 20011-2012

Interrogation écrite du 01/12/2011 : Corrigé


L'énoncé.



Note préliminaire sur la notation complètement parenthésée et sur l'arbre d'une expression.

Les expressions régulières vues en cours sont en général données
dans la syntaxe ordinaire (celle que lit et écrit le logiciel automate).
Cette syntaxe repose sur des règles de priorité des opérateurs analogues à celles qui sont en usage dans les expressions arithmétiques.
La notation complètement parenthésée n'utilise pas ces règles, elle met une paire de parenthèses autour de l'application de chaque opérateur à ses opérandes (même pour un opérateur unaire).
En outre, pour plus de précision, on écrit un point pour noter la concaténation.
Cette notation est plus lourde mais plus explicite.
Elle représente fidèlement l'arbre associé à l'expression.

Exemple
l'expression (aa|b)*ab(bb)*
s'écrit en notation complètement parenthésée
((((((a.a)|b)*).a).b).((b.b)*))

L'arbre associé est représenté ci-contre.
On a déjà vu un exemple d'arbre au cours n° 6.
Arb



On considère un alphabet à quatre lettres X = {a, b, d, s}, et l'expression régulière
E = ab+s|ad|abb+d|(s|d)(a|bb+a). On appelle L le langage décrit par cette expression.

  1. Réécrivez cette expression en notation complètement parenthésée, et dessinez l'arbre correspondant.
    (Il est recommandé de décomposer l'expression comme la réunion de quatre parties, et de procéder morceau par morceau.)

    Cette expression et la réunion de quatre parties, elle s'écrit E = A|B|C|D, avec
    • A = ab+s
    • B = ad
    • C = abb+d
    • D = (s|d)(a|bb+a)

    En notation complètement parenthésée, cette quadruple réunion s'écrit E = (((A|B)|C)|D) [de même que a-b-c s'écrit ((a-b)-c) ].

    Réécrivons à présent ls 4 composantes, en notant explicitement l'opération de produit :
    • A = ((a.(b+)).s)
    • B = (a.d)
    • C = (((a.b).(b+)).d)
    • D = ((s|d).(a|((b.(b+)).a)))

    et reportons dans la réunion : E = (((((a.(b+)).s)|(a.d))|(((a.b).(b+)).d))|((s|d).(a|((b.(b+)).a))))

    Les quatre arbres sont ainsi dessinés :

    A A B A C A D A
    et l'arbre tout entier prend la forme :
    E
    E
  2. Dans le langage L décrit par cette expression, y a-t-il un mot qui commence par b ? un mot qui se termine par b ?
    un mot contenant deux occurrences d'une lettre autre que b ?
    Ne vous contentez pas de répondre par oui ou par non, motivez votre réponse !

    En inspectant les quatre composantes A, B, C et D, on constate que
    • tous les mots commencent par a (A, B, C ), par s ou par d (D), à l'exclusion de b ;
    • tous les mots se terminent par s (A), par d (B, C) ou par a (D), ici aussi à l'exclusion de b ;
    • les seuls facteurs répétant une même lettre deux fois se trouvent
      • dans A (b+)
      • dans C (b.b+)
      • dans D (b.b+)
      ils ne concernent que la lettre b.

  3. Interprétation de l'alphabet X,
    L'expression E est censée représenter les mots minimaux où apparaissent des manquements aux règles typographiques françaises,
    ainsi formulées par Wikisource :

    1. Les signes de ponctuation simple (. ,) se collent au mot qui les précèdent, et sont suivis d’un espace (un seul).
    2. Les signes de ponctuation double (; : ! ?) doivent être précédés et suivis d’un espace (un seul).

    Justifiez - ou infirmez - cette affirmation.

  4. On considère l'automate fini A que voici (où 0 est l'état initial, et 4 l'unique état terminal) :

    Auto
    N.B. Suivant les conventions du logiciel automate, l'état "poubelle" n'est pas dessiné.