\subsection{Variabelen}
\subsubsection{Verschil met \textit{While}}
Omdat \textit{Piet} geen variabelenopslag kent moeten we de variabelenopslag
van \textit{While} emuleren. Dit wordt gedaan door steeds een diepte toe te
kennen aan variabelen en bij het toewijzen van een variabele wordt deze in de
stack gestopt en onthouden welke diepte hij heeft om het zo via de onderstaande
algoritmen op te kunnen halen. Binnen de algoritmen 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 opvragen van een natuurlijk getal}
Bij het opvragen van een vaste waarde gaat doormiddel van $Get(n)$ functie.


\subsubsection{Unair}
\label{subsec: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 bij $n>1$:\\
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}
Voor $n=1$ voldoet de volgende operatie:\\
dup\\
Dit algoritme 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 gekopieerd 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 bewaart. 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 voor $n>1$:\\
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}

Voor $n=1$ voldoen de volgende operaties:\\
push $2$, push $1$, roll, pop

\begin{landscape}
\subsubsection{Groot voorbeeld}
We wijzen variabele $5$ de waarde van variabele $3$ $+$ variabele $2$ toe. Dit
laat zien dat de verschillende beschreven variable functies ook in combinatie
werken.
\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}
