TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

Samankaltaiset tiedostot
Muita rekisteriallokaatiomenetelmiä

Eloisuusanalyysi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Eloisuusanalyysi.

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 17. marraskuuta 2009

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

Silmukkaoptimoinnista

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 26. lokakuuta 2009

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 7. joulukuuta 2009

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 2. marraskuuta 2009

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015

Algoritmit 1. Luento 8 Ke Timo Männikkö

Syntaksi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 22. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Syntaksi. Aluksi.

Täydentäviä muistiinpanoja jäsennysalgoritmeista

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. joulukuuta 2015

Miten käydä läpi puun alkiot (traversal)?

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 26. tammikuuta 2012

Algoritmit 1. Luento 7 Ti Timo Männikkö

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 6. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS. Pinoautomaatit.

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 6. maaliskuuta 2012 TIETOTEKNIIKAN LAITOS.

Algoritmit 2. Luento 5 Ti Timo Männikkö

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 20. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS.

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Johdatus graafiteoriaan

Jäsennysaiheesta lisää Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Attribuuttikieliopit

TIEA341 Funktio-ohjelmointi 1, kevät 2008

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Datatähti 2000: alkukilpailun ohjelmointitehtävä

A TIETORAKENTEET JA ALGORITMIT

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien

Täydentäviä muistiinpanoja kontekstittomien kielioppien jäsentämisestä

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

semantiikasta TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho 5. lokakuuta 2009 TIETOTEKNIIKAN LAITOS Ohjelmointikielten staattisesta

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Algoritmit 2. Luento 2 Ke Timo Männikkö

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Algoritmit 2. Luento 2 To Timo Männikkö

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Pinoautomaatit. Pois kontekstittomuudesta

Yhteydettömät kieliopit [Sipser luku 2.1]

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Algoritmit 2. Luento 6 To Timo Männikkö

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

Algoritmit 2. Luento 5 Ti Timo Männikkö

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. marraskuuta 2015

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Rekursiiviset tyypit

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 16. toukokuuta 2011

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

Täydentäviä muistiinpanoja laskennan rajoista

Algoritmit 1. Luento 12 Ke Timo Männikkö

Muistinsiivous. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Muistinsiivous.

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi

Harjoitus 6 ( )

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 6. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012

Oppijan saama palaute määrää oppimisen tyypin

Johdanto. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Johdanto. Luennoija.

Algoritmit 1. Luento 13 Ti Timo Männikkö

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 29. huhtikuuta 2011

Algoritmit 2. Luento 4 Ke Timo Männikkö

Testaa: Vertaa pinon merkkijono syötteeseen merkki kerrallaan. Jos löytyy ero, hylkää. Jos pino tyhjenee samaan aikaan, kun syöte loppuu, niin

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

Algoritmit 2. Luento 9 Ti Timo Männikkö

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

Binäärihaun vertailujärjestys

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Harjoitus 6 ( )

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }

Algoritmit 1. Luento 6 Ke Timo Männikkö

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 16. helmikuuta 2012

3.3 KIELIOPPIEN JÄSENNYSONGELMA Ratkaistava tehtävä: Annettu yhteydetön kielioppi G ja merkkijono x. Onko

Luku 4. Tietorakenteet funktio-ohjelmoinnissa. 4.1 Äärelliset kuvaukset

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

Ydin-Haskell Tiivismoniste

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Diskreetit rakenteet

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

Transkriptio:

TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 9. marraskuuta 2009

Sisällys

Sisällys

Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Vaihe E tiistai 24.11. klo 10 koodigenerointi (ilman rekisteriallokaatiota)

Kääntäjän rakenne lähdeohjelma SELAAJA sanasjono JÄSENTÄJÄ rakennepuu VÄLIKOODIN GENEROIJA välikoodi KOHDEKOODIN GENEROIJA kohdeohjelma TARKASTAJA SOKERINPILKKOJA OPTIMOIJA OPTIMOIJA

Sisällys

perusidea sama kuin maximal munch -algoritmissa (parilla erolla): Kohdekieli kuvataan joukkona tiilisääntöjä. Kullakin tiilisäännöllä on positiivinen kustannus. Syötteenä on lausekkeen rakennepuu (tai vastaava välikoodi). Tuloksena on puun optimaalinen tiilipeitto (ja sitä vastaava kohdekielen käskyjono). optimaalinen? siinä mielessä, että valittujen tiilien yhteiskustannus on minimaalinen käsitellään syötepuu kahdessa vaiheessa 1. kustannusten laskenta 2. käskyjonon generointi

