Bezkontextové gramatiky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května / 49

Podobné dokumenty
Automaty a gramatiky(bi-aag) Motivace. 1. Základní pojmy. 2 domácí úkoly po 6 bodech 3 testy za bodů celkem 40 bodů

/1: Teoretická informatika(ti) přednáška 4

Jednoznačné a nejednoznačné gramatiky

Formální jazyky a gramatiky Teorie programovacích jazyků

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

Automaty a gramatiky

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/39

Turingovy stroje. Teoretická informatika Tomáš Foltýnek

doplněk, zřetězení, Kleeneho operaci a reverzi. Ukážeme ještě další operace s jazyky, na které je

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

/01: Teoretická informatika(ti) přednáška 5

Programovací jazyk Pascal

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 2. března / 32

Výpočetní modely pro rozpoznávání bezkontextových jazyků zásobníkové automaty LL(k) a LR(k) analyzátory

2 Formální jazyky a gramatiky

Bezkontextové jazyky 2/3. Bezkontextové jazyky 2 p.1/27

Implementace LL(1) překladů

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Kapitola 6. LL gramatiky. 6.1 Definice LL(k) gramatik. Definice 6.3. Necht G = (N, Σ, P, S) je CFG, k 1 je celé číslo.

Vztah jazyků Chomskeho hierarchie a jazyků TS

Regulární výrazy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 14. března / 20

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Čísla značí použité pravidlo, šipka směr postupu Analýza shora. Analýza zdola A 2 B 3 B * C 2 C ( A ) 1 a A + B. A Derivace zleva:

Vlastnosti Derivační strom Metody Metoda shora dolů Metoda zdola nahoru Pomocné množiny. Syntaktická analýza. Metody a nástroje syntaktické analýzy

Formální jazyky. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 21. března / 50

Formální jazyky a automaty Petr Šimeček

Z. Sawa (VŠB-TUO) Teoretická informatika 5. listopadu / 43

Západočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP

Překladač sestrojující k regulárnímu výrazu ekvivalentní konečný automat Připomeňme si jednoznačnou gramatiku G pro jazyk RV({a, b})

AUTOMATY A GRAMATIKY. Pavel Surynek. Kontextové uzávěrové vlastnosti Turingův stroj Rekurzivně spočetné jazyky Kódování, enumerace

Poslední aktualizace: 14. října 2011

Konstruktory překladačů

Programovací jazyky, syntaxe, sémantika, zpsoby popisu

Z. Sawa (VŠB-TUO) Teoretická informatika 11. prosince / 63

Lexikální analýza. Rozhraní lexikálního analyzátoru. Miroslav Beneš Dušan Kolář. M. Beneš, D. Kolář: Lexikální analýza 1. Lexikální analýza 2

Lexikální analýza. Miroslav Beneš Dušan Kolář

Cvičení 1. Úvod do teoretické informatiky(2014/2015) cvičení 1 1

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Algoritmizace prostorových úloh

Regulární výrazy. Definice Množina regulárních výrazů nad abecedou Σ, označovaná RE(Σ), je definována induktivně takto:

Rozhodnutelné a nerozhodnutelné problémy. M. Kot, Z. Sawa (VŠB-TU Ostrava) Úvod do teoretické informatiky 24. dubna / 49

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY SYNTAKTICKÁ ANALÝZA ZALOŽENÁ NA MULTIGENEROVÁNÍ PARSING BASED ON MULTIGENERATION

Bezkontextové jazyky. Bezkontextové jazyky 1 p.1/31

Úvod do programovacích jazyků (Java)

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

GENEROVÁNI KÓDU jazyk Mila

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Návrh algoritmů pro sémantické akce při výstavbě interpretu metodou rekurzivního sestupu

Pro každé formule α, β, γ, δ platí: Pro každé formule α, β, γ platí: Poznámka: Platí právě tehdy, když je tautologie.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Naproti tomu gramatika je vlastně soupis pravidel, jak

Konečný automat. Jan Kybic.

Teoretická informatika - Úkol č.1

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Množinu všech slov nad abecedou Σ značíme Σ * Množinu všech neprázdných slov Σ + Jazyk nad abecedou Σ je libovolná množina slov nad Σ

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Základy teoretické informatiky Formální jazyky a automaty

Syntaxí řízený překlad

