Escolar Documentos
Profissional Documentos
Cultura Documentos
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 }
Remarque: est drivable si S Le langage engendr par la grammaire G est: L(G) = {*, S } L est dit langage contexte libre (CFL) s'il existe une grammaire G qui le gnre. IV.3.1 Drivation gauche se drive directement le plus gauche en et on note: s'il existe des mots 1 *,
g
*
2 V* tels que: = 1 X 2 = 1 W 2 R contient une production X W se drive le plus gauche en et on note s'il existe une suite de mots 0, 1,.., n de
g *
IV.3.2 Drivation droite se drive directement le plus droite en et on note: s'il existe des mots 1 V *,
d
2 * tels que: = 1 X 2 , = 1 W 2 et R contient une production X W se drive le plus droite en et on note s'il existe une suite de mots 0, 1,.., n de
d *
Exemple: soit G =(V, ,R,S) avec = {x1,x2,+,*,(,)}, V = {E,T,F},S = E et R: E E+T E T T T*F T F F (E) F x1 F x2 soit = x1 *(x2+x1)
Drivation gauche E T
g
T*F
g g g g g g g g g g
Drivation droite Pour la drivation droite, c'est le non terminal le plus droite qui est driv chaque tape E T
d
T*F
d d d d d d d d d d
Un nud interne tiquet B a des fils, de gauche droite, tiquets 1,2,..,n s'il existe une production de R: B 12..n est form de la concatnation des feuilles lues dans un parcours suffixe (profondeur d'abord, gauche droite)
( E ) E + T T F x2 F x1
E E + E * E x2
x1 E x1
E E x1
E x2
+ E x1
aaaaaA aaaaaa
g
Le langage reconnu est aa(aa)*. Exercice: soit ={a,b} L = {*, contient 2n a, n >=1} 1) Donnez G = (V,,R,S) tq L(G) = L 2) Donnez une drivation gauche de la chane = abaababa L. 3) Montrer que L(G) = L. 5
gnre rcursivement une suite de b gauche gnre rcursivement une suite de b droite
bAA
g g g g g g g g g
Dans la drivation directe n n+1 on passe travers une rgle qui ne change pas la parit, en effet A bA A Ab A AAA Aa ne change pas le nombre de A + a ne change pas le nombre de A + a ajoute 2A donc preserve la parit des A+a ne change pas le nombre de A + a
Donc l'hypothse 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), possde 2n a. Dmonstration L L(G) soit L, = bm1 a bm2 a... bm2n-1 a bm2n a bm2n+1 Voici une drivation de S en w S AA A AAA A bA Aa A bA Aa 2n-1 fois bm1abm2a....bm2n-1aA A bA A Ab A a m2n fois m2n+1 fois 1 fois bm1abm2a....bm2n-1aA bm2nA bm1abm2a....bm2n-1aA bm2nAbm2n+1 bm1abm2a....bm2n-1aA bm2nabm2n+1 1 fois (n-1) fois m1 fois 1 fois AA AA....A b AA...A bm1aA...A
m1
(2n A)
- Inaccessible: ssi
- improductif: ssi il nexiste pas de drivation de la forme A ; VT* (chane de terminaux) 2) La grammaire G est dite - sans cycle : s'il nexiste pas de drivation A A produite par G. - sans renommage : ssi elle ne contient pas de production de la forme AB, A, B (V-). - -libre si - il n'existe pas de rgle de la forme (A ) P, A N \ { S } - si (S) P alors S napparat pas dans le deuxime membre dune rgle de production. 3) Une grammaire sans termes inaccessibles et sans termes improductifs est dite grammaire rduite. 4) Une grammaire sans cycle et libre de est dite grammaire propre. b) Transformation de grammaires : Les termes inaccessibles et improductifs seront limins dans toutes les rgles de production ou` il interviennent. Algo : Elimination symbole non productif Entre :G=<VN,VT,S,P> Sortie :G=<VN,VT,S,P> Dbut 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 SAA|B|a ASS|b BBC|AB CaB|b 8 soit G({a,b},{S,A ,B,C}, S)
*
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 drivation faite partir de S ne produit C, on supprime donc C et la grammaire dfinitive devient : G((a,b) ,(S,A),S, SAA|a ASS|b IV.7.2 Transformation d'une grammaire non libre de Entre G(T,N,S,P) non libre de Sortie G(T,N,S,P) libre de
Dfinition des diffrents paramtres : -T=T -N=N{S} -S=S ou bien SS et Sest le nouvel axiome. Algorithme de transformation : 1) Si (A0 B1 1.. Bi i .. Bk k ) P et (Bi ) P alors {(A0 X1 1 ..Xii .. Xk k ) P Avec Xi=Bi ou Xi= et suppression des rgles Bi } 2) Si (S ) P et si Bi tq Bi=S Alors (S |S) P On applique ensuite 1 aux rgles S Exemple 1 Soit G( {a},{S,A} S,P) avec P= SAb 9
AaA| On est dans le premier cas et L(G). La grammaire libre de est G({a,b},{S ,A},S ,P) Avec P= SAb|b AaA|a Exemple 2 Soit G( {a,b},{S},S,SaSb| ) On est dans le deuxime cas et L(G). Donc introduction dun nouvel axiome S et on a S |S SaSb| [F2] On applique 1) [F2] on obtient donc G( {a,b},{S},S, S |S ,SaSb|ab) Exemple 3 : Soit G({a,b},{S} ,S,P) avec P= ( SaSbS| bSaS| ) On est dans le deuxime cas, mais laxiome se rpte plusieurs fois, il faut donc considrer tous les cas dans les remplacements. On introduit dabord le nouvel axiome S. On a : S |S [F1] SaSbS|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 [F1]
On voit que le symbole A de Vn qui se trouve dans prcd par et suivi par (dans le contexte et ) peut tre substitu par et prcd par et suivi par (do le nom contextuelle). Exemple: aBab B est substitu par b que si elle est prcde par a. IV.8.2 Grammaires non contextuelles context-free ou de type 2 (CFG) Les productions dans ce cas sont de mme 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 dfinie par : G= {Vn ,Vt ,P,S} Avec Vn = {S ,A,B} et Vt={a,b} P: S aB|bA A a|aS|bAA Bb|bS|aBB G est une grammaire hors contexte; toutes les productions de G ont un seul lment de Vn gauche. IV.8.3 Grammaires Rgulires 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 dfinie 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 lment de Vn gauche et un lment de Vt suivi ou non par un lment de Vn droite. Donc cest une grammaire rgulire.
Pour toute production BC de P, il existe la flche (B, ,C) dans (au renommage prs) Pour toute production B de P, ltat correspondant B est final dans A. Exemple b G=(N ,T ,P,A) une grammaire rgulire droite N={A,B,axiome A} T={a,b,c} P{AaA AbB Ac (devient ACX et X) BbB Ba(devient BaX) B E :a*bb*(a ) (a*C) 12
A X B
b a
b B A a b b C
a a,b D
R={AaC AbB BaD BbA CaD CbB DaD DbD D} L (G) = L (A)
A A S
a BC
Avec A, B, C N et a T (dans le cas ou la dernire production est prsente, S ne figure dans aucun membre droite dune 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 a T} 2) Pour chaque production de P de la forme A i V et p > 2 on ajoute P les productions : A X1 . . Xp-1 Ap-1Ap ou Ai = i si i N ou alors Ai = X i si i T. 3) N reoit les A, les Xi et les Ai 4) On considre les productions de P de la forme A On ajoute P les productions de la forme A Y1 Y2 Y1Y2 1 si 1 T, Y1 = 1 sinon 2 si 2 T, Y2 = 2 sinon a a, A BC, S avec A, B, C N et a 12 avec 1 ou 2 T A1X1 A2X1 1 p avec A N, BC et ventuellement S pour A, B, C N,
5) pour chaque Xa cre plus haut, on ajoute P Xa 6) N reoit les Yi et les Xa prcdents Toutes les productions sont donc de la forme A T.
Exemple : (mise sous FNC dune 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 T F F
E est laxiome. G = (N, T, P, E) ou pour linstant : N= {E, ..} T = {+, *, (, ), i} P = {E T F Reste traiter E T F E E+T | T*F | (E) T*F | (E) (E) E+T devient E E X1 et X1 X+T} X*F X+T i i i}
E est laxiome.
N = {E, T, X1 , X+} P P {E E E X1 , X1
T*F devient E
T X2 et X2 X*F}
(E) devient E
X(X3 et X3
E X)
T*F devient T
T X4 et X4 X*F}
(E) devient T
X( X5 et X5
E X)
P P {T F
X(X5, X5
E X)} E X)
(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
En dfinitive, G = (N, T, P, E) ou : N = {E, T, F, X1 , X2, X3, X4, X5, X6, X+, X*, X(, X)} T = {+, *, (, ), i} E est laxiome P = {E T F X1 X2 X3 X4 X5 X6 X+ X* X( X) E X1 | T X2 | i T X4 | X( X5 | i X( X6 | i X+T X*T EX) X*F EX) EX) + * ( )}
16
V.1 Introduction
Par analogie avec les expressions rgulires qui engendrent les langages rguliers, les grammaires hors contextes engendrent les langages hors contexte. Aussi par analogie avec automates tats finis qui reconnaissent les langages rguliers, 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 vrifier s'il appartient ou pas L = { {a,b}*, = anbn n 0} qui n'est pas rgulier sinon on aurait utilis un DFA. Le PDA enpile un X la lecture d'un a et ds la lecture du premier b il commence dpiler la rencontre de chaque b. Il accepte le mot quand la pile devient vide. a a a b b b Pile
PDA
PDA
X X empiler X la lecture d'un a a a a b b b Pile
PDA
X X X 17
PDA
X X dpiler X la lecture d'un b a a a b b b Pile
PDA
PDA
dpiler 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 mmoires que leurs tats. Ils ne savent donc pas compter au-del de leur nombre d'tats. Une pile procure une mmoire additionnelle non borne. Le nombre de symboles utiliss dans la pile est fini. La pile vide peut tre un critre d'acceptation des mots.
Q : ensemble fini d'tats : alphabet fini des symboles d'entre : alphabet fini des symboles de pile : ensemble des rgles de transition q0 : tat initial z : symbole de pile vide F : ensemble des tats d'acceptation
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 considrer une configuration finale o la pile serait alors vide. L'automate est dit alors automate pile vide.
Remarque: si n= 0 (L), il faut donc ajouter l'instruction (q0,,#) = (q3,#) faisons tourner l'automate sur quelques mots a) a2b2 a) tat q0 q1 q1 q2 q2 q3 Autre reprsentation (q0,aabb, #) (q1,abb,X#) (q1, bb,XX#) (q2,b,X#) (q2, , #) (q3, , #) 20 restant lire aabb abb bb b contenu de la pile # X# XX# X# # # transition utilise 1 2 3 4 5
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, ) dpiler 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 = {cR : *}
a b c b a
empiler a empiler b aller l'tat de dpilement dpiler b dpiler a
A (Q,,,,q0, #, F) 1 2 3 (q0,a, #) (q1,a#) (q0,b,#) (q1,b#) (q1,a, ) (q1, a) empiler a la tte de la pile 21 Q= {q0,q1,q2}, = , F = q2
4 5 6 7 8
(q1,b, ) (q1,b) (q1, c, ) (q2, ) (q2,a,a) (q2, ) (q2,b,b) (q2, ) (q2, , #) (q2, )
a,a b,b a,a b,b ,#
empiler b la tte de la pile aller q2 la tte de la pile dpiler a si je rencontre a sur la bande et que le symbole en sommet de pile est a. dpiler b si je rencontre b sur la bande et que le symbole en sommet de pile est b.
q0 c, q1
abbcbba tat q0 q1 q1 q1 q2 q2 q2 q2 q2 restant lire abbcbba bbcbba bcbba cbba bba ba a contenu pile Transition utilise # 1 a# 4 ba# 4 bba# 5 bba# 7 ba# 7 a# 6 # 8 Mot accept par pile vide
Remarque : Un NFA M= {Q, , , s, F) est la mme 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 utilise. 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 Dterminisme
un automate pile est dterministe (PDA dterministe) si: pour un tat q donn pour un symbole d'entre donn pour un symbole de pile donn
ceci correspond bien au fait de ne pas avoir le choix quant- la transition appliquer Thorme Il existe des langages non contextuels qui ne sont pas reconnus par un automate pile dterministe. Exemple: Le langage { R , *} n'est pas reconnu par un PDA dterministe. M (Q,,,,s, null, F) 1 2 3 (s, a, ) (s,a) (s, b, ) (s,b) (s, ,) (f, ) empiler a le symbole en sommet de pile la rencontre de a dans la bande empiler b le symbole en sommet de pile la rencontre de b dans la bande passer l'tat f le symbole en sommet de pile et le symbole rencontr sur la bande d'entre
4 5
(f,a,a) (f, ) (f,b,b) (f, ) 2 chanes sont dites persistantes si l'une est un prfixe de l'autre 2 transitions (p1, 1, 1) (q1, 1) (p2, 2, 2) (q2, 2) p1= p2 1 et 2 sont persistantes 1 et 2 sont persistantes sont dites compatibles si
Dfinitions
Thorme: un PDA est dterministe s'il ne contient aucune transition compatible Exemple 1 = {a,b} L = {cR, *} M (Q,,,,s, null, F) : (s,a,a) (s,a) (s,b, ) (s,b) (s,c,) (f,) (f,a,a) (f, ) (f,b,b) (f, ) 23 mme tat de dpart mais a n'est pas prfixe de b le mme tat de dpart mais a n'est pas prfixe de b ni b de c ni a de c
Il n y a pas de transitions compatibles donc le PDA est dterministe. Exemple 2: L = {R, *} : (s,a, ) (s,a) (s,b, ) (s,b) (s, ,) (f,) (f,a,a) (f, ) (f,b,b) (f, ) transitions non compatibles 3 transitions compatibles prfixe de a et de b, prfixe de
Le PDA pile vide qui reconnat L(G) est: A (Q,,,,q0, z, F) avec ={a,b}; ={a,b,S,#}, z = #, Q={q0,q1}; F={q1} et dfinie par: (q0, , #) = (q1, S#) (q1, , S) = (q1, aSb) (q1, , S) = (q1, ab) (q1, a, a) = (q1, ) (q1, b, b) = (q1, ) (q1, , #) = (q1, ) [F4] [F3] [F1] [F2]
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, , )
a}
a <p, B1, q1> <q1, B2, q2> <qm-1, Bm, qm> avec a {} ; x,
b,A q1
b,A
1) V- = {<q0, A, q0>; < q0 , A, q1 >; <q1, A, q0 >; < q1, A, q1 > ; <q0, Z, q0>; < q0 , Z, q1 >; < q1, Z, q0 >; < q1, Z, q1 >} {S} 2) = {a, b} 3) P reoit {S 4) P reoit < q0 , A, q1 > < q1 , A, q1 > 5) P reoit < q0 , Z, q0 > < q0 , Z, q1 > < q0 , A, q0 > < q0 , A, q0 > < q0 , A, q1 > < q0 , A, q1 > Aprs renommage S A B C D F A|B aC aD a CC | a DE a CD | a DF | b b a< q0 , A, q0 > (1me transition) a< q0 , A, q1 > (1me transition) a< q0 , A, q0 > < q0 , A, q0 > (2me production) squence q0q0 a< q0 , A, q1 > < q1 , A, q0 > (2me production) squence q1q0 a< q0 , A, q1 > < q1 , A, q1 > (2me production) squence q1q1 a< q0 , A, q0 > < q0 , A, q1 > (2me production) squence q0q1 b (3me transition) b (4me transition) <q0 , Z, q0 > ; S <q0 , Z, q1 >}
26
Donc on obtient S C D F aC|aD a CC | a DE a CD | a DF | b b on remplace F par b E symbole non productif S S D aC|aD a CC a CD | a D b | b C est devenu non productif, liminer toutes les productions faisant intervenir C S D aD aDb|b
Forme simplifie.
G = (N {A}, T, axiome A, P {A
On sassure au pralable que A N Exemple Question : construire une grammaire pour L = {ai bj ck, i=j, ou j=k} Rponse : L est lunion 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 concatnation de L1= {ai bj, i=j} L1= {ck, k 0} Concernant L2 :{ai bj ck, i 0, j=k} est la concatnation 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 {c , k 0}: S2
i j k k
| a S1 b | c S2
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 S4 | c S2; SL1 | b S4 c; SL2 S1 S2; S3 S3 S4; S | a S3; SL1 | SL2}
28