You are on page 1of 19

2007

a) (8) ta je poljska translaciona gramatika, zato je ona vana i kako se neka translaciona gramatika
transformie u poljsku?
akcioni simboli su na samom kraju desne strane smene

Primeri:
<X> a {T} {V} OK
<Y> {R}
OK
<Z> {T} y
NIJE OK
Ukoliko gramatika nije poljska, moemo je transformisati:
1. <X> A {y} B
transformiemo u:
<X> <N> B
<N> A {y}
Druga varijanta:
1. <X> A <M> B
transformiemo u:
<M> {y}
a) (8) U po jednoj reenici objasniti semantiku izraza, iskaza i deklaracija.
Terminologija:
Izrazi se izraunavaju i daju vrednost (i mogu ali ne moraju imati bone efekte)
Iskazi se izvravaju i proizvode bone efekte.
Deklaracije se elaboriraju da proizvedu vezivanja

Izraz

b) (8) Navesti i objasniti vrste akcija kod SHIFT-REDUCE parsera.

ACCEPT - uspean zavretak parsiranja;


REJECT - neuspean zavretak parsiranja.
SHIFT:
PUSH(tekui_ulaz)
ADVANCE
REDUCE(p)
POP x duina desne strane p
PUSH(leva strana p)
RETAIN - Stanje se ne menja.

a) (8) Nabrojati i ukratko objasniti funkcije generatora koda.


Code.load ???
b) (8) Navesti formulu za raunanje skupa FOLLOW nekog neterminala <X>.

FOLLOW skupove raunamo prema sledeim pravilima:


1. Skup FOLLOW startnog neterminala sadri marker kraja ulaza .
2. Za odreivanje FOLLOW skupa neterminala <X> posmatramo sve gramatike smene na
ijoj se desnoj strani nalazi <X>. Neka je <Y> <X> jedna od tih smena. Tada:
FOLLOW(<X>) FIRST(), ako nije ponitivo, ili
FOLLOW(<X>)FIRST()FOLLOW(<Y>),ako je ponitivo.

1.
2.
3.

U optem sluaju, na osnovu datih pravila formira se sistem skupovnih jednakosti koji se reava iterativno:
Inicijalno se usvoji da su svi FOLLOW skupovi prazni.
Usvojene vrednosti se uvrste u jednakosti ime se dobijaju nove vrednosti FOLLOW skupova.
Korak 2. ponavlja se sve dok postoji promena bar u jednom skupu. Krajnje vrednosti predstavljaju konano
reenje.

a) (8) Nacrtati dijagram klasa objektno orijentisane implementacije konanog automata sa dva stanja A i B prema
projektnom uzorku State.

2008
1. [8] Objasniti podelu aktivnosti kod dvoprolaznih prevodilaca. Nabrojati
prednosti i mane
dvoprolaznih prevodilaca u odnosu na jednoprolazne.

2. [8] Definicija pravilne LR(1) konfiguracije. U kom odnosu sa LALR(1)


parserom je
pomenuta konfiguracija?
2. [P6, strana 12]. LR(1) konfiguraciju <X> , t nazivamo pravilnom
LR(1)
konfiguracijom ako i samo ako je:
1. t FOLLOW(<X>), ili
2. re o smeni 0 i t=.
U okviru stek simbola LALR(1) parsera mogu se pojaviti iskljuivo pravilne
konfiguracije.
1. [8] Klasifikacija gramatika po omskom.

klasa 3Regularne gramatike ( = NT, = | T NT)


npr:
<A> | b <B>.
Prepoznaju se konanim automatima

2. [8] Nacrtati izgled run time steka i navesti sekvencu koda za formiranje
pristupne veze
procedure D. Procedure C i D su ugnedene u proceduru B, koja je ugnedena
u
proceduru A. Iz A se poziva B, iz B se poziva C, iz C se poziva D.

1. [8] Navesti pravila transformacije desno-linearne gramatike u


regularnu.

<A> <B>
<B> 1
<A> 1
<B> 2 zameniti sa <A> 2
...
...
<B> n
<A> n
prethodno ukloniti smenu <B> <B> ako eventualno
postoji.

2. [8] Opti algoritam rada potisnog automata.


