Kääntäjätekniikka

Luento 12 (27.4.2017)

Lähiviikkojen aikatauluista

  • perjantaina 28.4. pelkkä ohjaus
  • maanantaina 1.5. ei opetusta
  • perjantaina 5.5. vaihepalautus (tarkastaja) ja sen jälkeen ohjausta
  • tämän jälkeen normaali aikataulu:
    • ohjauksia maanantaisin ja tarvittaessa perjantaisin
    • luennot tiistaisin ja torstaisin
  • seuraava vaihepalautus maanantaina 15.5. (välikielen generointi)
  • annan harjoitustyön palautusohjeet lähiaikoina

Kolmiosoitekoodin generoinnista

  • Kolmiosoitekoodia generoidaan kullekin aliohjelmalle erikseen.
  • Kunkin aliohjelman kolmiosoitekoodi generoidaan ko. aliohjelman omaan käskyjonoon.
  • Ideana on käydä aliohjelman rakennepuu jälkijärjestyksessä läpi.
  • Tässäkin tarvitaan symbolitaulua, joka yhdistää muuttujat niitä esittäviin operandeihin.

Lausekkeet

  • Lauseke laskee arvon, joka pitää tallettaa johonkin.
  • Kaksi vaihtoehtoa:
    • Lausekkeen generoijalle kerrotaan, mihin lausekkeen tulos pitää tallettaa.
    • Lausekkeen generoija tallettaa tuloksen johonkin ja palauttaa tiedon tästä kutsujalleen.
      • yleensä uusi väliaikaismuuttuja

Totuusarvolausekkeet

  • Totuusarvolausekkeilla on kaksi erilaista käyttötarkoitusta:
    • if-, while- ym. lauseiden testinä, jolloin lausekkeen arvo määrittää, minne hypätään;
    • totuusarvon laskemiseen esim. argumentiksi antamista tai paluuarvona palauttamista varten.
  • Totuusarvolausekkeet voidaan kääntää kahdella tavalla:
    • generoidaan suoraan hypyt
    • lasketaan totuusarvo niin kuin mikä tahansa muu arvo

Hypyt

  • Hypyt taaksepäin ovat helppoja: hyppykäskyyn voidaan saman tien kirjoittaa kohdekäskyn sijainti käskytaulukossa.
  • Entäpä hypyt eteenpäin? Tarvitaan backpatching-tekniikkaa:
    • Hypyn kohdetta ilmaisemaan luodaan kohdeolio
    • Kohdeoliota voidaan käyttää hypyn kohteena. Jos hyppy oli taaksepäin, kohdeolio tietää, minne hypätään, ja kaikki on helppoa.
    • Jos hyppy on eteenpäin, kirjataan hyppykäsky ylös ja laitetaan sen kohteeksi jotain hyödytöntä.
    • Kun kohdeoliolle annetaan sijainti, käydään korjaamassa muistiin kirjattujen hyppykäskyjen kohteet.
  • Vaihtoehtoisesti kaikki hypyt tapahtuvat symbolisen nimen kautta
    • Hypyt eteenpäin ja taaksepäin käyttäytyvät samalla tavalla.

Paikalliset muuttujat

  • Deklaraatio luo muuttujan kuvaustietueen, joka tallennetaan aliohjelman metatietoihin välikoodissa. Sisältää mm.
    • viittauksen aliohjelmaan, jonka paikallinen muuttuja on kyseessä
    • riittävästi tietoa (esim. tyyppi), josta takapää pystyy päättelemään koon ja alignmentin
  • Kuvaustietue sidotaan muuttujan nimeen symbolitaulussa
  • Kuvaustietue sopii hyvin kolmiosoitekoodin operandiksi.

Paikallisten muuttujen luokittelu

  • Jaotellaan kolmeen luokkaan (ei kaikkia kaikissa kääntäjissä):
    • pakenevat muuttujat: muuttujat, joiden tulee pysyä hengissä aliohjelman päätyttyä
      • kootaan omaan tietueeseensa, joka varataan keosta
    • pinomuuttujat: muuttujat, joilla tulee olla osoite mutta jotka voivat kuolla aliohjelman päättyessä
      • varataan pinosta
    • rekisterimuuttujat: muut paikalliset muuttujat
      • rekisteriallokaattori päättää, riittääkö rekisteri vai varataanko pinosta
  • Luokittelu tallennetaan kuvaustietueeseen
    • alustetaan yleensä rekisterimuuttujaksi.
    • Muuttujaan viitattaessa luokittelua päivitetään tarvittaessa.
  • Luokittelun voi tehdä myös erillisenä AST:n tai välikoodin läpikäyntinä.

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