Langages Hors Contextes
Short Description
Download Langages Hors Contextes...
Description
Chapitre IV Les langages à contexte libre (Context Free Languages)
IV.1 Introduction par un exemple Soit le langage L décrit par l'expression régulière suivante: a(a*∪ b*)b Un mot ω peut avoir la forme a bbb...b b
ou a aaa...a b
On peut dire que ω a la forme aMb, il reste à décrire M S → aMb M → A
M peut être une suite de a ou une suite de b
M →B A → aA
décrit récursivement une suite de a
A→ ε B → bB
décrit récursivement une suite de b
B →ε
IV.2 Définition d'une Grammaire hors contexte une grammaire G est un quadruplet (V,∑,R,S) où: •
V est un ensemble fini de symboles terminaux et n on terminaux: (alphabet globale)
•
∑ est l'alphabet des symboles terminaux
•
V-∑ ensemble des non terminaux
•
S: Axiome (start symbol), toute dérivation commence par S.
•
R: règles de production. R ⊆( V-∑)×V*
Dans l'exemple de l'introduction: V = {S,M,A,B,a,b}. ∑={a,b} ensemble des terminaux. V-∑={S,M,A,B} ensemble des non terminaux. S = Axiome, R={ S → aMb, M → A, M → B, A → aA, A → ε, B → bB, B → ε}
IV.3 Définition d'une Dérivation ϕ se dérive directement en ψ et on note: ϕ → ψ s'il existe une suite de mots ω0, ω1,.., ωn de V* tels que: ϕ = ω0 ψ= ωn ∀ i, 0≤ i =1} 1) Donnez G = (V,∑,R,S) tq L(G) = L 2) Donnez une dérivation gauche de la chaîne ω= abaababa ∈ L. 3) Montrer que L(G) = L. 5
g
g
Réponse: 1) S → AA A → bA A → Ab A → AAA A→a
génère récursivement une suite de b à gauche génère récursivement une suite de b à droite
2) ω = bbaababa S ⇒ AA g
⇒ bAA g
⇒ bbAA g
⇒ bbaA g
⇒ bbaAAA g
⇒ bbaAbAA g
⇒ bbaabAA g
⇒ bbaabaA g
⇒ bbaababA g
⇒ bbaababa g
3) Montrons que L(G) = L, Il faut montrer que L(G) ⊆ L et L ⊆ L(G) L = {ω∈∑*, ω possède la propriété P} L(G) ⊆ L ssi ∀ ω∈L(G), ω possède la propriété P. Démonstration L(G) ⊆ L Au lieu de démontrer que seules les formes sententielles terminales sont dans L, on va démontrer que toute forme sententielle ou pas est dans L. (contient un nombre pair de a ou A). Par récurrence sur la longueur de la dérivation base k = 1
S ⇒ AA
contient bien un nombre paire de A ou a
hypothèse: On suppose que toute dérivation de longueur k, k ∈ [1..n] possède un nombre pair de A ou a. Recurrence: Prenons une dérivation de longueur n+1 S ⇒ω0 ⇒ ω1⇒...⇒ωn ⇒ ωn+1 6
Dans la dérivation directe ωn ⇒ ωn+1 on passe à travers une règle qui ne change pas la parité, en effet A → bA
ne change pas le nombre de A + a
A → Ab
ne change pas le nombre de A + a
A → AAA
ajoute 2A donc preserve la parité des A+a
A→a
ne change pas le nombre de A + a
Donc l'hypothèse est aussi vraie à l'ordre n+1. Donc toute forme sententielle a un nombre paire de a ou A, or la forme sententielle terminale ne contient que des terminaux (0A) donc elle contient forcement un nombre paire de a. Donc ∀ ω ∈ L(G), ω possède 2n a. Démonstration L ⊆ L(G) soit ω ∈ L, ω = bm1 a bm2 a... bm2n-1 a bm2n a bm2n+1 Voici une dérivation de S en w S → AA
1 fois
AA
A → AAA
(n-1) fois
AA....A
A → bA
m1 fois
b AA...A
A→a
1 fois
bm1aA...A
(2n A)
m1
A → bA A→a 2n-1 fois bm1abm2a....bm2n-1aA A → bA
m2n fois
bm1abm2a....bm2n-1aA bm2nA
A → Ab
m2n+1 fois
bm1abm2a....bm2n-1aA bm2nAbm2n+1
A →a
1 fois
bm1abm2a....bm2n-1aA bm2nabm2n+1
IV.7 Transformations des grammaires hors contextes IV.7.1 Simplification a)Définitions : Soit G(T,N,S,P) une grammaire hors contexte 1) Un symbole non terminal A est dit
7
- Inaccessible: ssi
il n'existe aucune dérivation permettant d’atteindre A, c'est-à-dire il *
n’existe pas α , β tel que S ⇒ αAβ
*
- improductif: ssi il n’existe pas de dérivation de la forme A ⇒ ω ; ω ∈ VT* (chaîne de terminaux) 2) La grammaire G est dite *
- sans cycle : s'il n’existe pas de dérivation A ⇒ A produite par G. - sans renommage : ssi elle ne contient pas de production de la forme A→B, A, B∈ (V-∑). - ε -libre si - il n'existe pas de règle de la forme (A→ ε ) ∈ P, ∀ A∈ N \ { S } - si (S→ε) ∈ P alors S n’apparaît pas dans le deuxième membre d’une règle de production. 3) Une grammaire sans termes inaccessibles et sans termes improductifs est dite grammaire réduite. 4) Une grammaire sans cycle et libre de ε est dite grammaire propre. b) Transformation de grammaires : Les termes inaccessibles et improductifs seront éliminés dans toutes les règles de production ou` il interviennent. Algo : Elimination symbole non productif Entrée :G= Sortie :G’= Début V1= ∅ ; V2={A ∈ VN /(A → α )∈P et α ∈ VT*} Tantque V1 ≠ V2 faire V1 :=V2 V2 :=V1 ∪ {A ∈ VN /(A → α ) ∈ P et α ∈ (VT ∪ V1)*} Fin tantque VN’:=V2 Fin Exemple
soit G({a,b},{S,A ,B,C}, S)
S→AA|B|a A→SS|b B→BC|AB C→aB|b 8
Appliquons l'algorithme: Initialisation V1= ∅
V2={S,A,C}
Iteration1 V1={S, A, C}, V2={S, A ,C }∪{A\ A → α ∈ P et α ∈ (S, A, C, a ,b)*} ={S, A, C}∪{S, A, C}={S,A,C} ⇒ V1=V2 ⇒ Vn’ = {S,A,C} ⇒ on élimine toutes les productions qui font intervenir B La grammaire devient : G’({a,b},{S,A,C},S, S→ AA|a A→ SS|b C→ b) Remarquons que dans la grammaire G’, C est devenu inaccessible En effet, aucune dérivation faite à partir de S ne produit C, on supprime donc C et la grammaire définitive devient : G’’((a,b) ,(S,A),S, S→AA|a A→SS|b IV.7.2 Transformation d'une grammaire non libre de ε -
Entrée G(T,N,S,P) non libre de ε
-
Sortie G’(T’,N’,S’,P) libre de ε
Définition des différents paramètres : -T’=T -N’=N∪{S’} -S’=S ou bien S’≠S et S’est le nouvel axiome. Algorithme de transformation : 1) Si (A→α0 B1 α1.. Bi αi .. Bk αk ) ∈ P et (Bi→ ε ) ∈ P alors {(A→α0 X1 α1 ..Xiαi .. Xk αk ) ∈ P’ Avec Xi=Bi ou Xi= ε et suppression des règles Bi→ ε } 2) Si (S→ ε ) ∈ P et si ∃ Bi tq Bi=S Alors (S’→ ε |S) ∈ P’ On applique ensuite 1 aux règles S→ α Exemple 1 Soit G( {a},{S,A} S,P) avec P= S→Ab 9
A→aA| ε On est dans le premier cas et ε ∉ L(G). La grammaire libre de ε est G({a,b},{S ,A},S ,P’) Avec P’= S→Ab|b A→aA|a Exemple 2 Soit G( {a,b},{S},S,S→aSb|ε ) On est dans le deuxième cas et ε ∈ L(G). Donc introduction d’un nouvel axiome S’ et on a S’→ ε |S
[F1]
S→aSb|ε [F2] On applique 1) à [F2] on obtient donc G( {a,b},{S},S, S’→ ε|S ,S→aSb|ab) Exemple 3 : Soit G({a,b},{S} ,S,P) avec P= ( S→aSbS| bSaS|ε ) On est dans le deuxième cas, mais l’axiome se répète plusieurs fois, il faut donc considérer tous les cas dans les remplacements. On introduit d’abord le nouvel axiome S’. On a : S’→ ε |S [F1] S→aSbS|bSaS | ε [F2] On applique 1) à [F2] La grammaire libre de ε est donc G( {a,b},{S’,S},S’, S’ → ε|S; S→ aSbS |bSaS|abS|aSb|ab|baS|bSa|ba
IV.8 Classification de chomsky Chomsky a établi une classification des langages par types de grammaires. Il a ainsi établi quatre types de grammaires: type0, type1, type2 et type3. Selon Chomsky toute grammaire générant un langage formel est de type 0. Pour définir les autres types de grammaires, il introduit des restrictions de plus en plus sévères sur les règles de production. IV.8.1 Grammaires contextuelles « context-sensitive » ou de type 1(CG) Une grammaire est contextuelle si toute règle de production : α→β α peut s’écrire θ A Γ β Peut s’écrire θ’Ψ Γ’ Avec θ, Γ, θ’, Γ’ dans V* (suite de terminaux ou non terminaux) A dans Vn (non terminal) Ψ Dans V* (suite non vide de terminaux ou non terminaux) 10
On voit que le symbole A de Vn qui se trouve dans α précédé par θ et suivi par Γ (dans le contexte θ et Γ ) peut être substitué par Ψ et précédé par θ’ et suivi par Γ’ (d’où le nom «contextuelle»). Exemple: aB→ab B est substitué par b que si elle est précédée par a. IV.8.2 Grammaires non contextuelles « context-free » ou de type 2 (CFG) Les productions dans ce cas sont de même forme que les CG mais avec une nouvelle contrainte telle que : θ = Γ = ε et θ’ = Γ’ = ε Ainsi toutes les productions sont de la forme : A→ β Avec A ∈ Vn (non terminal) et B ∈V* (suite non vide de terminaux et de non terminaux ) Le symbole A de Vn est substitué par β sans restriction de contexte Exemple : Soit G une grammaire définie par : G= {Vn ,Vt ,P,S} Avec Vn = {S ,A,B} et Vt={a,b} P:
S→ aB|bA A→ a|aS|bAA B→b|bS|aBB
G est une grammaire hors contexte; toutes les productions de G ont un seul élément de Vn à gauche. IV.8.3 Grammaires Régulières ou de type3 :RG C'est une grammaire Hors contexte, on impose en plus la contrainte suivante : toutes les productions sont de la forme : A→ β avec β = a ou β =aB ou β =ε avec a dans Vt et B dans Vn Exemple : Soit G une grammaire définie par: G={Vn, Vt, P, S} avec Vn= {S,A ,B} et Vt={0,1} Les productions de P sont: S →0A | 1B | 0 11
A → 0A | 0S |1B B →1B|1 | 0 Toutes les productions ont un élément de Vn à gauche et un élément de Vt suivi ou non par un élément de Vn à droite. Donc c’est une grammaire régulière.
IV.9 Classification des langages formels •
Un langage contextuel ou de type 1 est un langage généré par une grammaire contextuelle.
• Un langage non contextuel ou de type 2 est un langage généré par une grammaire non contextuelle. •
Un langage régulier ou de type 3 est un langage généré par une grammaire régulière .
Soient F0,F1,F2,F3 les familles de langages de types 0 ,type1,type2 et type3 respectives alors F3 ⊂ F2 ⊂ F1 ⊂ F0
IV.10 Transformation d'une grammaire régulière à droites en NFA Soit G=(N,T ,P,S) une grammaire régulières à droite , on peut construire un automate fini A=(Σ,Q,δ,q0,F) qui accepte les mots engendrés par G: • Pour toutes les productions B→α de P ,on ajoute un nouveau symbole non terminal X et on remplace ces productions par B→αX et X→ε • L’ensemble des états Q de l’automate est celui des non-terminaux renommage près) •
L’alphabet Σ est égale à l’ensemble T des terminaux.
•
L’état q0 correspond à l’axiome A de la grammaire.
N∪{X}(à un
• Pour toute production B→αC de P, il existe la flèche (B, α ,C) dans δ(au renommage près) • Pour toute production B→ε de P, l’état correspondant B est final dans A. Exemple b G=(N ,T ,P,A) une grammaire régulière à droite N={A,B,axiome A} T={a,b,c}
B
b
a
a
P{A→aA A
A→bB A→c (devient A→CX et X→ε)
X
c
B→bB B→a(devient B→aX) B→ε E :a*bb*(a ∪ ε) ∪ (a*C) 12
A=(Σ,Q,δ, q0=A, F) Σ={a,b,c},φ={A,B,X},F{B,X} L(G) = L(A)
IV.11 Transformation d'un DFA en grammaire régulière Théorème: Un langage est régulier si et seulement si il existe une grammaire régulière qui engendre les mots de L. Soit un automate fini donné A=(Σ,Q,δ, q 0,F) G=(N,T,P,A)est une grammaire régulière qui engendre les mots de L(A) si : • L’ensemble des non terminaux N est celui des états Q de l’automate (à un renommage près) •
L’ensemble des terminaux T égale à Σ .
•
L’axiome A de la grammaire correspond à l’état q0.
•
Pour tout élément (q,6,q’) de δ il existe la production q → 6q’ dans P(au renommage près)
•
Pour tout f ∈ F il existe la production f → ε dans P(au renommage près)
Exemple :
b
A=(Σ,Q,δ, q0=A,F)
a
Σ={a,b},Q={A,B,C,D},F={D}
a,b
B
G=(V,Σ,R ,A)
b
A
V- Σ ={A,B,C,D},axiome A
D b
Σ ={a,b}
a
C
a
R={A→aC A→bB B→aD B→bA C→aD C→bB D→aD D→bD D→ε} L (G) = L (A)
IV.12 Forme Normale de Chomsky (FNC) Une grammaire hors contexte G = {N, T, P, S} est sous forme normale de Chomsky si toute production est de la forme : 13
Aa A BC Sε Avec A, B, C ∈ N et a ∈ T (dans le cas ou la dernière production est présente, S ne figure dans aucun membre droite d’une autre production) Il existe un algorithme qui transforme toute grammaire hors contexte propre en grammaire sous FNC. Algorithme mise sous forme FNC On construit G’= (N’, T, P’, S) équivalente à G (N, T, P, S) et sous FNC 1) N’ {S} P’ {A a, A BC et éventuellement S ε pour A, B, C ∈ N, a ∈ T} 2) Pour chaque production de P de la forme A α1 … αp avec A ∈ N, αi ∈ V et p > 2 on ajoute à P’ les productions : A A1X1 X1 A2X1 . . Xp-1 Ap-1Ap ou Ai = αi si αi ∈ N ou alors Ai = X αi si αi ∈ T. 3) N’ reçoit les A, les Xi et les Ai 4) On considère les productions de P de la forme A α1α2 avec α1 ou α2 ∈ T On ajoute à P’ les productions de la forme A Y1Y2 Y1 α1 si α1 ∈ T, Y1 = α1 sinon Y2 α2 si α2 ∈ T, Y2 = α2 sinon 5) pour chaque Xa crée plus haut, on ajoute à P’ Xa a 6) N’ reçoit les Yi et les Xa précédents Toutes les productions sont donc de la forme A a, A BC, S ε avec A, B, C ∈ N et a ∈T. Exemple : (mise sous FNC d’une grammaire hors contexte) G = (N, T, P, E) propre (sans production vide et sans renommage) • N = {E, T, F} ensemble des non terminaux • T = {+, *, (, ), i} ensemble des terminaux 14
• P = {E E+T | T*F | (E) | i T T*F | (E) | i Fi F (E) } • E est l’axiome. G’ = (N’, T, P’, E) ou pour l’instant : • N’= {E, ..} • T = {+, *, (, ), i} • P = {E i Ti F i} • E est l’axiome. Reste à traiter E E+T | T*F | (E) T T*F | (E) F (E) • E E+T devient E E X1 et X1 X+T N’ = {E, T, X1 , X+} P’ P’ ∪ {E E X1 , X1 X+T} • E T*F devient E T X2 et X2 X*F N’ = {E, T, X1, X+,F, X2, X*} P’ P’ ∪ {E T X2 , X2 X*F} • E (E) devient E X(X3 et X3 E X) N’ = {E, T, X1 , X+, F, X2, X*, X(, X3, X)} P’ P’ ∪ {E X( X3 , X3 E X)} • T T*F devient T T X4 et X4 X*F N’ = {E, T, X1, X+, F, X2, X*, X(, X3, X), X4} P’ P’ ∪ {T T X4 , X4 X*F} • T (E) devient T X( X5 et X5 E X) N’ = {E, T, X1 , X+, F, X2, X*, X(, X3, X), X4, X5} 15
P’ P’ ∪ {T X(X5, X5 E X)} • F (E) devient F X(X6 et X6 E X) N’ = {E, T, X1 , X+, F, X2, X*, X(, X3, X), X4, X5, X6} P’ P’ ∪ {F X( X6, X6 E X)} • On ajoute à P’ les productions Xaa, a ∈ T nécessaires P’ P’ ∪ {X+ +, X* *, X ((, X) )} • En définitive, G’ = (N’, T, P’, E) ou : • N’ = {E, T, F, X1 , X2, X3, X4, X5, X6, X+, X*, X(, X)} • T = {+, *, (, ), i} • E est l’axiome • P’ = {E E X1 | T X2 | i T T X4 | X( X5 | i F X( X6 | i X1 X+T X2 X*T X3 EX) X4 X*F X5 EX) X6 EX) X+ + X* * X( ( X) )}
16
Chapitre V Automates à pile (Push Down Automaton, PDA)
V.1 Introduction Par analogie avec les expressions régulières qui engendrent les langages réguliers, les grammaires hors contextes engendrent les langages hors contexte. Aussi par analogie avec automates à états finis qui reconnaissent les langages réguliers, les automates à pile reconnaissent les langages hors contextes. Exemple: Utilisation d'un automate à pile L'automate à pile va tenter de lire le mot aaabbb pour vérifier s'il appartient ou pas à L = {ω ∈ {a,b}*, ω = anbn n ≥ 0} qui n'est pas régulier sinon on aurait utilisé un DFA. Le PDA enpile un X à la lecture d'un a et dès la lecture du premier b il commence à dépiler à la rencontre de chaque b. Il accepte le mot quand la pile devient vide. a a
a
b
b
b Pile
PDA
X empiler X à la lecture d'un a a
a
a
b
b
b Pile
PDA X X empiler X à la lecture d'un a a a
a
b
b
b Pile
PDA X X X 17
empiler X à la lecture d'un a a a
a
b
b
b Pile
PDA X X dépiler X à la lecture d'un b a a
a
b
b
b Pile
PDA
X dépiler X à la lecture d'un b a a
a
b
b
b Pile vide
PDA
dépiler X à la lecture d'un b. Le mot est accepté par pile vide Pourquoi un automate à pile •
Les automates finis n'ont pas d'autres mémoires que leurs états.
•
Ils ne savent donc pas compter au-delà de leur nombre d'états.
•
Une pile procure une mémoire additionnelle non bornée.
•
Le nombre de symboles utilisés dans la pile est fini.
•
La pile vide peut être un critère d'acceptation des mots.
V.2 Définition d'un automate à pile Un automate à pile non déterministe est un septuple (Q, ∑,Γ,δ,q0, z, F) où: 18
•
Q : ensemble fini d'états
•
∑ : alphabet fini des symboles d'entrée
•
Γ : alphabet fini des symboles de pile
•
δ : ensemble des règles de transition
•
q0 : état initial
•
z : symbole de pile vide
•
F : ensemble des états d'acceptation
V.3 Définition d'une transition •
Une règle de transition (q, σ, γ→q',χ) considère: • L'état courant q de l'automate • Le caractère lu σ sur le ruban (ou peut être ε) • Le symbole γ de sommet de pile (ou peut être z ou ε)
•
une règle de transition indique : • Le prochain état q' de l'automate • La suite de symboles χ à empiler à la place du sommet de la pile ou dans la pile vide
• La relation de transition δ est l'ensemble des règles de transition vues comme des quintuples δ ⊆ (Q × (∑ ∪{ε}) × (Γ ∪ {ε})) × (Q × Γ*) (q, σ, γ→q',χ): on est à l'état q avec γ en sommet de pile, on peut lire σ du restant à lire, remplacer γ par χ et transiter à l'état q'.
V.4 Langages reconnus par un PDA Définitions: soit A(Q, ∑,Γ,δ,q0, z, F) un PDA 1. On appelle configuration initiale d'un PDA, le triplet (q0, ω,z), avec ω la chaîne à reconnaître par le PDA. 2. On appelle configuration finale d'un PDA, le triplet (qF, ε, α) avec qF ∈F et α ∈ Γ*. 3. Une configuration est un triplet (q:état courant , x:restant à lire,λ:contenu de la pile). Remarques: •
si α = ε, la pile est vide.
•
La succession des configurations se fait à travers δ, noté .
• Le langage reconnu par un PDA est l'ensemble des mots lus à partir de la configuration initiale jusqu'à l'obtention d'une configuration finale. Formellement L(A) = {ω∈∑*/ (q0, ω,z) * (qF, ε, α) avec qF ∈ F et α ∈ Γ*}
19
Remarque: Pour la configuration finale d'un PDA, le contenu de la pile importe peu. Cependant, un cas particulier est de considérer une configuration finale où la pile serait alors vide. L'automate est dit alors automate à pile vide.
V.5 Définition: langage reconnu par un automate à pile vide On dit qu'un langage est reconnu par un automate à pile vide, si lorsqu'on parcourt tous ses mots (à partir de la configuration initiale), on obtient une pile vide et un état d'acceptation. Lε (A) = { ω∈∑*/ (q0, ω, z) * (qF, ε, ε) avec qF ∈ F}. Exemple1: soit le langage à contexte libre L ={anbn, n ≥ 0}. Déterminons le PDA qui reconnaît L. Le principe étant d'empiler X à chaque rencontre d'un a, et de dépiler un X au fur et à mesure de la lecture des b: A est donc A (Q,∑,Γ,δ,q0, #, F) Q = {q0,q1,q2,q3}; ∑= {a,b}; Γ = {X,#}; F = {q3}; δ définie par 1 δ(q0,a,#) = (q1,X#)
On a empilé X et on se déplace à q1 qui va faire une boucle d'empilement.
2 δ(q1,a,X) = (q1,XX) 3 δ(q1,b,X) = (q2,ε)
On dépile X et on se déplace à q2 qui va avoir une boucle de dépilement
4 δ(q2,b,X) = (q2, ε)
dépilement successif de tous les X
5 δ(q2,ε,#) = (q3,#)
état final q3 atteint
Remarque: si n= 0 (ε∈L), il faut donc ajouter l'instruction δ(q0,ε,#) = (q3,#) faisons tourner l'automate sur quelques mots a) a2b2
b) a2b
c)ab2
a) état
restant à lire
contenu de la pile
transition utilisée
q0
aabb
#
1
q1
abb
X#
2
q1
bb
XX#
3
q2
b
X#
4
q2
ε
#
5
q3
ε
#
Autre représentation (q0,aabb, #) (q1,abb,X#) (q1, bb,XX#) (q2,b,X#) (q2, ε, #) (q3, ε, #) 20
on a (q0, a2b2, #) * (q3, ε, #) donc le mot est lu on est arrivé à un état d'acceptation donc a2b2 ∈L(A).. b) (q0, aab,#) (q1, ab, X#) (q1, b, XX#) (q2, ε, X#) il n y'a pas de transition pour la configuration dont l'état courant est q2, le mot est lu et il y a un X en sommet de la pile; Bien que le mot soit lu, la configuration finale n'est pas obtenue, Donc aab ∉ L(A). c) (q0, abb, #) (q1,ab,X#) (q2,b,#) il n'existe pas de transition quand l'automate est en q2, il reste un b à lire et # en sommet de pile, il y a donc blocage et abb ∉ L. Remarque: si on veut un PDA à pile vide, il faut ajouter la transition δ(q2, ε,#) = (q3, ε) Notation (qi, ε, γ)→(qj, η) sans tenir compte du restant à lire (ne pas avancer dans le ruban) (qi, σ,ε)→(qj, X) empiler X quel que soit le contenu de la pile. sans tenir compte de la pile Exemple: (p, ε, a) (q, ε) dépiler a ∀ le restant à lire et aller à q (p, ε, ε) (q,a) empiler a ∀ le contenu de la pile et ∀ le restant à lire (sans avancer dans le ruban) Exemple: soit ∑= {a,b} et L = {ωcωR : ω ∈ ∑*}
a b c b a empiler a
empiler b
aller à l'état de dépilement
dépiler b
A (Q,∑,Γ,δ,q0, #, F) 1
(q0,a, #) (q1,a#)
2
(q0,b,#) (q1,b#)
3
(q1,a, ε) (q1, a)
Q= {q0,q1,q2}, Γ= ∑, F = q2 empiler a ∀ la tête de la pile 21
dépiler a
4
(q1,b, ε) (q1,b)
empiler b ∀ la tête de la pile
5
(q1, c, ε) (q2, ε)
aller à q2 ∀ la tête de la pile
6
(q2,a,a) (q2, ε)
dépiler a si je rencontre a sur la bande et que le symbole en sommet de pile est a.
7
(q2,b,b) (q2, ε)
dépiler b si je rencontre b sur la bande et que le symbole en sommet de pile est b.
8
(q2, ε, #) (q2, ε) a,ε→a b,ε→b
a,a→ε b,b→ε ε,#→ε
q0 c,ε→ε q1
ω ∈ abbcbba état
restant à lire
contenu pile
Transition utilisée
q0
abbcbba
# 1
q1
bbcbba
a# 4
q1
bcbba
ba# 4
q1
cbba
bba# 5
q2
bba
bba# 7
q2
ba
ba# 7
q2
a
a# 6
q2
# 8
q2
Mot accepté par pile vide
Remarque : Un NFA M= {Q, ∑, δ, s, F) est la même chose qu'un PDA M'(Q,∑,Γ,δ',s, null, F) avec δ'= ((p,u, ε) (q, ε) tel que (p,u,q) ∈ δ} c'est à dire un PDA dont la pile n'est pas utilisée. Equivalence: Tout langage hors contexte reconnu par un PDA avec le mode de reconnaissance sur pile vide est également reconnu par un automate à pile acceptant sur état final et vice-versa.
V.6 Déterminisme un automate à pile est déterministe (PDA déterministe) si: •
pour un état q donné
•
pour un symbole d'entrée σ donné
•
pour un symbole de pile γ donné
Il existe une et une seule transition partant de (q, σ,γ) 22
ceci correspond bien au fait de ne pas avoir le choix quant-à la transition à appliquer Théorème Il existe des langages non contextuels qui ne sont pas reconnus par un automate à pile déterministe. Exemple: Le langage { ωωR , ω ∈ ∑*} n'est pas reconnu par un PDA déterministe. M (Q,∑,Γ,δ,s, null, F) 1
(s, a, ε) (s,a)
empiler a ∀ le symbole en sommet de pile à la rencontre de a dans la bande
2
(s, b, ε) (s,b)
empiler b ∀ le symbole en sommet de pile à la rencontre de b dans la bande
3
(s, ε,ε) (f, ε)
passer à l'état f ∀ le symbole en sommet de pile et ∀ le symbole rencontré sur la bande d'entrée
4
(f,a,a) (f, ε)
5
(f,b,b) (f, ε)
Définitions •
2 chaînes sont dites persistantes si l'une est un préfixe de l'autre
•
2 transitions (p1, µ1, β1) (q1, γ1) (p2, µ2, β2) (q2, γ2)
sont dites compatibles si
p1= p2 µ1 et µ2 sont persistantes β1 et β2 sont persistantes Théorème: un PDA est déterministe s'il ne contient aucune transition compatible Exemple 1 ∑= {a,b} L = {ωcωR, ω∈ ∑*} M (Q,∑,Γ,δ,s, null, F) δ: (s,a,a) (s,a)
le même état de départ mais a n'est pas préfixe de b ni b de c ni a de c
(s,b, ε) (s,b) (s,c,ε) (f,ε) (f,a,a) (f, ε)
même état de départ mais a n'est pas préfixe de b
(f,b,b) (f, ε) 23
Il n y a pas de transitions compatibles donc le PDA est déterministe. Exemple 2: L = {ωωR, ω∈ ∑*} δ: (s,a, ε) (s,a)
3 transitions compatibles ε préfixe de a et de b, ε préfixe de ε
(s,b, ε) (s,b) (s, ε,ε) (f,ε) (f,a,a) (f, ε)
transitions non compatibles
(f,b,b) (f, ε)
V.7 Transformation d'une grammaire hors contexte en PDA Théorème: Pour toute grammaire hors contexte, il existe un automate à pile vide A tel que L(G) = L(A) L'idée consiste à commencer par empiler l'axiome, ensuite, à chaque symbole de la chaîne d'entrée, on remplace la partie gauche de la production concernée par le reste de la partie droite. Algorithme: L: langage engendré par G = (V, ∑, R, S), il s'agit de trouver A (Q,∑,Γ,δ,q0, #, F) tel que L(G) = L(A). ∑ = ∑ de la grammaire Γ = V ∪ {#} Q = {q0, q1} F = q1 δ définie par: 1) δ(q0, ε, #) = (q1, S#)
on empile l'axiome ∀ la chaîne d'entrée
2) si (A → α) ∈ R alors δ(q1, ε, A)= (q1, α) 3) δ(q1, σ, σ) = (q1, ε) ∀ σ ∈ ∑ 4) δ(q1, ε, #) = (q1, ε) Exemple: soit L = {anbn, n ≥1} L est engendré par G = (V, ∑, R, S) avec V = {a,b,S}; ∑= {a,b}, et R définit par S → aSb|ab 24
Le PDA à pile vide qui reconnaît L(G) est: A (Q,∑,Γ,δ,q0, z, F) avec ∑ ={a,b}; Γ={a,b,S,#}, z = #, Q={q0,q1}; F={q1} et δ définie par: δ(q0, ε, #) = (q1, S#)
[F1]
δ(q1, ε, S) = (q1, aSb)
[F2]
δ(q1, ε, S) = (q1, ab) δ(q1, a, a) = (q1, ε)
[F3]
δ(q1, b, b) = (q1, ε) δ(q1, ε, #) = (q1, ε)
[F4]
Faisons tourner l'automate sur a2b2 (q0,aabb, #) (q1, aabb, S#) (q1, aabb, aSb#) (q1, abb, Sb#) (q1, abb, abb#) (q1, bb, bb#) (q1, b, b#) (q1, ε, #) (q1, ε, ε)
V.8 Transformation d'un PDA en grammaire hors contexte Théorème Si L est reconnu par un automate à pile M, alors il existe une grammaire non contextuelle G qui engendre L. On dispose d’un PDA A qui reconnaît sur pile vide et on veut construire une grammaire algébrique G telle que L (G)=L (A). Algorithme transformation PDA Grammaire hors contexte On part de A= (Q, ∑, Γ, δ, q0, Z, F=∅) et on construit G (V, ∑, R, S) 1) V-∑= {, q, p ∈ Q, x ∈ Γ} ∪ {S} 2) ∑ = ∑ de l’automate 3) Pour tout q ∈ Q, P {S < q0, Z, q >} 4) Pour toute transition (q, a, x p, ε) de δ faire P {< q, x, p > a} 5) Pour toute transition (q, a, x) p, B1,…, Bm d’états q1, q2, …, qm faire
,
m>0 de δ faire pour toutes les suites
P { a … avec a ∈ ∑ ∪ {ε} ; x, B1, …,Bm ∈ Γ. Exemple 1 0) On part de A = (Q, ∑, Γ, δ, q0, Z, Ø) et on construit G (V, ∑, R, S) les transitons sont donc δ : (q0, a, Z) (q0, A)
(1) 25
(q0, a, A) (q0, AA) (2) (q0, b, A) (q1, ε)
(3)
(q1, b, A) (q1, ε)
(4)
A,Z →A a,A →AA
b,A →ε
q0
q1
b,A →ε
1) V- ∑ = {; < q0 , A, q1 >; ; < q1, A, q1 > ; ; < q0 , Z, q1 >; < q1, Z, q0 >; < q1, Z, q1 >} ∪ {S} 2) ∑ = {a, b} 3) P reçoit {S ; S } 4) P reçoit < q0 , A, q1 > b (3ème transition) < q1 , A, q1 > b (4ème transition) 5) P reçoit < q0 , Z, q0 > a< q0 , A, q0 > (1ème transition) < q0 , Z, q1 > a< q0 , A, q1 > (1ème transition) < q0 , A, q0 > a< q0 , A, q0 > < q0 , A, q0 > (2ème production) séquence q0q0 < q0 , A, q0 > a< q0 , A, q1 > < q1 , A, q0 > (2ème production) séquence q1q0 < q0 , A, q1 > a< q0 , A, q1 > < q1 , A, q1 > (2ème production) séquence q1q1 < q0 , A, q1 > a< q0 , A, q0 > < q0 , A, q1 > (2ème production) séquence q0q1 Après renommage SA|B AaC BaD C a CC | a DE D a CD | a DF | b F b Simplification Les productions S A | B ;
A a C ; B a D remplacées par S a C | a D
26
Donc on obtient SaC|aD C a CC | a DE
SaC|aD ⇒
D a CD | a DF | b
S a CC D a CD | a D b | b
F b on remplace F par b
↓↓
E symbole non productif
C est devenu non productif, éliminer toutes les productions faisant intervenir C ↓↓ SaD DaDb|b Forme simplifiée.
V.9 Propriétés de clôture La classe des langages hors contexte est close pour l’union Preuve par construction: •
Soient G1 = (N1, T1, R1, S1) et G2 = (N2, T2, R2, S2) engendrant respectivement L1 et L2
•
Construisons G pour engendrer L1 ∪ L2 G = (N1 ∪ N2 ∪ {S}, T1 ∪ T2, S, R1 ∪ R2 ∪ {S S1 | S2 })
En s’assurant au préalable que N1 ∩ N2 = Ø et S ∉ N1∪ N2 sinon renommage. La classe des langages algébriques est close par concaténation Preuve par construction •
Soient G1 = (N1, T1, R1, S1) et G2 = (N2, T2, R2, S2) engendrant respectivement L1 et L2
•
Construisons G pour engendrer L = L1L2 G = (N1 ∪ N2 ∪ {S}, T1 ∪ T2, S, R1 ∪ R2 ∪ {S S1S2}) En s’assurant au préalable que N1 ∩ N2 = Ø et S ∉ N1∪ N2
La classe des langages algébriques est close pour l’opération « étoile de Kleene » Preuve par construction •
G = (N, T, R, S) engendrant le langage L
•
Construisons G’ pour engendrer L* :
G’ = (N ∪ {A}, T, axiome A, P ∪ {A ε | SA} 27
On s’assure au préalable que A ∉ N Exemple Question : construire une grammaire pour L = {ai bj ck, i=j, ou j=k} Réponse : L est l’union de deux langages = L1 ∪ L2 Avec L1 : {ai bj ck , i=j, k ≥ 0} L2 : {ai bj ck , i ≥ 0, j=k} •
Concernant L1 :{ai bj ck, i=j, k ≥ 0} est la concaténation de L1’= {ai bj, i=j} L1’’= {ck, k ≥ 0}
•
Concernant L2 :{ai bj ck, i ≥ 0, j=k} est la concaténation de L2’= {ai, i ≥ 0} L2’’= {bj ck, j=k}
•
Les langages {ck, k ≥ 0}, respectivement {ai, i ≥ 0} sont étoile de {c}, respectivement {a}.
•
Construisons maintenant la grammaire pour L. {ai bj, i=j}: • S1 ε | a S1 b {ck, k ≥ 0}: •S2 ε | c S2 L1 = {ai bj ck, i=j, k ≥ 0} • S1 ε | a S1 b • S2 ε | c S2 • SL1 S1 S2 /*concaténation L2 = {ai bj ck, i ≥ 0, j=k} • S3 ε | a S3 • S4 ε | b S4 c • SL2 S3 S4 /*concaténation
L = {ai bj ck, i=j, ou j=k} est engendré par G = (N, T, R, S) N = {S1, S2, S3, S4, SL1, SL2, S} T = {a, b} P = {S1 ε | a S1 b; S2 ε | c S2; SL1 S1 S2; S3 ε | a S3; S4 ε | b S4 c; SL2 S3 S4; S SL1 | SL2}
28
View more...
Comments