tekue_stanje := St;
tekui_ulaz := prvi simbol ulazne sekvence;
tekui_stek := Ys;
loop
if c( tekui_ulaz, tekui_stek, tekue_stanje ) = ACCEPT
then kraj rada uz prihvatanje ulazne sekvence;
else
if c( tekui_ulaz, tekui_stek, tekue_stanje ) = REJECT
then kraj rada uz odbijanje ulazne sekvence
else
c(tekui_ulaz, tekui_stek, tekue_stanje) je oblika (y,s,u);
primeniti na tekui_stek operaciju y;
tekue_stanje := s;
primeniti na tekui_ulaz operaciju u;
end if
end loop;
1. [3] Dijagramski prikazati statiku strukturu prevodioca sa tokom kontrole i

podataka.

tok podataka

2. [3] Navesti razloge zbog kojih se skener ne realizuje kao sastavni deo parsera.
-ovo nije odgovor xD
Leksiki analizator ima ulogu pripreme ulaza za sintaksno-semantiku analizu i prevoenje. Ulaz
u leksiki analizator je program u obliku niza znakova. Zadatak leksikog analizatora je da u
nizu znakova identifikuje pojavu logiki povezanih grupa znakova (leksikih jedinica, odnosno
leksema) i na izlazu izda za svaku prepoznatu leksemu njoj odgovarajui interni leksiki kod.
Klasni deo internog koda slui da oznai tip leksike jedinice, a vrednosni deo daje eventualne
dodatne informacije.

1. [3] Napisati (ako postoji) gramatiku koja je LL(1) ali nije LR(0).
a) LL(1) ali nije LR(0)
b) LR(0) ali nije LL(1)
c)

LL(1) ali nije SLR(1).


Reenje

a)

Reenje predstavlja bilo koja LL(1) gramatika sa praznom smenom, s obzirom da LR(0) gramatike ne poseduju
prazne smene, na primer:
1.

<S>a

SELECT(1) = {a}

2.

<S>

SELECT(2) = {}

b) Reenje predstavlja bilo koja LR(0) gramatika sa levom rekurzijom, na primer (LR(0) proveriti konstrukcijom
parsera)

c)

1.

<S><S> a

SELECT(1) = {a}

2.

<S>a

SELECT(2) = {a}

Svaka LL(1) gramatika nije nuno i SLR(1) gramatika. Dok se kod LR(1) gramatika pri svoenju ruke na neki
neterminal <A> gleda taan kontekst u kome se neterminal <A> javlja, kod SLR(1) gramatika stvar se
uproava korienjem skupa FOLLOW(<A>). Sledi primer LL(1) gramatike u kome se <A> javlja dva puta u
razliitom kontekstu prvo deavanje je praeno terminalom a, a drugo terminalom b.
1.

<S><A> a <A> b

SELECT(1) = FIRST(<A>) {a} = {a} = {a}

2.

<S>b

SELECT(2) = {b}

3.

<A>

SELECT(3) = FOLLOW(<A>) = {a, b}

2. [3] Osnovna pravila konzistencije atributivne gramatike.


atributi ulaznih simbola tretiraju se UVEK kao sintetizovani
njihove vrednosti obezbeuje leksiki analizator kroz vrednosni deo
ulaznog tokena.
Svakoj smeni pridruuju se pravila izraunavanja vrednosti za atribute
simbola koji se pojavljuju u toj smeni (ne mogu se koristiti niti raunati
atributi simbola iz drugih smena)
(ako se narue, gramatika nema smisla)
1. Atributi se moraju slagati po broju i tipu za sve pojave istog simbola X (ne
moraju i po imenu).
2. Za svaki sintetizovani atribut koji se pojavljuje na levoj strani smene mora
postojati pravilo za izraunavanje
moe zavisiti od nasleenih atributa sa leve strane i od bilo kog sa
desne strane.
3. Za svaki nasleeni atribut koji se pojavljuje na desnoj strani smene mora
postojati pravilo za izraunavanje
moe zavisiti od nasleenih sa leve strane i od bilo kog sa desne
strane.
4. Vrednost nasleenih atributa startnog neterminala (na levoj strani) mora
biti unapred zadata.

5. Vrednosti atributa ulaznih simbola se ne raunaju, nego moraju biti


