Wyrażenia regularne - matrix.umcs.lublin.pl
Transkrypt
Wyrażenia regularne - matrix.umcs.lublin.pl
Wyrażenia regularne Podstawy Adam Kobus Updated: 27 kwietnia 2016 wyrreg Wyrażenia regularne Możliwości Wyrażenia regularne (regex, regexp) są to wzorce, które opisują języki regularne, czyli te same, które opisujemy poprzez automaty skończone. W odróżnieniu od automatów, pozwalają one wyrażenie akceptowanych słów w sposób deklaratywny. Użycie: grep (notacja, przekształca wyrażenia na automaty skończone), Lex, Flex (narzędzia leksykalne prawnicze, przyjmują opisy postaci leksemów (regexp) i tworzy automat skończony rozpoznający następny leksem) Operatory wyrażeń regularnych 1. L M - suma teoriomnogościowa: L = {001, 10, 111}, S M = {ε, 001}, L M = {ε, 001, 10, 111} S 2. LM - złożenie, konkatenacja, LM = {001, 10, 111, 001001, 10001, 111001} 3. L∗ - domknięcie Kleene’ego, czyli wszystkie wielokrotności 4. (L) - grupowanie 5. dodatkowe - Ln - słowo występuje n razy, L+ - słowo występuje co najmniej jeden raz Budowa wyrażeń regularnych # stałe - ε i ∅ oznaczają języki {ε} i ∅; # dla dowolnego a, a jest wyrażeniem regularnym. L(a) = {a}; # zmienne - określa dowolny język, oznaczana jest dużą literą, kursywą, L Przykład Opisz wyrażeniem regularnym zbiór słów składających sie z naprzemiennie występujących symboli 0 i 1 dla Σ = {0, 1}. # naprzemiennie występujące 0 i 1: (01)∗ + (10)∗ # łańcuchy z dodatkowym 0 lub 1: 0(10)∗ + 1(01)∗ # razem: 0(10)∗ + 1(01)∗ + (01)∗ + (10)∗ Można to również zapisać w postaci: (ε + 1)(01)∗ (ε + 0). Priorytety operatorów # () - grupowanie # ∗ - odnosi się do najmniejszego wyrażenia regularnego na lewo # złożenie # + - suma teoriomnogościowa Tożsamości # tożsamość sumowania: (∅ + R) = (R + ∅) = R # tożsamość złożenia: εR = Rε = R # anihilator złożenia: ∅R = R∅ = ∅ # przemienność sumowania: (R + S) = (S + R) # łączność sumowania: ((R + S) + T ) = (R + (S + T )) # łączność złożenia: ((RS)T ) = (R(ST )) Prawa algebraiczne # lewostronna rozdzielność złożenia względem sumowania: (R(S + T )) = (RS + RT ) # prawostronna rozdzielność złożenia względem sumowania: ((S + T )R) = (SR + TR) # idempotencja sumowania: (R + R) = R # równoważność operatora domknięcia: ∅∗ = ε, RR ∗ = R ∗ R, (RR ∗ + ε) = R ∗ Zadania Zadania Napisz wyrażenia regularne opisujące poniższe języki: 1. zbiór czteroliterowych słów nad alfabetem Σ = {a, b, c, d} 2. zbiór trzyliterowych słów nad alfabetem Σ = {a, b, c, d} z jedną literą a 3. zbiór wszystkich słów nad alfabetem Σ = {a, b, c, d} z dokładnie jedną literą a 4. zbiór łańcuchów binarnych, w których dziesiątym symbolem od prawej jest 1 5. zbiór łańcuchów binarnych z co najwyżej jedną parą sąsiadujących ze sobą 1 6. zbiór słów binarnych, w których liczba zer jest podzielna przez 3 7. zbiór słów alfanum., które mogą stanowić adres strony Zadania Jakie języki opisują następujące wyrażenia regularne: 1. (0∗ 1∗ )∗ 000(0 + 1)∗ 2. (0 + 10) ∗ 1∗