+ All Categories
Home > Documents > Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi...

Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi...

Date post: 14-Jan-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
29
Curs 8 1
Transcript
Page 1: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Curs 8

1

Page 2: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Paşii compilării

Analiza lexicală ◦ Descriere lexicală

◦ Interpretare

◦ Interpretare orientată dreapta

◦ Descriere lexicală bine formată

Lex

Gramatici de tipul 2

2

Page 3: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Cod sursă

Analizor lexical

Analizor sintactic

Analizor semantic

Caractere Unităţi lexicale

Arbore sintactic

Generator de cod

Arbore sintactic decorat

Asamblare Interpretare

Cod maşină Cod intermediar

3

Page 4: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Fie descrierea lexicală: ◦ litera → a | b |…|z

◦ cifra → 0 | 1 |…| 9

◦ identificator → litera (litera| cifra)*

◦ semn → + | -

◦ numar →(semn | ε) cifra+

◦ operator → + | -| * | / | < | > | <= | >= | < >

◦ asignare → :=

◦ doua_puncte → :

◦ cuvinte_rezervate → if| then|else

◦ paranteze →) | (

4

Page 5: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Analiza sintactică ascendentă ◦ Parser ascendent general

Gramatici LR(k) ◦ Definiţie

◦ Proprietăți

Gramatici LR(0) ◦ Teorema de caracterizare LR(0)

◦ Automatul LR(0)

5

Page 6: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Control Tabela de parsare

a1 ... ai ... an #

X1

X1

...

#

p1 p2 ...

6

Page 7: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

O configuraţie ( #γ, u#, π) este interpretată în felul următor: ◦ –#γ este conţinutul stivei cu simbolul # la

baza.

◦ –u# este conţinutul intrării.

◦ –π este conţinutul ieşirii.

C0= {(#, w#, ε)|w ε T*} mulţimea configuraţiilor iniţiale.

7

Page 8: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Parserul ascendent ataşat gramaticii G este perechea (C0, ⊢) unde C0 este mulţimea configuraţiilor iniţiale, iar ⊢ este o relaţie de tranziţie definită astfel: ◦ (# γ, au#, π) ⊢(# γa, u#, π) (deplasare) pentru orice γ ε Σ*,

a ε T, u ε T*, π ε P*.

◦ (#αβ, u#, π) ⊢(#αA, u#, πr) dacă r = A→β (reducere).

◦ Configuraţia (#S, #, π) unde π ≠ ε, se numeşte configuraţie de acceptare.

◦ Orice configuraţie, diferită de cea de acceptare, care nu este în relaţia ⊢ cu nici o altă configuraţie este o configuraţie eroare.

Parsere de deplasare/reducere.

8

Page 9: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Fie gramatica S → aSb| ε. Tranziţiile sunt: ◦ (#γ, u#, π) ⊢(#γS, u#, π2)

◦ (#γaSb, u#, π) ⊢(#γS, u#, π1)

◦ (#γ, au#, π) ⊢(#γa, u#, π)

◦ (#γ, bu#, π) ⊢(#γb, u#, π)

O succesiune de tranziţii se numeşte calcul ◦ (#, #, ε) ⊢(#S, #, 2)

◦ (#, aabb#, ε) ⊢ (#a, abb#, ε) ⊢ (#aa, bb#, ε) ⊢ (#aaS, bb#, 2) ⊢ (#aaSb, b#, 2) ⊢ (#aS, b#, 21) ⊢ (#aSb, #, 21) ⊢ (#S, #, 211)

9

Page 10: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Parserul este nedeterminist: ◦ Pentru o configuraţie de tipul (#αβ, au#, π), S→β,

există două posibilităţi (conflict deplasare/reducere):

(#αβ, au#, π) ⊢ (#αS, au#, πr) (reducere cu S→β)

(#αβ, au#, π) ⊢ (# αβa, u#, π) (deplasare)

◦ Pentru o configuraţie (#γ, u#, π) cu γ=α1β1=α2β2 şi A→β1, B→β2, reguli (conflict reducere/reducere)

(#α1β1, u#, π) ⊢ (# α1A, au#, πr1)

(#α2β2, u#, π) ⊢ (# α2B, au#, πr2)

10

Page 11: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Spunem că un cuvânt wεT* este acceptat de un parser ascendent dacă există măcar un calcul de forma ◦ (#, w#, ε) ⊢+(#S, #, π)

Pentru ca parserul descris să fie corect, trebuie ca el să accepte toate cuvintele din L(G) şi numai pe acestea.

Teorema ◦ Parserul ascendent general ataşat unei gramatici G

este corect: pentru orice wεT*, wεL(G) dacă şi numai dacă în parser are loc calculul (#, w#, ε) ⊢+(#S, #, π).

11

Page 12: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Gramatici LR(k):Left to right scanning of the input, constructing a Rightmost derivation in reverse, using k symbols lookahead

Definiţie ◦ O gramatică G se numeşte gramatică LR(k), k≥0,

dacă pentru orice două derivări de forma:

S’⇒ S dr⇒* αAu dr⇒ αβu = δu

S’⇒ S dr⇒* α’A’u’ dr⇒ α’β’u’ = αβv = δv

◦ pentru care k:u = k:v, are loc α=α’, β=β’, A=A’

12

Page 13: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Teorema 1 ◦ Dacă G este gramatică LR(k), k≥0, atunci G este

neambiguă.

Un limbaj L este (în clasa) ℒℛ(k) dacă există o gramatică LR(k) care îl generează

Teorema 2 ◦ Orice limbaj ℒℛ(k) este limbaj de tip 2 determinist.

Teorema 3 ◦ Orice limbaj de tip 2 determinist este limbaj LR(1).

Teorema 4 ◦ Pentru orice limbaj ℒℛ(k), k≥1, există o gramatică LR(1)

care generează acest limbaj, adică LR(0) ⊂ LR(1) = LR(k), k≥1.

13

Page 14: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Definiţie ◦ Fie G = (V, T, S, P) o gramatică independentă de

context redusă. Să presupunem că simbolul ∙ nu este în Σ. Un articol pentru gramatica G este o producţie A→γ în care s-a adăugat simbolul ∙ într-o anume poziţie din γ. Notăm un articol prin A→α∙β dacă γ = αβ. Un articol în care ∙ este pe ultima poziţie se numeşte articol complet.

Definiţie ◦ Un prefix viabil pentru gramatica G este orice prefix

al unui cuvânt αβ dacă S dr⇒* αAu dr⇒ αβu . Dacă β= β1β2şi φ= αβ1spunem că articolul A → β1∙β2 este valid pentru prefixul viabil φ.

14

Page 15: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Exemplu S → A, A → aAa | bAb | c | ε. ◦ Articole: S→∙A, S→A∙, A→∙aAa, A→a∙Aa, A→aA∙a,

A→aAa∙, A→∙bAb, A→b∙Ab, A→bA∙b, A→bAb∙,

A→∙c, A→c∙, A→ ∙.

Articole valide pentru prefixe viabile:

Prefixul viabil Articole valide Derivarea corespunzătoare

ab A→b∙Ab A→∙aAa A→∙bAb

S⇒A⇒aAa⇒abAba S⇒A⇒aAa⇒abAba⇒abaAaba S⇒A⇒aAa⇒abAba⇒abbAbba

ε S→∙A A→∙bAb

A→∙c

S⇒A S⇒A⇒bAb

S⇒A⇒c

15

Page 16: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Lema ◦ Fie G o gramatică şi A→β1∙Bβ2 un articol valid

pentru prefixul viabil γ. Atunci, oricare ar fi producţia B→β, articolul B→∙β este valid pentru γ.

Teorema (caracterizare LR(0)) ◦ Gramatica G este gramatică LR(0) dacă şi numai

dacă, oricare ar fi prefixul viabil γ, sunt îndeplinite condiţiile:

1.nu există două articole complete valide pentru γ.

2.dacă articolul A→β∙ este valid pentru γ, nu există nici un articol B→β1∙aβ2, aεT, valid pentru γ.

16

Page 17: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Teorema

◦ Fie G = (V, T, S, P) o gramatică independentă de context. Mulţimea prefixelor viabile pentru gramatica G este limbaj regulat.

Demonstraţie

◦ G’ este G la care se adaugă S’→S.

◦ M = (Q, Σ, δ, q0, Q), unde:

Q este mulţimea articolelor gramaticii G’,

Σ = V∪T, q0= S’→∙S

δ:Qx(Σ ∪ {ε})→2Q definită astfel:

δ(A →α∙Bβ, ε) = {B →∙α| B → γ εP}.

δ(A →α∙Xβ, X) = { A →αX∙β}, X ε Σ.

δ(A →α∙aβ, ε) = ∅, ∀a ε T.

δ(A →α∙Xβ, Y) = ∅, ∀ X,Y ε Σ cu X ≠Y.

Se arată că are loc:

◦ (A →α∙β ε δ ^(q0, γ ) ⇔ γ este prefix viabil şi A →α∙β este valid pentru γ.

17

Page 18: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

S’ → S, S → aSa |bSb | c

18

Page 19: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Teorema (caracterizare LR(0)). Demonstraţie ◦ ⇒ G este LR(0) şi, prin reducere la absurd 1 sau 2

nu are loc

◦ ⇐ 1, 2 au loc si prin reducere la absurd, G nu este LR(0): există

S’⇒ S dr⇒* αAu dr⇒ αβu = δu

S’⇒ S dr⇒* α’A’u’ dr⇒ α’β’u’ = αβv = δv

Nu au loc α=α’, β=β’, A=A’

◦ Fără a restrânge generalitatea, presupunem că

|δ| = |αβ| ≤ |α’β’|

19

Page 20: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Cazul 1: |α’| ≤ |δ|

◦ β’=β1’β2’, v=β2’u’, β2’εT*. Din (1) avem A→β∙ articol valid pentru δ şi din (2) avem A’→β1’∙β2’ articol valid pentru δ. Dacă β2’= ε atunci contrazic (1) iar altfel contrazic (2).

20

Page 21: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Cazul 2: |α’| > |δ| ◦ α’=δu1, v=u1β’u’ ε T* (|u1|≥1)În derivarea (2), punem

în evidenţă prima formă propoziţională care are prefixul δ.

S’⇒S dr⇒α1A1u1dr⇒α1β1u1dr⇒α1β’1 β’’1u1=δβ’’1u1dr⇒ δv

Avem A→β∙ şi A 1→β’1∙β’’1 articole valid pentru δ

21

Page 22: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Algoritmul 1(procedura închidere(t))

Intrare: ◦ Gramatica G = (V, T, S, P);

◦ Mulţimea t de articole din gramatica G;

Ieşire: t’=închidere( t)={qεQ|∃pεt, qε δ(p,ε)} =

δ(t,ε)

22

Page 23: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

t’ = t ; flag = true;

while( flag ) {

◦ flag = false;

◦ for (A→α∙Bβ ε t’ ) {

for (B→γ ε P )

if (B→∙γ∉t’ ) {

t’ = t’∪{B→∙γ};

flag = true;

}//endif

}//endforB

◦ }//endforA

}//endwhile

return t’;

23

Page 24: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Algoritmul 2 Automatul LR(0) ◦ Intrare: Gramatica G = (N, T, S, P) la care s-a

adăugat S’ → S;

◦ Ieşire: Automatul determinist M = (T, Σ, g, t0, T) echivalent cu M.

24

Page 25: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

t0=închidere(S’ →∙ S); T={t0}; marcat(t0)=false;

while(∃ t ε T && !marcat(t)) { // marcat(t) = false

◦ for( X ε Σ) {// Σ = N ∪T

t’ = ∅;

for(A→α∙Xβ εt)

t’ = t’ ∪ {B→αX∙β | A→α∙Xβ εt};

if( t’≠∅){

t’ = închidere( t’ );

if( t’∉T ) {

T = T∪{ t’ };

marcat( t’ ) = false;

}//endif

g(t, X) = t’;

}//endif

}//endfor

◦ }//endfor

◦ marcat( t ) = true;

}// endwhile

25

Page 26: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

S’ → S, S → aSa | bSb | c

26

Page 27: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Definiţie Fie G o gramatică şi M automatul LR(0) ataşat lui G. ◦ Spunem că o stare a lui M are un conflict reducere/reducere

dacă ea conţine două articole complete distincte A→α∙, B→β∙.

◦ Spunem că o stare a lui M are un conflict deplasare/reducere dacă ea conţine un articol complet A→α∙ şi un articol cu terminal după punct de forma B→β∙aγ.

◦ Spunem că o stare este consistentă dacă ea nu conţine conflicte şi este inconsistentă în caz contrar.

Teorema Fie G o gramatică şi M automatul său LR(0). Gramatica G este LR(0) dacă şi numai dacă automatul M nu conţine stări inconsistente

27

Page 28: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

S → aAd | bAB, A → cA | c, B → d

28

Page 29: Curs 8 - Alexandru Ioan Cuza Universitymmoruz/labs/LFAC/LFAC08.pdf · Lema Fie G o gramatică şi A→β 1∙Bβ 2 un articol valid pentru prefixul viabil γ. Atunci, oricare ar fi

Grigoraş Gh., Construcţia compilatoarelor. Algoritmi fundamentali, Editura Universităţii “Alexandru Ioan Cuza”, Iaşi, 2005

29


Recommended