unapred zadate

1. [8] Navesti osnovna pravila konzistencije atributivne gramatike


-odgovoreno
2. [8] Navesti formulu za adresiranje elementa A[i1, i2] dvodimenzionalne
matrice A
smetene u memoriju po vrstama, gde je w memorijska veliina jednog
elementa
matrice u adresibilnim jedinicama, lowi je najmanji indeks po itoj dimenziji, a
highi
najvei, dok je base poetna adresa matrice A.
- a?
1. [8] Objasniti jedan nain uvanja i pristupanja poljima zapisa u tabeli

simbola.
TS u vidu jednostruko ulanane liste:

Primer deklaracija
mikroJave:

final int n=10;


class T {}
2. [8] Kako
intglasi
a, algoritam
b, c; za postavljanje displeja?
voidzam(){}
Algoritam
postavljanje displeja

Pri svakom pozivu i povratku auriraju se registri displeja da odgovaraju trenutno


aktivnoj proceduri (onoj iji je AZ na vrhu steka).
Procedura na nivou ugnedavanja N koristi N registara displeja.
U svakoj situaciji dovoljno je aurirati jedan registar displeja (to je onaj koji odgovara
nivou ugedavanja N na kome se nalazi pozvana procedura P):
o pri pozivu, stari sadraj displej registra N uva se u akt. zapisu procedure P
o u displej registar N stavlja se pokaziva na upravo formirani AZ(P)
o pri povratku iz P, sauvana vrednost displej registra N restaurira se.

Prednosti:
jednostavnost,
zapamen redosled
deklarisanja
Nedostatak: sporost

pretrage ako kada


ima mnogo imena

(u nastavku
1. [8] a) Navesti i ukratko prokomentarisati metode koje se pojavljuju u interfejsu tabele
simbola. predavanja o TS bie
Prilikom svakog korienja nekog simbola poziva se find
obj = tab.find(name);
usvojena ova
Pretraga poinje u listi topScope
Ako se ne nae tamo, pretraga se nastavlja u sledeem okruujuem opsegu
realizacija)
(sledei
na steku ispod)
Za svaku deklaraciju pozivamo insert:

obj = Tab.insert(kind, name, typ); - Aktivnosti unutar insert():


Proverava da li ve postoji objekat istog imena (samo) u topScope, ako
ima => greka
U suprotnom, kreira novi Object(kind, name, type)
Dodeljuje mu adresu (prvu slobodnu)
Dodeljuje nivo deklaracije (global=0, local=1)
Dodaje objekat na kraj liste topScope
Za otvaranje opsega:
static void openScope() {
Scope s = new Scope();
s.outer = topScope; topScope = s;
}
Poziva se kada parser naie na poetak opsega (poetak programa, iza imena
klase, ili metoda)
Na vrh steka opsega stavlja novi opseg
Za zatvaranje opsega:
static void closeScope() {
topScope = topScope.outer;
}
Poziva se kada parser naie na kraj opsega (kraj programa, } od klase ili metoda)
Sa vrha steka opsega skida tekui opseg
b) emu slui klasa Scope i koje informacije ona sadri?
Za predstavljanje opsega uvodimo zapis Scope:
class Scope {
Scope outer; // to outer scope
Obj locals; // to the objects of this scope
int nVars; // number of variables in this scope (for addr.
allocation)
}
Scope topScope; // this is an attribute of class Tab
Kolekcija tipa steka pamti trenutno aktivne opsege u programu
2. [8] Vrste konflikata u LR(0) parsiranju. Objasniti kako se pregledom karakteristinog
automata mogu u optem sluaju uoiti konflikti.

pri konstrukciji tabele mogu se pojaviti konflikti:

SHIFT/REDUCE, na primer, ako stanje sadri


<X> a
<Y> a b
REDUCE/REDUCE, na primer, ako stanje sadri
<X> c
<Y> d
prazne smene uvek izazivaju konflikt => LR(0) ne dozvoljava prazne
smene
<S> <S>
<S> a
<S>
Ukoliko gornja pravila na jednoznaan nain odreuju akciju za svaki ulaz kontrolne tabele,
gramatika pripada klasi LALR(1). U suprotnom, moe doi do konflikata tipa potisnisvedi i
svedisvedi.

