Kääntäjätekniikka
Luento 9 (18.4.2017)
Lähiviikkojen aikatauluista
- torstain 20.4. luento Auditorio 3:ssa
- perjantaina 21.4. ei ohjauksia
- maanantaina 24.4. ohjaukset normaalisti
- perjantaina 28.4. vaihepalautus (tarkastaja) ja ohjaus
Inkrementit
(deadlineja päivitetty 1.6.2017)
Alustava deadline sulkeissa (klo 16 kyseisenä päivänä ellei muuta ilmoitettu)
- Suunnittelu ja ryhmien muodostaminen (20.3.)
- Jäsentäjä valmis (perjantai 7.4. klo 10)
- Tarkastaja valmis (perjantai 5.5. klo 10)
- Välikielen generointi valmis [tai muita ominaisuuksia 1 op:n arvosta lisää] (15.5.)
- Kohdekielen generointi (naivi rekisteriallokaatio) valmis [tai muita ominaisuuksia 1 op:n arvosta lisää] (19.6.)
- Fiksu rekisteriallokaatio valmis [tai muita ominaisuuksia 1 op:n arvosta lisää] (14.8. klo 12)
- Koko työ viimeistelty ja valmis tarkastettavaksi (28.8. klo 12)
Jatketaan tyyppitarkastuksesta
Tietueet
- Tietuemääritelmä määrittelee uuden tyyppinimen ja koostuu tietueen sisällä näkyvistä muuttujamäärittelyistä (ilman alustusta) eli kentistä.
- Tietuemäärittelystä on tarkastettava, että
- samaa kenttää ei määritellä useasti,
- kenttien tyypit ovat sellaiset, että ne kelpaavat tähän käyttöön.
- Tietuetta käytetään projektio-operaattorilla
e.l
; siitä on tarkastettava, ettäe
:llä on tietuetyyppi jal
one
:n tyypissä määritelty kenttä.- Tällaisen lausekkeen tyyppi on
l
:llee
:n tyypissä määritelty tyyppi. - Tällaisella lausekkeella on lvalue, jos
e
:llä on lvalue.
Varianttityyppi
- Varianttityyppi on kuin tietue, mutta sen kentät ovat muistissa päällekkäin, ei peräkkäin.
- Vain yksi variantin kentistä on aktiivinen kulloinkin. Varianttiin sisältyy lisäksi tieto siitä, mikä kentistä on aktiivinen.
- ns. tagged union (toisin kuin C:n union)
- Tyyppitarkastus kuten tietueelle.
- Lisäksi variantti tarjoaa
- jonkin tavan selvittää, mikä kenttä on kulloinkin aktiivinen, esim. sopivasti muokattu switch–case-lause
- jonkin tavan asettaa variantin arvo aktiivinen kenttä valiten
These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.