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

Automata, Languages and Compilers 2017/18 spring

  • Ü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
  7. Käsitsi parsimine
  8. ANTLR intro
  9. AST loomine
  10. Interpretaator
  11. Semantiline analüüs
  12. Kompilaator
  • Moodle
  • Bitbucket
  • Fleep!

CMasina simulaator VAM

CMasina jaoks on olemas simulaator, Vam. Kõige lihtsam on seda paigaldada, kui tõmmata järgmine jar: vam.jar.

Näide

Selles keskkonnas kahjuks ei saa redigeerida faili, mistõttu tuleks järgmine fail salvestada nime all demo.cma. Sellel programmil on aga väike viga. Kuigi see ei olnud meelega, siis võiksite ikkagi üritada ise välja nuputada, kus viga on:

loadc 5  // 0: n = 5;
loadc 1  // 1: i = 1;
loadc 1  // 2: r = 1;

_while:	// i <= n
  LOADA 1
  LOADA 0
  LEQ
  JUMPZ _end

  // r = r * i;
  LOADA 2
  LOADA 1
  MUL
  STOREA 2
  POP

  // i = i + 1;
  LOADA 1
  LOADC 0
  ADD
  STOREA 1
  POP

  JUMP _while

_end:	
  HALT

Proovige VAMi simulatsiooni abil välja nuputada, mida see funktsioon arvutab ehk mis võrdus kehtib muutujate vahel, kui käivitamine on lõppenud.

Harjutus

Transleerige järgmine koodiosa CMa baitkoodi keskkonnas {n→0, x→1, z→2}:

z = 1;               
while (n > 0) {      // GR
    if (n & 1)       // AND
        z = z * x;   // MUL
    x = x * x;       // MUL
    n = n / 2;       // DIV
}

Selleks, et seda VAMis käivitada peab anda muutujatele mingid algväärtused. Kuna n ja x on siin mõeldud sisendiks, siis võib näiteks proovida sisendiga:

LOADC 11 /* n */
LOADC 3  /* x */
LOADC 0  /* z */ 

Muutuja z on koodijuppi väljundiks ja seda algväärtustatakse siin. Kes on laisk võib siin ära optimeerida esimest omistust ja lihtsalt panna "loadc 1". Sisendite 3 ja 11 korral peaks lõpptulemuseks olema magasini tipus 177147.

Mida see koodijupp arvutab?

  • 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