1. [8] Uklanjanje indirektne leve rekurzije.


Uklanjanje direktne leve rekurzije:
<X> <X>
<X>
Ideja transformacije: <X> opisuje sekvencu koja poinje jednim od simbola,
a nastavlja se nizom simbola.
Ovaj niz simbola posle poetnog , moemo opisati uvoenjem novog
neterminala <Y> i korienjem desno rekurzivnih smena
<X> <X> 1
<X> 1 <Y>

....
....
<X> <X> n transformie se u:
<X> n <Y>
<X> 1
<Y> 1 <Y>

.....
....
<X> n
<Y> n <Y>

<Y>
Uklanjanje indirektne leve rekurzije:
Primer indirektne leve rekurzije:
<X> <Y> a
<Y> <X> b
<Y> c
Algoritam:
Poreati neterminale u nekom redosledu A1, A2, , An
for i 1 to n
for j 1 to i 1
zameniti svaku smenu oblika
<A>i <A>j
sa
<A>i 1 | 2 || k,
gde su <A>j 1| 2|| k sve aktuelne smene za <A>j
end_for
eliminisati direktno levo rekurzivne smene za <A> i
novodobijene neterminale dodati na kraj
end_for
pretpostavka algoritma je da inicijalna gramatika ne sadri cikluse (<A>i +
<A>i )
Leva faktorizacija :
Pravilo leve faktorizacije glasi (uvodi se novi neterminal <S'>):
S 1
S S
....

S 1
S n
....
S n

2. [8] Prikazati izgled aktivacionog zapisa u C-u i Pascal-u.


C:
vie
memorijske
adrese

kontrolna veza

aktivacioni zapis
pozivaoca

stvarni parametri

povratna adresa
kontrolna veza

aktivacioni zapis
pozvane procedure

BP

nie
memorijske
adrese

lokalne promenljive

SP

Pascal:

vie
memorijske
adrese

aktivacioni zapis
procedure u kojoj
je deklarisana
pozvana procedura

. . .

aktivacioni zapis
pozivaoca

stvarni parametri

pristupna veza

povratna adresa
kontrolna veza

aktivacioni zapis
pozvane procedure

BP

nie
memorijske
adrese

lokalne promenljive

SP

2009
1. [8] Semantika analiza

a) ta je to sistem tipova?
b) ta je provera tipa i kakve vrste provere postoje?
c) Kada se jezik naziva strogo tipiziranim?
- odgovoreno
- Funkcije generatora koda.*
- Formula za raunanje selekcionog skupa smene.*
- Nabrojati memorijske klase promenljivih. Za svaku od njih navesti u kom
delu
operativne memorije se promenljiva smeta i koji nain adresiranja se koristi
za pristup
promenljivoj.*
1. [8] Napisati fragment rekurzivnog parsera za prepoznavanje smene:
<A>x,y,z1 aq {cv} <A>x1,z,u1 <A>u,t,y1
v x - q x1 x y y1 z1 z u 3
Napomena: minimizovati broj naredbi dodele vrednosti u kodu.

1. [8] ( ).
Za zadati reg. izraz odreuje nedeterministiki konani automat :

S0

S1

a S3

S4

NKA for

a*

2. [8] .
-odgovoreno

2. [8] Objasniti naredbe ENTER i LEAVE kod x86 procesora (za korienje u Cu,
bez
pristupa nelokalnim promenljivim).

vie
memorijske
adrese

aktivacioni zapis
pozivaoca

stvarni parametri

povratna adresa
kontrolna veza

BP

aktivacioni zapis
pozvane procedure

displej

nie
memorijske
adrese

lokalne promenljive

SP

Naredba ENTER Size, Level


Naredba ENTER realizuje deo sekvence pozivanja koji izvrava pozvana procedura.

Ova naredba ima dva operanda.


o Size (16-bitna veliina) definie koliko memorije treba alocirati u aktivacionom
zapisu za lokalne promenljive.
o Level (8-bitna veliina) predstavlja leksiki nivo pozvane procedure.

