vars, en arethm
authorMart Lubbers <mart@martlubbers.net>
Thu, 8 May 2014 19:47:01 +0000 (21:47 +0200)
committerMart Lubbers <mart@martlubbers.net>
Thu, 8 May 2014 19:47:01 +0000 (21:47 +0200)
an_arit_expr.tex
an_assignment.tex

index 2211e8a..1e15a60 100644 (file)
@@ -1 +1,61 @@
-\subsection{Aritmatische expressies en booleaanse waarden}
+\subsection{Aritmatische expressies}
+Het uitrekenen van een arithmatische expressie in \textit{Piet} moet in
+verschillende stappen gebeuren. Volgens de regels van de wiskunde worden er
+telkens binaire operaties uitgevoerd tot het vereenvoudigd is tot een enkele
+numerieke waarde. Het opvragen van variabelen uit het geheugen word in een
+volgende subsectie besproken en we gaan er nu van uit dat dat een triviale
+operatie is die een of twee variabelen boven aan zetten op een gekozen
+volgorde.\\
+Na het opvragen van variabele $n$ wordt de variabele boven aan gezet en krijgen
+de andere variabelen automatisch andere nummers. De variabelen met een positie
+strict kleiner dan $n$ krijgen een positie verhoging van $1$ en de variabelen
+met een positie strict groter dan $n$ krijgen een positie verlaging van $1$.\\
+Bijvoorbeeld bij de expressie $1+1$ is de eerste stap twee keen een $1$ op de
+stack duwen en vervolgens de binare $+$ operator toe te passen en dat gaat als
+volgt:\\
+\textbf{While} $x := 1 + 1$\\
+\textbf{Piet}
+\begin{tabular}{cccc}
+       {\color{red}\#} &
+       {\color{dred}\#} &
+       {\color{lred}\#} &
+       {\color{lyellow}\#}
+\end{tabular}\\
+\textbf{Piet'} $push 1, push 1, add$\\
+
+\textbf{While} $x := y + 3 * 2$\\
+\textbf{Piet}
+\begin{tabular}{cccccccc}
+       {\color{red}\#} & {\color{dred}\#} & {\color{dred}\#} & {\color{lred}\#}
+       {\color{dyellow}\#} & ...variable retrieval... & {\color{dyellow}\#} & 
+       {\color{dgreen}\#}\\
+       {\color{red}\#} & {\color{dred}\#}\\
+\end{tabular}\\
+\textbf{Piet'} $push 2, push 3, mul, get y, add$\\
+
+\subsection{Booleaanse expressies}
+Het evalueren van booleaanse expressies gaat hetzelfde als aritmatische
+expressies, het enige verschil is dat er binnen de booleanse operatoren
+operatoren bestaan die niet voorkomen in \textit{Piet} en deze moeten dus
+herschreven worden. De operatoren die herschreven worden zijn: $=, \leq,
+\wedge\\
+\begin{array}{ll}
+       a \wedge b      & a+b>1\\
+       a = b           & \neg(a-b>0)\\
+       a \leq b        & \neg(a>b)
+\end{array}$\\
+\textbf{While} $3=2\wedge 3\leq 4$\\
+\textbf{Piet}
+\begin{tabular}{ccccccccccccccc}
+       {\color{red}\#} & {\color{dred}\#} & {\color{lred}\#} & {\color{yellow}\#}
+       & {\color{dyellow}\#} & {\color{lyellow}\#} & {\color{dgreen}\#} &
+       {\color{dmagenta}\#} & {\color{lyellow}\#} & {\color{yellow}\#} &
+       {\color{blue}\#} & {\color{dred}\#} & {\color{magenta}\#} &
+       {\color{dmagenta}\#} & {\color{green}\#}\\
+       {\color{red}\#} & {\color{dred}\#} & & & & & & & {\color{lyellow}\#} &
+       {\color{yellow}\#}\\
+       {\color{red}\#} & & & & & & & & {\color{lyellow}\#} & {\color{yellow}\#}\\
+        & & & & & & & & & {\color{yellow}\#}
+\end{tabular}\\
+\textbf{Piet'} $push 3, push 2, sub, push 1, push 1, sub, gre, not, push 3,
+                push 4, gre, not, add, push 1, gre$\\
index b13c5f4..b177760 100644 (file)
@@ -1 +1,30 @@
 \subsection{Assignment}
+Het toewijzen van waarden aan variabelen kost in \textit{Piet} een stuk meer
+werk omdat \textit{Piet} alle variabelen in een stack op slaat. Variabelen in
+piet kunnen we nummers toewijzen. De diepte van de variabele in de stack
+bepaald het nummer en als we aan de hand daarvan. Als er een assignment gedaan
+wordt krijgt de variabele nummer $1$ en alle nummers van de bestaande
+variabelen stijgen met $1$. Als er dus een waarde $n$ wordt toegewezen aan een
+naam dan moet er een blok gemaakt worden van grootte $n$ en dan een push gedaan
+worden op de volgende manier:\\
+\textbf{While} $x := 1$\\
+\textbf{Piet}
+\begin{tabular}{cc}
+       {\color{red}\#} & {\color{dred}\#}\\
+\end{tabular}\\
+\textbf{Piet'} $push 1$\\
+\textbf{While} $x := 5$\\
+\textbf{Piet}
+\begin{tabular}{cc}
+       {\color{red}\#} & {\color{dred}\#}\\
+       {\color{red}\#} & {\color{red}\#}\\
+       {\color{red}\#} & {\color{red}\#}
+\end{tabular}\\
+\textbf{Piet'} $push 5$\\
+Bij arithmatische expressies vindt automatisch een toewijzing plaatst doordat
+de uitkomst van de expressie boven op de stack staat en dus aan een waarde
+toegewezen word.\\
+Merk op dat de waarde $0$ niet gepushed kan worden dus om de waarde $0$ op de
+stack te krijgen moet men $n-n$ uitvoeren.
+%Notes: op een gegeven moment kan het sneller door een waarde te pushen en dan
+%met twee te vermenigvuldigen een aantal keren.