variabelen opslag klaar
authorMart Lubbers <mart@martlubbers.net>
Thu, 15 May 2014 20:56:11 +0000 (22:56 +0200)
committerMart Lubbers <mart@martlubbers.net>
Thu, 15 May 2014 20:56:11 +0000 (22:56 +0200)
an_variabelen.tex

index 9e46b6b..ae9268d 100644 (file)
@@ -1,16 +1,65 @@
 \subsection{Variabelen}
-Variabelen in \textit{While} worden op een totaal andere manier opgeslagen in
-\textit{Piet}. Waar variabelen in while een naam hebben, hebben variabelen in
-\textit{Piet} een nummer en kunnen ze door het aanroepen van een functie
-bovenaan gezet worden. De functie kan precies $1$ of precies $2$ variabelen
-boven aan de stack zetten. Hetzelfde kan voor de variabelen posities $a$ en $b$
-waarbij $b>a$. De piet' code om de variabele boven aan te krijgen is dan als
-volgt: $push b-1, push b-a, roll, push b, push b, push b*2, sub, roll$.\\
-Allereerst wordt $b-1$ op de stack gedrukt, dit bepaalt de diepte van de eerste
-$roll$ en zorgt ervoor dat $a$ tegen $b$ aan komt te liggen. $b-a$ wordt dat op
-de stack gepushed, dit is het verschil tussen $a$ en $b$ en bepaalt het aantal
-rolls er gedaan wordt op de stack, dit zijn er precies genoeg om $a$ bij $b$ te
-plaatsen. Vervolgens moeten ze nog naar boven en dat kan door $-b+1$ stappen te
-rollen met een diepte van $b$. de eerste $push b$ bepaalt de diepje en
-vervolgens wordt met $push b, push b*2-1, sub$ $b-1$ op de stack gepushed om te
-rollen en $a$ en $b$ bovenaan te plaatsen.
+\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)$\\
+Voorbeeld, $n_1=2, n_2=4$\\
+\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}