Regulárne výrazy

Ciele
  1. Zopakovať si regulárne výrazy.
  2. Zopakovať si teóriu odvodenia konečno-stavových automatov na základe regulárnych výrazov.
  3. Precvičiť si odvodenie DKA na základe zadaného regulárneho výrazu.
  4. Naučiť sa definovať regulárny výraz, ktorý definuje množinu postupností znakov akceptovateľných konečno-stavovým akceptorom.
  5. Oboznámiť sa s teóriou prekladačov a prvou fázou prekladu: lexikálnou analýzou.
  6. 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
  1. Zopakujte si teóriu regulárnych výrazov.
    Poznámka: Regulárne výrazy sa môžu zapisovať rôznymi spôsobmi. V tabuľke je v druhom stĺpci uvedený zjednodušený zápis, ktorý sa používa na tomto predmete. V treťom stĺpci je uvedený zápis, s ktorým sa najčastejšie môžete stretnúť v existujúcich implementáciách regulárnych výrazov. Väčšina zápisov regulárnych výrazov tiež ponúka viaceré skrátené zápisy pre celé skupiny znakov.
    Regulárny výraz Zjednodušený zápis (používaný
    na tomto predmete)
    Zápis bežný v implementáciách
    zoskupenie (postupnosť) (xy) (xy)
    alternatíva (x alebo y) x|y x|y
    tranzitívny uzáver (0 alebo viac krát) {x} (x)*
    opakovanie (1 alebo viac krát) x{x} (x)+
    voliteľnosť (0 alebo 1 krát) [x] (x)?
    Poznámka: Postupnosť má vyššiu prioritu ako alternatíva, preto pozor napr. na prípady podobné tomuto:
    
    a | b {c} = a | (b {c})
    
    Najvyššiu prioritu majú zátvorky, preto ich používajte aby ste zabránili nejednoznačnosti:
    
    (a | b) {c}
    
  2. Regulárne výrazy je možné zobraziť aj graficky pomocou prechodových diagramov. Princíp zostrojenia takéhoto diagramu je znázornený na obrázku.
    Obr.: : Princíp zostrojenia prechodového diagramu pre regulárny výraz
    Úloha: Zostrojte prechodové diagramy pre regulárne výrazy z predchádzajúcich úloh.
  3. 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.
  4. 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
  5. 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.

    Obr.: : Rôzne formy vety medzi fázami práce jazykového procesora
  6. 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
  1. Zdrojový kód lexikálneho analyzátora
  2. 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:
    1. Stiahnite a nainštalujte DevC++ so 64bit MinGW.
    2. 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
  1. 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.
comments powered by Disqus