\subsection{Variabelen}
\subsubsection{Verschil met \textit{While}}
Omdat \textit{Piet} geen variabelen opslag kent moeten we de variabelenopslag
van \textit{While} emuleren. Dit wordt gedaan door steeds een diepte toe te
kennen aan variabelen en bij het assignen van een variabele wordt deze in de
stack gestopt en onthouden welke diepte hij heeft om het zo via de onderstaande
algorithmen op te kunnen rakelen. Binnen de algorithmen wordt $n$ gebruikt als
diepte van de variabele(beginnende bij $1$) en $m$ als het aantal variabelen op
de stack bij aanvang van het opvragen.

\subsubsection{Unair}
Als er een operator uitgevoerd wordt die slechts \'e\'en waarde vraagt van de
stack hoeft er slechts \'e\'en waarde boven aan de stack gezet te worden en dit
gaat met de volgende operaties:\\
push $n$, push $n-1$, roll, dup, push $n+1$, push $1$, roll
\begin{table}[H]
	\centering
	\caption{Voorbeeld, $n=3$}
	\scriptsize
	\begin{tabular}{|c|c|c|c|c|c|c|c|}
		\hline
		init & 
		push $3$ & push $3-1$ & roll & dup & push $3+1$ & push $1$ & roll\\
		\hline
		5 & 3	& 2	& 2	& 2	& 4	& 1	& 2	\\\hline
		6	& 5	& 3	& 5	& 2	& 2	& 4	& 5	\\\hline
		2	& 6	& 5	& 6	& 5	& 2	& 2	& 6	\\\hline
		1	& 2	& 6	& 1	& 6	& 5	& 2	& 2	\\\hline
		3	& 1	& 2	& 3	& 1	& 6	& 5	& 1	\\\hline
		& 3	& 1	&	& 3	& 1	& 6	& 3	\\\hline
	  &	& 3	&	&	& 3	& 1	&	\\\hline
	   &	&	&	&	&	& 3	&	\\\hline
	\end{tabular}
\end{table}
Dit algorithme beschrijven we als $Un(n)$ voor later gebruik.

\subsubsection{Binair}
Als er een operator uitgevoerd wordt die twee waardes vraagt van de stack
worden deze boven elkaar boven op de stack gekopieert met de volgende
operaties:\\
$Un(n_1), Un(n_2+1)$
\begin{table}[H]
	\centering
	\caption{Voorbeeld, $n_1=2, n_2=4$}
	\scriptsize
	\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
		\hline
		& \multicolumn{7}{c|}{$Un(2)$} & \multicolumn{7}{c|}{$Un(4+1)$}\\
		\hline
		init & 
		push $2$ & push $3$ & roll & dup & push $3$ & push $1$ & roll &
		push $5$ & push $4$ & roll & dup & push $6$ & push $1$ & roll\\
		\hline
		5	& 2 & 3 & 6	& 6 & 3 & 1 & 6 & 5 & 4 & 1 & 1 & 6 & 1 & 1	\\\hline
		6	& 5	& 2 & 5	& 6	& 6 & 3 & 5	& 6 & 5 & 6 & 1 & 1 & 6 & 6	\\\hline
		2	& 6	& 5	& 2	& 5	& 6	& 6 & 6	& 5	& 6 & 5	& 6 & 1 & 1 & 5	\\\hline
		1	& 2	& 6	& 1	& 2	& 5	& 6	& 2	& 6	& 5	& 6	& 5	& 6 & 1 & 6	\\\hline
		3	& 1	& 2	& 3	& 1	& 2	& 5	& 1	& 2	& 6	& 2	& 6	& 5	& 6 & 2	\\\hline
		    & 3	& 1	&	& 3	& 1	& 2	& 3	& 1	& 2	& 3 & 2	& 6	& 5	& 1	\\\hline
		    & 	& 3	&	&	& 3	& 1	& 	& 3	& 1	&	& 3 & 2	& 6	& 3	\\\hline
		    & 	& 	&	&	&	& 3	& 	& 	& 3	&	&	& 3 & 2	&  	\\\hline
		    & 	& 	&	&	&	&	& 	& 	& 	&	&	&	& 3 &  	\\\hline
	\end{tabular}
\end{table}