Strukturální rozpoznávání

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Na rozšiřující přednášce minulý týden jsme se věnovali zejména. algoritmu, který k zadanému konečnému automatu sestrojí ekvivalentní regulární výraz

UČEBNÍ TEXTY VYSOKÝCH ŠKOL. Prof. RNDr. Milan Češka, CSc. Gramatiky a jazyky

Teorie množin. Čekají nás základní množinové operace kartézské součiny, relace zobrazení, operace. Teoretické základy informatiky.

Uplatnění metod na zvolený jazyk

Teoretická informatika

Vyhledávání v textu. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Semestrální práce z předmětu Teorie programovacích jazyků

Algoritmizace prostorových úloh

Basic256 - úvod do programování Příklady. ing. petr polách

Regulární výrazy. Filtry grep, sed a awk.

Fakulta informačních technologií. Teoretická informatika

Sémantika výrokové logiky. Alena Gollová Výroková logika 1/23

1.Charakterizujte křížový překladač 2.Objasněte pojem silikonový překladač 3.Co to jsou formátory textu? Uveďte příklad

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

Lexikální analýza Teorie programovacích jazyků

Bezkontextové gramatiky nad volnými grupami

PŘEVOD GRAMATIK DO NORMÁLNÍCH FOREM

Automaty a gramatiky. Uzávěrové vlastnosti v kostce R J BKJ DBKJ. Roman Barták, KTIML. Kvocienty s regulárním jazykem

Vlastnosti regulárních jazyků

4.2 Syntaxe predikátové logiky

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Západočeská univerzita FAKULTA APLIKOVANÝCH VĚD

AUTOMATY A GRAMATIKY

Úvod do programování. Lekce 1

Dynamické programování

Lexikální analýza (Obsah)

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

IB015 Neimperativní programování. Seznamy, Typy a Rekurze. Jiří Barnat Libor Škarvada

Generování vnitřní reprezentace programu

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Sudý počet jedniček: S 1 0S 1 1S 2 e S 2 1S 1 0S 2

Algoritmizace a programování

Algoritmizace a programování

Algoritmy a datové struktury

Transkript:

Bezkontextové gramatiky Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 1/ 49

Bezkontextové gramatiky Příklad: Chtěli bychom popsat jazyk aritmetických výrazů obsahující výrazy jako například: 175 (9+15) (((10-4)*((1+34)+2))/(3+(-37))) Pro jednoduchost předpokládejme: Výrazy jsou plně uzávorkované. Jedinéaritmetickéoperacejsou +, -, *, / aunární -. Hodnoty operandů jsou přirozená čísla zapsaná v desítkové soustavě zápis čísla je neprázdná posloupnost číslic. Abecedajazyka: Σ = {0,1,2,3,4,5,6,7,8,9,+,-,*,/,(,)} Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 2/ 49

Bezkontextové gramatiky Příklad(pokr.): Popis pomocí induktivní definice: Číslicejelibovolnýzeznaků0,1,2,3,4,5,6,7,8,9. Číslo je neprázdná posloupnost číslic, tj.: Pokudje αčíslice,tak αječíslo. Pokud αječísliceaβječíslo,takiαβječíslo. Výraz je libovolná posloupnost symbolů vytvořená podle následujících pravidel: Pokudje αčíslo,tak αjevýraz. Pokud αjevýraz,taki(-α)jevýraz. Pokud αaβjsouvýrazy,taki(α+β)jevýraz. Pokud αaβjsouvýrazy,taki(α-β)jevýraz. Pokud αaβjsouvýrazy,taki(α*β)jevýraz. Pokud αaβjsouvýrazy,taki(α/β)jevýraz. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 3/ 49

Bezkontextové gramatiky Příklad(pokr.): Způsob zápisu téže informace jako v předchozí induktivní definici pomocí bezkontextové gramatiky: Zavedeme následující pomocné symboly těmto symbolům se říká neterminály: D zastupuje libovolnou číslici C zastupuje libovolné číslo E zastupuje libovolný výraz D 0 D 1 D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 9 C D C DC E C E (-E) E (E+E) E (E-E) E (E*E) E (E/E) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 4/ 49

Bezkontextové gramatiky Příklad(pokr.): Stručnější způsob zápisu: D 0 1 2 3 4 5 6 7 8 9 C D DC E C (-E) (E+E) (E-E) (E*E) (E/E) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 5/ 49

