33
1 PROJEKTOVANJE KOMPAJLERA Struktura kompajlera Faze kompajlera

PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

  • Upload
    halien

  • View
    220

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

1

PROJEKTOVANJE KOMPAJLERA

Struktura kompajleraFaze kompajlera

Page 2: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

2

Princip konstrukcije kompajlera Postoji 5 osnovnih faza u postupku preslikavanja osnovnog u jezik objekta:leksička analizasintaksna analiza (parsing) -prepoznavanje strukture programaoptimizacija kodagenerisanje koda (prevođenje strukture u mašinski jezik) iasembliranje.

Page 3: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

3

Struktura Kompajlera TABELA TERMINALA

REDUKCIJE

LEKSIČKA ANALIZA

SINTAKSNAANALIZA

INTERPRE.(rutine akcije)

MAŠINSKINEZAVIS.

DODELA MEMORIJE

SELEKCIJAKODA

ASEMBL.IZLAZ

1) 2) 3) 4) 5) 6) 7)C) F)

KOD SMENA

H)

TABELA UNIFORMN.

SIMBOLA

B)

POLAZNI KOD

IZVOR

A) MATRICA OPTIMIZ.

MATRICAASEMBLER.

KOD

G) G) I)

RELOK. KOD

OBJEKTA

J)

ESD TXT RLP END

TABELA IDENTIFI.

D)

TABELA LITERALA

E)

formiranje podatakareferisanje

Page 4: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

4

Leksička analiza Leksičku analizu čine tri osnovna zadatka:1. rasčlanjivanje polaznog programa (niz ASCII znakova) na niz osnovnih simbola(tokena) višeg programskog jezika,2. formiranje tabele literala i tabele identifikatora,3. formiranje tabele uniformnih simbola.

Page 5: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

5

Tabela terminalnih simbola

SIMBOL UKAZIVAČ ELEMENAT ZA DEFINICIJU PRETHOĐENJA

Page 6: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

6

Tabela literala

LITERAL OSNOVA SKALA PRECIZNOST DRUGA INF. ADRESA

Page 7: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

7

Tabela identifikatora

NAZIV ATRIBUTI PODATAKA ADRESA

Page 8: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

8

Tabela uniformnih simbola

INDEKS UNUTAR TABELE

POČETNA ADRESA TABELE SIMBOLA

Page 9: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

9

Primer leksičke analize (1/2)Ulaz

Neka je data sledeća funkcija:

main (){

int x, yscanf (" %d", &x);y = 10 * x;printf (" %d", y);

}

Page 10: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

10

(2/2)Izlaz

TABELA UNIFORMNIHSIMBOLA

TABELATERMINALA

TIP IND SIMBOL IND TERMINALIDN 1 main 1 {TRM 7 ( 2 }TRM 8 ) 3 ,TRM 1 { 4 ;TRM 5 int 5 intIDN 2 x 6 *TRM 3 , 7 (IDN 3 y 8 )TRM 4 ; 9 =IDN 4 scanf 10 &TRM 7 (LIT 1 " %d "

TRM 3 ,TRM 10 & TABELAIDN 2 x IDETIFIKATORATRM 8 ) IND IDENTIFIKATORTRM 4 ; 1 mainIDN 3 y 2 xTRM 9 = 3 yLIT 2 10 4 scanf

TRM 6 * 5 printfIDN 2 xTRM 4 ;IDN 5 printfTRM 7 ( TABELA LITERALALIT 1 " %d " IND LITERAL

TRM 3 , 1 " %d "IDN 3 y 2 10TRM 8 )TRM 4 ;TRM 2 }

Page 11: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

11

Sintaksna analiza Pošto se program podeli na simbole (tokens), kompajler mora da prepozna rečenice (sintaksne konstrukcije) i da interpretira značenje tih konstrukcija.Sintaksna analiza ukazuje i na uočene sintaksne greške i omogućava da kompajler može da nastavi pretraživanje drugih grešaka.

Page 12: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

12

Interpretacija značenja (semantika)

Svakoj sintaksnoj konstrukciji se definiše značenje, bilo u obliku direktnog koda ili u nekom od prelaznih oblika konstrukcije. Dozvoljeni sintaksni oblici se definišupravilima, koja se zovu redukcijama.Redukcije definišu osnovne sintaksne konstrukcije i odgovarajuće rutine prevođenja (rutine akcija).

Page 13: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

13

