15
ANTLR kontrolltööl Vesal Vojdani (TÜ Arvutiteaduse Instituut)

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

  • Upload
    dohanh

  • View
    236

  • Download
    5

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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