antlr kontrolltööl - kursused · antlr • antlr on parseri (ja lekseri) generaator. •...

Post on 18-Apr-2018

236 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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).

top related