Ova naredba izvrava se kao prva naredba pozvane procedure na sledei nain:
1. Sadraj registra BP ide na stek (ime se definie polje kontrolne veze)
2. U registar BP upisuje se sadraj registra SP (ime je BP postavljen da ukazuje na polje
kontrolne veze).
3. Ako je Level = 0 preskae se sledei korak (Level = 0 vai za procedure u C-u kod koga se
ne javlja problem pristupa nelokalnim promenljivim).
4. Oznaimo vrednost Level -1 sa N, a sadraj polja kontrolne veze sa A. Na stek se smeta N
rei koje se kopiraju redom poev od lokacije A-2 ka niim memorijskim lokacijama. Potom
se na stek smeta adresa polja kontrolne veze. Ovime je uspostavljen displej pozvane
procedure.
5. Registar SP umanjuje se za vrednost operanda Size ime se alocira prostor za lokalne
promenljive pozvane procedure.
Naredba LEAVE
Naredba LEAVE realizuje deo sekvence povratka koji izvrava pozvana procedura.

Ova naredba neposredno prethodi naredbi RET i izvrava se na sledei nain:


1. Sadraj registra BP kopira se u registar SP. Ovime se dealocira sa steka deo
aktivacionog zapisa pozivaoca ispod kontrolne veze.

2. Sa steka se skida sadraj polja kontrolne veze i smeta u registar BP. Time je BP
nameten za pozivaoca, a polje kontrolne veze pozvane procedure je uklonjeno sa steka.
1. [8] Navesti i objasniti uslove koje atributivno translaciona gramatika mora
da zadovolji za parsiranje od dna ka vrhu.
-Da nema konflikta ?
2. [8] Objasniti povratnu transformaciju iz SSA u obini troadresni meukod.
"Vraanje" iz SSA forme nazad u obian meukod
U najjednostavnijoj varijanti, -funkciju sa N argumenata u bloku B treba zameniti sa N obinih
dodela, po jednom na kraju svakog bloka prethodnika bloku X u grafu. Ovim se nekada dobija
neefikasan kod sa suvinim dodelama, ali se on moe poboljati dodatnim optimizacijama koje
nisu predmet naeg razmatranja.
2010
1.[5] Navesti opti algoritam rada potisnog automata u pseudojeziku.
- odgovoreno ranije
2.[5] Navesti algoritam dekompozicije koda na osnovne blokove.
2. Dekompozicija programa na osnovne blokove:
Odrediti voe (prve iskaze) osnovnih blokova: prvi iskaz u programu, iskazi koji predstavalju
odredita uslovnih ili bezuslovnih skokova i iskazi koji neposredno slede bezuslovne ili
uslovne skokove.
Svakom voi pridruiti iskaze koji ga slede do prvog sledeeg voe (iskljuujui taj iskaz) ili do
kraja programa.
2011

1) (6 poena)
a) ta je to sistem tipova?
b) ta je provera tipa i kakve vrste provere postoje?
c) Kada se jezik naziva strogo tipiziranim?
Odgovor:
1. a) Sistem tipova je skup pravila kako se dodeljuju tipovi razliitim delovima programa
(deklaracijama, izrazima, iskazima).
b) Proverom tipa implementira se odreeni sistem tipova. Provera moe biti:
- statika, ako je vri kompajler, ili
- dinamika, ako se izvodi u vreme izvravanja programa
c) Jezik se naziva strogo tipiziranim ako uspena statika provera tipova garantuje da u
izvravanju
programa nee doi do greke tipa.

