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

Preview:

Citation preview

JFLAP GrammatikadVesal Vojdani

(TÜ Arvutiteaduse Instituut)

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!

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.

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

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

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.

ParsimineMeile tuttav avaldiste grammatika, aga…

ainult ühe terminalsümboliga ‘x’.

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

lihtsam kasutada “brute force parse”…

Sisendsõnex+x+x

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

sammhaaval sõne tuletada.

E → E+EE → E+E

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

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

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

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

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

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

Teine parsepuuProovime ise juhtida parsimist, et kätte saada

teistsugune parsepuu.

Sisestame sama sõnex+x+x

Start!Nüüd saame ise valida reegli!

Start!Valime ära ja vajutame step!

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

Valime vasakpoolset(sest JFLAP oli parempoolne…)

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

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

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

Valmis!

Recommended