\documentclass[a4paper]{article}

\setlength{\textwidth}{18cm} \setlength{\oddsidemargin}{-1cm}
\setlength{\topmargin}{-2cm} \setlength{\textheight}{26cm}
\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}
\pagestyle{empty}

\begin{document}
\begin{small}

\begin{center}
\textbf{Prevodioci i interpretatori - Oktobar 2005. - prakti\v cni
deo ispita}
\end{center}

\begin{enumerate}
\item Direktorijum \v cije se ime navodi kao argument komandne
linije \textsc{perl} skripta sadr\v zi poddirektorijum za svakog
studenta, imenovan na uobi\v cajeni na\v cin (npr.
\texttt{mr01234}). Svaki poddirektorijum sadr\v zi re\v senja
zadataka ra\dj enih u nekom od uobi\v cajenih programskih jezika i
stoga su datoteke sa re\v senjima oblika \texttt{broj.c},
\texttt{broj.cpp}, \texttt{broj.java} ili \texttt{broj.pas}. Radi
lak\v seg pregledanja, potrebno je pregrupisati datoteke i umesto
organizacije direktorijuma po studentima napraviti organizaciju
direktorijuma po zadacima. Zadatak \textsc{perl} skripta koji
treba napisati je da u teku\' cem direktorijumu napravi
poddirektorijum \verb"reogranizovano" koji \' ce za svaki zadatak
koji je ra\dj en da sadr\v zi poddirektorijum sa brojem zadatka, a
koji \' ce dalje da sadr\v zi poseban poddirektorijum za svaki od
jezika u kome je taj zadatak ra\dj en. Ovi direktorijumi \' ce da
sadr\v ze datoteke sa re\v senjima, pri \v cemu \' ce svaka
datoteka biti imenovana oznakom studenta koji je kreirao i
ekstenzijom koja ukazuje na programski jezik. (npr. \texttt{mr01234.c}). \hfill[20]

\item Napisati interpretator za programski jezik koji podse\' ca
na \textsc{perl}.  Jezik poseduje skalarni tip podataka koji obuhvata brojeve i niske karaktera.
Pored ovoga definisane su i liste skalara. Imena skalarnih promenljivih po\v cinu simbolom
\verb"$", dok promenljive lista po\v cinju simbolom \verb"@". Brojevne konstante se navode
uobi\v cajeno, dok se niske navode izme\dj u navodnika. Ukoliko su navodnici dvostruki, vr\v si
se interpolacija (zamena imena promenljivih i specijalnih karaktera njihovim vrednostima),
dok se kod jednostrukih navodnika sadr\v zaj tuma\v ci bukvalno kako je naveden. Za \v stampanje vrednosti
jezik raspola\v ze funkcijom \verb"print" kojoj se kao argument navodi niska karaktera koju treba od\v stampati,
dok su za rad sa listama na raspolaganju funkcije \verb"push" i \verb"pop".

\begin{verbatim}
$a = 3.5; $b = ($a + 5)/2; $c = "1234";
$d = $c + 3; $e = '$a b'.($c x 2);
print '$d\n'; print "$e\n";                              $d\n$a b12341234
@lista = ($a, $b, $c);                                   3.5 4.25 1234 1237
push(@lista, $d);                                        1237
print @lista;
$a = pop(@lista);
print $a;
\end{verbatim}
\begin{enumerate}
    \item Omogu\' citi definisanje brojevnih skalara i promenljivih i vr\v senje osnovnih
    aritmeti\v ckih operacija nad njima. \hfill[5]
    \begin{verbatim}
    $a = (12+3.5)*2;
    \end{verbatim}
    \item Omogu\' citi definisanje niski uz vr\v senje interpolacije gde je to potrebno. Implementirati ugra\dj enu
    funkciju \verb"print". \hfill[5]
    \begin{verbatim}
    $z = "Zdravo";
    $a = '$z\n'; $b = "$z\n";                           $z\n
    print "$a\n"; print "$b";                           Zdravo
    print "123";                                        123
    \end{verbatim}
    \item Implementirati operatore konkatenacije \verb"." i \verb"x". \hfill[5]
    \begin{verbatim}
    $a = "abc"."123"; $b = "12"x2;
    print "$a\t$b";                                       abc123  1212
    \end{verbatim}

    \item Implementirati konverzije skalarnog tipa. \hfill[5]
    \begin{verbatim}
    $a = 12; $b = "34"; $c = $a + $b; $d = $a.$b;
    print "$c"; print " $d";                             46 1234
    \end{verbatim}

    \item Implementirati definisanje i ispis lista. \hfill[5]
    \begin{verbatim}
    @l = (1, 2, "Zdravo");
    print @l;                                            1 2 Zdravo
    \end{verbatim}
    \item Implementirati funkcije \verb"push" i \verb"pop". \hfill[5]
    \begin{verbatim}
    $a = 1; @l = ($a, 2, "Zdravo");
    push(@l, $a);
    $b = pop(@l);
    print $b;                                            1
    \end{verbatim}

\end{enumerate}

\end{enumerate}


\end{small}
\end{document}
