ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. •...
Transcript of ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. •...
![Page 1: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/1.jpg)
ANTLR kontrolltöölVesal Vojdani
(TÜ Arvutiteaduse Instituut)
![Page 2: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/2.jpg)
Kontrolltöö
1. Käsitsi parsimine
2. AST klasside disain (nagu kodutöös)
3. Grammatika disain
![Page 3: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/3.jpg)
Grammatika disainPraktikumis jälle eksamiülesannete näited
![Page 4: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/4.jpg)
ANTLR• ANTLR on parseri (ja lekseri) generaator.
• Sisendiks on Expr.g4
• Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java ja ExprLexer.java, jne.
• Selleks ei pea midagi uut installeerima, aga peab nüüd tõsisemalt gradle’it kasutama!
![Page 5: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/5.jpg)
Gradle
• Oma muudatuste järel peab uuesti java klasse looma!
• Üks võimalus on teste ainult käivitada gradle “test” kaudu.
• Teine variant on testida otse moodle’is.
• Kolmas variant on luua oma run konfiguratsioon.
![Page 6: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/6.jpg)
ANTLR pluginOtsige oma IDE plugin repodes ANTLR plugin
![Page 7: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/7.jpg)
Plugina kasutamineAvan repos Expr.g4 grammatika.
![Page 8: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/8.jpg)
Plugina kasutamineLähme redaktoris expr reegli juurde ja valime
menüüst “Test Rule expr”
![Page 9: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/9.jpg)
Plugina kasutamineIlmub plugina vaade “ANTLR Preview”
![Page 10: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/10.jpg)
Plugina kasutamineSeal saab katsetada näiteks sisendiga “x+y*z”
![Page 11: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/11.jpg)
Plugina kasutamineSeal saab katsetada näiteks sisendiga “x+y*z”
AST meid praegu ei huvita, aga prioriteedid
on õiged! (reeglite järjekord)
![Page 12: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/12.jpg)
Proovige kodus• Avalikus repos on 09-antlr projekt.
• Vaadake, et oskate oma IDEs gradle kaudu teste käivitada ja saate tulemusest aru.
• Üritage ka gradle plug-in paigaldada.
• Praktikumis peame kõik tehnilisi probleeme ära lahendada!
![Page 13: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/13.jpg)
ANTLR ülesanne on lihtne• Üldiselt ei ole eksamil
grammatika disain raskusi tekitanud.
• NB! Meid huvitab ainult keelde kuuluvus.
• Grammatika võib olla mitmene, nagu selles näites.
• Peamised probleemid algavad kehvast lekserist!
grammar Expr;
init: expr; expr: expr '+' expr | expr '-' expr | Ident | Int ;Ident: ('a'..'z'|'A'..'Z')+ ;Int: ('0'..'9')+;WS: [ \t\r\n]+ -> skip;
![Page 14: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/14.jpg)
Lekseri käitumine• Lekseri reeglid käituvad
erinevalt!
• “aaaaaa” ei kuulu keelde, sest lekseemid on “aaaa/aa”
• “bbbbbb” aga kuulub keelde, sest lekseemiks on ainult “b” ja kõik muu on grammatika.
• Kui midagi ei tööta, siis esimesena tuleks mõelda lekseemide peale.
init: test1 | test2; test1: (KOLM|NELI)*;test2: (kolm|neli)*;KOLM: 'a' 'a' 'a'; NELI: 'a' 'a' 'a' 'a'; kolm: 'b' 'b' 'b'; neli: 'b' 'b' 'b' 'b';
![Page 15: ANTLR kontrolltööl - Kursused · ANTLR • ANTLR on parseri (ja lekseri) generaator. • Sisendiks on Expr.g4 • Väljundiks on gen kataloogis java failid muuhulgas ExprParser.java](https://reader031.fdocuments.net/reader031/viewer/2022020715/5ad75ca97f8b9a3e578c2a7b/html5/thumbnails/15.jpg)
Kokkuvõtte
• Meie peamine küsimus eksamil on kas teie grammatika võtab sõna vastu või mitte.
• Te ei pruugi alati tähele panna, kui ANTLR plugin annab veateade. Testid on olulised!
• Oluline on meeles pidada, kuidas lekser töötab (viienda loengu slaidid).