45
JFLAP Grammatikad Vesal Vojdani (TÜ Arvutiteaduse Instituut)

JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

  • Upload
    dodat

  • View
    224

  • Download
    0

Embed Size (px)

Citation preview

Page 1: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

JFLAP GrammatikadVesal Vojdani

(TÜ Arvutiteaduse Instituut)

Page 2: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

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…

See osa on optional… Skip!

Page 3: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Automaat!(Me ju teame, et iga regulaaravaldis → Automaat)

Page 4: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Võite ise katsetada!Idee: igale olekule vastab mitte-terminaal sümbol

Page 5: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

LõppolekS → ε

Page 6: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

LõppolekB → ε

Page 7: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

ÜleminekudS → aA

Page 8: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

ÜleminekudA → bA

Page 9: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

ÜleminekudA → bB

Page 10: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

ÜleminekudB → aB

Page 11: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

EpsilonigaB → A

Page 12: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Valmis!(nüüd tagasi…)

Page 13: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

There and back again!Teeme väikese muudatuse, et oleks kõik kaetud.

Page 14: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Teisendame automaadiksGrammatika on endiselt parem-lineaarne.

Page 15: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Igale mitte-terminalile olekLisame uue oleku lõpp-oleku jaoks.

Page 16: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Sama põhimõtteS → aA

Page 17: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Sama põhimõtteA → bB

Page 18: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Sama põhimõtteA → bA

Page 19: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Sama põhimõtteB → aB

Page 20: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Sama põhimõtteA → B

Page 21: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Ainult terminaligaS → ε

Page 22: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Ainult terminaligaB → b

Page 23: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Regulaarne keel• Iga regulaaravaldis saab teisendada parem-

lineaarseks grammatikaks.

• Iga (parem-)lineaarne grammatika saab teisendada regulaaravaldiseks.

• (Kõik käbi läbi automaadi)

• Ka mitte-lineaarne grammatika võib defineerida regulaarse keele…

Page 24: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Grammatika versus keel• S → aS

S → SbS → c

• Keel: a*cb*.

• Selle keele jaoks ikkagi leidub parem-lineaarne grammatika.

• Me olime lihtsalt ise rumalad!

• S → aSbS → c

• Keel: ancbn (n > 0).

• Selle keele jaoks ei leidu parem-lineaarne grammatika.

• Saab tõestada, et keelele vastav automaat ei leidu.

Page 25: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

ParsimineMeile tuttav avaldiste grammatika, aga…

ainult ühe terminalsümboliga ‘x’.

Page 26: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

JõumeetodKui me parsimisest veel midagi ei tea, siis on kõige

lihtsam kasutada “brute force parse”…

Page 27: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Sisendsõnex+x+x

Page 28: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Start!Derivatsioon on leitud ja nüüd JFLAP laseb meil

sammhaaval sõne tuletada.

Page 29: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

E → E+EE → E+E

Page 30: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

E → E+EE → E+E → E+E+E

Page 31: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

E → xE → E+E → E+E+E → x+E+E

Page 32: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

E → xE → E+E → E+E+E → x+E+E → x+x+E

Page 33: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

E → xE → E+E → E+E+E → x+E+E → x+x+E → x+x+x

Page 34: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Vaatame derivatsiooniE → E+E → E+E+E → x+E+E → x+x+E → x+x+x

Page 35: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Vaatame derivatsiooniE → E+E → E+E+E → x+E+E → x+x+E → x+x+x

Page 36: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Teine parsepuuProovime ise juhtida parsimist, et kätte saada

teistsugune parsepuu.

Page 37: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Sisestame sama sõnex+x+x

Page 38: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Start!Nüüd saame ise valida reegli!

Page 39: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Start!Valime ära ja vajutame step!

Page 40: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

E → E+ESiiamaani kõik tuttav, aga nüüd peab valima!

Page 41: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Valime vasakpoolset(sest JFLAP oli parempoolne…)

Page 42: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Tegime ära!Nüüd tahame E asendada x-iga.

Page 43: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

E → xNüüd peaks jälle valima, milline E asendada…

Page 44: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

E → xTeeme kõik korraga, sest siin ei ole ju vahet!

Page 45: JFLAP Grammatikad - courses.cs.ut.ee · There and back again! Teeme väikese muudatuse, et oleks kõik kaetud

Valmis!