Cours n° 17, 8 mars 2012

Jean-François Perrot

Le formalisme des grammaires

  1. Les grammaires comme systèmes de réécriture
    1. Définition
    2. Exemple
      1. Définition
      2. Montrons le processus
      3. Le problème des mots pour ce système est facile à résoudre
    3. Les grammaires comme cas particulier de systèmes de réécriture
    4. Grammaires et automates
      1. Problématique
      2. Machines de Turing
      3. Résultat

  2. Grammaires context-sensitive
    1. Définitions
    2. Langage
    3. Grammaires non-contractantes
    4. Exemples de langages CS
      1. {anbncndn |  n>0}
      2. {ww | w ∈ {a, b}*}
      3. Exercices
    5. Automates linéairement bornés

Les grammaires comme systèmes de réécriture

Les grammaires context-free qui vont nous intéresser font partie d'une classe de systèmes appelés systèmes de réécriture.
Suivant les critères épistémologiques traditionnels, le fait que ces objets puissent être interprétés de différentes manières
est une garantie de leur intérêt d'un point de vue scientifique.
  1. Définition

    Voici les caractéristiques générales des systèmes de réécriture :

  2. Exemple

  3. Les grammaires comme cas particulier de systèmes de réécriture

    Définition : une grammaire est


    L'originalité des grammaires parmi les systèmes de réécriture est cette nécessité de "chasser les non-terminaux"
    dans le processus de génération des mots du langage.

    Exemple : Grammaire G1
    (les non-terminaux sont en majuscules, les terminaux en minuscules)

    1. S -> aBSc
    2. S -> abc
    3. Ba -> aB
    4. Bb -> bb

    Essayons : S -> aBSc -> aBaBScc -> aBaBaBSccc -> et en général -> (aB)nScn par la règle 1.
    Pour chasser S il faut employer la règle 2 : -> (aB)nabccn
    Pour chasser tous les B, il faut les amener à des positions où ils n'ont que des b à leur droite,
    en les déplaçant grâce à la règle 3. On arrive ainsi à aanBnbccn , et par la règle 4 à aanbnbccn.
    On voit en outre que ce type de réécriture est le seul qui conduise à l'élimination complète des non-terminaux.
    Le langage engendré par cette grammaire est donc {anbncn | n >0}.

  4. Grammaires et automates

    1. Problématique
      Toute la théorie des grammaires consiste à imposer diverses restrictions aux règles de réécriture
      et à étudier l'impact de ces restrictions sur les solutions possibles au problème des mots.
      Les solutions en question, qui sont des algorithmes, sont souvent décrites dans le format des automates
      (cf. cours n° 4),
      et on a coutume de mettre en rapport des classes de grammaires et des classe d'automates.

      Nous verrons prochainement quelles restrictions sont nécessaires pour obtenir les automates finis.
      Avant d'en arriver là, l'attention se porte sur la manière dont l'automate va gérer sa mémoire.
      Cette mémoire est vue comme une bande infinie sur laquelle l'automate lit et écrit des informations
      (des symboles comme ceux de l'alphabet), et le long de laquelle il peut déplacer sa tête de lecture-écriture,
      à l'image des bandes magnétiques qui étaient un composant essentiel des ordinateurs d'autrefois.
    2. Machines de Turing
      Sous sa forme la plus générale, on appelle un tel automate une machine de Turing
      (en hommage à Alan Turing, génial précurseur, qui inventa ce concept en 1936)

      Turing
      source : http://ozark.hendrix.edu/~burch/socs/written/text/v1.pdf

      On a démontré que le modèle de la machine de Turing était une des formalisations de la notion de calculabilité :
      tout ce qui est calculable peut être calculé par une machine de Turing. [Thèse de Church]

    3. Résultat
      La classe d'automates associée à la classe des grammaires sans restriction sur leurs règles
      est celle des machines de Turing.
      En d'autres termes, pour décider si un mot appartient au langage engendré par une grammaire,
      il faut en général une machine de Turing.

      Nous allons à présent envisager plusieurs restrictions sur la forme des règles de réécriture,
      suivant la démarche dite de la hiérarchie de Chomsky.

Grammaires context-sensitive

La première classe de grammaires après celle des "grammaires générales" est dite context-sensitive.
  1. Définitions

    La contrainte sur les règles d'un grammaire context-sensitive est la suivante :
    chaque règle est de la forme uAv -> uxv, où
    La contrainte de non-viduité de x entraîne que
    le membre droit d'une règle est au moins aussi long que son membre gauche.

    L'appellation context-sensitive vient de ce que les mots u et v sont interprétés comme
    le contexte dans lequel le non-terminal A peut se réécrire en x.
    Nous verrons bientôt le modèle context-free où ce contexte ne joue aucun rôle.

    La grammaire G1 de l'exemple ci-dessus n'est pas context-sensitive, en raison de la règle n° 3
    Ba -> aB, qui n'est pas de la forme requise.
    Nous allons voir que ce défaut n'est pas essentiel.

  2. Langage

    On appelle langage context-sensitive tout langage pour lequel il existe une grammaire CS qui l'engendre.

    Comme nous allons le voir abondamment, pour un langage donné il existe un grand nombre de grammaires
    qui l'engendrent - on dirait volontiers qu'il en existe une infinité !
    Deux grammaires seront donc dites équivalentes si elles engendrenr le même langage.

    Voici une grammaire G2 équivalente à G1, c'est-à-dire engendrant elle aussi {anbncn | n >0},
    et qui est bien CS, elle ! Ce qui démontre que ce langage est un lancage CS...

    1. S -> aSBC
    2. S -> aBC
    3. CB -> HB
    4. HB -> HC
    5. HC -> BC
    6. aB -> ab
    7. bB -> bb
    8. bC -> bc
    9. cC -> cc

    À titre d'exemple, voici une dérivation de "aaabbbccc" (n = 3).

    1. S  (départ)
    2. aSBC (1)
    3. aaSBCBC (1)
    4. aaaBCBCBC (2)
    5. aaaBHBCBC (3)
    6. aaaBHCCBC (4)
    7. aaaBBCCBC (5)
    8. aaaBBCHBC (3)
    9. aaaBBCHCC (4)
    10. aaaBBCBCC (5)
    11. aaaBBHBCC (3)
    12. aaaBBHCCC (4)
    13. aaaBBBCCC (5)
    14. aaabBBCCC (6)
    15. aaabbBCCC (7)
    16. aaabbbCCC (7)
    17. aaabbbcCC (8)
    18. aaabbbccC (9)
    19. aaabbbccc (9)

    En examinant cette réécriture, on voit que les trois règles CS n° 3, 4 et 5 n'ont pas d'autre but que de réaliser
    l'interversion CB ->* BC, par CB -3> HB -4> HC -5> BC.
    Mis à part cet aspect réglementaire, la stratégie de G2 est assez comparable à celle de G1.

  3. Grammaires non-contractantes

    Une grammaire est non-contractante (en anglais non-contracting)
    si le membre droit de chaque règle est au moins aussi long que son membre gauche.
    Nous avons vu que toute grammaire CS est non-contractante,
    et l'exemple de G1 montre que la réciproque n'est pas vraie.

    Toutefois, on peut généraliser la démarche qui fait passer de G1 à G2 et montrer que
    pour toute grammaire non-contractante, il existe une grammaire CS équivalente,
    en ce sens qu'elle engendre le même langage.
    En d'autres termes, les grammaires non-contractantes engendrent exactement la classe des langages CS.

    On peut aller plus loin et montrer que toute grammaire non-contractante est équivalente à une
    grammaire en forme normale de Kuroda , où toutes les règles sont d'une des quatre formes :
    AB → CD
    A → BC
    A → B
    A → a


    Les exemples de grammaires qui suivent seront donc donnés sous forme non-contractante.

  4. Exemples de langages CS

  5. Automates linéairement bornés (en anglais linear-bounded automata)