\subsubsection{Assignment}
Het toewijzen van waarden aan variabelen kost in \textit{Piet} een stuk meer
werk omdat \textit{Piet} alle variabelen in een stack bewaard. Net als bij het
opvragen hebben de variabelen een nummer in plaats van een naam. Bij een
toewijzing wordt de waarde, $m$, bovenop de stack toegewezen aan de variabele
met de diepte, $n$, gerekend zonder de waarde bovenop de stack mee te tellen.
En dat gaat met de volgende operaties:\\
push $m$, push $n+1$, push $n$, roll, pop, push $n$, push $1$, roll
\begin{table}[H]
	\centering
	\caption{Voorbeeld, $n=4, m=7$}
	\scriptsize
	\begin{tabular}{|c|c|c|c|c|c|c|c|c|}
		\hline
		init & push 7 & push 5 & push 3 & roll & pop & push 4 & push 1 & roll\\
		\hline
		5	& 7 & 5 & 3 & 9	& 7	& 4 & 1 & 5	\\\hline
		3	& 5	& 7 & 5 & 7	& 5	& 7	& 4 & 3	\\\hline
		4	& 3	& 5	& 7 & 5	& 3	& 5	& 7	& 4	\\\hline
		9	& 4	& 3	& 5	& 3	& 4	& 3	& 5	& 7	\\\hline
		1	& 9	& 4	& 3	& 4	& 1	& 4	& 3	& 1	\\\hline
		5	& 1	& 9	& 4	& 1	& 5	& 1	& 4	& 5	\\\hline
			& 5	& 1	& 9	& 5	& 	& 5	& 1	&	\\\hline
			& 	& 5	& 1	& 	& 	& 	& 5	&	\\\hline
		 	& 	& 5	& 	&	&	& 	& 	&	\\\hline
	\end{tabular}
\end{table}

\begin{landscape}
\subsubsection{Groot voorbeeld}
We wijzen variabele $5$ de waarde van variabele $3$ $+$ variabele $2$ toe. 
\begin{table}[H]
	\centering
	\caption{Groot voorbeeld}
	\tiny
	\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
		\hline
		& \multicolumn{7}{c|}{$Un(3)$} &
		  \multicolumn{7}{c|}{$Un(2)$} &
		  Addition &
		\multicolumn{7}{c|}{$Ass(5)$}\\
		\hline
		init &
		push $3$ & push $2$ & roll & dup & push $4$ & push $1$ & roll &
		push $3$ & push $2$ & roll & dup & push $4$ & push $1$ & roll &
		add &
		push $6$ & push $5$ & roll & pop & push $5$ & push $1$ & roll\\
		\hline
		4	& 3 & 2 & 1 & 1 & 4	& 1	& 1 & 3 & 2 & 6	& 6	& 4 & 1 & 6	& 7 & 6 & 5
		& 7	& 7	& 5 & 1 & 7	\\\hline
		6 	& 4	& 3 & 4 & 1 & 1 & 4 & 4	& 1 & 3 & 1	& 6	& 6	& 4 & 1	& 4	& 7 & 6
		& 7	& 4	& 7	& 5 & 4	\\\hline
		1 	& 6	& 4	& 6 & 4 & 1 & 1 & 6	& 4	& 1 & 4	& 1	& 6	& 6	& 4	& 6	& 4	& 7
		& 4	& 6	& 4	& 7	& 6	\\\hline
		2 	& 1	& 6	& 1	& 6 & 4 & 1 & 1	& 6	& 4	& 1	& 4	& 1	& 6	& 6	& 1	& 6	& 4
		& 6	& 1	& 6	& 4	& 1	\\\hline
		7 	& 2	& 1	& 2	& 1	& 6 & 4 & 2	& 1	& 6	& 2	& 1	& 4	& 1	& 1	& 2	& 1	& 6
		& 1	& 2	& 1	& 6	& 2	\\\hline
		8 	& 7	& 2	& 7	& 2	& 1	& 6 & 7	& 2	& 1	& 7	& 2	& 1	& 4	& 2	& 7	& 2	& 1
		& 2	& 8	& 2	& 1	& 7	\\\hline
			& 8	& 7	& 8	& 7	& 2	& 1	& 8	& 7	& 2	& 8	& 7	& 2	& 1	& 7	& 8	& 7	& 2
		& 8	& 	& 8	& 2	& 8	\\\hline
			& 	& 8	& 	& 8	& 7	& 2	& 	& 8	& 7	& 	& 8	& 7	& 2	& 8	&	& 8	& 7
		& 	& 	& 	& 8	&	\\\hline
			& 	& 	& 	& 	& 8	& 7	& 	& 	& 8	& 	& 	& 8	& 7	&	&	&	& 8
		& 	& 	& 	& 	&	\\\hline
			& 	& 	&	& 	& 	& 8	&	& 	& 	& 	& 	& 	& 8	&	&	&	&
		& 	&	& 	& 	&	\\\hline
	\end{tabular}
\end{table}
\end{landscape}
