Matematyczne Podstawy Informatyki

Transkrypt

Matematyczne Podstawy Informatyki
Matematyczne Podstawy Informatyki
dr inż. Andrzej Grosser
Instytut Informatyki Teoretycznej i Stosowanej
Politechnika Częstochowska
Rok akademicki 2013/2014
Stany równoważne
I
Stany p i q są równoważne, jeżeli dla wszystkich łańcuchów
wejściowych w, δ̂(p, w ) jest stanem akceptującym wtedy i
tylko wtedy, gdy δ̂(q, w ) jest stanem akceptującym.
I
Stany równoważne można zastąpić pojedynczym stanem
zachowującym się jak oba stany p i q.
I
Jeżeli dwa stany nie są równoważne to nazywa się je
rozróżnialnymi.
Odnajdywanie stanów równoważnych
1. Podstawa: Jeżeli p jest stanem akceptującym, a q
nieakceptującym, to para p,q jest rozróżnialna.
2. Krok indukcyjny: Jeżeli p i q są stanami takimi, że dla
pewnego symbolu a uzyskuje się stany r = δ(p, a) i
s = δ(q, a) o których już wiadomo, że są rozróżnialne, to
stany p i q są również parą stanów rozróżnialnych.
Minimalizacja DAS I
Minimalizacja DAS - A = (Q, Σ, δ, q0 , F )
1. Znaleźć wszystkie grupy równoważnych stanów algorytmem
opisanym wcześniej.
2. Podzielić zbiór stanów Q na bloki wzajemnie równoważnych
stanów podaną wcześniej metodą.
3. Skonstruować równoważny automat B o minimalnej liczbie
stanów, używając jako jego stanów uzyskanych w poprzednim
kroku bloków.
3.1 Stanem początkowym B jest blok zawierający stan początkowy
A.
3.2 Zbiorem stanów akceptujących B jest zbiór bloków
zawierających stany akceptujące A.
Przykład minimalizacji I
→A
B
∗C
D
E
F
G
H
a
B
G
A
C
H
C
G
G
b
F
C
C
G
F
G
E
C
Przykład minimalizacji II
A
A
B
C
D
E
F
G
H
x
x
x
x
x
x
B
x
x
x
x
x
C
x
x
x
x
x
D
E
F
G
x
x
x
x
x
x
x
x
x
H
Przykład minimalizacji III
→(A,E)
(B,H)
∗C
(D,F)
G
a
(B,H)
G
(A,E)
C
G
b
(D,F)
C
C
G
(A,E)
Przekształcenie DAS na wyrażenie regularne I
Konstrukcja Rijk :
1. Podstawa indukcji to k = 0. W takie sytuacji możliwe są
jedynie:
1.1 Łuk prowadzący ze stanu i do wierzchołka j.
1.2 Ścieżka o długości zero, składająca się z jednego wierzchołka.
2. Jest następnie badany DAS i są wyszukiwane symbole
wejściowe przy których istnieje przejście ze stanu
I
Dla i do j (i 6= j):
2.1 Jeżeli nie istnieje takie przejście, to Rij0 = ∅.
2.2 Jeżeli istnieje dokładnie jeden taki symbol a to Rij0 = a.
2.3 Jeżeli znaleziono więcej symboli - a1 , a2 , ..., an to
Rij0 = a1 + a2 + ... + an .
I
Dla i = j:
2.1 Dopuszczalnymi ścieżkami są ścieżki o długości 0 i wszystkie
pętle z i do siebie.
2.2 Ścieżka o długości zero jest reprezentowana przez wyrażenie
regularne , dlatego dodaje się do przypadków opisanych
wcześniej .
Przekształcenie DAS na wyrażenie regularne II
3. Krok indukcyjny - założenie istnieje ścieżka ze stanu i do
stanu j, która nie przechodzi przez stan wyższy od k. Należy
rozważyć tutaj dwa przypadki:
3.1 Ścieżka nie przechodzi wcale przez stan k, wtedy etykieta tej
ścieżki należy do stanu Rijk−1 .
3.2 Ścieżka przechodzi przez stan k co najmniej raz. Wtedy można
ją rozbić na kilka części:
I
I
I
I
Ścieżka przechodząca ze stanu i do stanu k (bez
wcześniejszego przechodzenia przez k).
Ścieżki przechodzące ze stanu k do stanu k (bez
wielokrotnego przechodzenia przez k).
Ścieżka przechodzą ze stanu k do stanu j (bez dalszego
przechodzenia przez k).
Zbiór etykiet reprezentuje dla tego rodzaju ścieżki wyrażenie
k−1 ∗ k−1
regularne Rikk−1 (Rkk
) Rkj
Przekształcenie DAS na wyrażenie regularne III
3.3 Łącząc oba przypadki uzyskuje się ostatecznie:
k−1 ∗ k−1
Rijk = Rijk−1 + Rikk−1 (Rkk
) Rkj )
3.4 Wyrażenie konstruje się w porządku rosnących indeksów
górnych.
3.5 Postępując zgodnie z opisanym schematem uzyskuje się w
końcu Rijn
Przykład I
Przykład II
Rij0
0
R11
0
R12
0
R21
0
R22
+1
0
∅
+0+1
Przykład III
Rij1
1
R11
1
R12
1
R21
1
R22
( + 1) + ( + 1)( + 1)∗ ( + 1)
0 + ( + 1)( + 1)∗ 0
∅ + ∅( + 1)∗ ( + 1)
( + 0 + 1) + ∅( + 1)∗ 0
1∗
1∗ 0
∅
+0+1
Przykład IV
Rij2
2
R11
2
R12
2
R21
2
R22
1∗ + 1∗ 0( + 0 + 1)∗ ∅
1∗ 0 + 1∗ 0( + 0 + 1)∗ ( + 0 + 1)
∅ + ( + 0 + 1)( + 0 + 1)∗ ∅
( + 0 + 1) + ( + 0 + 1)( + 0 + 1)∗ ( + 0 + 1)
1∗
1∗ 0(0 + 1)∗
∅
(0 + 1)∗
Przykład V
1. Biorąc pod uwagę sumę teoriomnogościową wszystkich
wyrażeń, w których pierwszy stan jest stanem początkowym, a
drugi stanem akceptującym uzyskuje się wyrażenie regularne
odpowiadające automatowi.
2. W przykładzie stanem początkowym jest stan 1 a
akceptującym stan 2, więc wyrażenie regularne przyjmie dla
2 tj. 1∗ 0(0 + 1)∗ .
całego automatu przyjmie postać R12
Zastosowania wyrażeń regularnych
1. Wyszukiwanie wzorców tekstowych
2. Analiza leksykalna
Wyrażenia regularne w systemie UNIX I
I
Symbol . (kropki) oznacza dowolny znak (dopasowanie do
dowolnego znaku).
I
Ciąg [a1a2...an] oznacza a1 + a2 + ... + an.
W nawiasach kwadratowym można też podać zakres znaków
w postaci x − y oznacza to, że będą wyszukiwane znaki w
zakresie od x do y w ciągu kodów ASCII. Np.:
I
I
I
I
[A-Z] - dowolna wielka litera,
[a-z] - dowolna mała litera,
[0-9] - dowolna cyfra.
Wyrażenia regularne w systemie UNIX II
Niektóre narzędzia dodają następujące skróty:
I
\d - cyfra,
I
\D - wszystko co nie jest cyfrą,
I
\w - znak będący częścią słowa (zazwyczaj to samo co
[a-z,A-Z,0-9]),
I
\W - znak niebędący częścią słowa,
I
\s - biały znak (spacja, tabulacja, znak nowego wiersza itp.)
I
\S - wszystko co nie jest białym znakiem.
Wyrażenia regularne w systemie UNIX III
Dla wygody zapisującego wyrażenia regularne wprowadzono także:
I
Operator | oznacza to samo co +.
I
Operator ? oznacza zero lub więcej wystąpień - R? to samo co
+ R.
I
Operator + oznacza jedno lub więcej powtórzeń - R+ to samo
co RR ∗
I
Operator {n} oznacza dokładnie n wystąpień - R{3} to to
samo co RRR.
Analiza leksykalna
I
Analiza leksykalna (analiza liniowa, skanowanie) - proces, w
którym strumień znaków, składający się na program wejściowy
jest wczytywany i grupowany w symbole leksykalne (tokeny) ciągi znaków, które wspólnie mają pewne znaczenie.
I
Wyjściowa sekwencja tokenów jest później podstawą do fazy
analizy składniowej.
I
W czasie analizy leksykalnej mogą być usuwane znaki nie
mające wpływu na dalsze przetwarzanie kodu programu (np.
białe znaki, komentarze).
I
Analizator leksykalny często jest odpowiedzialny za zbieranie
informacji do tablicy symboli.
Analiza leksykalna
Token, leksem, symbol leksykalny
I
Token - para składająca się z nazwy tokenu i opcjonalnej
wartości tego tokenu. Nazwa tokenu jest symbolem
reprezentującym z jaki rodzaj jednostki leksykalnej rozpoznano
- słowo kluczowe, sekwencja znaków reprezentująca nazwę.
I
Wzorzec opisuje jaką formę może przyjąć strumień znaków,
żeby zostały zidentyfikowane jako token (np. słowa kluczowe
są opisywane jako ciąg znaków, bardziej skomplikowane
elementy mogą być opisywane przez wyrażenia regularne).
I
Lexem - sekwencja znaków w programie źródłowym, jaką
można dopasować do wzorca tokenu, która jest identyfikowana
przez analizator leksykalny jako instancja tego tokenu.
Analiza leksykalna
int f(int x) {return x;}
Token
KWD INT
IDENT
’(’
KWD INT
IDENT
’)’
’{’
KWD RETURN
IDENT
’;’
’}’
Wzorzec
int
[ a-zA-Z][ a-zA-Z0-9]*
(
[ a-zA-Z][ a-zA-Z0-9]*
)
{
return
[ a-zA-Z][ a-zA-Z0-9]*
;
}
Leksem
int
f
(
int
x
)
{
return
x
;
}
Wartość
f
x
x
Literatura
Do napisania materiałów wykorzystano:
1. M. Sipser “Wprowadzenie do teorii obliczeń”, WNT 2009
2. J.E. Hopcroft, R. Motwani, J.D. Ullman “Wprowadzenie do
teorii, automatów, języków i obliczeń”, PWN 2005
3. Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
”Compilers: Principles, Techniques & Tools” Person Addison
Wesley, 2007

Podobne dokumenty