Kääntäjätekniikka
Luento 13 (2.5.2017)
Lähiviikkojen aikatauluista
- tulevat vaihepalautukset:
- perjantaina 5.5. vaihepalautus (tarkastaja) ja sen jälkeen ohjausta
- seuraava vaihepalautus maanantaina 15.5. (välikielen generointi)
- ohjauksia maanantaisin ja tarvittaessa perjantaisin
- luennot tiistaisin ja torstaisin
- annan harjoitustyön palautusohjeet tällä viikolla
Aliohjelmat
Aliohjelman määrittely
- Aliohjelmalle luodaan oma tietueensa. Sisältää mm:
- ABI-tiedon, jos kielessä aliohjelmalle voi määritellä eri ABI'eja
- paikallisten muuttujien kuvaustietueet
- parametrit käsitellään enimmälti paikallisina muuttujina
- aliohjelman rungosta generoidun välikoodin
- aliohjelman välikoodin generoinnissa luodut väliaikaismuuttujat
- viittauksen ympäröivän aliohjelman tietueeseen, jos sellainen on
- Alihjelman tietue sidotaan aliohjelman nimeen symbolitaulussa ennen aliohjelman välikoodin generointia.
- tietue toimii näin myös välikoodin operandina
Aliohjelmakutsut
- Välikoodin generoijan ei tarvitse tietää aliohjelmasta sen parametrien määrää ym. Ne oletetaan olevan ok tyyppitarkastuksen pohjalta.
- Tähän on poikkeuksia esim jos kutsusekvenssi vaihtelee aliohjelmasta toiseen (stdcall, stdarg jne)
- Argumentit pitää laskea yksi kerrallaan. Laskujärjestys riippuu kielestä: vasemmalta oikealle ja oikealta vasemmalle ovat tavallisimmat.
- Välikielessä ei kannata esittää kutsua monimutkaisesti. Esim. kolmiosoitekoodissa riittää hyvin jokin seuraavanlainen sekvenssi kutsulle f(x, y):
yp := ARG y
xp := ARG x, yp
res := CALL f, xp
- Tällöin kutsu ja parametrit muodostavat puun, jossa kutsu on ensimmäisenä ja parametrit lineaarisesti järjestyksessä oikeassa alipuussa.
Rakenteinen data
Taulukot
- Välikielessä ei välttämättä tiedetä taulukon alkion todellista kokoa, joten indeksointi kannattaa toteuttaa omina käskyinään
x := y[z]
jax[y] := z
. - Vaihtoehtoisesti indeksointi on operandi (kuten tietueen kenttään viittaus)
- Moniulotteisen taulukon indeksointi on peräkkäistä indeksointia.
Tietueet ja variantit
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.