Sintaksni AnalizatorSintaksni analizator kao ulaznu informaciju, koristi tabelu uniformnih simbola, čiji svaki simbol ulazi na stek.Stek sadrži skup simbola, nad kojima se trenutno radi u fazi sintaksne analize i interpretacije.Elemenat sa steka može biti unet u tabelu uniformnih simbola i obratno.

Page 14: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

14

Opšti oblik redukcija (1/2)LABELA: PRETHODNI RUTINA NOVI VRH SLEDEĆA

VRH STEKA AKCIJA STEKA REDUKCIJA

Labela je opcionaPrethodni vrh steka

Izostavljen – uvek se poklapaSimbol

SINTAKSNI - kao što je identifikator ili literal - poklapa se sa nekim simbolom ovog tipabilo koji (*) - poklapa se sa simbolom bilo kog tipasimbolički predstavljena ključna reči kao “WHILE" ili "IF"

Page 15: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

15

Opšti oblik redukcija (2/2)LABELA: PRETHODNI RUTINA NOVI VRH SLEDEĆA

VRH STEKA AKCIJA STEKA REDUKCIJA

Rutina akcije - naziv rutine akcije (opcion element)Novi vrh steka:

znak praznine ili nula - nema promene odstraniti vrh steka (povorku koja se poklapa)sintaksni tip, ključna reč ili elemenat steka (Sm)-zameniti prethodni vrh steka sa ovim elementomuzeti sledeći uniformni simbol iz tabele uniformnih simbola i staviti ga na vrh steka

Page 16: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

16

Sintaksni analizator tipa pomeri/redukuj (1/2)

(0, )

(stanje, simbol)

Stek

TK1

0

TK2 . . . NT1 NTm

1234

n

Matrica prelaza (transition matrix)

StanjeSimbol

Tokeni Neterminali

...

Beskonačna traka simbola

shift/reduce operacije

goto operacije

Page 17: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

17

Sintaksni analizator tipa pomeri/redukuj (2/2)

Operacije u matrici prelaza su: accept: došlo se do kraja – program ispravan error: sledeća vrednost na traci je invalidna u

tekućem stanju shift n: sledeća vrednost na traci je prihvatljiva u

tekućem stanju; stanje i vrednost se guraju na stek goto n: stanje i neterminal se guraju na stek reduce m: Sa steka se skida onoliko elemenata

koliko ima simbola sa desne strane m-te redukcije. Otkriveno stanje sa steka i neterminal (leva strana) m-te redukcije određuju sl. goto operaciju.

Page 18: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

18

Primer sintaksnog analizator tipa pomeri/redukuj (1/2)

Prepoznavanje prostog izraza Specifikacija u jeziku Yacc:

% token NUMTK% start Expression% %Expression: NUMTK

;Simbol

Stanje NUMTK $end Expression

Shift 1

Reduce 1

Error

Error

Accept

goto 2 0

1

2

Matrica prelaza je sledeća:

Page 19: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

19

Primer(2/2)

(0, ) NUMTK $end

Action Shift 1

Production

Shift State 1

Mašina koristi akciju: Shift 1 određenu stanjem 0 i ul. NUMTK. Par (1, NUMTK) se gura na stek i prozor se pomera za jedno mesto udesno. (Na sledećoj slici NUMTK je označen sa NTK).

(0, ) NUMTK $end

Action

Production Expression: NUMTK (1)

Reduce by production #1

Stanje 1 i ul. $end određuju Reduce 1 1. Jedan POP ostaje (0, ) na steku2. Određuje se novo stanje.

(1, NTK)

(0, ) NUMTK $end

Action goto 2

Production

go to 2

Pošto je tekuće stanje mašine 0, a neterminal produkcije 1 je Expression, odgovarajuća akcija je: goto 2

(0, ) NUMTK $end

Action

Production

go to 2: par (2, Expression) se smešta na stek. Stanje 2 i ul. $end određuju prelaz u stanje accept (prihvaćeno).

(2, Expr)

Accept!

Simbol

Stanje NUMTK $end Expression

Shift 1

Reduce 1

Error

Error

Accept

goto 2 0

1

2

Page 20: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

20

Prelazni oblici polaznog programa:

Stablo sintaksne analize.Matrični prelazni oblik.

Page 21: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

21

Primer stabla sintaksne analize:

COST

=

+

*

RATE -

START FINISH

*

-

100

*

2 RATE

-

FINISH START

