27
Grammatikate elustamine JFLAPiga Vesal Vojdani (TÜ Arvutiteaduse Instituut)

Grammatikate elustamine JFLAPiga - ut€¦ · Grammatika versus keel • S → aS S → Sb S → c • Keel: a*cb*. • Selle keele jaoks ikkagi leidub parem-lineaarne grammatika

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

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