\documentclass[a4paper]{article}
\setlength{\oddsidemargin}{-1cm} \setlength{\textwidth}{17cm}
\setlength{\textheight}{27cm} \setlength{\topmargin}{-3cm}
\pagestyle{empty}

\def\DJ{\leavevmode\setbox0=\hbox{D}\kern0pt
 \rlap{\kern.04em\raise.188\ht0\hbox{-}}D}
\def\dj{\leavevmode\setbox0=\hbox{d}\kern0pt
 \rlap{\kern.215em\raise.46\ht0\hbox{-}}d}
\usepackage{amssymb}
\begin{document}
{\small

\begin{center}
{\bf Prevodioci i interpretatori - Jun 2006. - prakti\v cni deo}
\end{center}
\begin{enumerate}
\item Na lokalnom ra\v cunaru je sme\v sten sadr\v zaj web sajta u
obliku skupa html datoteka raspore\dj enih u okviru direktorijuma
\verb"www" i njegovih poddirektorijuma. Ime po\v cetne strane
sajta se navodi kao argument komandne linije perl skripta, a
podrazumeva se da je \verb"index.html" ukoliko ovaj argument nije
naveden. Datoteke su povezane hiperlinkovima. Napisati perl skript
koji generi\v se izve\v staj o svim datotekama do kojih se mo\v ze
sti\' ci pra\' cenjem lokalnih linkova, krenu\v si od po\v cetne strane
sajta. Uz ime svake datoteke potrebno je navesti broj linkova koji
vode od nje kao i broj linkova koji vode do nje. Izve\v staj bi
trebalo da bude ure\dj en opadaju\' ci po "popularnosti" datoteke
tj. drugom od pomenutih brojeva.

\item Programski jezik dopu\v sta definisanje funkcija \v ciji su argumenti,
lokalne promenljive i rezultat isklju\v civo celi brojevi. Definicija
funkcije po\v cinje klju\v cnom re\v cju \verb"function" za kojom
(opciono) sledi ime rezultatske promenljive i znak \verb"=", zatim
ime funkcije i u zagradama lista argumenata funkcije. Telo funkcije
se navodi u okviru viti\v castih zagrada i sadr\v zi niz naredbi
dodele, izraza i/ili poziva ugra\dj ene funkcije \verb"print" koja slu\v zi
za ispis. Jezik podr\v zava aritmeti\v cke izraze nad celim brojevima
kao i ternarni operator \verb"?:". Izvr\v savanje programa po\v cinje
od funkcije sa imenom \verb"main". Napisati interpretator za dati
jezik. Npr.
\begin{verbatim}
function c = proizvod(a, b) {
    c = a*b;
}

function f = faktorijel(n) {
    f = n==0 ? 1 : n*faktorijel(n-1);
}

function ispisi_kvadrat(n) {
    a = n*n;
    print(a);
}

function main(){
    a = 5; b = 6;
    ispisi_kvadrat(a);
    print(proizvod(a, b));
    print(faktorijel(a));
}
\end{verbatim}

Predlog re\v senja zadatka:
\begin{enumerate}
    \item Gramatikom opisati dati jezik i napisati leksi\v cki
    analizator za njega.

    \item Definisati hijerarhiju klasa za predstavljanje sintaksnog
    stabla kojim se predstavlja k\^ od u telu funkcija. Za po\v cetak dopustiti samo naredbe dodele
    aritmeti\v ckih izraza promenljivim i kori\v s\' cenje ugra\dj ene funkcije  \verb"print".

    \item Definisati klasu \verb"Funkcija".
    Klasa bi trebalo da \v cuva imena ulaznih parametara,
    ime izlaznog parametra i sintaksno stablo koje
    predstavlja k\^ od same funkcije. Interpretator bi globalno trebalo da \v cuva
    mapiranje imena definisanih funkcija u objekte klase \verb"Funkcija".

    \item Kroz hijerarhiju \v cvorova sintaksnog stabla
    definisati metod \verb"Interpret" koji vr\v si interpretaciju
    programa predstavljenog stablom. Argument ovog metoda bi
    trebalo da bude mapiranje imena promenljivih u njihove vrednosti.

    \item U klasi \verb"Funkcija" definisati metod \verb"Call" kojim se
    poziva sama funkcija i vra\' ca vrednost njenog rada. Ovaj
    metod bi trebalo da iskoristi napravljeni metod za interpretaciju k\^ oda
    predstavljenog sintaksnim stablom. Argument metoda \verb"Call" je niz
    brojeva koji predstavljaju ulazne parametre funkcije, a rezultat je ceo broj
    koji predstavlja rezultat funkcije. U glavnom programu interpretatora pozvati
    metod \verb"Call" funkcije \verb"main".

    Testirati sa
\begin{verbatim}
    function main() {
        print(2+3*5);
    }
\end{verbatim}

\item U izrazima omogu\' citi i pozive funkcija kreiranjem klase \verb"PozivFunkcije".

\begin{verbatim}
    function a = f(b) {
        a = b+1;
    }
    function main()
    {
        print(f(3));
    }
\end{verbatim}

\item Omogu\' citi kori\v s\' cenje ternarnog uslovnog operatora \verb"?:".

\end{enumerate}

\end{enumerate}
\end{document}
