Ciele
- Zopakovať si regulárne výrazy.
- Zopakovať si teóriu odvodenia konečno-stavových automatov na základe regulárnych výrazov.
- Precvičiť si odvodenie DKA na základe zadaného regulárneho výrazu.
- Naučiť sa definovať regulárny výraz, ktorý definuje množinu postupností znakov akceptovateľných konečno-stavovým akceptorom.
- Oboznámiť sa s teóriou prekladačov a prvou fázou prekladu: lexikálnou analýzou.
- Zvládnuť upraviť kód lexikálneho analyzátora pre podporu vlastných symbolov.
Úvod
-
Úlohou dnešného cvičenia je zopakovať si teóriu vytvárania regulárnych výrazov, precvičiť si ich vytváranie na základe slovnej špecifikácie a taktiež si teoreticky aj prakticky zopakovať vytváranie konečno-stavových automatov na základe zadaného regulárneho výrazu pomocou metódy vytvárania prechodových grafov. V druhej polovici cvičenia sa oboznámite s teóriou prekladačov a s prvou fázou prekladu - lexikálnou analýzou. Na základe získaných znalostí zvládnete upraviť kód lexikálneho analyzátora pre podporu vlastných symbolov.
Postup
-
Zopakujte si teóriu regulárnych výrazov.Poznámka: Postupnosť má vyššiu prioritu ako alternatíva, preto pozor napr. na prípady podobné tomuto:
Najvyššiu prioritu majú zátvorky, preto ich používajte aby ste zabránili nejednoznačnosti:a | b {c} = a | (b {c})
(a | b) {c}
-
Konečno-stavové automaty sa bežne v teórii informatiky vytvárajú prostredníctvom vytvárania prechodových tabuliek (ako je tomu v zbierke v kapitole 3.2). Takto vytvorené automaty sú nedeterministické. Nedeterministické automaty sú také, kde pri niektorom vstupe x je definovaná prechodová funkcia nie do jediného možného stavu y, ale do množiny možných stavov Y{y1, y2, ... , yn}. Na vytvorenie deterministického automatu sa využíva metóda nazývaná determinizácia.
Na tomto predmete sa však využíva iná metóda, vytváranie prechodových grafov, ktorá je uvedená v animovanej prezentácii. Táto metóda má tú výhodu, že je pomocou nej možné vytvoriť rovno deterministický konečno-stavový automat a nie je potrebná ďalšia determinizácia. Je ju však možné použiť len vtedy, ak množinu vstupných reťazcov pre KSA je možné definovať prostredníctvom regulárnych výrazov. -
Precvičte si vytváranie deterministického konečno-stavového akceptora na základe zadaného regulárneho výrazu s využitím metódy vytvárania prechodových grafov na nasledujúcich príkladoch:Úloha: Vytvorte prechodový diagram regulárneho výrazu a prechodový graf. Následne vytvorený prechodový graf prekreslite na DKA.
Regulárny výraz:a[a]{b}b
Úloha: Vytvorte prechodový diagram regulárneho výrazu a prechodový graf. Následne vytvorený prechodový graf prekreslite na DKA.
Regulárny výraz:[c]{ab}c
Úloha: Vytvorte prechodový diagram regulárneho výrazu a prechodový graf. Následne vytvorený prechodový graf prekreslite na DKA.
Regulárny výraz:{b}[c]ba
Úloha: Vytvorte prechodový diagram regulárneho výrazu a prechodový graf. Následne vytvorený prechodový graf prekreslite na DKA.
Regulárny výraz:a{ab}a[ab]b
-
Cieľom predmetu Formálne jazyky je vytvorenie prekladača z jazyka aritmetických výrazov do jazyka inštrukcií virtuálneho stroja Computron.
Prvou fázou prekladu je lexikálna analýza, ktorá v postupnosti znakov rozpoznáva symboly jazyka (lexikálne jednotky, tokens). Zároveň vynecháva biele znaky (medzera, tabelátor, nový riadok) a komentáre.
-
Preštudujte si kód realizujúci jednoduchý lexikálny analyzátor, spustite ho a otestujte rôzne príklady.Úloha: Doplňte implementáciu rozpoznania celočíselných konštant v lexikálnom analyzátore.
Zdroje
- Zdrojový kód lexikálneho analyzátora
- Organizácia prednášok a cvičení z predmetu FJaP, inštrukcie pre inštaláciu podpory pre jazyk C/C++ pre rôzne vývojové prostredia (Visual Studio, Netbeans) https://moodle.fei.tuke.sk/pluginfile.php/22054/mod_resource/content/3/FJ_Cvicenia.pdf.
Poznámka: Návod na inštaláciu prostredí pre 64-bitové systémy:
- Stiahnite a nainštalujte DevC++ so 64bit MinGW.
- Alebo pre NetBeans:
- Stiahnite a nainštalujte NetBeans.
- Stiahnite a nainštalujte DevC++ so 64bit MinGW.
- Nalinkujte adresu MinGW64\bin (pre Windows 8 napr. napr. C:\Program Files (x86)\Dev-Cpp\MinGW64\bin) do premennej prostredia PATH.
- Stiahnite MSYS a rozbaľte ho do adresara MinGW64. Nalinkujte adresu MinGW64\mingw\bin do premennej prostredia PATH.
- Otvorte NetBeans a v menu vyberte Tools→Options→C/C++→Build Tools→Add... a do Base Directory zadajte adresu k adresáru MinGW64\bin. Cestu k chýbajúcemu make.exe zadajte MinGW64\mingw\bin\make.exe. Výsledok by mal vyzerať takto. Uložte nastavenia a reštartujte NetBeans.
- Pre zobrazenie externej konzoly kliknite pravým tlačidlom myši na projekt a vyberte Properties. V časti Run nakonfigurujte nastavenia podľa tohto obrázka.
- Na otestovanie vytvorte nový projekt C/C++ a spustite.
Doplňujúce úlohy
Úloha: Prejdite si príklady na vytváranie regulárnych výrazov v
zbierke od č. 1.13
Úloha: Prerátajte si príklady na vytváranie DKA v
zbierke od č. 3.1 - precvičte si ich pomocou metódy vytvárania prechodových diagramov.
Úloha: Precvičiť znalosti regulárnych výrazov (v ich bežnejšom zápise) môžete aj pomocou
krížoviek. Skúste si niektoré regulárne výrazy z krížoviek prepísať do zápisu používaného na tomto cvičení.
Doplňujúce zdroje
- Debuggex -- vizualizačný nástroj znázornujúci proces rozpoznávania textu na základe regulárnych výrazov znázornený na ich prechodových diagramoch.
Poznámka: Tento nástroj používa alternatívny zápis regulárnych výrazov opísaný v komentári v kroku 2. Tento zápis sa nebude používať na cvičeniach ani na skúške, zíde sa však pri implementácii programov.
na tomto predmete)
(xy)
(xy)
x|y
x|y
{x}
(x)*
x{x}
(x)+
[x]
(x)?