Upload
dohanh
View
236
Download
5
Embed Size (px)
Citation preview
ANTLR kontrolltöölVesal Vojdani
(TÜ Arvutiteaduse Instituut)
Kontrolltöö
1. Käsitsi parsimine
2. AST klasside disain (nagu kodutöös)
3. Grammatika disain
Grammatika disainPraktikumis jälle eksamiülesannete näited
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!
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.
ANTLR pluginOtsige oma IDE plugin repodes ANTLR plugin
Plugina kasutamineAvan repos Expr.g4 grammatika.
Plugina kasutamineLähme redaktoris expr reegli juurde ja valime
menüüst “Test Rule expr”
Plugina kasutamineIlmub plugina vaade “ANTLR Preview”
Plugina kasutamineSeal saab katsetada näiteks sisendiga “x+y*z”
Plugina kasutamineSeal saab katsetada näiteks sisendiga “x+y*z”
AST meid praegu ei huvita, aga prioriteedid
on õiged! (reeglite järjekord)
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!
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;
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';
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).