Grammaires Génératives et Automates Associés 1 Langage généré

Transcription

Grammaires Génératives et Automates Associés 1 Langage généré
Automate & Grammaires
polytech’ grenoble/ricm3
chapître
Grammaires Génératives et Automates Associés
4
Les automates décrivent un procédé de reconnaissance d’un langage. Les grammaires génératives
donnent une autre façon de définir un langage. Une grammaire définit comment générer des mots
(ou phrases) qui appartiennent à un langage.
Nous verrons que pour certains typdes de grammaire (type 2 et type 3) on sait associer à une grammaire
un automte qui reconnaît exactement le langage généré par la grammaire. Ainsi les grammaires offrent
une façon lisible de décrire un langage et les automates déterministes donnent une façon efficace de
reconnaître les mots du langage.
À l’origine la notion de grammaire a été inventé par des linguistes On peut définir la
grammaire du français qui indiquent les phrases syntaxiquement correctes du français ; on ne s’occupe
pas ici du sens de la phrase mais uniquement de la structure.
Exemple :
Le soleil a quatre pattes est une phrase syntaxiquement correcte.
soleil quatre a le pattes est syntaxiquement incorrecte
De la même manière on peut décrire les programmes syntaxiquement corrects d’un langage de programmation ; on ne s’occupe pas ici du sens, ni de la terminaison, ni du bon fonctionnement du programme.
Exemple :
int main(){ int x = 1/0 } est un programme syntaxiquement correct.
mint aint)( 1/x = int 0{} n’est pas syntaxiquement correct.
Définition Une grammaire G = (Σ, N , R) est définie par
1. Σ, l’alphabet sur lequel seront écrit les mots du langage
2. N , l’alphabet des symboles non terminaux utilisés pour définir les règles de la grammaire mais
qui ne subsisteront pas dans les mots du langage
3. S ∈ N le germe de la grammaire (seed en anglais)
4. R un ensemble de règles de réécriture de la forme w → w0
où w et w0 sont des mots de (Σ ∪ N )∗
Exemple : La grammaire G = Σ = { a}, N = { S }, R = { S → , S → a.S } génère les mots du
langage L (a∗ )
1
Langage généré par une grammaire
Les automates sont utilisés pour reconnaître les mots d’un langage. Pour étudier les inombrables
langages irréguliers, on peut adopter le point de vue dual et classer les langages en fonction du type
de grammaire qui permet de les générer.
Dérivation Les règles R d’une grammaire G permettent de dériver le mot m0 à partir du mot m, ce
que l’on note m `R m0 , si les mots m et m0 peuvent se décomposer en trois parties : un début d, une
fin f et deux mots w et w0 tels que
d.w.f
| {z }
m
`R
|{z}
se réécrit en
d.w0 .f pour une règle w → w0 ∈ R
| {z }
m0
Définition : langage généré par une grammaire Le langage d’une grammaire G = (Σ, N , S, R)
est l’ensemble des mots de Σ∗ (c’est-à-dire ne contenant plus de symboles non terminaux de N ) qui
sont dérivés à partir du germe S en un nombre quelconque d’étape de dérivation (ce que l’on note `∗R ).
def
L (G) = {w ∈ Σ∗ | S `∗R w }
M.Périn
Université Grenoble-Alpes
1
Automate & Grammaires
2
2.1
polytech’ grenoble/ricm3
Classification (de Chomsky) des grammaires
Grammaires de type 3, dites régulières
La littérature sur le sujet a inventé de nombreux termes équivalents pour les grammaires de type 3 :
régulières, rationnelles, regular en anglais.
Une grammaire est de type 3 si ses règles R sont de la forme :
w → w0 avec w ∈ N et w0 ∈ Σ∗ ∪ Σ∗ .N
Autrement dit, on a uniquement droit aux règles de la forme :

N →w


 avec N, N 0 ∈ N et w ∈ Σ∗ , c’est-à-dire que w
N → w.N 0
est le mot ou bien un mot composé de symboles
N →


 de l’alphabet Σ.
N → N0
Résultat Les langages définis par les grammaires de type 3 sont les langages réguliers. On a donc
l’équivalence :
grammaires de type 3 ≡ langages réguliers/rationnels ≡ adef
preuve : On donne une série de transformation qui permmettent de passer d’un adef à
une grammaire de type 3 et réciproquement :
mise en équation
résolution
adef −−−−−
−−−−−−→ équations de langages (≡ Grammaire de type 3) −−−
−−−−→
Arden
Arden
construction
déterminisation
expressions régulières −−T−hompson
−−−−−→ andef −−−−−−−−−−→ adef
Exemple
 G = (Σ = {a, b}, N = { L1 , L2 }, S = L1 , R) avec
 : La grammaire
L1 → 

a
b






 L1 → a.L1 
def
b /
L1 → b.L2
R=
génère le langage reconnu par l’automate
/ 1
2




 L2 → 




L2 → b.L2
où Li définit le langage reconnu par l’état i de l’automate
Implantation de la reconnaissance des mots de L (G) L’outil lex détecte les parties de grammaires qui sont de type 3 et produit un automate (à nombre) d’états fini déterministe qui reconnaît
de manière efficace les mots du langage définis par cette sous-partie de la grammaire.
2.2
Grammaires de type 2, dites sans contexte
La littérature sur le sujet a inventé de nombreux termes équivalents pour les grammaires de type 2 :
non contextuelle sans contexte, hors contexte, algébriques, context-free en anglais.
Une grammaire est de type 2 si ses règles R sont de la forme :
w → w0 avec w ∈ N et w0 ∈ (Σ ∪ N )∗
Autrement dit, on a uniquement droit à des règles sans contexte, c’est-à-dire de la forme :
N →
N → w0
avec N ∈ N
un mot formé de lettres de Σ et de symboles non terminaux N1 , ...., Nk ∈ N
Exemple : La grammaire G = (Σ = { a, b}, N = {S }, S, R = { S → , S → aSb}) génère le
langage { an bn | n ∈ }
N
M.Périn
Université Grenoble-Alpes
2
Automate & Grammaires
polytech’ grenoble/ricm3
Résultat Les langages définis par les grammaires de type 2 sont les langages reconnaissables par un
automate non déterministe à une pile (aupnd). On a donc l’équivalence :
grammaires de type 2 ≡ langages algébriques/hors contexte ≡ aupnd
justification : Pour montrer cette équivalence il faut donner un procédé qui permet de
construire un aupnd qui reconnaît le langage généré par une grammaire G et inversement
donner un procédé qui permet de construire la grammaire G qui génère le langage reconnu
par un aupnd. Ces deux procédés sont brièvement décrits ci-après et seront approfondis en
TD.
Voir le cours sur les automates à une pile
Implantation de la reconnaissance des mots de L (G) Les outils yacc et antlr détectent
les parties de grammaires qui sont de type 2 et produisent un automate à une pile déterministe qui
reconnaît (de manière efficace) les mots du langage définis par cette sous-partie de la grammaire. Les
parties de type 3 sont traités par lex.
Si la grammaire n’est pas déterministe ou n’est pas de type 2, on ne sait pas produire d’automate
déterministe qui reconnaît cette grammaire. Les outils yacc et antlr le signalent les règles incriminées.
2.3
Grammaires de types 1, dites contextuelles
Les règles de production de la grammaire sont
— soit de la forme S → ,
— soit de la forme α → β avec α, β ∈ (Σ ∪ N )∗ avec |α| ≤ |β|. Autrement dit α et β sont formés de
symboles de l’alphabet Σ et de non-terminaux de N et la partie droite (β) est plus longue que
la partie gauche (α).
Remarque D’après la définition la taille du mot ne peut pas diminuer lorsqu’on applique une règle
de production.
Puissance d’expression : Les grammaires de type 1 permettent de coder toutes les fonctions primitives récursives (celles qui terminent toujours).
Exercice (en TD) Complétez la grammaire de type 1 qui génère les langages {an bn cn | n ∈
2.4
N }.
Grammaires de type 0 appelées systèmes de réécriture libre
Les règles de production sont de la forme quelconque, c’est-à-dire de la forme α → β avec α, β ∈
(Σ ∪ N )∗
Remarque D’après cette définition la taille du mot peut croître ou décroitre lorsqu’on applique une
règle de production.
On parle alors de règles de réécriture libres : lorsqu’on reconnait le terme α dans un mot, on peut le
réécrire (ie. le remplacer par) β et chercher d’autre endroit où appliquer une réécriture.
Les règles s’appliquent dans n’importe quel ordre et éventuellement en parallèle à condition qu’elles
agissent sur des parties distinctes du mot.
Avec de tels systèmes de réécriture on peut coder n’importe quelle fonction calculable (c’est-à-dire
n’importe quel algorithme informatique) et même les fonctions qui ne terminent pas toujours.
M.Périn
Université Grenoble-Alpes
3
Automate & Grammaires
Exemple de



1)






