Upload
halien
View
220
Download
0
Embed Size (px)
Citation preview
1
PROJEKTOVANJE KOMPAJLERA
Struktura kompajleraFaze kompajlera
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.
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
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.
5
Tabela terminalnih simbola
SIMBOL UKAZIVAČ ELEMENAT ZA DEFINICIJU PRETHOĐENJA
6
Tabela literala
LITERAL OSNOVA SKALA PRECIZNOST DRUGA INF. ADRESA
7
Tabela identifikatora
NAZIV ATRIBUTI PODATAKA ADRESA
8
Tabela uniformnih simbola
INDEKS UNUTAR TABELE
POČETNA ADRESA TABELE SIMBOLA
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);
}
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 }
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.
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).
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.
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"
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
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
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.
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:
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
20
Prelazni oblici polaznog programa:
Stablo sintaksne analize.Matrični prelazni oblik.
21
Primer stabla sintaksne analize:
COST
=
+
*
RATE -
START FINISH
*
-
100
*
2 RATE
-
FINISH START
COST = RATE (START - FINISH) + 2 RATE (START - FINISH - 100)
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
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).
24
Privremene promenljive –međurezultati (vrste MTx)
MTXn SKALA PRECIZN. KLASAMEM.
ADRESABAZA
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.
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
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.
28
Algoritam dodele memorije koristi tabelu identifikatora
Mi SKALA PRECIZNOST AUTOMATIC ADRESABAZA OSTALO
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.
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
31
Primeri smena - nastavak:MULM MACRO MI, OPRND1, OPRND2
MOV AX, OPRND1MUL AX, OPRND2MOV MI, AXENDM
ASNM MACRO OPRND1, OPRND2MOV AX, OPRND2MOV OPRND1, AXENDM
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.
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