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