Arvutiteaduse instituut
  1. Kursused
  2. 2017/18 kevad
  3. Automaadid, keeled ja translaatorid (LTAT.03.006)
EN
Logi sisse

Automaadid, keeled ja translaatorid 2017/18 kevad

  • Üldinfo
  1. Õppekorraldus
  2. Eksam
  3. Reeglid
  4. Töövahendid
  5. Projekt
  • Kava
  1. Soojendus
  2. Regulaaravaldised
  3. Olekumasinad
  4. Lõplikud automaadid
  5. Avaldise struktuur
  6. Grammatikad ja lekser
    1. Grammatika mõiste
    2. Grammatika automaadid*
    3. Lekseri soojendus
    4. Kodutöö
    5. Magisiniga masinad*
  7. Käsitsi parsimine
  8. ANTLR intro
  9. AST loomine
  10. Interpretaator
  11. Semantiline analüüs
  12. Kompilaator
  • Moodle
  • Bitbucket
  • Fleep!

Lekseri soojendus

Kodutöös kirjutame käsitsi oma keele jaoks lekseri. Pärast teeme seda ANTLR'is, aga väga hea on ise ka aru saada, mida üks lekseri generaator teeb. Siin on mõned harjutused, millest võib olla abiks kodutöö lahendamisel.

Lekseri kirjutamine

Praktikumis toome näidena, kuidas võiks organiseerida lekserit. Harjutame siin lihtsalt funktsiooni argumentlisti jaoks lekseri kirjutamist:

   Sisend on näiteks: (kala, x, null)
   Väljundiks on list tokenitest: <LPAREN><IDENT:kala><COMMA><IDENT:x><COMMA><NULL><RPAREN><EOF> 

Kodutöö jaoks on juba lahenduse skelett võimalik endale kopeerida, aga me mõtlesime seda siin ise jooksvalt välja mõelda, et me ei pea siin päris samamoodi kõik tegema.

Eriti tasub siin tähele pöörata, kuidas võtmesõna null eristada muutujast nulll.

Escape'imisest

Kodutöö jaoks on suureks abiks, kui saad aru, kuidas maskeerimistähtedega toime tulla. Meil on siin väike harjutus, et probleem oleks vähemalt selge. Alusta sellega, et kirjutad endale Java failis sõne, mis sisaldab reavahetust:

String mystring = "foo\nbar\nbaz";

Kui tähthaaval välja printida selle sõne kõik tähti, siis me saame väljundiks:

 [f, o, o, 
 , b, a, r, 
 , b, a, z]

Selles sõnes on seega kaks reavahetust. Kopeeri nüüd enda sõne (koos jutumärkidega) kuhugi sisendfaili. Me oleme seda teinud failis input3.txt, aga võid proovida erinevate sõnedega seal. Kui sealt seda sisse lugeda ja välja trükkida tähtede jada, siis näeme järgmisi tähti:

 [", f, o, o, \, n, b, a, r, \, n, b, a, z, "]

Selles sõnes on reavahetuste asemel kaks eraldi tähte. Kuidas saada ikkagi tagasi esialgne sõne? Proovi defineerida meetod unescape, mis annaks tagasi Sinu esialgset sõne!

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused