Zadanie 1

Zbudować rekursywny analizator syntaktyczny dla gramatyki podanej poniżej. Zastosować faktoryzację kiedy potrzeba.

Program: /* puste */ | Deklaracja Program ;
Deklaracja : 'var' nazwa : Typ ';' | 'function' nazwa ';' Program Blok ';' ;
Blok : 'begin' Instrukcje 'end' ;
Instrukcje : /* puste */ | Instrukcja Instrukcje ;
Instrukcja : if nazwa = nazwa then Blok ';' | nazwa ';'
     | nazwa ':=' Wyrazenie ';' ;
Wyrazenie : nazwa | nazwa '+' nazwa | nazwa * nazwa ;
Typ : 'int' | 'float' ;
Chetni mogą wzbogacić tą gramatykę.