\documentclass[a4paper]{article}
\setlength{\oddsidemargin}{-2cm} \setlength{\topmargin}{-3cm}
\setlength{\textwidth}{20cm} \setlength{\textheight}{28cm}
\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}
\begin{document}

\begin{center}
\textbf{Prevodioci i Interpretatori - Septembar 2013.}\\
prakti\v cni deo
\end{center}

\begin{enumerate}

\item Konstruisati MDKA za prepoznavanje jezika nad azbukom $\Sigma
  =\{a,b\}$ \v cija svaka re\v c ne sme da sadr\v zi faktor $abab$, i
  zatim napisati $C$ program koji proverava da li uneta niska pripada
  ovom jeziku.

\item Implementirati interpretator koji sra\v cunava vrednosti izraza
  u kojima se javljaju prirodni brojevi i liste prirodnih
  brojeva. Svaka naredba iterpretatora se zavr\v sava znakom $;$.
\begin{enumerate}

\item Nad brojevima je mogu\' ce vr\v siti sve \v cetiri aritmeti\v
  cke operacije, pri \v cemu je deljenje celobrojno, a oduzimanje ve\'
  ceg broja od manjeg daje 0. Funkcija $Suc$ ra\v cuna sledbenik
  broja. Npr.
\begin{verbatim}
Suc(5);                                   6
1 + 2*3;                                  7
3 - 1;                                    2
3 - 2*2;                                  0
\end{verbatim}
\item Liste se zapisuju kao $[a1, ..., an]$. Operator $\#$ dopisuje
  element na po\v cetak liste, a operator $@$ nadovezuje dve
  liste. Npr.
\begin{verbatim}
[1, 2, 3];                                [1, 2, 3]
1 # [];                                   [1]
[1, 2] @ [1+2, 4];                        [1, 2, 3, 4]
\end{verbatim}
\item Dopu\v steno je i kori\v s\' cenje $let$ vezivanja. Promenljive
  su tada strogo lokalne, tj. va\v ze samo u $let$ izrazu. Npr.
\begin{verbatim}
let x = 3 in 2*x;                                   6
let l1 = [1, 2]; l2 = [3, 4] in l1 @ l2;            [1, 2, 3, 4]
\end{verbatim}
\item Nad listama su definisane funkcije $hd$ koja izdvaja glavu (prvi
  element) liste, $tl$ koja izdvaja rep liste, operator $!$ koji
  izdvaja n-ti element (brojanje po\v cinje od 1), $rev$ koja obr\' ce
  listu i $sort$ koja sortira listu rastu\' ce. Npr.
\begin{verbatim}
hd([1, 2, 3]);                            1
tl([1, 2, 3]);                            [2, 3]
[6, 7, 8, 9] ! 2;                         7
rev([1, 2, 3]);                           [3, 2 1]
sort([7, 9, 8, 6]);                       [6, 7, 8, 9]
\end{verbatim}

\item Mogu\' ce je definisanje funkcija primitivnom rekurzijom (nad
  brojevima i nad listama) i njihovo kori\v s\' cenje u izrazima. Npr.
\begin{verbatim}
primrec sum where
  sum(0) = 0;
| sum(Suc(n)) = (Suc n) + sum n;
sum(5);                                   15
primrec power where
  power(x, 0) = 1;
| power(x, (Suc n)) = x * power(x, n);
power(2, 3);                              8
primrec length where
  length([]) = 0;
| length(h#t) = 1 + length(t);
length([3, 7, 2]);                        3
\end{verbatim}

\end{enumerate}
\end{enumerate}

\end{document}
