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
    1. Java
    2. Kordamisülesanded
    3. Kahendpuu
    4. Eeltest
    5. Kodutöö
  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!

Eeltest

Selle testiga üritame diagnoosida sinu oskust defineerida omad klassid vastavalt nende kasutamise spetsifikatsioonile. Me toome näited, kuidas peaks saama klassi kasutama, aga sinu ülesandeks jääb defineerida nõuetele vastav klass.

1. Ping-pong

Defineeri ja esita klass pretest.PingPong, mida saaks kasutada nii:

import pretest.PingPong;

public class PingPongDemo {
	public static void main(String[] args) {
		PingPong.playPingPong(10, 16);
	}
}

PingPong.playPingPong võtab kaks täisarvulist argumenti, mis tähistavad vahemikku ja väljastab eraldi ridadele arvud sellest vahemikust. Erandiks on 3- ja 5-ga jaguvad arvud:

  • kui arv jagub 3- ja 5-ga, siis tuleb arvu asemel väljastada PingPong;
  • kui arv jagub 3-ga, siis tuleb arvu asemel väljastada Ping;
  • kui arv jagub 5-ga, siis tuleb arvu asemel väljastada Pong.

Antud näiteprogrammi käivitamisel peab ekraanile ilmuma:

Pong
11
Ping
13
14
PingPong
16

Esitamine: https://moodle.ut.ee/mod/vpl/view.php?id=227948

2. Tervitamine

Defineeri ja esita klass pretest.Person, mida saaks kasutada sedasi:

import java.util.ArrayList;
import java.util.List;

import pretest.Person;

public class PersonDemo {
	public static void main(String[] args) {
		List<Person> inimesed = new ArrayList<>();
		inimesed.add(new Person("Juhan"));
		inimesed.add(new Person("Maris"));
		inimesed.add(new Person("Hannes"));
		inimesed.add(new Person("Teele"));
		inimesed.add(new Person("Peeter"));
		inimesed.get(2).printGreetings();
	}
}

inimene.printGreetings() peab tervitama kõik ülejäänud inimesi nende loomise järjekorras. Võib eeldada, et kõik inimesed luuakse erinevate nimedega.

Antud näiteprogrammi käivitamisel peab ekraanile ilmuma

Tere, Juhan!
Tere, Maris!
Tere, Teele!
Tere, Peeter!

Esitamine: https://moodle.ut.ee/mod/vpl/view.php?id=227947

3. Puu

Defineeri ja esita klass pretest.Tree, mida saaks kasutada nii:

import java.util.Arrays;
import java.util.List;

import pretest.Tree;

public class TreeDemo {
    public static void main(String[] args) {
        Tree tree1 = Tree.node(Tree.leaf(3), Tree.node(Tree.leaf(7), Tree.leaf(2)));
        System.out.println(tree1.toList()); 

        // Proovime nüüd listist moodustada puu
        List<Integer> list = Arrays.asList(8, 19, 20, 200, 120, 9, 10);
        Tree tree2 = Tree.fromList(list);

        // Moodustatud puu peab saama tasandada samaks listiks:
        System.out.println(tree2.toList()); 


        // Boonus: Puude kõrgus võiks ka olla võimalikult madal.
        System.out.println(tree1.height()); 
        System.out.println(tree2.height()); 
    }
}

Antud näiteprogrammi käivitamisel peab ekraanile ilmuma

[3, 7, 2]
[8, 19, 20, 200, 120, 9, 10]
2
3

Esitamine: https://moodle.ut.ee/mod/vpl/view.php?id=227923

  • 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