Języki formlne i utomty JFA Mrcin Kuic e-mil: kuic@mimuw.edu.pl 2006 Niniejsze mteriły powinny yć pierwszym źródłem informcji dotyczących przedmiotu Języki formlne i utomty (JFA). Czytelnikom, którzy oprócz lektury tych nottek, chcieliy sięgnąć do podręcznik, polecm w pierwszej kolejności książkę D. Kozen, Automt nd Computility. Jest on npisn przystępnie i zwier mnóstwo zdń, choć nie jest (jk dotąd) dostępn w języku polskim. W drugiej kolejności polecm książkę J. Hopcroft i J. Ullmn, Wprowdzenie do teorii utomtów, języków i oliczeń. Oprócz temtów wchodzących w zkres tego kursu możn w niej znleźć też wiele informcji n zwnsowne pokrewne temty. Pondto zostł on przetłumczon n język polski. Oie te książki nie zwierją informcji n temt genertorów nliztorów leksyklnych i skłdniowych. W pierwszej kolejności polecm tutj dokumentcję Flex i Bison. Dodtkowo, możn przeczytć odpowiednie rozdziły z książki A. Aho, R. Sethi i J. D. Ullmn, Kompiltory. Do kżdego wykłdu dołączono szereg zdń. W przypdku studiów internetowych, rozwiązni zdń z p. Prc domow nleży wykonywć w określonych terminch i zgłszć poprzez serwis edu. Pozostłe zdni mją chrkter uzupełnijący i są przeznczone do smodzielnego rozwiązywni. Mteriły te są również dostępne w formcie PS i PDF. Uwgi dotyczące niniejszych mteriłów proszę przesyłć n dres: kuic@mimuw.edu.pl. Litertur [HU] John E. Hopcroft, Rjeev Motwni, Jeffrey D. Ullmn Wprowdzenie do teorii utomtów, języków i oliczeń, PWN, 2005 r. [K] Dexter C. Kozen, Automt nd Computility, [ASU] A. V. Aho, R. Sethi, J. D. Ullmn, Kompiltory, WNT, 2002, 1
Podziękowni Niniejsze mteriły powstły n podstwie nottek do prowdzonych przeze mnie, n przestrzeni kilku lt, wykłdów z teorii języków i utomtów orz udowy kompiltorów. Chciłym gorąco podziękowć moim kolegom, którzy w tym czsie prowdzili ćwiczeni z tych przedmiotów, w szczególności: Łukszowi Krzeszczkowskiemu, Łukszowi Mśko, Mrcinowi Swickiemu i Tomkowi Wleniowi. Ich uwgi miły wpływ n postć prowdzonych zjęć, więc i również n te mteriły. W szczególności część zmieszczonych tu zdń pochodzi od nich. Szczególnie gorąco chciłym podziękowć Tomkowi Wleniowi z pomoc przy konwertowniu niniejszych mteriłów n formt html i przygotownie umieszczonych tu elementów multimedilnych. Mteriły te zostły oprcowne w PJWSTK w projekcie współfinnsownym ze środków EFS. 1 Sylus Niniejsze mteriły powstły pierwotnie z myślą o studich internetowych z Języków Formlnych i Automtów (JFA). Mją one również sotoswne n studich stcjonrnych, w rmch kursu z AUtomtów i Grmtyk (AUG). Poniżej zmieszczmy sylusy dl oydwu tych przedmiotów. 1.1 Języki Formlne i Automty (Studi internetowe) W rmch kursu przedstwine są klsy języków tworzące hierrchię Chomsky ego: języki regulrne, ezkontekstowe, kontekstowe i częściowo oliczlne (rekurencyjnie przeliczlne). Dodtkowo przedstwion jest kls języków oliczlnych. Dl kżdej z tych kls przedstwione są formlizmy służące do opisu języków: utomty skończone deterministyczne, niedeterministyczne i z ε-przejścimi, wyrżeni regulrne, utomty stosowe, grmtyki ezkontekstowe, grmtyki kontekstowe, mszyny Turing orz grmtyki ogólne (typu 0). Przedstwione są też fkty dotyczące przynleżności języków do poszczególnych kls, w tym: lemty o pompowniu dl języków regulrnych i ezkontekstowych. 1.1.1 Progrm wykłdów 1. Wprowdzenie, podstwowe pojęci. 2. Wyrżeni regulrne i wzorce. 2
3. Anliz leksykln i Flex/Lex. 4. Deterministyczne utomty skończone. 5. Niedeterministyczne utomty skończone. 6. Równowżność utomtów skończonych i wyrżeń regulrnych. 7. Lemt o pompowniu dl języków regulrnych. 8. Minimlizcj deterministycznych utomtów skończonych. 9. Języki i grmtyki ezkontekstowe. 10. Postć normln Chomsky ego i lgorytm Cocke-Younger -Ksmi. 11. Lemt o pompowniu dl języków ezkontekstowych. 12. Anliz skłdniow i Bison/Ycc. 13. Automty stosowe. 14. Mszyny Turing i oliczlność. 15. Języki oliczlne, częściowo oliczlne i nieoliczlne. 1.1.2 Kryteri zliczeń prce domowe (przez Internet), egzmin (w uczelni). Podstwą do wystwieni oceny z ćwiczeń ędą punkty zdoyte z prce domowe, z egzminu punkty zdoyte n egzminie. 1.1.3 Wymgne oprogrmownie Flex/Lex, Bison/Ycc, kompiltor C/C++. W przypdku Linuks (zlecny) są to: flex, ison, gcc, g++. W przypdku Windows są to: DJGPP (z gcc), pkiety flex i ison z GnuWin32. 3
1.1.4 Powiązni merytoryczne Nzw przedmiotu poprzedzjącego Mtemtyk dyskretn Progrmownie I i II Algorytmy i struktury dnych Wymgny mterił Podstwy teorii mnogości, ciągi, relcje i funkcje. Podstwy progrmowni, podstwowe typy dnych, progrmownie w C lu C++. Złożoność symptotyczn, podstwowe struktury dnych (stosy), progrmownie dynmiczne. 1.2 Automty i Grmtyki (Studi stcjonrne) Kurs oejmuje techniki nlizy leksyklnej i skłdniowej, wykorzystnie nrzędzi wspomgjącymi generownie nliztorów leksyklnych i skłdniowych (lex i ycc), orz niezędne podstwy z teorii języków formlnych i utomtów, n.t. języków regulrnych i ezkontekstowych. Przedstwione są również elementrne widomości z teorii oliczeń: mszyny Turing, klsy języków oliczlnych i częściowo oliczlnych. 1.2.1 Progrm wykłdów 1. Wprowdzenie, podstwowe pojęci. 2. Wyrżeni regulrne i wzorce. 3. Anliz leksykln i Flex/Lex. 4. Deterministyczne utomty skończone. 5. Niedeterministyczne utomty skończone. 6. Równowżność utomtów skończonych i wyrżeń regulrnych. 7. Języki i grmtyki ezkontekstowe. 8. Anliz skłdniow i Bison/Ycc. 9. Automty stosowe. 10. Anliz skłdniow zstępując i prsery LL(1). 11. Anliz skłdniow wstępując i prsery SLR(1). 12. Prsery knoniczne LR(1). 13. Mszyny Turing i oliczlność. 4
14. Języki oliczlne, częściowo oliczlne i nieoliczlne. 1.2.2 Progrm ćwiczeń 1. Opercje n słowch i językch. 2. Wyrżeni regulrne. 3. Flex. 4. Deterministyczne utomty skończone. 5. Niedeterministyczne utomty skończone i determinizcj. 6. Równowżność utomtów skończonych i wyrżeń regulrnych. 7. Grmtyki ezkontekstowe. 8. Grmtyki ezkontekstowe, c.d. 9. Automty stosowe. 10. Kolokwium. 11. Ycc 12. Prc nd progmmi zliczeniowymi. 13. Zlicznie progrmów. 1.2.3 Kryteri zliczeń Do zliczeni ćwiczeń konieczne jest: zliczenie kolokwium, zliczenie progrmu. Dorze zliczone ćwiczeni mogą (le nie muszą) skutkowć zwolnieniem z egzminu. W przypdku rku zwolnieni, egzmin jest oowiązkowy. 1.2.4 Wymgne oprogrmownie Flex/Lex, Bison/Ycc, kompiltor C/C++. W przypdku Linuks (zlecny) są to: flex, ison, gcc, g++. W przypdku Windows są to: DJGPP (z gcc), pkiety flex i ison z GnuWin32. 5
1.2.5 Powiązni merytoryczne Nzw przedmiotu poprzedzjącego Mtemtyk dyskretn Progrmownie I i II Algorytmy i struktury dnych Wymgny mterił Podstwy teorii mnogości, ciągi, relcje i funkcje. Podstwy progrmowni, podstwowe typy dnych, progrmownie w C lu C++. Złożoność symptotyczn, podstwowe struktury dnych (stosy), progrmownie dynmiczne. 1.2.6 Temty progrmów zliczeniowych Progrmy zliczeniowe muszą yć tworzone przy użyciu Lex i Ycc /Bison. Nie muszą to yć duże progrmy. Progrmy zliczeniowe mogą yć oprcowywne wyłącznie indywidulnie. Prce ziorowe są niedopuszczlne. Oto przykłdow list temtów progrmów zliczeniowych. Nie nleży jej trktowć jko listy temtów do wyoru, le rczej jko źródło inspircji. Klkultory i inne rytmetyczne: Wykonujący opercje n npisch. Dostępne opercje to: sklejnie, odwrcnie, wyłusknie pierwszego/osttniego słow, ocięcie pierwszego/osttniego słow, mksymlny prefikso-sufiks. Możliwość przypisywni wrtości zmiennym. Wzogcony o funkcje. Umożliwi definiownie funkcji (ez rekurencji), postci: function f (x,y) = <wyrzenie>; orz olicznie wyrżeń, w których mogą pojwić się zdefiniowne funkcje. Olicznie pochodnych wyrżeń zwierjcych jedną zmienną (x), opercje +,,, /, ˆ orz funkcje: ln, sin, cos,... Możliwość prcy w trych: dziesiętnym, inrnym i szesnstkowym. Ułmki (ze skrcniem) i potegownie. Operujący n liczch w zpisie rzymskim. Konwersj dt z reprezentcji słownej do liczowej. Konwersj kwot z reprezentcji słownej do liczowej. HTML, XML, CSS i inne języki zncznikowe: pretty-printer HTML HTML, pretty-printer XML HTML, 6
pretty-printer, który wczytuje wyrżenie rytmetyczne z nwismi i wypisuje je w postci drzew używjąc ASCII-rt, wlidtor HTML sprwdzjący czy wiersze w telce mją po tyle smo komórek, konwerter HTML HTML domykjący wszystkie niedomknięte tgi <li>, <td> i <tr>, wlidtor HTML sprwdzjący czy w dnym tgu podne tryuty mją różne nzwy, wlidtor CSS sprwdzjący czy w kżdej sekcji tryuty mją różne nzwy, konwerter CSS dopisujący wszystkie rkujące znki :, ; i }, nliztor HTML wyłuskujący strukturę tgów (ez tryutów i wyświetlnej treści) i łdnie ją wypisujący (w XML-u). Języki progrmowni: Inne: zmin instrukcji while/cse/for w C n skoki, dopisywnie do progrmu w Psclu/C/C++/Jvie po kżdym end-ie/nwisie zmykjącym } do czego się on odnosi, interpreter (podzioru) prostego język progrmowni, np. Logo, Brinfuck, wlidtor deklrcji kls w Delphi/Jvie sprwdz, czy kzd użyt kls zostł zdeklrown, pretty-printer dl wyrnego język progrmowni (np.: Pscl, C, C++, Jvy) tworzący wcięci i odpowiednie odstępy, dopisywnie przy kżdej funkcji/procedurze w wyrnym języku komentrz z listą używnych zmiennych i wywoływnych innych funkcji, wlidtor zpytń w SQL u uwzględnijący konstrukcje: select, from (join), where: (opercje logiczne, porównywnie tryutów, order y), wlidtor wyrnego język progrmowni (np. C) sprwdzjący, czy kżd funkcj jest zdefiniown tylko rz, orz czy kżd zdeklrown funkcj jest zdefiniown, konwerter wyrnego język progrmowni (np. Jv-script) nlizujący wszystkie definiowne w progrmie nzwy funkcji i zmiennych, i zmienijący je n jk njkrótsze identyfiktory, konwerter (podzioru) Python do PHP, konwerter język Brinfuck do Jvy lu C++, wlidtor sprwdzjący wyrne spekty poprwności progrmów w wyrnym języku progrmowni. 7
Konwerter RTF HTML. Konwerter MediWiki HTML. Dekodownie plików skompresownych z pomocą kodu Huffmn. Plik zwier opis drzew kodowni i zkodowną treść (trze wymyślić skłdnię). Progrm wczytuje tki plik i wypisuje jego zdekodowną postć. Interpreter wyrżeń regulrnych. 8
Wykłd 1. Wprowdzenie Celem niniejszego wykłdu jest: poznnie podstwowych środków opisu skłdni (wyrżeni regulrne, grmtyki ezkontekstowe), poznnie nrzędzi wspomgjących przetwrznie dnych o określonej skłdni (Lex, Ycc). zrozumienie podstwowych pojęć dotyczących oliczlności i odpowiedzenie soie n kilk podstwowych pytń jej dotyczących: Co to znczy, że dny prolem może zostć rozwiązny z pomocą progrmu komputerowego? Czy istnieją prolemy oliczeniowe, których nie możn rozwiązć z pomocą progrmu komputerowego? W jkim stopniu to co możemy oliczyć zleży od modelu oliczeń czy dostępnych konstrukcji progrmistycznych? Nie są to proste pytni. W trkcie kolejnych wykłdów ędziemy poznwć kolejne klsy języków tworzące tzw. hierrchię Chomsky ego. Hierrchi t jest owocem prc Nom Chomsky ego, lingwisty, który próowł sformlizowć pojęci grmtyki i język. Hierrchi t skłd się z czterech rodzjów grmtyk: 0. grmtyki ogólne, 1. grmtyki kontekstowe, 2. grmtyki ezkontekstowe, 3. grmtyki liniowe. W trkcie dń nd pojęciem oliczlności pojwiło się wiele modeli, o różnej sile wyrzu: 1. utomty skończone, wyrżeni regulrne (stł skończon pmięć), 2. utomty stosowe (stł skończon pmięć + nieogrniczony stos), 3. ez ogrniczeń: mszyny Turing, systemy Post, rchunek λ, i inne. 9
Niektóre z nich powstły n długo przed tym znim powstły komputery i informtyk. Okzło się, że modele te w zdziwijący sposó odpowidją kolejnym klsom w hierrchii Chomsky ego: grmtyki liniowe = utomty skończone = wyrżeni regulrne, grmtyki ezkontekstowe = utomty stosowe, grmtyki kontekstowe = liniowo ogrniczone mszyny Turing, grmtyki ogólne = mszyny Turing. Nie są to czysto teoretyczne formlizmy. Niektóre z nich mją wiele prktycznych zstosowń. Szczególny ncisk położymy n dw njwżniejsze z tych formlizmów: wyrżeni regulrne i grmtyki ezkontekstowe. W szczególności służą do specyfikowni nliztorów leksyklnych i skłdniowych typowych modułów pojwijących się wszędzie tm, gdzie progrm wczytuje dne o określonej skłdni. Poznmy też nrzędzi wspomgjące tworzenie tkich nliztorów genertory, które sme tworzą kod źródłowy nliztorów n podstwie ich specyfikcji. 1.1 Języki jko prolemy decyzyjne We wprowdzeniu wspomnieliśmy o oliczenich i językch. Gdy mówimy o oliczniu, to zwykle mmy n myśli oliczenie wrtości tkiej czy innej funkcji. Gdy zś mówimy o języku, to mmy n myśli (potencjlnie nieskończony) ziór npisów złożonych ze znków ustlonego (skończonego) lfetu. (Npisy tkie ędziemy nzywć słowmi.) Jk połączyć te dw pojęci? Def. 1. Prolem decyzyjny to funkcj, któr możliwym dnym wejściowym przyporządkowuje wrtości logiczne tk/nie. Inczej mówiąc prolem decyzyjny, to tki prolem, w którym szukny wynik to wrtość logiczn. N prolem decyzyjny możemy też ptrzeć jk n ziór dnych ziór tych dnych, dl których odpowiedź rzmi tk. I odwrotnie, n dowolny ziór dnych możemy ptrzeć jk n prolem decyzyjny czy dne nleżą do określonego zioru? Jk to jednk m się do języków? Jeśli interesuje ns tylko skłdni język ( nie jego semntyk, czyli znczenie), to kżdy język możemy przedstwić soie jko ziór (yć może nieskończony) słów. Tk więc kżdy język nie jest niczym więcej niż prolemem decyzyjnym określonym dl słów. Powyższe intuicje są przedstwione rdziej formlnie poniżej. W trkcie tego kursu ędziemy zjmowć się m.inn. tym, dl jkich języków (gdy spojrzymy n nie jk n prolemy decyzyjne) możn skonstruowć utomtyczne mechnizmy odpowidjące n pytnie, czy dne słowo nleży do język. 10
1.2 Podstwowe pojęci dotyczące słów Def. 2. Alfet to dowolny niepusty, skończony ziór. Elementy lfetu nzywmy znkmi. Alfet ędziemy zwykle oznczć przez Σ, elementy lfetu przez,,c,... Przykłd: Alfetem może to yć np. ziór cyfr dziesiętnych, ziór znków ASCII, czy ziór itów {0, 1}. Def. 3. Słowo (lu npis) nd lfetem Σ, to dowolny skończony ciąg znków z Σ. W szczególności, pusty ciąg jest też słowem (i to nd dowolnym lfetem). Oznczmy go przez ε. Słow ędziemy zwykle oznczć przez x, y, z,... W przypdku języków progrmowni mówimy zwykle o npisch. Ntomist w teorii języków używ się rczej terminu słowo. Dodtkowo, w odniesieniu do języków nturlnych rdziej włściwe niż słowo wydje się zdnie. Tk nprwdę jednk chodzi o to smo pojęcie. Def. 4. Długość słow oznczmy przez. Przykłd: l = 3, ε = 0. Def. 5. Sklejenie (konktencj) słów to słowo powstłe z połączeni słów, tk jky zostły one zpisne kolejno po soie. Sklejnie zpisujemy pisząc po soie sklejne słow. Przykłd: Jeżeli x = l, y = m, z = kot, to xyz = lmkot. Sklejnie słów jest łączne, tzn. x(yz) = (xy)z, ε jest elementem neutrlnym (tzw. jedynką) sklejni, tzn. xε = εx = x. Sposó zpisu sklejni słów przypomin zwyczjowy zpis iloczynów (ez znku mnożeni). Przez nlogię, możemy wprowdzić opercje potęgowni słów: Def. 6. Przez n oznczmy n-krotne powtórzenie znku. Podonie, przez x n oznczmy n-krotne powtórzenie słow x. Potęgownie słów m podone włsności jk potęgownie licz (z wyjątkiem przemienności): x 0 = ε, x n+1 = x n x. 11
Przykłd: 5 =, 0 = ε, n+1 = n, x 0 = ε, orz x n+1 = x n x. Jeżeli x = l, to x 3 = lll. Def. 7. Przez # (x) oznczmy liczę wystąpień znku w słowie x. N przykłd, # (l) = 2. Def. 8. Prefiksem słow nzywmy dowolny jego początkowy frgment, tzn. x jest prefiksem y wtw., gdy istnieje tkie z, że xz = y. Jeżeli pondto x ε i x y, to mówimy, że x jest włściwym prefiksem y. Anlogicznie sufiksem słow nzywmy dowolny jego końcowy frgment, tzn. x jest sufiksem y wtw., gdy istnieje tkie z, że zx = y. Jeżeli pondto x ε i x y, to mówimy, że x jest włściwym sufiksem y. Podsłowem dnego słow nzywmy dowolny jego spójny frgment, tzn. powiemy, że x jest podsłowem y wtw., gdy istnieją tkie v i w, że vxw = y. Przykłd: Słow kj i kj są prefiksmi (włściwymi) słow kjk, ntomist jk jest jego sufiksem (włściwym), j podsłowem. Nstępujące słow są zrówno prefiksmi, jk i sufiksmi : ε,,, i cłe słowo. Def. 9. Przez rev(x) oznczmy słowo x czytne wspk. Jeżeli słowo x czytne wprost i wspk jest tkie smo (tzn. x = rev(x)), to mówimy, że x jest plindromem. Przykłd: rev() =. Plindrommi są np. kjk czy koyłmmłyok. 1.3 Podstwowe pojęci dotyczące języków Przejdziemy terz o jeden poziom wyżej i zjmijmy się ziormi słów czyli językmi. Def. 10. Język (nd lfetem Σ), to dowolny ziór słów (nd lfetem Σ). Jeżeli lfet Σ jest znny z kontekstu, to ędziemy go czsmi pomijć. Języki ędziemy zwykle oznczć przez A,B,C,... Język złożony ze wszystkich możliwych słów nd lfetem Σ ędziemy oznczć przez Σ. Język, to podziór zioru Σ. Będziemy więc (w kolejnych wykłdch) utożsmić język z prolemem decyzyjnym, dl zioru dnych Σ. Skoro języki to ziory słów (npisów), więc określone są n nich wszystkie podstwowe opercje n ziorch: 12
to pusty język, który nie zwier żdnego słow, A B to sum języków A i B, A B to część wspóln (przecięcie) języków A i B, A \ B to różnic języków A i B. Przykłd: Przykłdy języków:, Σ, {,,,}, {x {,} : x = 42}. Przykłdy opercji n językch, jko n ziorch: ({l,ol,ul} {,l,ul}) \ {ul,ul} = {l} {x {,} : x = 4} {,} = {,,,} Przyd nm się też kilk opercji chrkterystycznych dl języków: Def. 11. A to dopełnienie język A, czyli A = Σ \ A. Def. 12. AB ozncz sklejenie (konktencję) języków A i B, czyli język zwierjący wszystkie możliwe sklejeni słów z A ze słowmi z B, AB = {xy : x A,y B}. Przykłd: Przykłdy dopełnień i sklejeń języków: Σ = {,}{,} = {,,} {,,}{,,} = {,,,,,,} Zuwżmy, że sklejnie języków jeszcze rdziej przypomin mnożenie, niż to miło miejsce w przypdku sklejni słów. Elementem neutrlnym (czyli jedynką ) sklejni języków jest język zwierjący tylko słowo puste {ε}, {ε}a = A{ε} = A. Ntomist zerem sklejni języków jest język pusty, A = A =. W odróżnieniu od opercji mnożeni, sklejnie języków nie jest przemienne. Sklejnie języków jest rozdzielne względem sumowni języków: A(B C) = AB AC Jest tk dltego, że kżde sklejenie słow nleżącego do A ze słowem nleżącym do (B C) jest sklejeniem słow nleżącego do A ze słowem nleżącym do B, lu sklejeniem słow nleżącego do A ze słowem nleżącym do C, i vice vers. Anlogicznie: (A B)C = AC BC Mjąc zdefiniowne sklejnie języków, możemy nlogicznie do potęgowni słów zdefiniowć potęgownie języków: 13
Def. 13. Język A n definiujemy rekurencyjnie: A 0 = {ε}, A n+1 = A n A. Czyli A n = A...A }{{}. n rzy Inczej mówiąc, A n to język zwierjący wszystkie możliwe sklejeni n (niekoniecznie różnych) słów wziętych z A. Języki, jko ziory, mogą yć nieskończone. Możemy więc rozwżć sklejenie dowolnej liczy słów pochodzących z A. Prowdzi to do tzw. domknięci Kleene ego: Def. 14. Domknięcie Kleene ego język A, oznczne jko A, to A = n 0 An. Inczej mówiąc, A to język zwierjący wszystkie możliwe sklejeni dowolnej liczy (łącznie z 0) słów nleżących do A. Dl kżdego język A mmy ε A, gdyż {ε} = A 0 A. Jeżeli tylko A zwier jkieś niepuste słowo, to A jest ziorem nieskończonym. Jeżeli spojrzymy n Σ nie jk n lfet, le jk n ziór słów długości 1, to wyjśni się dlczego Σ jest ziorem wszystkich słów nd lfetem Σ po prostu kżde słowo jest sklejeniem pewnej liczy znków. Czsmi ędzie ns interesowło sklejenie dowolnej, le dodtniej, liczy słów z A: Def. 15. Przez A + oznczmy język zwierjący wszystkie możliwe sklejeni dowolnej dodtniej liczy słów nleżących do A, A + = AA. Przykłd: {,} = {ε,,,,,,,...} {,} + = {,,,,,,,,,,...} 1.4 Powtórzenie pojęć dotyczących relcji Przypomnijmy soie kilk pojęć dotyczących relcji. Def. 16. Niech X ędzie dowolnym ziorem, ρ X X relcją (inrną) określoną n tym ziorze. Powiemy, że relcj ρ jest: zwrotn, jeżeli dl kżdego x X zchodzi xρx, symetryczn, gdy dl dowolnych x,y X jeżeli mmy xρy, to mmy również yρx, 14
przechodni, gdy dl dowolnych x,y,z X jeżeli mmy xρy i yρz, to mmy również xρz, ntysymetryczn, gdy dl dowolnych x,y X jeśli xρy i yρx, to x = y, relcją równowżności, jeśli jest zwrotn, symetryczn i przechodni, częściowym porządkiem, jeśli jest zwrotn, przechodni i ntysymetryczn. Relcj równowżności dodtkowo dzieli ziór X n rozłączne klsy strkcji. Def. 17. Jeśli ρ jest relcją równowżności, x X, to przez [x] ρ oznczmy klsę strkcji x: [x] ρ = {y X : xρy} Przez X /ρ oznczmy ziór kls strkcji elementów zioru X: X /ρ = {[x] ρ : x X} Pojęci te są rdziej intuicyjne, gdy przedstwimy soie relcję jko grf skierowny (z pętelkmi). Wyorźmy soie, że elementy zioru X, to wierzchołki grfu. Z wierzchołk x prowdzi krwędź do wierzchołk y wtedy i tylko wtedy, gdy xρy. (W szczególności, gdy xρx, to mmy pętelkę prowdzącą z x do x.) Relcj jest zwrotn, gdy w kżdym wierzchołku jest pętelk. Relcj jest symetryczn, gdy krwędzie między (różnymi) wierzchołkmi są dwukierunkowe (tzn. jeżeli jest krwędź w jednym kierunku, to jest i w drugim). 15
Relcj jest ntysymetryczn, gdy krwędzie między (różnymi) wierzchołkmi mogą yć tylko jednokierunkowe. Relcj jest przechodni, jeżeli dl kżdej ścieżki w grfie (długości przynjmniej 1) istnieje w nim krwędź łącząc początek ścieżki z jej końcem. Inczej mówiąc, grf musi zwierć wszystkie możliwe krwędzie idące n skróty. Relcj jest relcją równowżności, jeżeli grf jest podzielony n ileś spójnych skłdowych, kżd skłdow to klik (tzn. między kżdymi dwom wierzchołkmi tej smej skłdowej mmy krwędź), ntomist między wierzchołkmi nleżącymi do różnych skłdowych nie mmy krwędzi. Spójne skłdowe tkiego grfu są nzywne klsmi strkcji. Relcj jest częściowym porządkiem, jeżeli jest zwrotn, przechodni i nie zwier cykli (z wyjątkiem pętelek, które są we wszystkich wierzchołkch). 16
Pojęci zwrotności, przechodniości i symetryczności wszystkie polegją n tym, że pewne pry/krwędzie muszą yć oecne. Będziemy mówić o odpowiednim domknięciu relcji, jko o relcji powstłej przez dodnie odpowiednich pr/krwędzi, niezędnych do spełnieni określonej włsności. Szczególnie przydtne ędzie nm domknięcie zwrotnoprzechodnie. Def. 18. Niech ρ X X ędzie dowolną relcją inrną. Domknięciem zwrotnoprzechodnim relcji ρ nzywmy njmniejszą tką relcję ρ X X, któr: zwier relcję ρ, ρ ρ, jest zwrotn i przechodni. Podonie definiujemy domknięcie przechodnie, czy symetryczne. Intuicyjnie, domknięcie zwrotno-przechodnie poleg n dodniu wszystkich tkich krwędzi, które w oryginlnym grfie mogły yć relizowne przez ścieżki łącznie z pętelkmi, które odpowidją ścieżkom długości 0. Przykłd: Relcj i jej domknięcie zwrotno-przechodnie: 1.5 Podsumownie W tym wykłdzie poznliśmy podstwowe pojęci dotyczące słów i języków. Przypomnieliśmy też podstwowe informcje n temt relcji, które ędą nm potrzene w dlszych wykłdch. 1.6 Skorowidz Alfet to dowolny niepusty, skończony ziór. Elementy lfetu nzywmy znkmi. Domknięcie Kleene ego język A, oznczne jko A, to A = n 0 An. Inczej mówiąc, A to język zwierjący wszystkie możliwe sklejeni dowolnej liczy (łącznie z 0) słów nleżących do A. 17
Domknięcie zwrotno-przechodnie relcji ρ to njmniejsz tk relcj ρ X X, któr: zwier relcję ρ, ρ ρ, orz jest zwrotn i przechodni. Dopełnienie język A, oznczne jko A, to A = Σ \ A. Język (nd lfetem Σ), to dowolny ziór słów (nd lfetem Σ). Plindrom to tkie słowo x, które czytne wprost i wspk jest tkie smo, x = rev(x). Podsłowo dnego słow to dowolny jego spójny frgment, tzn. powiemy, że x jest podsłowem y wtw., gdy istnieją tkie v i w, że vxw = y. Prefiks słow to dowolny jego początkowy frgment, tzn. x jest prefiksem y wtw., gdy istnieje tkie z, że xz = y. Jeżeli pondto x ε i x y, to mówimy, że x jest włściwym prefiksem y. Prolem decyzyjny to funkcj, któr możliwym dnym wejściowym przyporządkowuje wrtości logiczne tk/nie. Sklejenie (konktencję) języków to język zwierjący wszystkie możliwe sklejeni słów z A ze słowmi z B, AB = {xy : x A,y B}. Sklejenie (konktencj) słów to słowo powstłe z połączeni słów, tk jky zostły one zpisne kolejno po soie. Słowo (lu npis) nd lfetem Σ, to dowolny skończony ciąg znków z Σ. Sufiks słow to dowolny jego końcowy frgment, tzn. x jest sufiksem y wtw., gdy istnieje tkie z, że zx = y. Jeżeli pondto x ε i x y, to mówimy, że x jest włściwym sufiksem y. 1.7 Prc domow 1. (2 p.) Jk jest różnic między i {ε}? Ile słów zwierją te języki? Czy są elementmi neutrlnymi (czyli nie zmieniją wyniku) jkichś opercji n językch? 2. (2 p.) Podj które prefiksy słow są równocześnie jego sufiksmi. 3. (2 p.) Podj wszystkie słow nleżące do język {,,}{,}. 4. (2 p.) Podj wszystkie słow nleżące do język {,,,,} \ {} {}. 5. (2 p.) Podj wszystkie słow nleżące do język {,,,} {} {} + {}. 18
1.8 Ćwiczeni 1. Niech A, B i C ędą dowolnymi ziormi. Dl kżdego zestwu ziorów poniżej określ, czy są one soie zwsze równe, jeden zwier się w drugim, lu nie d się ich porównć. Porównując ziory możesz przedstwić je n digrmie. () (A B) C = A (B C), Rozwiąznie 1 () (A B) \ (A B), (A \ B) (B \ A), Rozwiąznie 2 (c) (C \ A) (C \ B), C \ (A B), Rozwiąznie 3 (d) (C \ A) (C \ B), C \ (A B), Rozwiąznie 4 (e) (C \ A) (C \ B), C \ (A B), Rozwiąznie 5 (f) C \ ((C \ A) (C \ B)), A B Rozwiąznie 6 (g) (A \ B) (B \ C) (C \ A), A B C, Rozwiąznie 7 (h) (A B) C = A (B C), Rozwiąznie 8 (i) (A B) C A (B C), Rozwiąznie 9 (j) (A B) = A B. Rozwiąznie 10 2. Wyiermy dowolny numer telefonu i trktujemy go jk słowo złożone z cyfr. Podj: 1 2 Prwd, sum ziorów jest opercją łączną. 3 4 5 6 7 8 9 (A B) C = (A C) (B C) A (B C) Fłsz. Ziór A \ C jest zwrty w drugim ziorze, le nie w pierwszym. (A \ B) (B \ C) (C \ A) A B C C \ ((C \ A) (C \ B)) A B (C \ A) (C \ B) = C \ (A B) (C \ A) (C \ B) = C \ (A B) (C \ A) (C \ B) C \ (A B) (A B) \ (A B) = (A \ B) (B \ A) 10 To już jest prwd. Prwd. Jest to wersj prw De Morgn. 19
11 wszystkie prefiksy tego ciągu, wszystkie sufiksy tego ciągu, kilk podciągów (niekoniecznie spójnych); ile jest wszystkich? kilk spójnych podciągów (podsłów); ile jest wszystkich? podsłow, które występują więcej niż rz w dnym numerze. 3. Wyiermy ziór 2 3 elementowy. Jkie są jego podziory? Ile podziorów m ziór n-elementowy? Rozwiąznie 11 4. Podj które prefiksy słow są równocześnie jego sufiksmi. Rozwiąznie 12 5. Które z poniższych tożsmości są prwdziwe? W przypdku prwdziwych uzsdnij, w przypdku fłszywych podj przykłd słow, które przeczy tożsmości. A(B C) = AB AC, Rozwiąznie 13 A(B C) = AB AC, Rozwiąznie 14 A(B C) AB AC, Rozwiąznie 15 (AB) = A B, Rozwiąznie 16 (A B) = (A B ), Rozwiąznie 17 12 Ziór n elmentowy m 2 n podziorów. N przykłd, wszystkie podziory zioru {,}, to:, {}, {} i {,}. 13 Są to: ε,, i. 14 A(B C) = {,} = AB AC = {,}{} {,}{} = {,} {,} = {} Prwd, wynik to wprost z definicji sklejni języków. 15 16 17 Fłsz. Jeżeli pewne słowo nleży zrówno do AB i AC, le zostło uzyskne n różne sposoy, to może nie nleżeć do A(B C). N przykłd, dl A = {,}, B = {} i C = {} mmy: A to już jest prwd. Jeżeli pewne słowo nleży do A(B C), to nleży zrówno do AB, jk i AC. Fłsz. Pierwszy język zwier kżdy z języków postci ABABAB...AB, drugi kżdy język postci AAA...ABB...B. Prwd. Oydw języki zwierją wszystkie słow jkie możemy uzyskć sklejjąc słow z A i/lu B. 20
(C + ) + = C +, Rozwiąznie 18 C + = C +, Rozwiąznie 19 6. Co to z języki: (A A ), Rozwiąznie 20 A \ A +, Rozwiąznie 21 (A B) \ (A B ), Rozwiąznie 22 {,,,}, Rozwiąznie 23 (ΣΣ), Rozwiąznie 24 (ΣΣ), Rozwiąznie 25 Σ(ΣΣ) Rozwiąznie 26 (Σ(ΣΣ) ) Rozwiąznie 27 ΠIΣΣA Rozwiąznie 28 7. Podj wszystkie słow nleżące do język: 18 19 Prwd. Powtrznie powtrzni nic nowego nie wnosi, w ou przypdkch sklejmy A z soą dowolną liczę rzy (łącznie z zero). Prwd. Powtrznie powtrzni nic nowego nie wnosi. 20 21 Jeśli ε A, to jest to, gdyż A = A +. W przeciwnym przypdku jest to {ε}. A A, więc A A = A. Jest to więc A. 22 23 24 25 26 27 Wszystkie słow nd lfetem Σ. Również słow (nd lfetem Σ) nieprzystej długości. Słow (nd lfetem Σ) nieprzystej długości. Słow (nd lfetem Σ) przystej długości. Słow (nd lfetem {,}) przystej długości. Język ten zwier słow powstłe ze sklejeni słów z A \ B i B \ A, przy czym konieczne jest wzięcie słów z ou tych języków. 28 A to jest po grecku pizz. :-) 21
{,,}{,}, Rozwiąznie 29 {,,,} {,} 2, Rozwiąznie 30 {,,} \ {} {} {}, Rozwiąznie 31 8. Podć domknięcie zwrotno-przechodnie i domknięcie symetryczne relcji: {(1, 2), (2, 3), (3, 1), (2, 4), (5, 3)} określonej n ziorze {1, 2,...,6}. Rozwiąznie 32 9. Używjąc symoli i opercji wprowdzonych n pierwszym wykłdzie (czyli opercji n słowch, ziorch, językch i mtemtycznych definicji ziorów) zdefiniuj podne języki (nd lfetem Σ): słow zwierjące tyle smo liter i, Rozwiąznie 33 słow nd lfetem {,} (nie)przystej długości, Rozwiąznie 34 plindromy, Rozwiąznie 35 słow długości 42. Rozwiąznie 36 10. Pokzć, że nstępujące relcje są relcjmi równowżności: 29 słow x i y są w relcji wtw., gdy x = y, słow x i y są ngrmmi, języki A i B są w relcji wtw., gdy A = B. 30 Są to:,,,,. 31 Jest to tylko jedno słowo:. 32 Są to: i. 33 34 35 36 Domknięcie zwortno-przechodnie to: {(1,1),(1,2),(1,3),(1,4),(2,1),(2,2),(2,3),(2,4),(3,1),(3,2), (3,3),(3,4),(4,4),(5,1),(5,2),(5,3),(5,4),(5,5),(6,6)}. Domknięcie synetryczne to: {(1,2),(1,3),(2,1),(2,3),(2,4),(3,1),(3,2),(3,5),(4,2),(5,3)}. {w Σ : #(w) = #(w)} Przystej długości: ({,}{,}). Nieprzystej długości: {,}({,}{,}). {w Σ : w = rev(w)} {w Σ : w = 42} 22
11. Pokzć, że nstępujące relcje są częściowymi porządkmi: relcj zwierni n językch nd ustlonym lfetem, relcj porządku leksykogrficznego (lfetycznego) n słowch, relcj yci prefiksem, relcj, określon n językch nd ustlonym lfetem w nstępujący sposó: A B wtw., gdy istnieje tki język C, że AC = B. 23
Wykłd 2. Wzorce i wyrżeni regulrne 2.1 Wstęp Wyrżeni regulrne to rodzj wzorców, do których dopsowuje się frgmenty różnych tekstów. Nzwy tej używ się w dwóch kontekstch. Pierwszy z nich dotyczy wyrżeń regulrnych, jkie możn znleźć np. przy wyszukiwniu tekstu, w rdziej rozudownych edytorch tekstów. Są one również szeroko stosowne w Uniksie, w różnego rodzju progrmch do wyszukiwni i przetwrzni informcji tekstowych, np. grep, wk i sed, tkże w genertorze nliztorów leksyklnych Lex. Terminu tego używ się również w teorii języków formlnych w podonym znczeniu. Jednk w tym przypdku licz konstrukcji jkie mogą yć używne do udowy wyrżeń regulrnych jest ogrniczon do solutnego minimum. Jest to poniekąd nturlne, gdyż o rodzje wyrżeń regulrnych służą innym celom. W pierwszym przypdku m to yć wygodny w użyciu język, pozwljący n zwięzłe zpisywnie wzorców. Stąd jest od dosyć rozudowny i zwier wiele konstrukcji. W drugim przypdku rdziej ns interesuje dnie smych wyrżeń regulrnych i ich siły wyrzu. Stąd język tych wyrżeń regulrnych jest mksymlnie uproszczony, wszystkie konstrukcje, które możn wyrzić w inny sposó zostły z niego usunięte. W trkcie tego kursu ędziemy używli ou rodzjów wyrżeń regulrnych. Musimy więc ndć im różne nzwy. Wyrżeni regulrne tkie, jk są używne w Lex ie, ędziemy nzywć wzorcmi. Ntomist sm termin wyrżeni regulrne zrezerwujemy dl tkiego jego znczeni, jkie m w teorii języków formlnych. N potrzey tego rozdziłu ustlmy jko domyślny lfet Σ ziór znków ASCII. 2.2 Wzorce Poniżej podjemy definicję wzorców. Z jednej strony jest on wzorown n wyrżenich regulrnych w Lex ie, le nie wymieniliśmy tutj wszystkich dostępnych tm konstrukcji. Z drugiej strony dodliśmy dwie konstrukcje, które nie są dostępne w Lex ie. Definicj t, oprócz skłdni wzorców, opisuje też nieformlnie ich semntykę. Semntyk t jest rdziej formlnie zdefiniown dlej. Def. 19. Wzorce, to wyrżeni, które możemy udowć w podny poniżej sposó. dl Σ, jest wzorcem, do którego psuje tylko słowo (chy, że m jkieś specjlne znczenie opisne poniżej), ε jest wzorcem, do którego psuje tylko słowo puste (t konstrukcj nie jest dostępn w Lex ie), jest wzorcem, do którego nie psuje żdne słowo (t konstrukcj nie jest dostępn w Lex ie),. to wzorzec, do którego psuje dowolny znk (oprócz końc wiersz), 24
x to wzorzec, do którego psuje tylko słowo x (nwet jk zwier jkieś znki o specjlnym znczeniu), \ m nlogiczne znczenie jk w C, np. \n ozncz znk nowej linii, [...] to wzorzec, do którego psuje dowolny ze znków wymienionych w kwdrtowych nwisch, np. do [c] psuje dowolny ze znków, i c, [ ] to wzorzec, do którego psuje dowolny znk od do, zkresy tkie możn łączyć, np. [ za Z] to wzorzec, do którego psuje dowoln liter, mł lu wielk, [ˆ...] to wzorzec, do którego psuje dowolny znk oprócz znków wymienionych wewnątrz kwdrtowych nwisów, np. do [ˆxyz] psuje dowolny znk oprócz x, y i z, jeśli α jest wzorcem, to α? jest wzorcem, do którego psuje ε orz wszystkie te słow, które psują do α, jeśli α jest wzorcem, to α jest wzorcem, do którego psuje sklejenie zer lu więcej słów psujących do α, jeśli α jest wzorcem, to α + jest wzorcem, do którego psuje sklejenie jednego lu więcej słów psujących do α, jeśli α i β są wzorcmi, to αβ jest wzorcem, do którego psują sklejeni słów psujących do α i słów psujących do β, jeśli α i β są wzorcmi, to α β jest wzorcem, do którego psują te słow, które psują do α lu do β, jeśli α i β są wzorcmi, to α β jest wzorcem, do którego psują te słow, które psują równocześnie do α i β (t konstrukcj nie jest dostępn w Lex ie), jeśli α jest wzorcem, to α jest wzorcem, do którego psują wszystkie te słow, które nie psują do α (t konstrukcj nie jest dostępn w Lex ie), jeśli α jest wzorcem, to jest nim również (α) i psują do niego te sme słow, co do α inczej mówiąc, do udowy wzorców możemy używć nwisów, Przykłd: Oto grść przykłdowych wzorców: [0 9] + opisuje (niepuste) ciągi cyfr, czyli zpisy dziesiętne licz nturlnych. Do wzorc ( ) ( ) psuje tylko słowo. Do psują słow zwierjące dokłdnie dwie litery i to położone ook sieie, do ( ) psują słow zudowne z cegiełek i. Jedynym słowem, które psuje do oydwu tych wzorców jest włśnie. 25
Wzorzec [A Z][A Z][0 9][0 9][0 9][0 9]([0 9] [A Z]) [A Z][A Z][A Z][0 9][0 9][0 9][0 9] opisuje podstwowe formy numerów rejestrcyjnych. Zdefiniujemy terz rdziej formlnie semntykę wzorców. Def. 20. Niech α i β ędą wzorcmi. Przez L(α) oznczmy język opisywny przez wzorzec α, czyli język złożony z tych słów, które psują do wzorc α. L(α) definiujemy indukcyjnie ze względu n udowę wzorc α: L() = {}, dl Σ, o ile nie m specjlnego znczeni opisnego niżej, L(ε) = {ε}, L( ) =, L(.) = Σ \ {\n}, L( x ) = {x}, L([ 1 2... k ]) = { 1, 2,..., k }, L([ ]) = {,...,} zleży od kolejności znków w kodowniu ASCII, L([ˆ ]) = Σ \ L([ ]) L(α?) = L(α) {ε}, L(α ) = L(α), L(α + ) = L(α) + = L(α)L(α), L(αβ) = L(α)L(β), L(α β) = L(α) L(β), L(α β) = L(α) L(β), L(α) = L(α), L( (α) ) = L(α). Bdjąc wzorce często ędziemy chcieli porównywć nie tyle je sme, le ich znczeni. Przyd nm się do tego pojęcie równowżności wzorców. Def. 21. Powiemy, że dw wzorce α i β są równowżne, α β, wtw., gdy L(α) = L(β). Oto grść tożsmości dotyczących wzorców. Niektóre z nich, tk nprwdę, poznliśmy już w poprzednim wykłdzie jko tożsmości dotyczące języków. 26
α(β γ) αβ αγ to nic innego jk rozdzielność sklejni języków względem ich sumowni, zstosown do wzorców, (β γ)α βα γα j.w., α α jest zerem sklejni, również dl wzorców, α ε αα ε α α oto dwie rekurencyjne definicje opercji, α + α αα + α α + α oto dwie rekurencyjne definicje opercji +, (αβ) α α(βα), o wzorce opisują nprzemienne ciągi α i β zczynjące i kończące się α-ą, (α ) α domyknie domknięci Kleene ego nie wnosi nic dodtkowego, (α β) (α β ) ciąg α i β możn zwsze przedstwić jko poprzepltne ze soą ciągi α i ciągi β (wliczjąc w to ciągi długości zero), i vice vers. 2.3 Wyrżeni regulrne Okzuje się, że wiele z konstrukcji występujących we wzorcch może yć zstąpionych prostszymi konstrukcjmi. N przykłd zmist [ c] możn npisć c. Postępując w ten sposó, kżdy wzorzec możn przeroić n tki, który zostł zpisny przy użyciu tylko pewnego minimlnego zestwu konstrukcji. Wzorce, które możemy zpisć przy użyciu owego minimlnego zestwu opercji, nzywmy wyrżenimi regulrnymi. Def. 22. Wyrżeni regulrne, to tkie wzorce, które są zudowne tylko przy użyciu: ε,,, dl Σ, αβ, gdzie α i β to wyrżeni regulrne, α β, gdzie α i β to wyrżeni regulrne, α, gdzie α to wyrżenie regulrne, (α), gdzie α to wyrżenie regulrne. Jk zoczymy dlej, wszystkie pozostłe konstrukcje są redundntne, choć w prktyce są przydtne. Wyrżeni regulrne ędą nm potrzene wówczs, gdy ędziemy się zjmowli tym, co możn wyrzić z pomocą wzorców i ogólnymi włściwościmi języków, które możn opisywć z pomocą wzorców. Dzięki ogrniczeniu zestwu możliwych konstrukcji do niezędnego minimum, nsze rozwżni ędą prostsze. 27
2.4 Języki regulrne Klsę języków, dl których istnieją opisujące je wzorce nzywmy językmi regulrnymi. Def. 23. Powiemy, że język A jest regulrny, wtw., gdy istnieje wzorzec α opisujący A, czyli A = L(α). Jk później pokżemy, wzorce mją tką smą siłę wyrzu co wyrżeni regulrne, tzn. jeśli dl dnego język istnieje opisujący go wzorzec, to istnieje również opisujące go wyrżenie regulrne. Jeden z prolemów, jkim ędziemy się zjmowć w trkcie tego kursu, to: jkie języki są regulrne? Okzuje się, że nie wszystkie. Poniżej podjemy kilk prostych włsności klsy języków regulrnych. Fkt 1. Kżdy język skończony jest regulrny. Dowód: Niech {x 1,x 2,...,x n } ędzie niepustym skończonym językiem. Język ten możn opisć wzorcem ( dokłdniej wyrżeniem regulrnym) postci x 1 x 2... x n. Język pusty możn opisć wzorcem. Fkt 2. Niech A i B ędą językmi regulrnymi. Języki A B, A B, AB, A i A są też regulrne. Dowód: Skoro A i B są regulrne, to istnieją opisujące je wzorce α i β, L(α) = A, L(β) = B. Interesujące ns języki są regulrne, o opisują je wzorce: α β, α β, αβ, α i α. 2.5 Podsumownie W tym wykłdzie poznliśmy wzorce orz wyrżeni regulrne. Języki jkie możn z ich pomocą opisć tworzą klsę języków regulrnych. Wzorce i wyrżeni regulrne mją zstosownie w: wyszukiwniu wzorców w tekście. rozmitych progrmch Linuksowych i Uniksowych, nlizie leksyklnej. 2.6 Skorowidz Język opisywny przez wzorzec to język złożony z tych słów, które psują do wzorc α. Język regulrny, to tki język, dl którego istnieje opisujący go wzorzec. 28
Wyrżeni regulrne to szczególny przypdek wzorców, do których zpisu użyto wyłącznie: symoli lfetu, ε,, sklejni,, i nwisów. Wzorce to rodzj wyrżeń, do których dopsowujemy słow nd ustlonym lfetem. Wzorzec opisuje język złożony ze słów, które do niego psują. 2.7 Odroin humoru 2.8 Prc domow www.xkcd.com. 1. (3 p.) Podj wyrżenie regulrne równowżne wzorcowi: ((?))?([ c]) + 2. (3 p.) Podj wzorzec opisujący numery telefonów (stcjonrne i komórkowe). Przyjmij, że pierwsz cyfr nie może yć 0, 1, ni 9. Jeżeli jest to 7 lu 8, to drug cyfr nie może yć 0. 3. (4 p.) Uprość nstępujący wzorzec: ( ( ) ( )) (( ) ( )) 29
2.9 Ćwiczeni 37 1. Podj wzorce/wyrżeni regulrne opisujące język złożony ze słów: () poprwne numery dowodów osoistych, np. ABC123456. Rozwiąznie 37 () poprwne numery indeksów studentów (zwierjące minimum 3 cyfry), np. postci s0124, Rozwiąznie 38 (c) poprwne numery rejestrcyjne smochodów postrj się ująć przynjmniej kilk możliwych wrintów, np. XY 12345, XYZ 1234, XY 1234A. Rozwiąznie 39 (d) nd lfetem {,}, które zwierją podsłowo, Rozwiąznie 40 (e) nd lfetem {,,c}, które zczynją się i kończą tym smym znkiem, Rozwiąznie 41 (f) nd lfetem {,}, które nie zwierją podsłow, Rozwiąznie 42 (g) nd lfetem {,}, które nie zwierją podsłow, Rozwiąznie 43 (h) nd lfetem {,,c}, które nie zwierją podsłow, Rozwiąznie 44 (i) nd lfetem {,,c}, które nie zwierją podsłow, Rozwiąznie 45 (j) nd lfetem {,,c} złożonych tylko z jednego rodzju symoli, Rozwiąznie 46 38 [A Z][A Z][A Z][0 9][0 9][0 9][0 9][0 9][0 9] 39 s[0 9][0 9][0 9][0 9] 40 [A Z][A Z] [0 9][0 9][0 9][0 9][0 9A Z] [A Z][A Z][A Z] [0 9][0 9][0 9][0 9] 41 ( c) ( c) c( c) c c ( ) ( ) 42 43 44 45 46 Ten znk to może yć, lu c. Nleży więc wziąć sumę tych trzech przypdków, nie zpominjąc o słowch jednoliterowych: Po kżdej literze (yć może z wyjątkiem osttniej) musi występowć liter : ( ) ( ε) Po literze nie może występowć, tylko ew. kolejn liter. Tk więc njpierw muszą występowć litery, potem :. Po kżdej literze (yć może z wyjątkiem osttniej) musi występowć liter lu c: ( c c)?. Po kżdej sekwencji liter (yć może z wyjątkiem osttniej) może wystąpić tylko liter c: ( c). Pmiętjmy, że puste słowo skłd się z zer rodzjów symoli, + + c +. 30
47 (k) nd lfetem {,,c} złożonych co njwyżej z dwóch rodzi symoli, Rozwiąznie 47 (l) nd lfetem {,,c} złożonych dokłdnie z dwóch rodzi symoli, Rozwiąznie 48 (m) nd lfetem {,,c} zwierjących wszystkie trzy rodzje symoli, Rozwiąznie 49 (n) nd lfetem {,}, które zwierją przystą liczę liter. Rozwiąznie 50 (o) nd lfetem {, }, w których po kżdej literze występuje przyst licz liter. (p) nd lfetem {, }, w których litery występują w serich nieprzystej długości. (q) nd lfetem {,}, w których litery i występują w serich nieprzystej długości. (r) nd lfetem {,}, w których kżd liter jest otoczon (z ou stron) przynjmniej dwom litermi, (s) nd lfetem {, }, w których kolejne litery są rozdzielone serimi dokłdnie trzech liter, (t) nd lfetem {, }, w których kolejne litery są rozdzielone serimi dodtniej, przystej liczy liter. 2. Porównj podne wzorce pod kątem równowżności/zwierni się odpowidjących im języków. Jeśli są równowżne, to uzsdnij to. Jeżeli nie, to podj przykłd słow, które psuje do jednego wzorc, le nie do drugiego. 48 (( + + )( ) ) (( + c c + )( c) ) (( + c c + )( c) ) Któregoś rodzju literek musi rkowć. Nleży więc zsumowć trzy przypdki: ( ) ( c) ( c). 49 ( + ( ) c( c) Mmy trzy przypdki któregoś rodzju literek musi rkowć. Równocześnie musimy zpewnić, y dwie pozostłe literki występowły. Tk więc w słowie musi yć przynjmniej po jednej sekwencji literek pierwszego i drugiego rodzju. Jest to jednk tylko jeden z sześciu możliwych przypdków. Łącząc je wszystkie uzyskujemy: ( ( + + )( ) c ( + c c + )( c) ( + c c + )( c) ) ( c) 50 Ciąg liter przystej długości łtwo opisć: (). Nstępnie nleży powciskć litery wszędzie tm, gdzie mogą się pojwić. W ten sposó uzyskujemy: ( ). Skupmy się n pierwszych dwóch rodzjch liter pojwijących się w słowie. Powiedzmy, że są to i. Możemy wówczs wykorzystć rozwiąznie poprzedniego zdni: 31
() (??) i ( ), Rozwiąznie 51 () ( ) i, Rozwiąznie 52 (c) ( ) i ( ), Rozwiąznie 53 (d) ( ) i ( ), Rozwiąznie 54 (e) ( ) i ( ). Rozwiąznie 55 3. Podj wyrżenie regulrne równowżne wzorcowi: (( + )? [x z]), Rozwiąznie 56 ([ c] (?)) +. Rozwiąznie 57 4. Uprość podne wzorce: ( )( ) ( ), Rozwiąznie 58 (( ε) ( ε)) + ε. Rozwiąznie 59 51 52 53 Nie są tożsme. N przykłd, do pierwszego z nich nie psuje słowo, do drugiego nie psuje słowo. Pierwszy wzorzec opisuje wszystkie słow nd lfetem {,}. Do drugiego wzorc nie psuje np. słowo. Są tożsme. O opisują wszystkie słow nd lfetem {,}. 54 55 56 57 58 ( )( ) ( ) ( )(( )( )) ( ) (( )( )) ( )( ) (( )( )) + Jedno z możliwych rozwiązń to: ( c )( c ). Jedno z możliwych rozwiązń to: (( ) ε x y z). Są tożsme. Jest to przykłd rdziej ogólnej tożsmości: α(βα) (αβ) α. O te wyrżeni regulrne opisują słow postci: αβαβ... αβα. Nie są tożsme. Pierwszy wzorzec opisuje wszystkie słow nd lfetem {,}, drugi tylko przystej długości. 59 (( ε) ( ε)) + ε ( ) + ε ((?)(?)) + ε ((?)(?)) 32
Wykłd 3. Anliz leksykln i genertory nliztorów leksyklnych Wzorce możemy spotkć w wielu nrzędzich wszędzie tm, gdzie chcemy wyszukiwć pewne frgmenty tekstu, wyszukiwny frgment możemy opisć włśnie z pomocą wzorc: w edytorch tekstów często możemy podć nie tylko wyszukiwny tekst, le włśnie wzorzec, progrmy systemowe służące do wyszukiwni informcji, np. grep, sed, czy wk, ilioteki progrmistyczne zwierjące procedury rozpoznjące wystąpieni wzorców w tekście, genertory nliztorów leksyklnych (sknerów). Tym osttnim zstosowniem zjmiemy się liżej. Njpierw jednk musimy przyliżyć pojęcie nlizy leksyklnej. 3.1 Anliz leksykln Miejsce n nlizę leksyklną jest wszędzie tm, gdzie wczytujemy dne o określonej skłdni. Wczytując tkie dne, znim ędziemy mogli je przetwrzć, musimy rozpoznć ich skłdnię. Pomysł poleg n tym, y njpierw wczytywny ciąg znków podzielić n elementrne cegiełki skłdniowe nzywne leksemmi dopiero dlej nlizowć ciąg leksemów. Anliztor leksyklny (nzywny też sknerem) to wyodręniony moduł zjmujący się tym zdniem. Anliz leksykln powstł i rozwinęł się w rmch prc nd udową kompiltorów. Wszk kompiltor musi njpierw wczytć i znlizowć skłdnię wczytywnego progrmu. Jej zstosowni są jednk dużo szersze. Prktycznie nlizę leksyklną możn zstosowć w kżdym progrmie, który wczytuje dne posidjące jkąś skłdnię, n przykłd w: przeglądrkch internetowych, edytorch, systemch skłdu tekstu, progrmch konwertujących, czy jkichkolwiek plikcjch posidjących pliki konfigurcyjne o określonej skłdni. Czemu wyodręnić nlizę leksyklną jko osony moduł? Jest kilk powodów: uproszczenie konstrukcji progrmu łtwiej oprcowć osono nlizę leksyklną i resztę nlizy skłdniowej, zwiększenie przenośności w module nlizie leksyklnej możn ukryć wszystkie szczegóły związne ze sposoem wczytywni plików, reprezentcją znków, itp., zwiększenie efektywności nliz leksykln, choć koncepcyjnie prost, może zjmowć dużą część czsu prcy progrmu; włściwe jej zimplementownie może poprwić efektywność progrmów, 33
Npisnie efektywnego skner nie jest proste. Nie musimy jednk tego roić ręcznie. Prktycznie dl kżdego język progrmowni istnieją nrzędzi, tzw. genertory nliztorów leksyklnych, które zroią to z ns. Musimy im jedynie dostrczyć specyfikcji opisującej jk wyglądją leksemy, owe elementrne cegiełki, n które chcemy podzielić wczytywny ciąg znków i jkie jest ich znczenie. 3.2 Leksemy, żetony i tryuty W trkcie nlizy leksyklnej wczytywny ciąg znków jest dzielony n leksemy. Jednk to co jest przekzywne dlej, to nie są dokłdnie leksemy. Formlnie, leksem to ciąg znków. To co jest przekzywne, to informcj reprezentując znczenie leksemu. Informcj t jest reprezentown z pomocą tzw. żetonu i opcjonlnego tryutu. Żeton niesie informcję o rodzju leksemu. Jeżeli leksemy dnego rodzju niosą ze soą pewną wrtość, to żetonowi towrzyszy tryut i jest on równy tej wrtości. Podsumujmy więc znczenie tych trzech terminów: leksem to ciąg kolejnych znków stnowiących semntycznie niepodzielną cłość, żeton (ng. token) to stł (cłkowit) reprezentując rodzj wczytnego leksemu, tryut to opcjonln wrtość reprezentując znczenie leksemu. Typowe leksemy, to: identyfiktory, słow kluczowe, npisy, liczy cłkowite i rzeczywiste, opercje rytmetyczne i relcje, nwisy i innego rodzju znki interpunkcyjne. Njlepiej powyższe pojęci zilustrowć n przykłdch. Przykłd: Rozwżmy instrukcję (z kompilownego progrmu) postci: E := m c 2; Możemy ją rozić n nstępujący ciąg leksemów: E, :=, m,, c,, 2, ; Ntomist ich reprezentcj z pomocą żetonów i tryutów ędzie nstępując: 34
Leksem Żeton Atryut E identyfiktor E := przypisnie m identyfiktor M * mnożenie c identyfiktor C potęgownie 2 licz cłkowit 2 ; średnik W Psclu nie odróżni się młych i wielkich liter w identyfiktorch. Relizuje się to n etpie nlizy leksyklnej, ujednolicjąc pisownię identyfiktorów. Przykłd: Rozwżmy frgment źródeł HTML: <hed> <met http-equiv="content-type" content="text/html; chrset=iso-8859-2"> <title>pjwstk - JFA</title> Jk ten frgment nleży podzielić n leksemy? Pmiętjmy, że leksemy muszą yć niepodzielne semntycznie. Oto jeden z możliwych podziłów: Leksem Żeton Atryut <hed open-strt-tg hed > close-tg <met open-strt-tg met http-equiv identyfiktor http-equiv = równość "Content-Type" npis Content-Type content identyfiktor content = równość "text/html; chrset=iso-8859-2" npis text/html; chrset=iso-8859-2 > close-tg <title open-strt-tg title > close-tg PJWSTK - JFA text PJWSTK - JFA </title open-end-tg title > close-tg Jk widć z powyższych przykłdów, typowe tryuty leksemów to identyfiktor nzw identyfiktor (jeśli nie odróżni się młych i wielkich liter, to w znormlizownej postci, np. pisn smymi wielkimi litermi), npis treść npisu, 35
licz jej wrtość, Pisząc specyfikcję dl Lex musimy dl kżdego żetonu opisć jką postć mogą mieć leksemy odpowidjące temu żetonowi. Roimy to podjąc dl kżdego żetonu wzorzec. Nstępnie dl kżdego żetonu podjemy frgment kodu, który n podstwie leksemu olicz wrtość tryutu. Przykłd: Oto kilk przykłdów żetonów i wzorców opisujących odpowidjące im leksemy: Żeton Przykłd leksemu Wzorzec sł_klucz_if if if identyfiktor (złożony Pom [ za Z] + tylko z liter) licz_cłkowit 42?[0 9] + Projektując podził wejści n leksemy i doierjąc żetony powinniśmy kierowć się nstępującymi zsdmi: Leksemy powinny yć niepodzielne semntycznie. Leksemom, które mją tego smego rodzju semntykę powinien odpowidć ten sm żeton. Leksemy odpowidjące jednemu żetonowi powinno się dć opisć wzorcem. Skner jest zwykle zrelizowny w postci modułu, który udostępni procedurę dj kolejny leksem. Procedur t rozpoznje jeden leksem i zwrc odpowidjący mu żeton i tryut. Możn więc powiedzieć, że skner przetwrz strumień znków w strumień pr: żeton, tryut. Proste tryuty, tkie jk liczy, są przekzywne wprost. Brdziej złożone tryuty, tkie jk nzwy identyfiktorów, mogą yć przez skner umieszczne w specjlnym słowniku, nzywnym tlicą symoli. Wówczs jko tryut przekzywny jest wskźnik lu pozycj w tlicy symoli. Z jednej strony, dzięki temu oszczędzmy n pmięci. Z drugiej strony, sm pozycj w tlicy symoli jest wystrczjąc, gdyż zwykle nie jest istotne, jk się dny identyfiktor nzyw, tylko który z identyfiktorów to jest. [[Rysunek przedstwijący skner, prser i tlicę symoli.]] 3.3 Genertor nliztorów leksyklnych Lex Genertor nliztorów leksyklnych n podstwie specyfikcji skner sm generuje jego kod. Jest wiele różnych genertorów nliztorów leksyklnych, różnego pochodzeni i przeznczonych dl różnych języków progrmowni. N wykłdzie skupimy się n genertorze Flex/Lex przeznczonym dl C/C++. Nzw [F]lex to skrót od [Fst] LEXicl nlyzer genertor. 36
Specyfikcj tk zwier z jednej strony opis skłdni leksemów różnych rodzjów, z drugiej zwier frgmenty kodu, które mją yć wykonne w przypdku npotkni leksemu określonego rodzju. Dl kżdego rodzju leksemów (tj. dl kżdego żetonu) specyfikcj skner zwier: wzorzec opisujący postć leksemów (dnego rodzju), frgment kodu wykonywny w momencie npotkni leksemu dnego rodzju. Frgmenty kodu wykonywne w momencie rozpoznni leksemu mją oczywiście dostęp do słow (npisu) stnowiącego rozpoznny leksem. Ich głównym zdniem jest przekznie żetonu i oliczenie ew. tryutu. Jednk z punktu widzeni Lex mogą one roić cokolwiek. Jeżeli np. nszym zdniem jest przetłumczenie jednej postci dnych n inną, tkie frgmenty mogą wypisywć przetłumczone odpowiedniki wczytnych leksemów. 3.3.1 Definicje nzwnych wzorców W specyfikcji dl Lex zwykle pewne wzorce pojwiją się wielokrotnie. Żey nie powtrzć ich, wprowdzono możliwość definiowni pomocniczych nzwnych wzorców. Definicje tkie mją postć: nzw wzorzec Od momentu zdefiniowni nzwnego wzorc, możn się do niego odwoływć w innych wzorcch poprzez: {nzw}. W definicjch nzwnych wzorców możn się odwoływć do nzwnych wzorców zdefiniownych wcześniej, le tylko wcześniej tym smym definicje wzorców nie mogą yć rekurencyjne. Przykłd: cyfr [0-9] cyfry {cyfr}+ cz_ułmkow "."{cyfry} znk_opc ("+" "-")? wykłdnik_opc (E{znk_opc}{cyfry})? licz {znk_opc}({cyfry}{cz_ułmkow} {cyfry} {cz_ułmkow}){wykłdnik_opc} Definicje nzwnych wzorców pozwlją w zwięzły sposó powiązć nzwy z określonymi wzorcmi. Nie wnoszą one jednk nic do siły wyrzu wzorców. Definicji nzwnych wzorców możn się zwsze pozyć rozwijjąc wszystkie definicje. 37