Bezkontextové gramatiky Příklad: Jazyk, kde slova jsou(případně i prázdné) posloupnosti výrazů popsaných v předchozím příkladě, kde jednotlivé výrazy jsou odděleny čárkami(abecedu je třeba rozšířit o symbol, ): S T ε T E E,T D 0 1 2 3 4 5 6 7 8 9 C D DC E C (-E) (E+E) (E-E) (E*E) (E/E) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 6/ 49

Bezkontextové gramatiky Příklad: Příkazy nějakého programovacího jazyka(fragment gramatiky): S E; T if (E) S if (E) S else S while (E) S do S while (E); for (F;F;F) S return F; T { U } U ε SU F ε E E...... Poznámka: S příkaz T blokpříkazů U sekvence příkazů E výraz F výraz,kterýjemožnovynechat Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 7/ 49

Bezkontextové gramatiky Formálně je bezkontextová gramatika definována jako čtveřice kde: G = (Π,Σ,S,P) Π je konečná množina neterminálních symbolů(neterminálů) Σ je konečná množina terminálních symbolů(terminálů), přičemž Π Σ = S Πjepočátečníneterminál P Π (Π Σ) jekonečnámnožinapřepisovacíchpravidel Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 8/ 49

Bezkontextové gramatiky Poznámky: Pro označení neterminálních symbolů budeme používat velká písmena A,B,C,... Pro označení terminálních symbolů budeme používat malá písmena a, b,c,... nebočíslice0,1,2,... Prooznačenířetězcůz(Π Σ) budemepoužívatmalápísmenařecké abecedy α, β, γ,... Místo zápisu (A, α) budeme pro pravidla používat zápis A α A levástranapravidla α pravá strana pravidla Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 9/ 49

Bezkontextové gramatiky Příklad:GramatikaG = (Π,Σ,S,P),kde Π = {A,B,C} Σ = {a,b} S =A P obsahuje pravidla A abbb A AaA B ε B bca C AB C a C b Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 10/ 49

Bezkontextové gramatiky Poznámka: Pokud máme více pravidel se stejnou levou stranou, jako třeba A α 1 A α 2 A α 3 můžeme je stručněji zapsat jako A α 1 α 2 α 3 Například pravidla dříve uvedené gramatiky můžeme zapsat jako A abbb AaA B ε bca C AB a b Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 11/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb abbabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb abbabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb abbabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb abbabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Gramatiky slouží ke generování slov. Příklad:G = (Π,Σ,A,P),kde Π = {A,B,C}, Σ = {a,b}apobsahuje pravidla A abbb AaA B ε bca C AB a b Například slovo abbabb je možné v gramatice G vygenerovat následujícím způsobem: A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb abbabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 12/ 49

Bezkontextové gramatiky Nařetězcíchz(Π Σ) definujemerelaci (Π Σ) (Π Σ) takovou, že α α právěkdyž α = β 1 Aβ 2 a α = β 1 γβ 2 pronějaká β 1,β 2,γ (Π Σ) a A Π,kde (A γ) P. Příklad:Jestliže (B bca) P,pak acbba acbcaba Poznámka:Neformálněřečenozápis α α znamená,žezαjemožné jednímkrokemodvodit α,atotak,ževýskytnějakéhonetermináluavα nahradíme pravou stranou nějakého pravidla A γ, kde se A vyskytuje na levé straně. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 13/ 49

Bezkontextové gramatiky Nařetězcíchz(Π Σ) definujemerelaci (Π Σ) (Π Σ) takovou, že α α právěkdyž α = β 1 Aβ 2 a α = β 1 γβ 2 pronějaká β 1,β 2,γ (Π Σ) a A Π,kde (A γ) P. Příklad:Jestliže (B bca) P,pak acbba acbcaba Poznámka:Neformálněřečenozápis α α znamená,žezαjemožné jednímkrokemodvodit α,atotak,ževýskytnějakéhonetermináluavα nahradíme pravou stranou nějakého pravidla A γ, kde se A vyskytuje na levé straně. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 13/ 49

Bezkontextové gramatiky Derivacedélkynjeposloupnost β 0, β 1, β 2,, β n,kde β i (Π Σ) a kde β i 1 β i provšechna1 i n,cožmůžemestručnějizapsat β 0 β 1 β 2... β n 1 β n Skutečnost,žeprodané α,α (Π Σ) an Nexistujenějakáderivace β 0 β 1 β 2... β n 1 β n,kde α = β 0 a α = β n,zapisujeme α n α Skutečnost,že α n α pronějakén 0,zapisujeme α α Poznámka:Relace jereflexivnímatranzitivnímuzávěremrelace (tj. nejmenší reflexivní a tranzitivní relací obsahující relaci ). Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 14/ 49

