czerwony kapelusz
Transkrypt
czerwony kapelusz
Wykład 5, str. 1 Maszyny ze stosem DEFINICJA: Maszyna ze stosem M — M • skończony zbiór Q stanów, • skończony zbiór Σ liter wejściowych, • skończony zbiór Γ symboli stosowych, • Z ∈ Γ — wyróżniony symbol stosowy oznaczający dno stosu, • częściowa funkcja przejścia δ : Q × (Σ ∪ {λ}) × Γ → ˜ Q × Γ∗ (częściowa — t.zn. może być nieokreślona dla niektórych argumentów), • wyróżniony stan początkowy q0 ∈ Q, • wyróżniony zbiór stanów końcowych (akceptujących) F ⊆ Q. DEFINICJA: Język akceptowany przez M — n o M ∗ def ′ ′ ∗ L(M ) = w ∈ Σ δ hq0 , w, Zi = hq , λ, λi dla pewnego q ∈ F gdzie δ ∗ jest uogólnioną funkcją przejścia. Wykład 5, str. 2 Maszyny ze stosem a języki bezkontekstowe TWIERDZENIE: M Język akceptowany przez dowolną maszynę stosową jest bezkontekstowy. Uwaga: Nie każdy język bezkontekstowy jest akceptowany przez jakąś maszynę stosową; ale każdy jest akceptowany przez jakąś niedeterministyczną maszynę stosową (nierozpatrywane na tym wykładzie). „Prawie” każdy „praktyczny” język bezkontekstowy jest akceptowany przez jakąś maszynę stosową, co umożliwia kompilowanie programów komputerowych. Wykład 5, str. 3 Gramatyki, języki, maszyny gramatyki języki akceptory prawoliniowe bezkontekstowe l l regularne bezkontekstowe l ↑ automaty maszyny ze stosem Wykład 5, str. 4 Notacja beznawiasowa Łukasiewicza Notacja Łukasiewicza (w świecie nazywana Polish): Wyrażenia (arytmetyczne, logiczne, itp.) można zapisywać bez nawiasów w postaci operator arg1 arg2 . . . argn Odwrotna notacja Łukasiewicza (Reverse Polish): arg1 arg2 . . . argn operator stosowana w informatyce. Jan Łukasiewicz 1878–1956 Wykład 5, str. 5 Notacja beznawiasowa Łukasiewicza Przykład: M + 2 5 Zwykła notacja (infix): 2 + 5 Notacja Łukasiewicza (prefix): + 2 5 Odwrotna notacja polska (postfix): 2 5 + Wykład 5, str. 6 Notacja beznawiasowa Łukasiewicza Przykład: M ∗ + 2 + 5 1 ∗ 7 3 Zwykła notacja (infix): (2 + 5) ∗ (7 ∗ 3 + 1) Notacja Łukasiewicza (prefix): ∗ + 2 5 + ∗ 7 3 1 Odwrotna notacja polska (postfix): 2 5 + 7 3 ∗ 1 + ∗ Wykład 5, str. 7 Notacja beznawiasowa Łukasiewicza Przykład: M ⇒ ⇒ p ⇒ q ¬ ¬ q p Zwykła notacja (infix): (p ⇒ q) ⇒ (¬q ⇒ ¬p) Notacja Łukasiewicza (prefix): ⇒ ⇒ p q ⇒ ¬q ¬p Odwrotna notacja polska (postfix): p q ⇒ q ¬ p ¬ ⇒ ⇒ Wykład 5, str. 8 Obliczanie wyrażeń w ONŁ Założenie: każdy operator op „wie” ile potrzebuje argumentów: A(op). Np. A(+) = 2 , A(¬) = 1 , A(if(...) ... else ...) = 3 . Algorytm: do { jeśli na wejściu jest liczba ℓ, to przełóż ją z wejścia na stos; jeśli na wejściu jest operator op, to { zdejmij ze stosu A(op) liczb, zastosuj do nich operację op, jej wynik włóż na stos; } } while (jest jeszcze coś na wejściu); 25 + 73 ∗ 1 + ∗ stos wejście Wykład 5, str. 9 Działania na językach 1. Suma: n def L|M = o w w ∈ L lub w ∈ M 2. Złączenie: def LM = o uv u ∈ L i v ∈ M n 3. Iteracja (domknięcie Kleenego): L∗ def = n o u1 u2 . . . un u1 , u2 , . . . , un ∈ L i n 0 Wykład 5, str. 10 Działania na językach Przykład: (suma) L | M def = w w ∈ L lub w ∈ M M {nie, chce, mi} | {się, uczyć} = {nie, chce, mi, się, uczyć} {λ, a, a2 , a3 , . . .} | {λ, b, b2 , b3 , . . .} = {λ, a, b, a2 , b2 , a3 , b3 , . . .} Wykład 5, str. 11 Działania na językach L | M def = Przykład: (suma) M L: w w ∈ L lub w ∈ M hliczbai ::= hcyfrai hliczbai hcyfrai M: hidenti ::= hliterai hidenti hliterai hidenti hcyfrai L | M: hliczbo-identi ::= hliczbai hidenti hliczbai ::= hcyfrai hliczbai hcyfrai hidenti ::= hliterai hidenti hliterai hidenti hcyfrai Wykład 5, str. 12 Działania na językach L | M def = Przykład: (suma) M w w ∈ L lub w ∈ M ✲ ✲ automat dla L automat dla M au dl tom a M at ✲ at m to L au dla automat dla L | M Wykład 5, str. 13 Działania na językach Przykład: (złączenie) M L M def = uv u ∈ L i v ∈ M {czerwony, zielony} {dom, kapelusz, rower} = ( ) czerwony dom, czerwony kapelusz, czerwony rower, zielony dom, zielony kapelusz, zielony rower {λ, a, a2 , a3 , . . .} {λ, b, b2 , b3 , . . .} = {λ, a, b, aa, ab, bb, aaa, aab, abb, bbb, . . .} Wykład 5, str. 14 Działania na językach Przykład: (złączenie) M L: L M def = uv u ∈ L i v ∈ M hwyrazi ::= hliterai hwyrazi hliterai M: hliczbai ::= hcyfrai hliczbai hcyfrai L M: hwyrazo-liczbai ::= hwyrazi hliczbai hwyrazi ::= hliterai hwyrazi hliterai hliczbai ::= hcyfrai hliczbai hcyfrai Wykład 5, str. 15 Działania na językach Przykład: (złączenie) M L M def = uv u ∈ L i v ∈ M ✲ automat dla L automat dla M ... ✲ automat dla L M : automat dla L ... automat automat dla M dla M ... automat dla M Wykład 5, str. 16 Działania na językach Własności działań: • Łączność: K | (L | M ) = (K | L) | M K(LM ) = (KL)M • Przemienność: L|M =M |L Uwaga: złączenie nie jest przemienne! • Elementy neutralne: M |∅=M ΛM = M Λ = M ∅ def = {} — język pusty Λ def = {λ} — język zawierający tylko słowo puste • Rozdzielność: K(L | M ) = KL | KM (L | M )K = LK | M K