Zadanie 1

Automat z stosem ma taśmę wejściową na której w danym momencie widzi jeden znak i po której przesuwa się tylko do przodu. Ma też stos na którym zapamiętuje stany i symbole. W danym momencie automat może wykonać jedną z trzech rodzajów operacji, mianowicie przesuniecie, redukcję lub stop. Przesunięcie zapamiętuje bieżący stan i bieżący symbol na stosie i przesuwa się do przodu po taśmie wejsciowej. Redukcje są związane z regułami gramatyki: logicznie redukcja zastępuje prawą stronę reguły przez lewą, tzn. jesli prawa stron redukcji ma długość k to odczytuje się ze stosu k par symboli i stanów. Ostatni odczytany stan staje się bieżącym stanem. Następnie automat przechodzi do nowego stanu na zależnie od bieżącego stanu (przed chwilą odczytanego ze stosu) i symbolu z lewej strony produkcji. Jeśli operacją jest stop to automat zatrzymuje się albo akceptując albo zgłaszając błąd. Poniższy pseudo kod ilustruje dzialanie automatu:

stan = poczatkowy;
while (1) {
   znak = daj_znak();
   switch(akcja(stan, znak)) {
       case przesuniecie:
            push(stan, znak);
            stan = przejscie(stan, znak);
	    znak = daj_znak();
	    break;
       redukcja_1:
            for(i=0; i < dlugosc1; i++) {
	        (stan, _) = pop();
            }
            push(stan, nonterminal1);
            stan = przejscie(stan, nonterminal1);
	    break;
        redukcja_2:
	    ...
	stop_błąd:
	    ...
	stop_akceptuj:
    }
}
Dobrać parametry automatu, tzn. zbiór stanów, tabele 'przejscie' i 'akcja' tak by automat analizował wyrażenia odpowiadające poniższej gramatyce:
W0 : W EOF ;
W : T | W '+' T ;
T : 'x' | '(' W ')' ;
Gdzie 'x', '+', '(', ')' i EOF są symbolami końcowymi, zaś W0, W i T są symbolami pomocniczymi, przy czym W0 jest symbolem początkowym.

Zadanie 2

Wyobraźmy sobie że mamy w tablicy (buforze) tekst (linię). Interesuje nas czy linia spełnia jeden z poniższych warunków: Które z tych warunków może sprawdzić automat skończony. Kiedy i jak automat pomaga w rozwiązaniu. Uwaga: Aby pokazać że automat skończony nie potrafi rozwiązać danego problemu przydaje sie Lemat o pompowaniu

Zadanie 3

Napisać wyrażenia regularne dla flex-a do rozpoznawania liczb. Mają one rozpoznawać takie same liczby jak gramatyka z Zadania 1 poprzedniej listy (w szczególności chcemy odróżniać liczby dziesiętne, szesnastkowe i zmiennopozycyjne).

Zadanie 4

Dobrać tabelę przejść automatu tak by rozpoznawał słowa 'do', 'done', 'downto', 'for', 'format', 'to' oraz identyfikatory które tu ograniczamy do liter. Dokaładniej, dla każdego z powyższych słów mamy po jedenym stanie akceptujący i jescze jeden dla identyfikatorów. Po przeczytaniu słowa wejściowego automat ma się znaleźć we właściwym stanie.