From: Mart Lubbers Date: Thu, 8 May 2014 19:47:01 +0000 (+0200) Subject: vars, en arethm X-Git-Url: https://git.martlubbers.net/?a=commitdiff_plain;h=65303619b64820767647cdfbae6e57676be7ce66;p=sec1415.git vars, en arethm --- diff --git a/an_arit_expr.tex b/an_arit_expr.tex index 2211e8a..1e15a60 100644 --- a/an_arit_expr.tex +++ b/an_arit_expr.tex @@ -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$\\ diff --git a/an_assignment.tex b/an_assignment.tex index b13c5f4..b177760 100644 --- a/an_assignment.tex +++ b/an_assignment.tex @@ -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.