Bezkontextové gramatiky Větnéformyjsouty α (Π Σ),prokteréplatí kde S je počáteční neterminál. S α Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 15/ 49

Bezkontextové gramatiky JazykL(G)generovanýgramatikouG = (Π,Σ,S,P)jemnožinavšech slov v abecedě Σ, která lze odvodit nějakou derivací z počátečního neterminálu S pomocí pravidel z P, tj. L(G) = {w Σ S w} Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 16/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk L = {a n b n n 0} Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 17/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk L = {a n b n n 0} GramatikaG = (Π,Σ,S,P),kde Π = {S}, Σ = {a,b}apobsahuje S ε asb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 17/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk L = {a n b n n 0} GramatikaG = (Π,Σ,S,P),kde Π = {S}, Σ = {a,b}apobsahuje S ε asb S ε S asb ab S asb aasbb aabb S asb aasbb aaasbbb aaabbb S asb aasbb aaasbbb aaaasbbbb aaaabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 17/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk tvořený všemi palindromy nad abecedou {a, b}, tj. L = {w {a,b} w =w R } Poznámka:w R označujetzv.zrcadlovýobrazslovaw,tj.slovow zapsané pozpátku. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 18/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk tvořený všemi palindromy nad abecedou {a, b}, tj. L = {w {a,b} w =w R } Poznámka:w R označujetzv.zrcadlovýobrazslovaw,tj.slovow zapsané pozpátku. Řešení: S ε a b asa bsb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 18/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk tvořený všemi palindromy nad abecedou {a, b}, tj. L = {w {a,b} w =w R } Poznámka:w R označujetzv.zrcadlovýobrazslovaw,tj.slovow zapsané pozpátku. Řešení: S ε a b asa bsb S asa absba abasaba abaaaba Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 18/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk L tvořený všemi dobře uzávorkovanými sekvencemi symbolů ( a ). Například(()())(()) L,ale)()) L. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 19/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk L tvořený všemi dobře uzávorkovanými sekvencemi symbolů ( a ). Například(()())(()) L,ale)()) L. Řešení: S ε (S) SS Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 19/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk L tvořený všemi dobře uzávorkovanými sekvencemi symbolů ( a ). Například(()())(()) L,ale)()) L. Řešení: S ε (S) SS S SS (S)S (S)(S) (SS)(S) ((S)S)(S) (()S)(S) (()(S))(S) (()())(S) (()())((S)) (()())(()) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 19/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk L tvořený všemi dobře vytvořenými aritmetickými výrazy, kde operandy jsou vždy tvaru a, akdejakooperátorymůžemepoužívatsymboly +a. Například (a+a) a+(a a) L. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 20/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk L tvořený všemi dobře vytvořenými aritmetickými výrazy, kde operandy jsou vždy tvaru a, akdejakooperátorymůžemepoužívatsymboly +a. Například (a+a) a+(a a) L. Řešení: E a E+E E E (E) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 20/ 49

Bezkontextové gramatiky Příklad: Chceme vytvořit gramatiku generující jazyk L tvořený všemi dobře vytvořenými aritmetickými výrazy, kde operandy jsou vždy tvaru a, akdejakooperátorymůžemepoužívatsymboly +a. Například (a+a) a+(a a) L. Řešení: E a E+E E E (E) E E +E E E +E (E) E +E (E +E) E +E (a+e) E +E (a+a) E +E (a+a) a+e (a+a) a+(e) (a+a) a+(e E) (a+a) a+(a E) (a+a) a+(a a) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 20/ 49