Määritelmä: Puut ja puuhahmot Olkoon annettuna epätyhjä joukko solmulappuja 1. Puu on joko lehtisolmu, joka sisältää yhden solmulapun, taikka sisäsolmu, joka sisältää yhden solmulapun ja jolla on yksi tai useampi alipuu. Puuhahmo on joko jokerisolmu, lehtisolmu, joka sisältää yhden solmulapun, taikka sisäsolmu, joka sisältää yhden solmulapun ja jolla on yksi tai useampi alipuuhahmo. Puun ja puuhahmon juurella tarkoitetaan sen solmua ilman sen mahdollisia alipuita tai alipuuhahmoja. 1 Käskyjen valinnan tapauksessa nämä ovat välikielen käskyjä.

Algoritmi: Puuhahmon sovitus Syöte on puuhahmo ja puu. Tulos on joko tieto epäonnistumisesta taikka tiili ja joukko tiilin alipuita. Algoritmi on seuraavasti rekursiivinen: Jos puuhahmo ja puu ovat molemmat lehtisolmuja, tiili on puu itse ja tiilin alipuita ei ole. Jos puuhahmo ja puu ovat molemmat sisäsolmuja, joilla on sama määrä alipuita ja alipuuhahmoja: Sovelletaan algoritmia rekursiivisesti kuhunkin alipuuhahmo alipuu-pariin. Tiili on puun juuri, jolle annetaan lapsiksi kunkin rekursiivisen soveltamisen tuottama tiili. Tiilen alipuita ovat kaikki rekursiivisen soveltamisen tuottamat tiilin alipuut. Jos puuhahmo on jokerisolmu, ei tiiltä ole, ja puu on ainoa tiilen alipuu. Muutoin sovitus epäonnistuu.

Kustannusten laskenta Syöte joukko tiilisääntöjä kustannuksineen sekä välikielen käskyistä muodostettu puu Tulos kuhunkin syötepuun solmuun liitetty kohdekielinen käskyjono, kustannus ja tieto sen tiileen kuuluvista solmuista Algoritmi Tehdään kullekin solmulle jälkijärjestyksessä seuraavaa: Tehdään kullekin tiilisäännölle seuraavaa: Koetetaan sovittaa tiilisäännön puuhahmoa siihen alipuuhun, jonka juuri solmu on. Lasketaan yhteen tiilisäännön kustannus sekä tiilen alipuiden juurien kustannukset; olkoon tämä tiilisäännön kokonaiskustannus. Tehdään pienimmän kokonaiskustannuksen tiilisäännölle seuraavaa: Tallennetaan sen käskyjono solmun käskyjonoksi. Tallennetaan sen kokonaiskustannus solmun kustannukseksi. Merkitään solmuun tieto tiilestä.

Käskyjonon generointi Syöte kustannuksen laskennalle annettu puu ja kustannuksen laskennan antama tulos. Tulos kohdekielinen käskyjono Apuna joukko solmuja, joka alustetaan tyhjäksi Algoritmi Käydään puun solmut läpi etujärjestyksessä: Jos solmu löytyy solmujoukosta, ei tehdä mitään. Muutoin: 1. Lisätään tulokseen solmuun liitetty käskyjono. 2. Lisätään solmun tiileen kuuluvat solmut solmujoukkoon.

Huomioita Joihinkin solmuihin liitettyjä käskyjonoja ei koskaan liitetä tuloskäskyjonoon! Käsin koodaaminen täysin mahdollista, mutta on aika helppoa saattaa kaksi vaihetta epäsynkkaan. Merkittävä osa algoritmin työstä voidaan (hankalasti) tehdä etukäteen ja säästää näin kääntäjän ajoaikaa. Työkaluja: twig, burg, iburg...

Puukielioppi Edellä esitetty algoritmi on yksinkertainen puujäsentäjä, jossa konfliktit ratkaistaan kustannusten avulla! Tiilisäännöstö voidaan yleistää (painotetuksi) puukieliopiksi. Voidaan esim. tehdä omat välikesymbolit osoitteiden (lvalue) ja arvojen (rvalue) laskemiselle. Algoritmissa kustannukset, käskyjonot ja tiilet liitetään nyt solmu välikesymboli-pareihin. Mahdollista on myös esittää puu jonona ja käyttää normaaleja jonojäsennystekniikoita. LALR-jäsentäjiä on käytetty tähän tarkoitukseen. Ongelmana tarvittavien jonokielioppien koko ja moniselitteisyys. Jonojäsentäjien suuntabias (left-to-right yleensä) on merkittävä rajoite.

Tähdättävät kääntäjät Fiksu tapa tehdä tähdättävä kääntäjä on kuvata kukin kohdekieli suhteellisen kompaktisti (painotettuna) puukielioppina ja käyttää apuohjelmaa (kuten iburg) varsinaisen käskynvalitsijan generointiin puukieliopista.

Sisällys

Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Vaihe E tiistai 24.11. klo 10 koodigenerointi (ilman rekisteriallokaatiota)