Institute of Computer Science
  1. Courses
  2. 2019/20 spring
  3. Automata, Languages and Compilers (LTAT.03.006)
ET
Log in

Automata, Languages and Compilers 2019/20 spring

  • Üldinfo
  • Eksami näidised
  • Kava
    • 1. Soojendus
    • 2. Regulaaravaldised
    • 3. Olekumasinad
    • 4. Avaldise struktuur
    • 5. Grammatikad ja lekser
    • 6. Käsitsi parsimine
      • Avaldisgrammatikad
      • Implementatsioon
      • Vasakrekursioon
      • Ennustav parsimine*
      • Lausearvutus*
      • Kodutöö
    • 7. ANTLRiga töötamine
    • 8. Interpretaator
    • 9. Kompilaator
  • Bitbucket
  • Moodle
  • Fleep!

6. Käsitsi parsimine

Meie eesmärk on nüüd käsitsi kirjutada parserid. Grammatikast parseri saamine on väga lihtne, kui grammatika on õigel kujul. Seetõttu peab kõigepealt aru saama, kuidas grammatikad disainida, et tulemus oleks ühene ja saadud parsepuu pealt oleks võimalik välja lugeda alloleva lause struktuur. Avaldiste parsimisel tahame lõpuks saada abstraktse süntakspuu, kus operaatorite prioriteedid on õiged.

Esimene nädal

Üritame mõisted nagu mitmesus, derivatsioon ja süntakspuu endale selgeks teha. Me alustame ka kihiliste avaldisgrammatikatega tutvumist, sest nende disainipõhimõte võiks olla meile kõigile suureks eeskujuks. Praegu on ka eriti relevantsed järgmised lisatööd:

  • Kui veel ei ole, siis võid vaadata Pythoni näitel, mida kujutab endast programmi süntaksipuu. (Kuna selles aines on põhifookus Javal, siis piisab, kui tollelt lehelt lugeda vaid esimene osa kuni pealkirjani "Pythoni AST tekitamine".)
  • Edasi võib ka vaadata, kuidas Java Spetsifikatsioonis on kõik keele avaldised kiht-haaval välja toodud. Soovitame uurida Java süntaksipuid ja sealolev lisatöö ära teha!
  • Lausearvutuse valem. Suurepärane harjutus avaldisgrammatika koostamiseks on meil lisatööna võimalik lahendada!

Järgmises kodutöös tuleb implementeerida AKT keele avaldiste parser! Selle tähtaeg on ülejärgmine nädal, sest järgmises loengus alles räägitakse (ühestest) avaldisgrammatikatest, aga see nädal võiks vähemalt AST klassidega alustada!

Teine nädal

Meil on nüüd teoorias kõik selge ja oskame avaldisgrammatika ilusasti kirja panna, et operaatorid loetakse õigete prioriteetidega ja assotsiatiivsustega. Nüüd teisendame lihtsalt grammatika parseriks!

  • Java implementatsioon. Teisendame grammatika Java koodiks, mis teostab süntaksanalüüsi ja loob sõnele vastava parsepuu (või otse abstraktse süntaksipuu). Kahjuks tekib meil seal probleeme oma avaldisgrammatikatega...
  • Vasakrekursiooni elimineerimine. See on lihtne teisendus grammatikate peal, mis võimaldab meil ka vasakassotsiatiivsed avaldisgrammatikad korrektselt parsida!

See peaks olema piisav ettevalmistus kodutöö lahendamiseks. Antud käsitlus on aga võrdlemisi pealiskaudne. Meil on ka parsimise ülesandeid, mis nõuavad natuke rohkem teooriat, aga jätame need suuresti iseseisvaks uurimiseks.

Kuna need teemad muutuvad üsna tehnilisteks, tuleb meeles pidada, et eesmärk on siin arendada modulaarset mõtteviisi. Grammatika ja rekursioon, nendes juba peituvad kogu informaatika põhitõed, aga kõrgema taseme saavutamiseks on eriti kasulik üritada ise välja mõelda, kuidas vasakrekursiooni elimineerimise järel peab tagastama esialgse (vasakassotsiatiivse operaatorite puhul) parsepuu. Kui saad sellest teemast aru, siis võib Sind turvalise tarkvara arendamisega usaldada!

  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment