W ramach kursu przedstawiane są klasy języków
tworzące hierarchię Chomsky'ego: języki regularne,
bezkontekstowe, kontekstowe i częściowo obliczalne
(rekurencyjnie przeliczalne).
Dodatkowo przedstawiona jest klasa języków obliczalnych.
Dla każdej z tych klas przedstawione są formalizmy
służące do opisu języków: automaty skończone deterministyczne,
niedeterministyczne i z
-przejściami, wyrażenia regularne,
automaty stosowe, gramatyki bezkontekstowe, gramatyki kontekstowe,
maszyny Turinga oraz gramatyki ogólne (typu 0).
Przedstawione są też fakty dotyczące przynależności
języków do poszczególnych klas, w tym: lematy o
pompowaniu dla języków regularnych i bezkontekstowych.
- Wprowadzenie, podstawowe pojęcia.
- Wyrażenia regularne i wzorce.
- Analiza leksykalna i Flex/Lex.
- Deterministyczne automaty skończone.
- Niedeterministyczne automaty skończone.
- Równoważność automatów skończonych i wyrażeń regularnych.
- Lemat o pompowaniu dla języków regularnych.
- Minimalizacja deterministycznych automatów skończonych.
- Języki i gramatyki bezkontekstowe.
- Postać normalna Chomsky'ego i algorytm
Cocke-Younger'a-Kasami.
- Lemat o pompowaniu dla języków bezkontekstowych.
- Automaty stosowe.
- Analiza składniowa i Bison/Yacc.
- Maszyny Turinga i obliczalność.
- Języki obliczalne, częściowo obliczalne i
nieobliczalne.
- 1-2
- Flex/Lex - ćwiczenia.
- 3-4
- Bison/Yacc - ćwiczenia.
- prace domowe (przez Internet),
- egzamin (w uczelni).
Podstawą do wystawienia oceny będą punkty zdobyte za prace
domowe i punkty zdobyte w egzaminie.
Udział w egzaminie jest obowiązkowy, a
robienie prac domowych gorąco zalecane.
- Flex/Lex,
- Bison/Yacc,
- kompilator C/C++.
W przypadku Linuksa (zalecany) są to: flex,
bison, gcc, g++.
W przypadku Windows są to: DJGPP (z gcc),
pakiety flex i bison z GnuWin32.
Nazwa przedmiotu poprzedzającego |
Wymagany materiał |
Matematyka dyskretna |
Podstawy teorii mnogości, ciągi, relacje i funkcje. |
Programowanie I i II |
Podstawy programowania, podstawowe typy danych, programowanie w C lub C++. |
Algorytmy i struktury danych |
Złożoność asymptotyczna, podstawowe struktury danych
(stosy), programowanie dynamiczne. |