Analiza składniowa dla początkujących (½)

Język wykładowy Polski
Semestr Zimowy
Status W ofercie
Opiekun Tomasz Wierzbicki
Liczba godzin 15 (wyk.) 15 (ćw-prac.)
Rodzaj Informatyczny 1
ECTS 3
Polecany dla I roku Tak
Egzamin Tak

Opis przedmiotu:

Przedmiot jest przeznaczony dla młodszych studentów, którzy opanowali podstawy programowania w języku C i chcą zdobyć podstawowe wiadomości na temat przetwarzania danych tekstowych za pomocą narzędzi znanych z teorii języków formalnych: automatów, wyrażeń regularnych i gramatyk. Przedmiot nie ma ambicji teoretycznych i skupia się na omówieniu podstawowych narzędzi przydatnych w praktyce, a podstawy matematyczne są ograniczone do niezbędnego minimum. Ukończenie przedmiotu gwarantuje posiadanie umiejętności wystarczających do formalnego opisania prostego języka programowania i zaprogramowania jego interpretera. Językami wykładowymi są polski oraz C. #### Program zajęć 1. Alfabet, słowo, język. Problem formalnego opisu języka. Języki programowania. Analiza leksykalna i składniowa. Składnia konkretna i abstrakcyjna. Parse, unparse i postać kanoniczna. Języki wyrażeń. Operatory prefiksowe, postfiksowe, infiksowe i miksfiksowe. Priorytety i kierunki łączności operatorów. Parsowanie wyrażeń postfiksowych i infiksowych za pomocą stosu. 2. Deterministyczne automaty skończone. Wykorzystanie koncepcji automatu do opisu różnych procesów w informatyce (diagramy stanów protokołów itp.) Symulowanie automatu za pomocą programu. Wykorzystanie automatu do wyszukiwania wzorca w tekście. Automaty z wyjściem. Analizator leksykalny. 3. Wyrażenia regularne. Niedeterministyczne automaty z ε-przejściami. Synteza automatu rozpoznającego język opisany przez wyrażenie regularne. Wyszukiwanie w tekście według wyrażenia regularnego. POSIX.2 RE. Wersje wyrażeń regularnych używane w Linuksie i Uniksie. Programy grep, sed itp. Automatyczne generowanie analizatorów leksykalnych, flex. 4. Gramatyki bezkontekstowe. Drzewa wyprowadzenia. Jednoznaczność rozbioru składniowego. Notacje do opisu gramatyk (BNF, EBNF). Opis języków wyrażeń za pomocą gramatyk — jednoznacznie gramatyki uwzględniające priorytety i kierunki łączności operatorów. Praktyczne aspekty opisu składni języków programowania. Gramatyki atrybutowe. Abstrakcyjne drzewa rozbioru. 5. Parsowanie z góry na dół, parsery LL(k). Parsowanie za pomocą zbioru funkcji rekurencyjnych. Usuwanie rekursji lewostronnej z gramatyki. Wyprowadzanie parsera z gramatyki. Automatyczne generowanie parserów. ANTLR3. Informacja o parserach kombinatorowych. 6. Parsowanie z dołu do góry, parsery LR(k). Parsowanie za pomocą automatu ze stosem. GNU Bison. 7. Interpretacja abstrakcyjnych drzew rozbioru. Semantyka naturalna. Budowanie interpreterów prostych języków programowania. 8. Przetwarzanie danych tekstowych w programach. Serializacja danych. Przegląd języków, narzędzi i bibliotek do zapisu i odczytu danych strukturalnych (XML, JSON, S-wyrażenia, INI itp.) #### Literatura 1. A.V. Aho, R. Sethi, J.D. Ullman, _Kompilatory. Reguły, metody i narzędzia_, WNT 2002. 2. J.E. Hopcroft, R. Motwani, J.D. Ullman, _Wprowadzenie do teorii automatów, języków i obliczeń_, PWN 2012.