ANTLR
ANTLR on parseri generaator, mida saab käivitada nii käsurealt (nagu teeb gradle) või oma IDE plugina abil. Eksamil saab oma lahenduse 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 ANTLR ja genereerib vajalike faile. Kui teete git pull, siis refresh'ist ainuüksi ei piisa! Seega, lugege hoolega järgmine juhend.
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äskudes 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 uut 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.ExprGrammarTest.java
.
- Lisame sinna faili mõned testid ja proovime uuesti käivitada.
- Nüüd proovime teha väike muudatus grammatikas
week8.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 õiges kohas ja automaatselt genereeriks grammatika 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 akt2018.)