Derivační strom A abbb AaA B ε bca C AB a b Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A A abbb AaA B ε bca C AB a b A Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A A abbb AaA B ε bca C AB a b A Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b A abbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b A abbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b A abbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A A abbb abcabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A A abbb abcabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A A abbb abcabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A a B B b A abbb abcabb abcabbbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A a B B b A abbb abcabb abcabbbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A a B B b A abbb abcabb abcabbbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A A abbb AaA B ε bca C AB a b a B b C A a B B ε B b b A abbb abcabb abcabbbbb abcabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A A abbb AaA B ε bca C AB a b a B b C A a B B ε B b b A abbb abcabb abcabbbbb abcabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A A abbb AaA B ε bca C AB a b a B b C A a B B ε B b b A abbb abcabb abcabbbbb abcabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A A abbb AaA B ε bca C AB a b a B b C A b a B B ε B b b A abbb abcabb abcabbbbb abcabbbb abbabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A A abbb AaA B ε bca C AB a b a B b C A b a B B ε B b b A abbb abcabb abcabbbbb abcabbbb abbabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A A abbb AaA B ε bca C AB a b a B b C A b a B B ε B b b A abbb abcabb abcabbbbb abcabbbb abbabbbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A b a B B b ε ε A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A b a B B b ε ε A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A b a B B b ε ε A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A b a B B b ε ε ε A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb abbabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom A a B B b A abbb AaA B ε bca C AB a b b C A b a B B b ε ε ε A abbb abcabb abcabbbbb abcabbbb abbabbbb abbabbb abbabb Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 21/ 49

Derivační strom Každé derivaci odpovídá nějaký derivační strom: Vrcholy stromu jsou ohodnoceny terminály a neterminály. Kořen stromu je ohodnocen počátečním neterminálem. Listy stromu jsou ohodnoceny terminály nebo symboly ε. Ostatní vrcholy stromu jsou ohodnoceny neterminály. Pokud je vrchol ohodnocen neterminálem A, pak jeho potomci jsou ohodnoceni symboly pravé strany nějakého přepisovacího pravidla A α. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 22/ 49

Levá a pravá derivace E E+E E E (E) a Levá derivace je derivace, ve které v každém kroku nahrazujeme vždy nejlevější neterminál. E E +E E E +E a E +E a a+e a a+a Pravá derivace je derivace, ve které v každém kroku nahrazujeme vždy nejpravější neterminál. E E +E E +a E E +a E a+a a a+a Derivace však nemusí být ani levá ani pravá: E E +E E E +E E a+e E a+a a a+a Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 23/ 49

Levá a pravá derivace Jednomu derivačnímu stromu může odpovídat více různých derivací. Každému derivačnímu stromu odpovídá právě jedna levá a právě jedna pravá derivace. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 24/ 49

Ekvivalence gramatik GramatikyG 1 ag 2 jsouekvivalentní,jestližegenerujítentýžjazyk,tj. jestližel(g 1 ) =L(G 2 ). Poznámka: Problém ekvivalence bezkontextových gramatik je algoritmicky nerozhodnutelný. Dá se dokázat, že není možné vytvořit algoritmus, který by pro libovolné dvě bezkontextové gramatiky rozhodl, zda jsou ekvivalentní či ne. Dokonce je algoritmicky nerozhodnutelný i problém, zda gramatika generujejazyk Σ. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 25/ 49

Nejednoznačné gramatiky Gramatika G je nejednoznačná, jestliže existuje nějaké slovo w L(G), kterému přísluší dva různé derivační stromy, resp. dvě různé levé či dvě různé pravé derivace. Příklad: E E +E E E +E a E +E a a+e a a+a E E E E E +E a E +E a a+e a a+a E E E + E E E E E a a E + E a a a a Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 26/ 49

Nejednoznačné gramatiky Někdy je možné nejednoznačnou gramatiku nahradit gramatikou, která generuje tentýž jazyk, ale není nejednoznačná. Příklad: Gramatiku E E+E E E (E) a můžeme nahradit ekvivalentní gramatikou E T T+E T F F T F a (E) Poznámka: Pokud se nejednoznačná gramatika žádnou ekvivalentní jednoznačnou gramatikou nahradit nedá, říkáme, že je podstatně nejednoznačná. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 27/ 49

Bezkontextové jazyky Definice Jazyk L je bezkontextový, jestliže existuje bezkontextová gramatika G taková,žel =L(G). Třída bezkontextových jazyků je uzavřená vůči: zřetězení sjednocení iteraci Třída bezkontextových jazyků však není uzavřená vůči: doplňku průniku Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 28/ 49

Bezkontextové jazyky MámedánygramatikyG 1 = (Π 1,Σ,S 1,P 1 )ag 2 = (Π 2,Σ,S 2,P 2 ), přičemžmůžemepředpokládat,že Π 1 Π 2 = as Π 1 Π 2. GramatikaGtaková,žeL(G) =L(G 1 )L(G 2 ): G = (Π 1 Π 2 {S}, Σ,S,P 1 P 2 {S S 1 S 2 }) GramatikaGtaková,žeL(G) =L(G 1 ) L(G 2 ): G = (Π 1 Π 2 {S}, Σ,S,P 1 P 2 {S S 1,S S 2 }) GramatikaGtaková,žeL(G) =L(G 1 ) : G = (Π 1 {S}, Σ,S,P 1 {S ε,s S 1 S}) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 29/ 49

