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] ja x[y] := z.
  • Vaihtoehtoisesti indeksointi on operandi (kuten tietueen kenttään viittaus)
  • Moniulotteisen taulukon indeksointi on peräkkäistä indeksointia.

Tietueet ja variantit

Ks vuoden 2016 lisämateriaali

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.