Kääntäjätekniikka

Luento 10 (20.4.2017)

Lähiviikkojen aikatauluista

  • perjantaina 21.4. ei ohjauksia
  • maanantaina 24.4. ohjaukset normaalisti
  • perjantaina 28.4. pelkkä ohjaus
  • maanantaina 1.5. ei opetusta
  • perjantaina 5.5. vaihepalautus (tarkastaja) ja sen jälkeen ohjausta

Inkrementit

(deadlineja päivitetty 1.6.2017)

Alustava deadline sulkeissa (klo 16 kyseisenä päivänä ellei muuta ilmoitettu)

  1. Suunnittelu ja ryhmien muodostaminen (20.3.)
  2. Jäsentäjä valmis (perjantai 7.4. klo 10)
  3. Tarkastaja valmis (perjantai 5.5. klo 10)
  4. Välikielen generointi valmis [tai muita ominaisuuksia 1 op:n arvosta lisää] (15.5.)
  5. Kohdekielen generointi (naivi rekisteriallokaatio) valmis [tai muita ominaisuuksia 1 op:n arvosta lisää] (19.6.)
  6. Fiksu rekisteriallokaatio valmis [tai muita ominaisuuksia 1 op:n arvosta lisää] (14.8. klo 12)
  7. Koko työ viimeistelty ja valmis tarkastettavaksi (28.8. klo 12)

Jatketaan tyyppitarkastuksesta

Koostealkio vai viitealkio?

  • Yksinkertaisin tapa toteuttaa tietuetyyppinen kenttä tietuetyypissä on sisällyttää kenttä sellaisenaan tietueeseen.
    • Tämä ei toimi, jos tyyppirekursio on sallittu.
  • C-kielen ratkaisu: lisätään kieleen osoitintyyppi ja sallitaan rekursio vain osoitintyypin kautta.
    • tyyppitarkastajan huomioitava!
  • Java-kielen ratkaisu: tietuetyyppiset kentät ovat oikeasti viittauksia erillisiin tietueisiin.
  • Mahdollista myös sallia rekursio vain varianttityypin kautta.

Tyyppien yhtäläisyys

  • Tyyppitarkastuksessa olennainen kysymys on, milloin kaksi tyyppiä ovat yhtäläiset.
  • Pääsääntö:
    • Perustyypit ovat yhtäläisiä vain itsensä kanssa.
    • Rakenteiset tyypit (funktiot ym.) ovat yhtäläisiä jos niiden rakennepuut ovat samanlaiset sen jälkeen, kun tyyppinimet on korvattu niiden määritelmillä
    • Tätä sanotaan rakenneyhtäläisyydeksi.
  • Rakenneyhtäläisyys on ongelmallinen jos rekursiiviset tyyppimäärittelyt ovat sallittuja.
  • Yksinkertainen ratkaisu on nimiyhtäläisyys:
    • Kaksi tyyppinimeä ovat samat jos ne viittaavat samaan tietuetyypin määrittelyyn.

Luokat

  • Luokat ei enää sisälly yksinkertaiset tyypit -järjestelmään.
  • Yksinkertaisimmillaan luokka on tietue, jossa on lisäksi mahdollisuus määritellä yläluokka.
  • Tarkastuksen huomattava yläluokan nimien overriding ja siihen liittyvät virheet.
  • Lisäksi mahdollisesti näkyvyysaluetarkastukset (private jne).
  • Tavanomaisessa mallissa luokka määrittelee tyypin; jos sillä on yläluokka, niin luokan ja yläluokan välille muodostuu alityypityssuhde.

Alityypitys

  • Alityypitys on tyyppien välinen osittaisrelaatio.
  • Sen pohjana on monissa kielissä luokkien väliset perintäsuhteet.
  • Kaksi tyyppiä ovat ekvivalentit, jos ne ovat toistensa alityyppejä.

Alityypityksen laajentaminen

  • Tietue ei voi alityypittyä, jos sen kenttiin voi sijoittaa.
  • Aliohjelmatyyppi on kovariantti paluutyyppinsä suhteen mutta kontravariantti parametrityyppinsä suhteen.
    • Epäintuitiivista!
  • Kovarianssi tarkoittaa, että jos f:n tyyppi on g:n tyypin alityyppi, niin f:n paluuarvon tyyppi on g:n paluuarvon tyypin alityyppi.
  • Kontravarianssi tarkoittaa, että jos f:n tyyppi on g:n tyypin alityyppi, niin g:n argumentin tyypin tulee olla f:n argumentin tyypin alityyppi.

Varianssin muistisäänöt

  • Arvon lähde alityypittyy kovariantisti.
    • Esimerkiksi tietue, jonka kenttiin ei saa sijoittaa.
    • Myös: aliohjelman paluuarvo.
  • Arvon kohde alityypittyy kontravariantisti.
    • Tyypillinen esimerkki on aliohjelman parametri.
  • Arvon yhdistetty lähde–kohde ei alityypity (eli on invariantti).
    • Tyypillisiä esimerkkejä ovat osoitintyyppi, taulukkotyyppi ja tietuetyyppi.
  • Moni kieli rikkoo invarianssisääntöjä. Tästä seuraa velvoite dynaamiseen tarkastukseen.

Suorasta tulkista

  • 3 op:n harjoitustyöhön riittää AST:n perusteella toimiva tulkki
  • kannattaa tehdä testaustarkoituksessa muihinkin harjoitustöihin
  • rakennetaan kuten tyyppitarkastin, mutta lasketaan eikä tarkasteta
    • symbolitaulussa muuttujiin sidotaan tyyppien asemesta arvoja

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