3)



5)





10)





 12)
polytech’ grenoble/ricm3
système de réécriture qui génère le langage {an bn cn | n ∈
N}
pschittt
S → Ã.C̃
2) S −−−−−→ −
→
−
→
− →
−
zippp →
à → Ã.a
4) Ã −−−→ A
7) A .a → a. B . A
−
←
−
←
−←
−
→
− ←
− foufff
zappp ←
C̃ → c.C̃
6) C̃ −−−−→ C
8) c. C → C . B .c 9) A . C −−−→ →
−
→
−
→
−
→
−
tic
tic’
B .a −−→ a. B 11) B .b −−→ b. B
←
− tac ←
−
←
− tac’ ←
−
→
− ←
− wizzz
c. B −−→ B .c 13) b. B −−−→ B .b 14) B . B −−−→ b
Dérivation de a0 b0 c0
pschittt...
z}|{
S
...pschittt
→
z}|{
= a0 b0 c0
Dérivation de a2 b2 c2
...1
3...
5...
...3
...5
4...
6...
...4
...6
1...
z}|{
z}|{
z}|{
z }| {
z}|{
z }| {
z}|{
z}|{
z }| {
z}|{
→
−
←
−
à .|{z}
C̃ → Ã .a.c. C̃ → |{z}
à .a.a.c.c.|{z}
C̃ → Ã .a.a.c.c. C̃ → A .a.a.c.c. C
S → |{z}
| {z } | {z }
| {z }
| {z }
| {z }
| {z }
3...
5...
...3
3...
...5
5...
...3
...5
7...
9...
→
− →
−
←
−←
−
→
− →
−→
− ←
−←
− ←
−
→
− →
− ←
− ←
−
→
−
←
−
→ a.
B .c} → a. B .a.
B .c}. B .c → a.|{z}
B .a. |B{z
. B} .c.
B .c → a.a.
B . |{z}
b .|{z}
B .c .c
| B
{z. A}.a.c.|C .{z
| B
{z A}.|C .{z
|{z}
|{z}
7...
9...
...7
→
− ←
−
→
− ←
−
→ a.a. B . |{z}
b. B .c.c → a.a. B . |{z}
B .b .c.c
tac0 ...
...9
tic... wizzz... tac...
...tic ...wizzz ...tac
...tac0
→
− ←
−
b .b.c.c = a.a.b.b.c.c = a2 b2 c2
→ a.a. |B{z
. B} .b.c.c → a.a. |{z}
wizzz...
M.Périn
...wizzz
Université Grenoble-Alpes
4