330 likes | 785 Views
Wykład 6. Translacja wyrażeń (ONP) Gramatyki Języki formalne Klasy złożoności problemów algorytmicznych. Semantyka, syntaktyka.
E N D
Wykład 6 • Translacja wyrażeń (ONP) • Gramatyki • Języki formalne • Klasy złożoności problemów algorytmicznych
Semantyka, syntaktyka • Semantyka - bada relacje pomiędzy znakami a przedmiotami, do których się one odnoszą. Semantyka zajmuje się badaniem znaczenia słów, czyli interpretacją znaków oraz interpretacją zdań i wyrażeń języka. • Semantyka logiczna (nazywana też czasem teorią modeli) bada języki sztuczne, gdzie badany język nazywany językiem przedmiotowym jest interpretowany za pomocą metajęzyka. • W informatyce, semantyka języka programowania określa zachowanie składowych systemu w zależności od jednostekprogramowych danego języka.
Semantyka, syntaktyka • Syntaktyka –zajmuje się składnią,zasadami, na jakich wyrazy łączone są w dłuższe wypowiedzi. Zajmuje się relacjami między poszczególnymi elementami składowymi zdań, a także relacjami międzyzdaniowymi w obrębie dłuższego tekstu, • Opis syntaktyczny wszystkich zdań jakiegoś języka – gramatyka języka
Translacja • Translacja to przekład tekstów zredagowanych w jednym języku źródłowym na równoważny semantycznie tekst w innym języku – wynikowym. • Translator – program dokonujący translacji • Translacja z języka wyższego poziomu na język symboliczny lub kod maszyny – kompilacja.
Analizator • Analizator leksykalny – najprostsza część translatora. Czyta znaki alfabetu i „składa” z nich symbole programu-słowa alfabetu. Może np. usuwać komentarze i wykonywać inne działania nie wymagające pełnej analizy tekstu źródłowego. Odróżnia tzw. ograniczniki (słowa kluczowe, operatory, znaki przestankowe). Słowa - symbole są następnie przekazywane do analizatora syntaktycznego
Analizator syntaktyczny i semantyczny • Wykonują zadanie polegające na rozłożeniu program na części składowe, utworzeniu jego wewnętrznej reprezentacji, zapisaniu informacji w tablicy symboli. Sprawdzana jest poprawność semantyczna i syntaktyczna programu. Jest to potrzebne do uzyskania wewnętrznego tekstu programu przygotowanego do przekładu.
Translator jednofazowy dokończenie programu docelowego i zatrzymanie Program docelowy analizator syntaktyczny analizator leksykalny analizator semantyczny procedura przydziału pamięci generator przekładu Program źródłowy
Zapis do postaci ONP • Pobierz kolejny element (nazwę zmiennej, stałą lub ogranicznik) źródłowego wyrażenia arytmetycznego. • Jeśli ten element jest • nazwą zmiennej lub stałą, przekaż go na wyjście; • ogranicznikiem • jeśli priorytet ogranicznika jest wyższy od priorytetu ogranicznika zajmującego szczyt stosu lub jeśli stos jest pusty, dopisz go na stos, • jeśli na szczycie stosu znajduje się ogranicznik o wyższym lub równym priorytecie - odczytaj go ze stosu i prześlij na wyjście, a ogranicznik z wejścia dopisz na stosie, • nowy ogranicznik zajmujący szczyt stosu w wyniku odczytania priorytetu ma priorytet nie mniejszy niż ogranicznik z wejścia - w takim przypadku kontynuować odczytywanie ze stosu i przesyłanie na wyjście aż do wystąpienia na szczycie stosu ogranicznika o priorytecie niższym od priorytetu ogranicznika nadchodzącego z wejścia. • Jeśli wyrażenie źródłowe zostało wyczerpane, odczytaj wszystkie ograniczniki ze stosu na wyjście automatu.
Uzupełnienie o „(„ i „)” • Ogranicznik “(” jest dopisywany do stosu bez jakiegokolwiek odczytywania stosu. • Ogranicznik “)” nie jest dopisywany na stos, pojawienie się jednak tego ogranicznika na wejściu powoduje odczytanie ze stosu i przesłanie na wyjście wszystkich kolejnych ograniczników aż do pojawienia się ogranicznika “(”. • Ogranicznik “(” ze szczytu stosu zostaje usunięty bez przekazywania na wyjście, jeśli aktualnym symbolem na wejściu jest “)”. • Pojawienie się nawiasu zamykającego “)” na wejściu automatu powoduje wyprowadzenie na wejście wszystkich ograniczników z wnętrza pary nawiasów aż do nawiasu otwierającego “(” oraz likwidację tego nawiasu.
Translacja na zapis w ONP • Przykład translacji z wykorzystaniem stosu • a+2*b • (e+f)^a-2*a • (b+c)^2-2*a*(b-a)
Język formalny • Język formalny to jedno z najważniejszych pojęć w informatyce teoretycznej. • Wybrany, skończony zbiór symboli nazywamy alfabetem (może być to zwyczajny polski alfabet, złożony z liter a, ą, b, c, ć itd., może być nim np. zbiór cyfr od 0 do 9). • Z symboli takiego alfabetu możemy budować słowa – skończone ciągi symboli. Słowem nad alfabetem polskich liter jest więc "ala", „zima", ale też „hdjfhskdjfh" czy słowo puste "", oznaczane też symbolem ε. • Język formalny jest podzbiorem zbioru wszystkich słów nad pewnym alfabetem.
Język formalny • Tak pojmowanym językiem może być więc: • zbiór wszystkich słów złożonych z liter polskiego alfabetu i występujących w pewnym słowniku • zbiór takich słów złożonych z cyfr od 0 do 9, które przedstawiają liczbę pierwszą • zbiór słów złożonych z zer i jedynek, w których zer jest więcej niż jedynek • zbiór prawidłowo napisanych równań matematycznych • zbiór programów, które po skompilowaniu i uruchomieniu zawieszą dany komputer • zbiór pusty
Język formalny • Za język możemy uważać każdy zbiór, jeśli tylko każdy jego element potrafimy opisać za pomocą skończenie wielu symboli jakiegoś wybranego przez nas alfabetu. Prawie wszystkie ciekawe zbiory, z jakimi spotykamy się w informatyce, mają tą właściwość – jeśli niemożliwe byłoby napisanie czegoś w skończonej ilości znaków, komputery nie potrafiłyby nic z tą rzeczą zrobić – zbiory nie dające się przedstawić w postaci języków istnieją więc niejako poza informatyką. • Uwaga: Chociaż w opisach języków formalnych używa się określeń zapożyczonych od języków naturalnych – język, słowo, alfabet, gramatyka itd. – to języki formalne są tworami czysto matematycznymi, i nie mają żadnego związku z językami naturalnymi.
Gramatyki formalne • Alfabet, słowo, język • Gramatyka (części zdania, części mowy – składnia, szyk: podmiot, orzeczenie, przydawka, dopełnienie) • W informatyce: zbiór reguł umożliwiających generowanie słów języka; gramatyka pozwala również na odróżnienie słów zbudowanych poprawnie i niepoprawnie.
zdanie podmiot orzeczenie czasownik zjadło dopełnienie ciastko przymiotnik Małe rzeczownik dziecko Gramatyka - wprowadzenie struktura zdania – drzewo syntaktyczne Umiejętność opisu zdania: intuicyjny lub wyuczony. By zautomatyzować proces rozbioru gramatycznego zdań konieczne jest podanie ścisłych reguł według których jest tworzona struktura zdania. Należy przyjąć metajęzyk język do opisu innych języków. (Kurs angielskiego – do opisu struktur języka angielskiego używamy języka polskiego i na odwrót)
Gramatyka (formalnie) Gramatyką nazywamy czwórkę G = ( V, , P , ) gdzie: V – zbiór symboli terminalnych (alfabet końcowy), - zbiór symboli nieterminalnych (alfabet pomocniczy), P – lista produkcji („produkowanie” zdań – wyprowadzanie zdań na podstawie reguł) – zbiór reguł użytych do wyprowadzania zdań, - słowa języka.
Gramatyka, cd • Słownikiem A nazywamy zbiór będący sumą mnogościową alfabetu końcowego i alfabetu pomocniczego: A = V . • Przez A* oznaczamy zbiór wszystkich skończonych ciągów (napisów), których elementy należą do zbioru A. • Język L(G) to zbiór wszystkich słów poprawnych w sensie gramatyki G, tzn. wyprowadzalnych z przez listę produkcji P. • Symbol oznacza ciąg pusty.
Klasyfikacja gramatyk (Chomski) Gramatyki klasy Wszystkie gramatyki mają postać u w gdzie: u A* - { } w A* Gramatyki klasy 1 (kontekstowe): Wszystkie produkcje mają postać: uXw ubw gdzie: u, w A* X b A* - {}
Klasyfikacja gramatyk (Chomski) Gramatyki klasy 2 (bezkontekstowe): Wszystkie produkcje mają postać:X b, gdzie : X b A* - {}
Klasyfikacja gramatyk (Chomski) Gramatyki klasy 3 (regularne): Wszystkie produkcje mają postać: X bY (gramatyki prawostronnie regularne) X Yb (gramatyki lewostronnie regularne) gdzie : X Y {} b A* - {}
Przykłady gramatyk • Gramatyka pozwalająca na generowanie napisów w ONP oraz Algorytm dokonujący zamiany wyrażeń zapisanych w arytmetyce nawiasowej na ONP. V={a,b,d,+,*} P: <W> ::= <Z><Z><O><Z> <Z> ::= <X><X><O><X> <X> ::= a b d <O> ::= +*
Algorytmy raz jeszcze … • Złożoność algorytmów: czasowa, obliczeniowa (było, patrz wykład 3) • Problemy algorytmiczne specyficzne zadania do zalgorytmizowania
Złożoność problemów algorytmicznych • Wieże Hanoihttp://chemeng.p.lodz.pl/zylla/games/hanoi5p.html • Problem domina • Problem wężowego domina • Problem plecakowy • Problem komiwojażera
Problem domina • Pokrycie dowolnego, płaskiego obszaru przy pomocy określonego, skończonego zestawu kafelek, przy zachowaniu odpowiedniości kolorów na styku dwóch kafelek. problem nierozstrzygalny….
Problem wężowego domina • Dysponując skończonym zbiorem kafelków połączyć dwa określone punkty nieskończonej siatki całkowitoliczbowej. Rozstrzygalne dla ograniczonego zbioru na płaszczyźnie lub dla całej płaszczyzny Nierozstrzygalne dla półpłaszczyzny
Problem plecakowy • Zagadnienie znalezienia takiego upakowanie przedmiotów w plecaku o określonej objętości, by zmieścić ich jak najwięcej – przy założeniu że każdy z nich ma określona objętość (koszt)
Problem komiwojażera • Problem znalezienia w sieci połączeń miedzy miastami najkrótszej drogi zamkniętej, prowadzącej przez wszystkie miasta i wrócić do punktu wyjścia. Projektowanie sieci (telefoniczne, energetyczne, komputerowe), układów scalonych, trasy autobusów komunikacji miejskiej….
Problemy nierozstrzygalne (lub nieobliczalne) Problemy trudno rozwiązywalne Problemy łatwo rozwiązywalne Problemy algorytmiczne Problemy dla których nie ma algorytmów (nie są znane) Problemy dla których nie ma rozsądnych algorytmów Problemy mające rozsądne (wielomianowe O(n^t), t=const ) algorytmy
Złożoność - klasy • Złożoność problemów mierzona jest w odniesieniu do możliwości ich rozwiązania przez maszynę Turinga (!teza Churcha-Turinga!): • problemy klasy P (Polynomial): rozwiązywalne przez algorytmy deterministyczne o złożoności wielomianowej. Są rozwiązywalne przez zwykłe maszyny Turinga w czasie wielomianowym. • problemy klasy NP.(Nondeterministic Polynomial): rozwiązywane przez algorytmy niedeterministyczne ( metodą prób i błędów), sprawdzenie algorytmu wymaga algorytmu o złożoności wielomianowej (w sumie złożoność zagadnienia – wykładnicza). Są rozwiązywalne przez niedeterministyczne maszyny Turinga w czasie wielomianowym.
Złożoność - klasy • problemy klasy NP-zupełne: rozwiązywalne przez algorytmy dla których można udowodnić że są tak samo złożone jak dowolny problem tej samej klasy. „Wzorcowe” problemy z klasy NP sprowadzalne jeden do drugiego; • problemy klasy PSPACE: problemy dla których złożoność pamięciowa algorytmu jest wykładnicza, ale czasowa jest większa (ale nie wykładnicza); • problemy klasy EXTTIME: problemy dla których złożoność czasowa algorytmu jest wykładnicza.
Złożoność problemów algorytmicznych - uwagi • Zachodzi: PNP • Problemem do dziś otwartym jest, że P≠NP, czyli czy istnieją problemy które są rozwiązywane niedeterministycznym algorytmem wielomianowym, ale dla których nie istnieje algorytm deterministyczny rozwiązujący ten problem również w czasie wielomianowym.
Złożoność problemów algorytmicznych - realia • Teoria: • problemy wysoce nierozstrzygalne, • problemy nierozstrzygalne, • problemy trudno rozwiązywalne, • problemy łatwo rozwiązywalne, • Praktyka: • problemy wysoce nierozstrzygalne, • problemy nierozstrzygalne, • problemy trudno rozwiązywalne, • problemy łatwo rozwiązywalne,