Zadanie 1
Zapoznać się z przykładowym kompilatorem (analizatorem
syntaktycznym). Zmodyfikować go, np:
- dodać wydruki diagniostyczne śledzące pracę analizatora
syntaktycznego.
- dodać pomijanie spacji
- obsłużyć wieloznakowe nazwy (prosta metoda rozróżniałaby tylko
kilka pierwszych znaków, można użyć zewnętrzną bibliotekę np. STL
do obsługi nazw dowolnej długości)
- dodać operator '%' (o takim samym priorytecie jak '*' i '/')
- dodać operator '**' (potęgowanie)
- przerobić 'pisz' tak by brało wyrażenie jako argument
- dodać instrukcję postaci 'czytaj(x);' do wczytywania liczb
Zadanie 2
Napisać funkcję (analizator sytaktyczny) który wyprodukuje
strukturę drzewiastą (podobną do tej produkowanej przez
przykładowy kompilator) z :
- wyrażeń arytmetycznych w stylu prefiksowym, np. '+2*3,4'
(gdzie przecinek oddziela kolejne liczby)
- wyrażeń arytmetycznych w stylu Lispu, np. '(+ 2 (* 3 4))'
(wyrażenia są ujęte w nawiasy, operator jest pierwszy,
składniki są oddzielone spacjami)
- wyrażeń arytmetycznych w notacji postfixowej, np. '2,3,4*+;'
czy '2,3*4+;' (przecinek oddziela liczby, średnik kończy wyrażenie)
Pierwsze dwa warianty łatwo zrobić rekursywnie, trzeci łatwo zrobić
czytając wyrażenie of końca, jeśli czyta się od początku to trzeba użyć
stos.
Zadanie 3
Napisać funkcję która mająć daną strukturę drzewiastą (zrobioną
przez funkcję z Zadania 2) wypisze wyrażenie z powrotem w jednej
z form zewnętrznych (podobnie jak funkcja 'wypisz' przykładowego
kompilatora).