Sunteți pe pagina 1din 43

Limbaje formale i translatoare (Compilatoare)

1. Analiza sintactic deplasare - reducere


(shift - reduce)
2. Analiza sintactic ascendent cu reveniri
3. Analiza sintactic bazat pe precedena
operator
4. Analiza sintactic bazat pe precedena simpl
5. Analiza sintactic bazat pe precedena slab

Aceast metod de analiz sintactic pleac


de la propoziia de analizat i ncearc s
ajung la simbolul de start.
Ea cuprinde dou etape:
Cutarea frazei simple (priza) shift
Reducerea frazei simple - reduce

Analiza sintactic descendent creaz o


derivare
dreapta
pentru
propoziia
considerat.
Deci, irul reducerilor stnga este inversul
derivrilor dreapta.

Modelul matematic al analizorului


ascendent este automatul finit cu stiv:

sintactic

< Q , , , f , q0 , F , Z >

Q - mulimea strilor

- alfabetul automatului

- alfabetul stivei

q0 - starea iniial a automatului

F - mulimea de stri finale

Z - starea iniial a stivei

f: Q * P (Q *)

SI

ir de intrare
ISI

IST

Stiva

AF
ISO

ST

SO

ir de ieire

Configuraia automatului (q,x,):

q starea n care se afl automatul

x - irul rmas de analizat

- coninutul stivei

Starea iniial a automatului:

(q0,w,),

unde w reprezint succesiunea atomilor lexicali ntoars de ctre analizorul lexical


pentru propoziia de analizat, iar stiva este goal.

Relaia de micare:

(q,ax,) (q,x,) f(q,a,) = { (q,)}

Propoziia w este complet acceptat dac:

(q0,w,) * (q,,S),

unde q F (criteriul strii finale), iar S este simbolul de start

Definirea funciei de tranziie f:

1. f(q,a,) = {(q,a )}

2. f(q,,) = {(q,A)} A P (reduce)

3. f(q,$,$S) = {(q,)}

(accept)

4. f(q,$,$)

(error)

(shift)

1. Stiva este iniial goal.


2. Se deplaseaz un terminal din irul de intrare
(shift) pe vrful stivei.
3. Se repet pasul al 2-lea pn cnd n stiv se
regsete partea dreapt a unei reguli de
producie.
4. Se nlocuiete (reduce) coninutul stivei care
reprezint partea dreapt a unei reguli de
producie, cu partea stng a regulii respective.
5. Se repet paii 2, 3, 4.
6. Dac la sfrit irul de intrare este gol, iar stiva
conine numai simbolul de start, atunci propoiia
este corect.

Exemplu:

1. S aA

2. A bA

3. A b

Propozitia de analizat:

abbb *

( s , bbb$ , $a )

( s , bb$ , $ab )

( s , b$ , $abb )

( s , $ , $abbb )

r(3)

( r ,$ , $abbA )

3r(2) ( r ,$ , $abA )

r(2)

( r ,$ , $aA )

r(1)

( r ,$ , $S )

(a,,)

( q , abbb$ , $ )

10

11

SI
ISI
ISt1

AF

St1

ISt2

St2

SI - propoziia de intrare (irul atomilor lexicali)


St1 - stiva care conine terminale i neterminale obinute din
reduceri
St2 - stiva care conine istoricul reducerilor

12

Algoritmul de analiz:
(1) starea iniial:

(q,0,$,)

(2) reduce:
(q,i,,) (q,i,A,j) exist producia j: A
P
Productiile sunt ordonate crescator in funcie de
lungimea prii drepte.

Se bucleaz (2) att timp ct se mai poate face o


reducere.
13

(3) shift

(q,i,,) (q,i+1,a,/)

/ - indica un avans in sirul de intrare

Daca i < n+1 se sare la (2)

i = n+1 se sare la (4)

(4) accept

(q,n+1,$S,) (a,n+1,$S,)

unde va conine irul invers al derivrilor stnga

Altfel (daca nu se poate aplica 4) se execut (5)


14

(5) revenire

(q,n+1,,) (b,n+1,,)

5.a. (b,i,a,/) (b,i-1,,)

Obs: se cicleaz ct timp exist / n vrful stivei 2

5.b. (b,i,A,j ) (q,i, B,k) =

si exista o productie k : B si j: A P

se sare apoi la pasul 2

5.c. (b,i,A,j) (q,i+1,ai,/) i<n

se sare apoi la pasul 2

5.d. (b,n+1,A,j) (q,n+1,,)

se sare apoi la pasul 2

15

Ex:

1. S Bab

2. S Cac

3. A BA

4. A a

5. B a

6. C a

Propozitia de analizat:

aab

16

( q , 0 , $ , ) s ( q , 1 , $a , / )

r ( q , 1 , $A ,1/ )

s ( q , 2 , $Aa , /1/ )

r ( q , 2 , $AA , 1/1/ )

s ( q , 3 , $AAb , /1/1/ )

b ( b , 3 , $AAb , /1/1/ )

b5.1.( q , 2 , $AA , 1/1/ )

b5.2 ( q , 2 , $AB , 2/1/ )

s ( q , 3, $ABb , /2/1/ )

b5.1 ( b , 2 , $AB , 2/1/ )

17

b5.2 ( b , 2 , $AC , 3/1/ )


