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
    1. Struktuur
    2. RegexAnalyzer
    3. Puu harjutused
    4. Kodutöö
    5. Java AST analüüs*
  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!

RegexAnalyzer

Vaatame klassi RegexAnalyzer, mis tuleb täiendada. Vaja on implementeerida kolm meetodit, mis võtavad argumendiks argumendiks regulaaravaldise süntaksipuu ja analüüsivad selle.

  1. matchesEmptyWord kontrollib, kas tühisõne kuulub selle regulaaravaldise poolt defineeritud keelde.
  2. matchesInfManyWords tagastab true, kui regulaaravaldise keel on lõpmatu.
  3. getAllWords tagastab lõpliku keele korral hulga kõigi selle regulaaravaldisega sobivate sõnadega. Lõpmatu keele korral tuleb visata erind.

Regulaaravaldise puu klassid

Regulaaravaldise süntaksipuu on moodustatud paketis week5.regex oleva RegexNode klassi alamklasside isenditest. Konkreetsemalt, huvipakkuvad klassid on:

  • Alternation – valik kahe alternatiivi (getLeft() ja getRight()) vahel
  • Concatenation – kahe regulaaravaldise (getLeft() ja getRight()) konkatenatsioon
  • Repetion – regulaaravaldise (getChild()) kordamine 0 või enam korda
  • Letter – kindla tähega (getSymbol()) sobituv regulaaravaldis
  • Epsilon – tühja sõne tähistav regulaaravaldis

Nende klasside kasutamine näeks välja midagi sellist:

void teeMidagiRegulaaravaldisega(RegexNode node) {
	if (node instanceof Alternation) {
		// see tipp tähistab valikut
		Alternation altNode = (Alternation)node;
		teeMidagi(altNode.getLeft());
		teeMidagi(altNode.getRight());
	} else if (node instanceof Repetition) {
		...
	}
	...
}

Combine

Alamülesandena soovitame realiseerida meetodi combine, mis võtab kaks sõnede hulka ja tagastab uue sõnede hulga, mis sisaldab kõiki esimese ja teise hulga sõnede kombinatsioone, nii et esimese hulga sõne on konkateneeritud teise hulga sõnega. Näide pseudokoodis:

	RegexAnalyzer.combine({"kala", "äri"},  {"mees", "naine", ""}) 

peaks tagastama

	{"kalamees", "kalanaine", "kala", "ärimees", "ärinaine", "äri"}.

NB! Antud ülesande testid on kõik avalikud, aga kontrolltöö ajal võib avalike testide hulk olla piiratud ning lünklik.

  • 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