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
- pakenevat muuttujat: muuttujat, joiden tulee pysyä hengissä aliohjelman päätyttyä
- 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.