COST = RATE (START - FINISH) + 2 RATE (START - FINISH - 100)

Page 22: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

22

Primer matričnog prelaznog oblika:

VRSTA U MATRICI OPERATOR OPERAND 1 OPERAND 2

1 - START FINISH2 * RATE M1

3 * 2 RATE4 - START FINISH5 - M4 1006 * M3 M5

7 + M2 M6

8 = COST M7

Page 23: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

23

Još o matričnom prelaznom oblikuNearitmetički izvršivi iskazi formiraju matrični oblik na sličan način.Kod neizvršivih iskaza koji definišu promenljive, nema prelaznog oblika, nego se informacija unosi u tabele.Neki od operatora matrice nemaju analoga u mašinskom jeziku i mogu zauzimati, više vrsta (npr. IF-THEN-ELSE).

Page 24: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

24

Privremene promenljive –međurezultati (vrste MTx)

MTXn SKALA PRECIZN. KLASAMEM.

ADRESABAZA

Page 25: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

25

Optimizacija Radi nad prelaznim oblikom programa.Mašinski nezavisne i mašinski zavisne optimizacije.Primeri mašinski nezavisnih: eliminacija zajedničkih podizraza, prethodno izračunavanje vrednosti, uočavanje invarijantnog računanja unutar ciklusa...Primeri mašinski zavisnih: uklanjanje viška LOAD i STORE, JUMP na JUMP, itd.

Page 26: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

26

Primer optimizacije: prethodno izračunavanje vrednosti u iskazu A = 2 * 276/92 * B

PRE OPTIMIZACIJEM1 * 2 276M2 / M1 92M3 * M2 BM4 = A M3

POSLE OPTIMIZACIJEM1

M2

M3 * 6 BM4 = A M3

Page 27: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

27

Pridruživanje memorije:dodela memorije svim promenljivama,dodela memorije svim privremenim lokacijama koje su potrebne za međurezultate (definisane u fazi interpretacije),dodela memorija literalima,Pored dodele memorije obezbeđuje i inicijalizaciju odgovarajućih lokacija.

Page 28: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

28

Algoritam dodele memorije koristi tabelu identifikatora

Mi SKALA PRECIZNOST AUTOMATIC ADRESABAZA OSTALO

Page 29: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

29

Generisanje koda Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici.Konsultuje se tabela identifikatora i literala, određivanjem tipa i lokacije promenljivih (operanda matrice).Operandi matrice se koriste kao argumenti makrodefinicija koje definišu operatore.

Page 30: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

30

Primeri smena (makrodefinicija):SUBM MACRO MI, OPRND1, OPRND2

MOV AX, OPRND1SUB AX, OPRND2MOVENDM

MI, AX

ADDM MACRO MI, OPRND1, OPRND2MOV AX, OPRND1ADD AX, OPRND2MOV MI, AXENDM

Page 31: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

31

Primeri smena - nastavak:MULM MACRO MI, OPRND1, OPRND2

MOV AX, OPRND1MUL AX, OPRND2MOV MI, AXENDM

ASNM MACRO OPRND1, OPRND2MOV AX, OPRND2MOV OPRND1, AXENDM

Page 32: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

32

AsembliranjeUkoliko se u fazi generisanja koda proizvede asemblerski kod, potrebno je koristiti jedno ili dvo prolazni asembler radi dobijanja potrebnog koda na mašinskom jeziku.

Page 33: PROJEKTOVANJE KOMPAJLERA - rt-rk.uns.ac.rs Poglavlje 3... · Ulaz algoritma ove faze je matrica i kod smena (makrodefinicija), koji definišu operatore koji se pojavljuju u matrici

33

Rezime TABELA TERMINALA

REDUKCIJE

LEKSIČKA ANALIZA

SINTAKSNAANALIZA

INTERPRE.(rutine akcije)

MAŠINSKINEZAVIS.

DODELA MEMORIJE

SELEKCIJAKODA

ASEMBL.IZLAZ

1) 2) 3) 4) 5) 6) 7)C) F)

KOD SMENA

H)

TABELA UNIFORMN.

SIMBOLA

B)

POLAZNI KOD

IZVOR

A) MATRICA OPTIMIZ.

MATRICAASEMBLER.

KOD

G) G) I)

RELOK. KOD

OBJEKTA

J)

ESD TXT RLP END

TABELA IDENTIFI.

D)

TABELA LITERALA

E)

formiranje podatakareferisanje