2) (7 poena)
Posmatra se sledea situacija (radi se o poslednjoj naredbi u bazinom bloku):
Meukod ivot i sledee kori. Deskriptori registara Adresni deskriptori
a = t - u a(,-) t(m,-) u(m,-) EAX:t EBX:u a:mem t:EAX u:(mem, EBX)
a) Objasniti po koracima primenu jednostavnog algoritma generisanja koda za dati primer.
b) Prikazati generisani mainski kod i sadraj svih deskriptora posle toga.
Reenje:
Korak 1. Poziva se getreg(t), koji vraa EAX i uklanja EAX iz deskriptora za t.
Korak 2. Generie se SUB EAX, EBX
Korak 3. Auriraju se deskriptori: EAX:a EBX:u a:EAX t:- u:(mem, EBX)
Korak 4. Poto je kraj bloka, a je ivo i nalazi se u registru, generie se MOV a', EAX
SEP-OKT
1. Navesti uslove L-atributivnosti gramatike.
L-atributivna: - Sintaksno-upravljano prevoenje od vrha ka dnu
Kojim redom rekurz. parser pri prepoznavanju smene <A> <B><C>
odreuje atribute?
nasleeni atributi X su ulazni parametri za PROCX
sintetizovani atr. X su izlazni parametri za PROCX
1. nasleeni atributi od <A> su ve poznati (prosleuje pozivalac).
2. nasleeni atributi od <B> zavise od nasleenih od <A> i oni se
izraunavaju
3. posle uparivanja <B> sa ulazom saznaemo sintetizovane atribute
<B>
4. nasleeni atributi od <C> zavise od nasleenih od <A> i bilo kog
atributa <B>
Kojim redom rekurz. parser pri prepoznavanju smene <A> <B><C>
odreuje atribute?
5. posle uparivanja sa ulazom <C> saznajemo sintetizovane atribute od
<C>
6. kad uparimo celu desnu stranu izraunavamo sintetizovane atribute od
<A>
7. vraanje kontrole pozivaocu sa sint. atr. <A>
moraju se uvesti ogranienja u pravila izraunavanja atributa, da bi
parser paralelno sa konstrukcijom stabla izvoenja (od vrha ka dnu)
raunao vrednosti svih atributa).
Gramatike koje zadovoljavaju ova pravila nazivaju se L-atributivne
gramatike
Nasleeni atributi simbola sa desne strane smene mogu da
zavise od nasleenog atributa simbola sa leve strane i bilo kog atributa
bilo kog simbola koji je na desnoj strani ispred posmatranog simbola.

Sintetizovani atribut simbola sa leve strane smene moe da


zavisi od nasleenih atributa tog simbola i od bilo kog atributa bilo kog
simbola sa desne strane.
Sintetizovani atribut akcionog simbola sme da zavisi iskljuivo od
nasleenog atributa istog akcionog simbola.

2. Sta je transliterator i cemu sluzi.?


leks. analizator konani automat; neracionalno za svako posebno slovo posebna kolona ako
se sva slova tretiraju na isti nain

zato samo jedan ulazni simbol leks. analizatora slovo. Pripremu vri transliterator
izvorni
program

(niz znakova)

ulazna
azbuka

interni
leksiki kod

Leksiki
analizator

Transliterator

Transliterator se efikasno realizuje u vidu vektora


48
49
64
65
66
Cifra Cifra

Spec. Slov Slov


...
o
o
ASC ASC
ASC ASC ASC
II(0 II(1
II( II(A II(B
)
)
@)
)
)

(klasa, vrednost)

...

122
Slov
o
ASC
II(z
)

--- U oktobru je bilo nesto u vezi prefiksa.


Svojstvo prefiksa
Simbol povrede predstavlja onaj simbol ulaznog niza na kome je otkrivena greka.
prefiks
Ulazna
sekvenca

. . . . . . . . . . . . . . . . . . . .
simbol povrede

Parser ima svojstvo ispravnog prefiksa ako za sve neispravne ulazne sekvence niz
simbola pre simbola povrede predstavlja prefiks nekog prihvatljivog ulaznog niza.
Kod takvih parsera moemo modifikacijom preostalog ulaza uiniti ceo ulayni niz
prihvatljivim
Parseri konstruisani metodima koje prouavamo na kursu imaju ovo svojstvo
Poruka o greci najee se formulie na osnovu vrnog simbola steka i tekueg ulaznog
simbola, uz navoenje linije i pozicije na liniji koda na kojoj je nastupila greka.
Potom se vri oporavak parsera od greke, koji potencijalno moe da prouzrokuje nove
nepostojee greke. Kvalitet oporavka ceni se po tome koliko malo nepostojeih greaka
se prijavljuje.

Ostalo:
S-atributivna
Gramatika je S - atributivna, ako:
Svi atributi neterminalnih simbola su sintetizovani.
Nijedan sintetizovani atribut ne moe da zavisi od drugog
sintetizovanog atributa iste pojave simbola u gramatici.

Nasleeni atributi akcionih simbola smeju da zavise samo od


atributa onih simbola produkcije koji su levo od tog akcionog
simbola.

You might also like