ANTLR
ANTLR on parseri generaator, mida saab käivitada nii käsurealt (nagu teeb gradle) või oma IDE plugina abil. Eksamil saab oma lahendust ka Moodle'is testida, aga mugavam on, kui saab ise ka teste kirjutada ja enda masina peal käivitada.
- ANTLRiga töötamiseks võiks installeerida oma IDE-sse vastava plugina.
- Kodus testide rakendamisel on oluline gradle projekt. See käivitab ise ANTLRi ja genereerib vajalikud failid. Kui teete
git pull
, siis refresh'ist ainuüksi ei piisa! Seega, lugege hoolega järgmist juhendit.
Kui IDE hakkab kurtma, et ei leia üles klasse nagu AktkLexer, AktkParser ning muid -Lexer ja -Parser klasse, siis see on normaalne. ANTLR võtab oma sisendiks .g4 formaadis faili (näiteks Aktk.g4) ning selle põhjal genereerib Java lähtekoodi (näiteks AktkParser.java ja AktkLexer.java). Seda genereerimise protsessi saab välja kutsuda käsuga gradle generateGrammarSource
, kuid ta on ka automaatselt kaasatud käsus gradle build
.
Kuna IDE's otseselt testide käivitamine vaikimisi ei genereeri automaatselt uusi lekseri ja parseri lähtekoodifaile, siis kindlasti testige iga kord oma lahendust gradle build
käsuga või seadistage oma IDE vastavalt lehe lõpus olevale juhendile. Kui sulle tundub, et grammatika on korrektne kuid testid ei lähe läbi, siis veendu, et oled selle grammatika põhjal uue lähtekoodi genereerinud.
Käivitage testid (gradle build
) käsurealt või oma IDE gradle integratsiooni kaudu (IntelliJ IDEA's saab gradle käske näha kui avate View -> Tool Windows -> Gradle.
Järgmine katse näitab, kas käivitate teste õigesti. Proovime käivitada week8.demo.ExprGrammarTest.
- Lisame sinna faili mõned testid ja proovime uuesti käivitada.
- Nüüd proovime teha väikse muudatuse grammatikas src/main/antlr/week8/demo/Expr.g4, et testid läbi ei läheks.
- Proovige teste uuesti käivitada.
Kas õnnestus teha nii, et testid läbi ei läheks? Üks variant on gradle kaudu teste käivitada, aga saab ka natuke mugavamalt:
- Konfigureerida ANTLR plugin, et ta õigesse kohta ja automaatselt genereeriks lähtekoodi failid.
- IntelliJ all saab ka muuta run konfiguratsioon, et ta "Make" asemel käivitaks gradle task "testClasses". Selle kohta on ka olemas suurepärane screencast. (Seal peab projekti "09-antlr" asemel valima meie praegune akt2019.)