Lexikální a syntaktická analýza příklad Příklad: Chtěli bychom rozpoznávat jazyk aritmetických výrazů obsahující výrazy jako například: 34 x+1 -x * 2 + 128 * (y - z / 3) Ve výrazech se mohou vyskytovat číselné konstanty posloupnosti číslic0,1,...,9. Ve výrazech se mohou vyskytovat jména proměnných posloupnosti tvořené písmeny, číslicemi a znakem, které nezačínají číslicí. Výrazy mohou obsahovat základní aritmetické operace +, -, *, / aunární -. Jemožnépoužívatzávorky ( a ) aběžnouprioritu aritmetických operací. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 30/ 49

Lexikální a syntaktická analýza příklad Vstup: posloupnost znaků(např. řetězec, textový soubor, apod.) Výstup: abstraktní syntaktický strom reprezentující strukturu daného výrazu nebo informace o syntaktické chybě ve výrazu Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 31/ 49

Lexikální a syntaktická analýza příklad Vytváření abstraktního syntaktického stromu: Výčtový typ reprezentující binární aritmetické operace: enumbinop {Add,Sub,Mul,Div } Výčtový typ reprezentující unární aritmetické operace: enumunop {Unminus } Funkce pro vytváření různých typů vrcholů abstraktního syntaktického stromu: mk-var(ident) vytvoření listu reprezentujícího proměnnou mk-num(num) vytvoření listu reprezentujícího číselnou konstantu mk-unary(op, e) vytvoření vrcholu s jedním potomkem e, na který je aplikována unární operace op(typu Un op) mk-binary(op, e1, e2) vytvoření vrcholu se dvěma potomky e1 ae2,nakteréjeaplikovánabinárníoperaceop(typubinop) Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 32/ 49

Lexikální analýza Výčtový typ Token kind reprezentující různé druhy tokenů: T EOF konec vstupu T Ident identifikátor T Number číselná konstanta TLParen ( TRParen ) TPlus + TMinus - TStar * TSlash / Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 33/ 49

Lexikální analýza Proměnná c: naposledy načtený znak(resp. speciální hodnota eof reprezentující, že byl dosažen konec vstupu): nazačátkusedoproměnnécnačteprvníznakzevstupu funkce next-char() vrací následující znak ze vstupu Některé pomocné funkce: error() vypíše informaci o syntaktické chybě a ukončí načítání výrazu is-ident-start-char(c) testuje, zda c je znak, kterým může začínat identifikátor is-ident-normal-char(c) testuje, zda c je znak, který se může vyskytovat v identifikátoru(jinde než na začátku) is-digit(c) testuje, zda je c číslice Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 34/ 49

Lexikální analýza Některé další pomocné funkce: create-ident(s) vytváří identifikátor z daného řetězce s create-number(s) vytváří číslo z daného řetězce s Pomocné proměnné: last-ident naposledy načtený identifikátor last-num naposledy načtená číselná konstanta Funkce next-token() hlavní část lexikálního analyzátoru, vrací následující token ze vstupu Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 35/ 49

1 next-token(): 2 begin 3 whilec {, \t }do 4 c :=next-char(); 5 end 6 ifc == eof then 7 return T EOF 8 else 9 switchcdo 10 case ( :do c :=next-char();returntlparen 11 case ) :do c :=next-char();returntrparen 12 case + :do c :=next-char();returntplus 13 case :do c :=next-char();returntminus 14 case * :do c :=next-char();returntstar 15 case / :do c :=next-char();returntslash 16 otherwise do 17 if is-ident-start-char(c) then 18 return scan-ident() 19 else if is-digit(c) then 20 return scan-number() 21 else error() 22 end 23 end 24 end 25 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 36/ 49

Lexikální analýza 1 scan-ident(): 2 begin 3 s :=c 4 c :=next-char() 5 while is-ident-normal-char(c) do 6 s :=s c 7 c :=next-char() 8 end 9 last-ident := create-ident(s) 10 return T Ident 11 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 37/ 49

