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

Automata, Languages and Compilers 2019/20 spring

  • Üldinfo
  • Eksami näidised
  • Kava
    • 1. Soojendus
    • 2. Regulaaravaldised
    • 3. Olekumasinad
    • 4. Avaldise struktuur
    • 5. Grammatikad ja lekser
    • 6. Käsitsi parsimine
    • 7. ANTLRiga töötamine
    • 8. Interpretaator
    • 9. Kompilaator
  • Bitbucket
  • Moodle
  • Fleep!

Gradle harjutus

Gradle on võimas tööriist, millel on palju võimalusi. Meie jaoks lihtsustab ta eelkõige sõltuvuste (koodis kasutatavate väliste teekide) haldamist ning kindlustab, et teie oma lahenduste kirjutamisel ning juhendajad lahenduste kontrollimisel kasutaksid samasid teekide versioone. Lisaks on nii IntelliJ's kui Eclipse's olemas pluginad, mis lubavad teil ühe nupuvajutusega jooksutada teste vms.

Esmalt teeme ühe väga lihtsa näidisprojekti Gradle abil, milles näeme kui lihtsasti käib sõltuvuste haldus. Tahame kirjutada funktsiooni, mis teeks sõnes kõikide sõnade algustähed suureks ning ülejäänud väikseks (toimiks nagu Pythonist tuttav title() funktsioon). Lisaks soovime kirjutada automaattesti, mis meie funktsiooni kontrolliks.

  • Loodetavasti oled juba klooninud AKT repositooriumi, aga nüüd tõmbame endale täiesti tühja projekti siit: https://bitbucket.org/plas/gradle-demo.git. Seal on ainult kus Gradle Wrapperi failid, mida pannakse tihti gradle projektidele kaasa.
  • Nüüd võiks avada see käsurea shell, milles oled harjunud iga päev töötama...
  • Navigeeri gradle-demo kataloogi
  • Gradle ootab, et meie kood oleks sobiva struktuuriga kataloogis: mkdir src\main\java. (Kirjeldame Windowsi käsud ja edaspidi eeldame, et Linux/Mac kasutajad oskavad neid teisendada: mkdir -p src/main/java.)
  • Teeme ka kataloogi, kus Gradle ootab teste: mkdir src\test\java
  • Teeme nüüd Java faili, milles defineerime oma funktsiooni. Kuna aga meil on kiire ning ei soovi ise funktsionaalsust kirjutada, siis kasutame sellist teekide kogumit nagu apache commons, kus on meile vajalik funktsioon juba realiseeritud capitalizeFully.
  • src\main\java kataloogi tee fail GradleExample.java
import org.apache.commons.lang3.text.WordUtils;

public class GradleExample {
    // testis katsetamiseks triviaalne f-n
    public static boolean alwaysTrue() {
        return true;
    }

    // peale igat tühikut või sidekriipsu alustatakse suure tähega
    public static String title(String input) {
        return WordUtils.capitalizeFully(input, ' ', '-');
    }
}
  • Lisame ka testi, src\test\java kataloogi tee fail GradleExampleTest.java
import org.junit.Test;
import static org.junit.Assert.*;

public class GradleExampleTest {
    @Test public void testAlwaysTrue() {
        assertTrue("alwaysTrue should return 'true'", GradleExample.alwaysTrue());
    }

    @Test public void testTitle() {
        String input = "mai-liis maasikas";
        String expected = "Mai-Liis Maasikas";
        assertEquals(input, expected, GradleExample.title(input));
    }
}
  • Selleks, et saadud koodi kompileerida ning käivitada, peaksime nüüd laadima alla apache commons lang3 ning junit JAR failid. Ning kui soovime oma koodi jagada kellegagi, peaksime andma kaasa ka need päris suured teegid. Siinkohal tulebki appi Gradle, mille abil saame vajalikud failid endale automaatselt. Loome projekti kataloogi (gradle-demo) uue faili build.gradle, milles ütleme Gradle'le, mida me temalt soovime.
// java plugin, mida läheb meil alati vaja
apply plugin: 'java'

// kust Gradle peaks otsima vajalikke resursse
repositories {
    // enamasti piisab järgnevast kahest repost
    jcenter()
    mavenCentral()
}

// mida ning millal (mis taski juures) meil vaja on
dependencies {
    // kompileerimiseks on meil vaja commons-lang3 teeki
    compile 'org.apache.commons:commons-lang3:3.5'

    // testide jaoks on vaja junit teeki
    testCompile 'junit:junit:4.12'
}
  • Põhimõtteliselt ongi kõik olemas, et Gradle saaks projekti kompileerida ning teste käivitada. Pöördume tagasi käsureale ning projekti peakataloogis käivita gradlew tasks. Uuri, missuguseid võimalusi Gradle sulle pakub. Meie kasutame test taski: gradlew test. Kui kõik on siiani õnnestunud, siis peaksid saama teate BUILD SUCCESSFUL. (Tõenäoliselt nägid ka, et Gradle laadis alla mingeid faile - need olid siis puuduvad teegid).
  • Kui nüüd uurid projekti kataloogi, siis näed, et lisandud on build kataloog. Selles on kompileeritud Java .class failid, aga ka näiteks testide tulemused. Vaata: build\reports\tests\index.html.
  • Muuda nüüd GradleExampleTest.java faili nii, et mõni test põruks ning jooksuta gradlew test uuesti. Vaata, mis teate said. Vaata ka testide tulemusi.
  • Impordi projekt IntelliJ'sse. Esmalt veendu, et IntelliJ Gradle plugin on olemas - vaikimisi peaks kõigil olema, aga vaata File->Settings->Plugins. Seejärel File->New->Project from Existing Sources ning vali projekti kataloog, external model Gradle. Nüüd peaks olema sul IntelliJ's projekt lahti ning eraldi toolbar Gradle jaoks, kus taskid näha. Proovi muuta midagi testi failis ning jooksutada test taski.
  • 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