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

Automata, Languages and Compilers 2020/21 spring

  • Üldinfo
  • Eksami näidised
  • Videote loetelu
  • Kava
    • 1. Soojendus
    • 2. Regulaaravaldised
    • 3. Olekumasinad
    • 4. Avaldise struktuur
    • 5. Grammatikad ja lekser
      • Grammatika mõiste
      • Grammatika automaadid*
      • Lekseri soojendus
      • Kodutöö
    • 6. Käsitsi parsimine
    • 7. ANTLRiga töötamine
    • 8. Interpretaator
    • 9. Kompilaator
    • 10. Edasi!
  • Bitbucket
  • Moodle
  • Fleep!
  • Zoom!

Lekseri soojendus

Teemat tutvustavad videod: KalaLexer ja Unescaper.

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 lekser ja lekseri generaator teeb. Siin on mõned harjutused, millest võib olla abi kodutöö lahendamisel. Lekseri tööpõhimõtte kohta võib vaadata:

  • Lekseri video (slaidid), kus JFLAP abil on üritatud näidata.
  • Õpiku peatükk 1.8, eriti lehekülg 25 lõpus "Splitting the Input Stream".
  • Alex Aikeni videoloeng. Vajab EdX'i konto. Video nimi on "04-01 Lexical Specification".

Lekseri kirjutamine (KalaLexer)

Videos toome näite, 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 mõtleme selle siin jooksvalt välja, et paremini aru saada, miks just nii teha.

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

Escape'imisest (Unescaper)

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 inputs/escaped.txt, aga võid seal proovida erinevaid sõnesid. Kui sealt see 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 esialgse sõne!

  • 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