Lexikální analýza 1 scan-number(): 2 begin 3 s :=c 4 c :=next-char() 5 while is-digit(c) do 6 s :=s c 7 c :=next-char() 8 end 9 last-num := create-number(s) 10 return T Number 11 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 38/ 49

Syntaktická analýza Proměnnát: naposledy načtený token Pomocná funkce: init-scanner(): inicialuje lexikální analyzátor načtedoproměnnécprvníznakzevstupu Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 39/ 49

Syntaktická analýza Bezkontextová gramatika pro daný jazyk: S E eof E TG G ε ATG A + - T FU U ε MFU M * / F -F (E) ident num Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 40/ 49

Syntaktická analýza Jednou z často používaných metod syntaktické analýzy je tzv. rekurzivní sestup: Každému neterminálu odpovídá jedna funkce funkce odpovídající neterminálu A implementuje všechna pravidla s neterminálem A na levé straně. Na základě následujícího tokenu se vybírá v rámci dané funkce mezi jednotlivými pravidly. Instrukce v těle funkce odpovídají zpracování pravých stran jednotlivých pravidel: výskyt neterminálu B zavolá se funkce odpovídající neterminálu B výskyt terminálu a zkontroluje se, že následující token odpovídá terminálu a, pokud odpovídá, načte se další token, pokud neodpovídá, ohlásí se chyba Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 41/ 49

Syntaktická analýza S E eof 1 Parse(): 2 begin 3 init-scanner() 4 t := next-token() 5 e :=Parse-E() 6 ift ==TEOFthen returne 7 else error() 8 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 42/ 49

E TG 1 Parse-E(): 2 begin 3 e1 := Parse-T() 4 return Parse-G(e1) 5 end G ε ATG 1 Parse-G(e1): 2 begin 3 ift {TPlus,TMinus}then 4 op := Parse-A() 5 e2 := Parse-T() 6 return Parse-G(mk-binary(op, e1, e2)) 7 else return e1 8 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 43/ 49

T FU 1 Parse-T(): 2 begin 3 e1 := Parse-F() 4 return Parse-U(e1) 5 end U ε MFU 1 Parse-U(e1): 2 begin 3 ift {TStar,TSlash}then 4 op := Parse-M() 5 e2 := Parse-F() 6 return parse-u(mk-binary(op, e1, e2)) 7 else return e1 8 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 44/ 49

Syntaktická analýza A + - 1 Parse-A(): 2 begin 3 ift ==TPlusthen 4 t := next-token() 5 return Add 6 elseift ==TMinusthen 7 t := next-token() 8 return Sub 9 else error() 10 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 45/ 49

Syntaktická analýza M * / 1 Parse-M(): 2 begin 3 ift ==TStarthen 4 t := next-token() 5 return Mul 6 elseift ==TSlashthen 7 t := next-token() 8 return Div 9 else error() 10 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 46/ 49

F -F (E) ident num 1 Parse-F(): 2 begin 3 switchtdo 4 casetminus:do 5 t := next-token() 6 e :=Parse-F() 7 return mk-unary(un minus, e) 8 casetlparen:do 9 t := next-token() 10 e :=Parse-E() 11 ift ==TRParenthen 12 t := next-token() 13 return e 14 else error() 15 casetident:do 16 e := mk-var(last-ident) 17 t := next-token() 18 return e 19 case T Number: do 20 e := mk-num(last-num) 21 t := next-token() 22 return e 23 otherwise do error() 24 end 25 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 47/ 49

Syntaktická analýza Pokud funkce končí rekurzivním voláním sebe sama, jako třeba funkce Parse-G(), je možné nahradit tuto rekurzi iterací. Funkce Parse-E() a Parse-G() je možné spojit do jediné funkce. Podobně ve funkci Parse-U() je možné nahradit rekurzi iterací a funkce Parse-T() a Parse-U() spojit do jediné funkce. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 48/ 49

1 Parse-E(): 2 begin 3 e1 := Parse-T() 4 whilet {TPlus,TMinus}do 5 op := Parse-A() 6 e2 := Parse-T() 7 e1 := mk-binary(op, e1, e2) 8 end 9 return e1 10 end 1 Parse-T(): 2 begin 3 e1 := Parse-F() 4 whilet {TStar,TSlash}do 5 op := Parse-M() 6 e2 := Parse-F() 7 e1 := mk-binary(op, e1, e2) 8 end 9 return e1 10 end Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 6. května 2018 49/ 49