Zadanie 1

Zmodyfikować przykładową gramatyke `pl0' tak by zakazać procedur zanurzonych wewnątrz innych. Zamiast tego dodać parametry do procedur, tak by można było napisać deklarację:

procedure proc1(x, y, z);
begin
end;
a następnie wywołanie:
call proc1(1, 2*x, y);
Zapoznać się z zawartością katalogu `pl0/2' i `pl0/3', wykorzystać je do wypisania drzewa rozbioru.

Zadanie 2

Zmodyfikować przykładową gramatyke `pl0' tak by dodać funkcje (zwracające wartości całkowitoliczbowe). Funkcje wolno będzie używać jako elementy wyrażeń. Należy też dodać instrukcję `return wyrażenie' która pozwoli na zwracanie wartości. Deklaracja ma wyglądać następująco:

function fun(x, y, z);
begin
  return 0
end;
Dla uproszczenia wymagamy by funkcja miała choć jeden parametr. Dobrze to zrobić po rozwiązaniu zadania 1.

Zadanie 3

Bazująć na gramatyce z zadań 1 i 2 przerobić przykład `pl0/3' tak by wypisać odpowiadający im kod w C. Dla uproszcznia wypisana wersja wynikowa ma być możliwie podobna do żródla. Uwaga: oryginalne `pl0' dopuszcza definicje procedur wewnątrz innych procedur, co jest nielegalne w C. Dlatego w zadaniu zakazaliśmy takich procedur (pozwala to na bezpośrednie tłumaczenie).

Zadanie 4

W przykładzie `pl0/2' zmienić sposób wypisywania list (szczególnie listy instrukcji) tak by ograniczyć poziom wcięć. Innymi słowy, wszystkie elementy list powinny pojawić się na tym samym poziomie.