Sylabus

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 $\varepsilon$-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.

Program wykładów

  1. Wprowadzenie, podstawowe pojęcia.
  2. Wyrażenia regularne i wzorce.
  3. Analiza leksykalna i Flex/Lex.
  4. Deterministyczne automaty skończone.
  5. Niedeterministyczne automaty skończone.
  6. Równoważność automatów skończonych i wyrażeń regularnych.
  7. Lemat o pompowaniu dla języków regularnych.
  8. Minimalizacja deterministycznych automatów skończonych.
  9. Języki i gramatyki bezkontekstowe.
  10. Postać normalna Chomsky'ego i algorytm Cocke-Younger'a-Kasami.
  11. Lemat o pompowaniu dla języków bezkontekstowych.
  12. Automaty stosowe.
  13. Analiza składniowa i Bison/Yacc.
  14. Maszyny Turinga i obliczalność.
  15. Języki obliczalne, częściowo obliczalne i nieobliczalne.

Program ćwiczeń

1-2
Flex/Lex - ćwiczenia.
3-4
Bison/Yacc - ćwiczenia.

Kryteria zaliczeń (dla studiów internetowych)

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.

Wymagane oprogramowanie

W przypadku Linuksa (zalecany) są to: flex, bison, gcc, g++. W przypadku Windows są to: DJGPP (z gcc), pakiety flex i bison z GnuWin32.

Powiązania merytoryczne

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.