Zadanie 1

Podzbór wyrażeń języka C można zdefiniować następującą gramatyką gdzie symbolami końcowymi są znaki, i para znaków "+=" (jeśli znaki '+' i '=' występują bezpośrednio obok siebie to traktujemy je jako jeden symbol). Symbolem początkowym jest 'wyrazenie'. Spacje są pomijane, za wyjątkiem tego że używa się je do oddzielania symboli.
wyrazenie : warunkowe | zmienna "+=" warunkowe ;
warunkowe : addytywne | addytywne '?' addytywne ':' addytywne ;
addytywne : skladnik | addytywne '+' skladnik | addytywne '-' skladnik ;
skladnik : czynnik | skladnik '*' czynnik ;
czynnik : atom | '*' atom | '-' atom ;
atom : '(' wyrazenie ')' | zmienna
zmienna : 'w' | 'x' | 'y' | 'z' ;
Narysować drzewa rozbioru dla wyrażeń języka C: 'x * y - w - z', 'x * (y - w - z)', 'x * y - (w - z)', '*x * *y - w - z', 'x ? y : z + w', 'x * (y += z - w)'.

Zadanie 2

Do obliczenia wyrażenia 'x+y*(z + 2)' rekursywna metoda naszkicowana na wykładzie (najpierw obliczająca wyrażenie lewe) wymaga 4 komórek stosu. Jeśli będziemy najpierw obliczać wyrażenie prawe to wystarczą dwie komórki. Ile komórek potrzeba do obliczenia wyrażenia 'x*t+y*(z + 2)'?

Zadanie 3

W językach programowania występują struktury o stopniu rozgałęzienia większym niż dwa (w C instrukcje 'for' i 'while' czy wywołanie funkcji). Jak można reprezentować struktury o większym stopniu rozgałęzienia przy pomocy struktur o stopniu rozgałęzienia dwa (dlaczego stopień rozgałęzienia 1 to za mało). Zastanowić się jakie są wady a jakie zalety struktur o stopniu rozgałęzienia dwa w porównaniu do bezpośredniego użycia struktur o większym stopniu rozgałęzienia.