s ( q , 3 , $ACb , /3/1/ )
b5 ( b , 3 , $ACb , /3/1/ )
b5.1 ( b , 2 , $AC , 3/1/ )
b5.3 ( q , 3 , $ab , //1/ )
b5.3 ( q , 3 , $Aab , //1/ )
b5.1 ( b , 1 , $A , 1/ )
b5.2 ( q , 1 , $B , 2/ )
s ( q , 2 , $Ba , /2/ )
r ( q , 2 , $BA , 1/2/ )
s ( q , 3 , $BAb , /1/2/ )
r ( q , 3 , $S , 6/1/2/ )
( a , 3 , $ , 6/1/2/ ) OK
18

19

O gramatic independent de context i fr reguli vide


este o gramatic n forma operator dac nu are producii
vide i nici nu exist producii de forma:

A BC i A B
, (VN)*, B, C VN
(Adic n partea dreapt a oricrei reguli de producie nu
exist dou neterminale unul dup cellalt, i nici un
singur neterminal).
ntr-o astfel de gramatic operanzii sunt neterminalele, iar
operatorii sunt terminalele.
Orice gramatic independent de context poate fi adus la
forma operator fr a afecta limbajul.

20

Definirea relaiilor operator se face pentru


simbolurile terminale, cu scopul de a
identifica partea dreapt a regulii de
producie care va fi folosit pentru reducere.
<o Determin captul din stnga a prii
drepte a regulii de producie
>o Determin captul din dreapta a prii
drepte a regulii de producie
=o Determin interiorul prii drepte a
regulii de producie
21

22

(1) a

=o b

<=> () ( A ab P ) sau

( A aBb P )

23

(2) a <o b <=> () ( A aB , ( B =>+ b sau B


=>+ Cb )), unde a <o FIRST~+(B)
(FISRT~+ ceea ce apare pe prima poziie
(terminal) sau ceea ce apare pe a doua poziie,
dac pe prima este un neterminal)

24

(3) a >o b <=> () ( A Bb P, ( B =>+ a sau B


=>+ aC )), unde LAST~+(B) >o b
(LAST~+ ceea ce apare pe ultima poziie
(terminal) sau ceea ce apare pe penultima poziie,
dac pe ultima este un neterminal)

25

(4) $ <o a <=> S =>* a sau S =>* Aa


($ este mai mic dect orice terminal care
apare n propoziie pe prima poziie sau pe a
doua, dac pe prima este un neterminal)

(5) a >o $ <=> S =>* a sau S =>* aA

26

La fel ca i la calculul mulimilor First+ i


Fallow+ de la analiza LL(1), i n cazul
mulimilor First~ i Fallow~ de la precedena
operator se merge (n adncime) pn la
nivelul maxim posibil
Adic: dac, n cazul relaiei de preceden
operator mai mic, avem neterminal pe prima
poziie continum i cu el, dar lum i
terminalul de dup.
Analog i n cazul relaiei de preceden
operator mai mare.

27

Pe baza definiiilor anterioare se completeaz


matricea de preceden operator.
Aceasta este o matrice ptratic care are un
numr de linii i de coloane egal nu numrul
terminalelor, plus terminatorul propoziiei de
analizat ($).
Apoi se aplic algoritmul de analiz shiftreduce, utiliznd informaiile din matricea de
preceden operator pentru a determina ce
operaie se va executa la fiecare pas.
28

29

Exerciiu
<instructiune > for <atribuire> to
<expresie> [step <expresie> ]
<instructiune > let <atribuire>
<instructiune > call i ( <lista> )
<lista> i | i, (<lista>)
<atribuire> i = <expresie>
<expresie> i * <expresie> | i **
<expresie> | i

30

Fiind dat o gramatic generatoare, se pot


construi doi sau mai muli arbori sintactici
pentru aceeai propoziie
Ex:
Fie gramatica dat prin regulile de producie:

F->F+F
F->F*F
F->(F)
F->a

31

Pentru propoziia a+a+a se pot construi doi


arbori sintactici. De exemplu:
F

/|\

/|\

F+F

F+F

/|\

F+F a

/|\

a F+F

a
32

Pentru gramaticile care sunt ambigue, pentru a


se putea calcula relaiile de preceden operator
i pentru a se putea aplica algoritmul, trebuie
mai nti s se specifice care e asociativitatea i
care este prioritatea operatorilor (terminalelor)
Ex:
Fie gramatica dat prin regulile de producie:

F->F+F
F->F*F
F->(F)
F->a

33

+ < First F
Last F > +
* < First F
Last F > *
(=)
( < First F Last F > )
Last F = + * ) a
Fist F = + * ( a

34

+<+
+ > + (trebuie sa specificam asociativitatea lui +: la
stanga sau la dreapta)
+<*
*>+
+<(
)>+
+<a
a>+
*<+
+>*
*<*
*>*
(trebuie sa specificam asociativitatea lui *: la
stanga sau la dreapta)
*<(
)>*
*<a
a>*

(=)

(
(
(
(

<
<
<
<

+
*
)
a

+>)
*>)
)>)
a>)

35

Dac + se asociaz la stnga atunci luam + > +

$, a+a+a$ deplasare
$a, +a+a$ reducere
$, +a+a$ deplasare
$+, a+a$ deplasare
$+a, +a$ reducere
$+, +a$ reducere
$, +a$ deplasare
$+, a$ deplasare
$+a, $ reducere
$, $ accept

Dac * se asociaz la dreapta atunci luam * < *

analog

36

Ex:

37

38

39

40

41

42

http://homedir.jct.ac.il/~rafi/formcomp.pdf
http://inst.eecs.berkeley.edu/~cs164/sp10/n
otes/notes.pdf
http://facultate.regielive.ro/cursuri/calculato
are/limbaje_formale_si_translatoare59028.html
http://homepages.gold.ac.uk/nikolaev/3246
-2.doc

43

S-ar putea să vă placă și