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!

Harjutus: Kahendpuu

1. Kirjuta lõpuni järgnevad klassid:

Node.java

package praks1;
/**
 * Klass on mõeldud kahendpuu tipu esitamiseks. Tüübiparameeter T määrab, millist 
 * tüüpi väärtust saab tipus hoida. Väärtuse küsimiseks on meetod getValue.
 * 
 */
public class Node<T> {
	public Node(T value, Node<T> leftChild, Node<T> rightChild) {
		// TODO: täienda konstruktorit
	}

	public T getValue() {
		// TODO: kirjuta erindi viskamise asemele enda kood
		throw new UnsupportedOperationException();
	}

	/**
	 * Tagastab vasaku alampuu. Selle puudumisel tagastab null-i.
	 */
	public Node<T> getLeftChild() {
		// TODO: kirjuta erindi viskamise asemele enda kood
		throw new UnsupportedOperationException();
	}

	public Node<T> getRightChild() {
		// TODO: kirjuta erindi viskamise asemele enda kood
		throw new UnsupportedOperationException();
	};

	/**
	 * Tagastab true tippude korral, millel pole ühtegi alampuud.
	 */
	public boolean isLeaf() {
		// TODO: kirjuta erindi viskamise asemele enda kood
		throw new UnsupportedOperationException();
	}


	/**
	 * Meetod peab tagastama true või false vastavalt sellele, kas antud (alam)puus
	 * leidub näidatud väärtus. Võrdlemine toimub meetodi equals alusel.
	 */
	public boolean contains(T value) {
		// TODO: kirjuta erindi viskamise asemele enda kood
		throw new UnsupportedOperationException();
	}

	/** 
	 * toString peab tagastama puu suluesituse.
	 * 
	 * Formaat:
	 * Puu iga tipp on esitatud ümarsulgudes antud kolmikuna, kus esimene
	 * element on tipu väärtus, teine element on vasak alluv ning kolmas on parem alluv.
	 * Kui alluv puudub, siis on sõnes vastaval kohal allkriips.
	 * 
	 * Komponentide vahel peab olema koma ja üks tühik.
	 * 
	 * Näited:
	 * kui t on ühetipuline puu tüübiga Node<Integer>, 
	 * mille tipu väärtus on 3, siis t.toString() peab tagastama
	 * "(3, _, _)"
	 *  
	 *  
	 * Kui t on selline puu:
	 *  	1
	 *     / \
	 *    /   \
	 *   2    -44
	 *    \
	 *     3
	 *  
	 * siis t.toString() peab tagastama
	 * 
	 * "(1, (2, _, (3, _, _)), (-44, _, _))"
	 */
	@Override
	public String toString() {
		// TODO: kirjuta super.toString asemele enda kood
		return super.toString();
	}

	/**
	 * Soovi korral implementeeri ka meetodid equals ja hashCode
	 */
}

NodeUtils.java

package praks1;

public class NodeUtils {

	/**
	 * Meetod peab tagastama täisarvu, mis näitab mitu korda esineb antud (alam)puus
	 * näidatud väärtus. NB! Võrdlemiseks kasutada meetodit equals!
	 */
	public static <T> int count(Node<T> tree, T value) {
		// TODO: kirjuta erindi viskamise asemele enda kood
		throw new UnsupportedOperationException();
	}


	/**
	 * NB! See on raskem ülesanne. Enne selle üritamist lahenda ja esita teised ülesanded ära!
	 * 
	 * 
	 * See meetod peab võtma suluesituses sõnena antud puu ja tagastama vastava
	 * puu andmestruktuuri. Tippudes oleva väärtuse tüüp on Integer.
	 * 
	 * Sõne formaat on sama, nagu kirjeldatud Node.toString juures.
	 * 
	 * Näited
	 * 
	 * Kui käivitada
	 * 
	 * 		puu = makeIntegerTree("(1, (2, _, (3, _, _)), (3, _, _))");
	 * 
	 * siis puu.getLeft().getRight().getValue() peab tagastama 3
	 * ja   puu.getRight().isLeaf() peab tagastama true
	 * ja   NodeUtils.count(puu, 3) peab tagastama 2
	 * 
	 */
	public static Node<Integer> parseIntegerTree(String s) {
		// TODO: kirjuta erindi viskamise asemele enda kood
		throw new UnsupportedOperationException();
	}
}



2. Lae oma lahendus Moodle'isse

Selle ülesande jaoks on olemas ka automaatkontrollid. Leiad need siit.

  • 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