grammatikate elustamine jflapiga - ut€¦ · grammatika versus keel • s → as s → sb s → c...
TRANSCRIPT
-
Grammatikate elustamine JFLAPiga
Vesal Vojdani (TÜ Arvutiteaduse Instituut)
-
Otse Elust: Java Spechttps://docs.oracle.com/javase/specs/jls/se9/html/
jls-14.html#jls-14.9
https://docs.oracle.com/javase/specs/jls/se9/html/jls-14.html#jls-14.9https://docs.oracle.com/javase/specs/jls/se9/html/jls-14.html#jls-14.9
-
Kodutöö (2. nädalat)
1. Avaldise grammatika moodustamine AST klassidega tutvumine
2. Käsitsi parseri implementeerimine Vasakrekursiooni elimineerimine
Paljud lisatööd! (Need on just eksamiks
valmistamiseks olulised!)
-
JFLAP
• JFLAP võib meid aidata grammatikatest aru saada!
• Sellega tuleb lihtsalt ise mängida.
• Siin teen ainult väike demo…
-
Regex → Grammatika?
• Väidetavalt peaks siis saama iga regulaaravaldis ümber kirjutada grammatikaks?
• Võite proovida näiteks ε | a(b|ba*)*ba* grammatikana kirja panna?
• Üldiselt võib defineerida rekursiivne definitsioon nagu meie kodutöödes, aga saab lihtsamalt…
-
Automaat!(Me ju teame, et iga regulaaravaldis → Automaat)
-
Võite ise katsetada!Idee: igale olekule vastab mitte-terminaal sümbol
-
LõppolekS → ε
-
LõppolekB → ε
-
ÜleminekudS → aA
-
ÜleminekudA → bA
-
ÜleminekudA → bB
-
ÜleminekudB → aB
-
EpsilonigaB → A
-
Valmis!(nüüd tagasi…)
-
There and back again!Teeme väikese muudatuse, et oleks kõik kaetud.
-
Teisendame automaadiksGrammatika on endiselt parem-lineaarne.
-
Igale mitte-terminalile olekLisame uue oleku lõpp-oleku jaoks.
-
Sama põhimõtteS → aA
-
Sama põhimõtteA → bB
-
Sama põhimõtteA → bA
-
Sama põhimõtteB → aB
-
Sama põhimõtteA → B
-
Ainult terminaligaS → ε
-
Ainult terminaligaB → b
-
Regulaarne keel
• Iga regulaaravaldis saab teisendada parem-lineaarseks grammatikaks.
• Iga (parem-)lineaarne grammatika saab teisendada regulaaravaldiseks.
• Ka mitte-lineaarne grammatika võib defineerida regulaarse keele…
-
Grammatika versus keel• S → aS
S → Sb S → c
• Keel: a*cb*.
• Selle keele jaoks ikkagi leidub parem-lineaarne grammatika.
• Me olime lihtsalt ise rumalad!
• S → aSb S → c
• Keel: ancbn (n > 0).
• Selle keele jaoks ei leidu parem-lineaarne grammatika.
• Saab tõestada, et keelele vastav automaat ei leidu.