Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014
Stany równoważne 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. Stany równoważne można zastąpić pojedynczym stanem zachowującym się jak oba stany p i q. 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, Σ, δ, q 0, 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 A B F B G C C A C D C G E H F F C G G G E H G C
Przykład minimalizacji II A B C D E F G H A B x C x x D x x x E x x x F x x x x G x x x x x x H x x x x x x
Przykład minimalizacji III a b (A,E) (B,H) (D,F) (B,H) G C C (A,E) C (D,F) C G G G (A,E)
Przekształcenie DAS na wyrażenie regularne I Konstrukcja R k ij : 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 Dla i do j (i j): 2.1 Jeżeli nie istnieje takie przejście, to Rij 0 =. 2.2 Jeżeli istnieje dokładnie jeden taki symbol a to Rij 0 = a. 2.3 Jeżeli znaleziono więcej symboli - a 1, a 2,..., a n to Rij 0 = a 1 + a 2 +... + a n. 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 R k 1 ij. 3.2 Ścieżka przechodzi przez stan k co najmniej raz. Wtedy można ją rozbić na kilka części: Ś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 regularne R k 1 ik (R k 1 ) R k 1 kk kj
Przekształcenie DAS na wyrażenie regularne III 3.3 Łącząc oba przypadki uzyskuje się ostatecznie: R k ij = R k 1 ij + R k 1 ik (R k 1 kk ) R k 1 kj ) 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 R n ij
Przykład I
Przykład II R 0 ij R11 0 ɛ + 1 R12 0 0 R21 0 R22 0 ɛ + 0 + 1
Przykład III R 1 ij R11 1 (ɛ + 1) + (ɛ + 1)(ɛ + 1) (ɛ + 1) 1 R12 1 0 + (ɛ + 1)(ɛ + 1) 0 1 0 R21 1 + (ɛ + 1) (ɛ + 1) R22 1 (ɛ + 0 + 1) + (ɛ + 1) 0 ɛ + 0 + 1
Przykład IV Rij 2 R11 2 1 + 1 0(ɛ + 0 + 1) 1 R12 2 1 0 + 1 0(ɛ + 0 + 1) (ɛ + 0 + 1) 1 0(0 + 1) R21 2 + (ɛ + 0 + 1)(ɛ + 0 + 1) R22 2 (ɛ + 0 + 1) + (ɛ + 0 + 1)(ɛ + 0 + 1) (ɛ + 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 całego automatu przyjmie postać R 2 12 tj. 1 0(0 + 1).
Zastosowania wyrażeń regularnych 1. Wyszukiwanie wzorców tekstowych 2. Analiza leksykalna
Wyrażenia regularne w systemie UNIX I Symbol. (kropki) oznacza dowolny znak (dopasowanie do dowolnego znaku). 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.: [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: \d - cyfra, \D - wszystko co nie jest cyfrą, \w - znak będący częścią słowa (zazwyczaj to samo co [a-z,a-z,0-9]), \W - znak niebędący częścią słowa, \s - biały znak (spacja, tabulacja, znak nowego wiersza itp.) \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: Operator oznacza to samo co +. Operator? oznacza zero lub więcej wystąpień - R? to samo co ɛ + R. Operator + oznacza jedno lub więcej powtórzeń - R+ to samo co RR Operator {n} oznacza dokładnie n wystąpień - R{3} to to samo co RRR.
Analiza leksykalna 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. Wyjściowa sekwencja tokenów jest później podstawą do fazy analizy składniowej. W czasie analizy leksykalnej mogą być usuwane znaki nie mające wpływu na dalsze przetwarzanie kodu programu (np. białe znaki, komentarze). Analizator leksykalny często jest odpowiedzialny za zbieranie informacji do tablicy symboli.
Analiza leksykalna
Token, leksem, symbol leksykalny 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ę. 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). 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 Wzorzec Leksem Wartość KWD INT int int IDENT [ a-za-z][ a-za-z0-9]* f f ( ( ( KWD INT int IDENT [ a-za-z][ a-za-z0-9]* x x ) ) ) { { { KWD RETURN return return IDENT [ a-za-z][ a-za-z0-9]* 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