«« ( Date ) »» // «« ( Thread ) »» // nastava - 2003

prevodioci COMMON

by Nikola Novakovic
subota, 06. decembar 2003 - 17:12.

Da li neko pouzdano zna sta treba odgovoriti na pitanje Dati algoritam za izracunavanje COMMON blokova ?
(Pitanje je broj 29 u "glavnoj" skripti sa odgovorima koju mislim da svi imaju)

Jer na tri razlicita mesta se nalaze tri razlicita odgovora.

U glavnoj skripti navodi se sledeci odgovor:

--------------------------------------------------------------------------------

1.Odrediti da li je skup ekvivalencije u COMMON-u. Skup ekvivalencije je skup imena koja se pojavljuju u stablu ekvivalencije u njegovom konacnom obliku. Za svakog lidera treba zabeleziti da li je bilo koje ime u common-u. Ako jeste celo stablo ekvivalencije mora biti u commonu.
2. Kompilator odreduje memorijske lokacije tako da skup ekvivalencije koji nije u common-u pliva dok kompilator ne odredi polozaj skupa u podrucju podataka, koje kompilator gradi. Da bi to mogao kompilator mora da zna najnizu i najvisu lokaciju koje neko ime ima u tom skupu. Za svakog lidera nekog ekv. skupa predvidena su dva polja koja govore koliko je lider pomeren u odnosu na najnizu i najvisu lokaciju u tom skupu. U tabeli simbola mozemo imati polje koje ce oznacavati da li je ime lider ili ne, a u odgovarajuca polja bice upisane low i high vrednosti.
3. Problemi nastaju kada se vrsi ekvivalentiranje nekog imena van common bloka i promenljive u common zoni. Dodaje se cmblk ukazatelj. Postoji posebna tabela ekvivalencije u cijim se ulazima cuva low, high i cmblk ukazatelj svakog lidera. Tada se u tabeli simbola za lidera, u polju parent, nalazi ukazatelj na ulaz u tabelu ekvivalencije.
Potrebne su izmene u algoritmu odredivanja stabla ekvivalencije, treba izvrsiti dodatne provere. Greska je ako se skupovi ekvivalencije seku, a nalaze se u razlicitim COMMON blokovima.

begin
comblk1:= comblk(parent(p);
comblk2:= comblk(parent(q);
if comblk1 ¹ null and comblk2 ¹ null then
error;
else if comblk2 = null then
comblk(parent(q):= comblk1;
end

EQU A, B+dist
Treba izmeniti algoritam konstrukcije stabla ekvivalencije ubacivanjem sledece dve naredbe pre14. reda:
// A, p, c- rastojanje od lidera; B, q, d- rastojanje od lidera

low(parent(q)):= min(low(parent(q), low(parent(p))-c+dist+d);
high(parent(q):= max(high(parent(q), high(parent(p))-c+dist+d);

--------------------------------------------------------------------------------

U skripti Marije Stojsavljevic i Dusana Lolica, navodi se kao odgovor samo deo oznacen crveno (koji me i najvise zbunjuje).
U materijalima (koje deli prof. Velasevic na pocetku svake godine) nalazi se samo deo oznacen zeleno.
Deo oznacen plavo pojavljuje se samo u glavnoj skripti, ali je to istovremeno i odgovor na jedno drugo pitanje: Sta je to tabela ekvivalencije i kako se izracunavaju
vrednosti low i high za dva ekvivalentna skupa koji se mesaju?

I uopste, sta podrazumeva "izracunavanje COMMON blokova" ?

Pozdrav,
Nikola