{\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$\\
+\textbf{Piet'} $push \: 3, push \: 2, sub, push \: 1, push \: 1, sub, gre, not, push \: 3,
+ push \: 4, gre, not, add, push \: 1, gre$\\
Om de semantiekregels te kunnen beschrijven maken we gebruik van hulpfuncties.
Hieronder staat het type van de functies en een korte beschrijving.
De implementatie is gedaan in de vorm van een functioneel programma in de taal \textit{Clean}.
-De implementatie van deze functies staat in de appendix.
-De functies worden op de volgende manier aangegeven: \textit{naam functie} (\textit{naam in appendix}, r. \textit{regelnummer in appendix})\\
+De implementatie van de functies staat in de appendix.
+Elke functie wordt op de volgende manier aangegeven: \textit{naam functie} (\textit{naam in appendix}, r. \textit{regelnummer in appendix})\\
delete functie (d, r. 5):\\
Om het bovenste element van een stack weg te kunnen gooien gebruiken we de volgende
roll functie (roll, r. 54):\\
Om de elementen op de stack te verschuiven gebruiken we de volgende functie:\\
$$\mathcal{ROLL} : Stack \rightarrow Stack$$\\
-Deze functie haalt de bovenste twee elementen van de stack 'rolt' de rest van de stack tot een diepte die gelijk is aan de waarde van het tweede bovenste element. Een rol tot diepte \textit{n} verschuift de elementen 1 tot en met \textit{n} allemaal 1 plaats naar boven. Vervolgens wordt het eerste element van de stack op plaats \textit{n} neergelegd. Het aantal keren dat de stack gerold wordt is gelijk aan de waarde van het bovenste element. Als deze waarde negatief is word de stack in tegenovergestelde richting gerold. Dit houdt in dat bij elke rol het element op plaats \textit{n} bovenop de stack word gelegt, en de rest van de elementen (dat boven het element op plaats \textit{n} lagen) 1 plaats naar beneden wordt verschoven.\\
+Deze functie haalt de bovenste twee elementen van de stack 'rolt' de rest van de stack tot een diepte die gelijk is aan de waarde van het tweede bovenste element. Een rol tot diepte \textit{n} verschuift de elementen 1 tot en met \textit{n} allemaal 1 plaats naar boven. Vervolgens wordt het eerste element van de stack op plaats \textit{n} neergelegd. Het aantal keren dat de stack gerold word is gelijk aan de waarde van het bovenste element. Als deze waarde negatief is word de stack in tegenovergestelde richting gerold. Dit houdt in dat bij elke rol het element op plaats \textit{n} bovenop de stack word gelegd, en de rest van de elementen (dat boven het element op plaats \textit{n} lagen) 1 plaats naar beneden wordt verschoven.\\
out number (output stack) functie (outnum, r. 70):\\
Deze functie past de output stack aan als er een integer naartoe geschreven wordt:\\
Met behulp van deze gedefinieerde functies kunnen we nu de semantiekregels opstellen.
De meeste regels spreken redelijk voor zich: als een commando wordt uitgevoerd, zorgt dit voor een verandering in de bijbehorende stack. Deze verandering komt tot stand door het toepassen van de bijbehorende hulpfunctie op deze stack.
-Voor de afleidings regels voor de compositie halen we, in tegenstelling tot de normale gang van zaken bij sos, steeds een commando van het einde van de lijst af.
+Voor de semantiekregels voor de compositie halen we, in tegenstelling tot de normale gang van zaken bij sos, steeds een commando van het einde van de lijst af.
Hiervoor is gekozen zodat de afleidingsrijen makkelijk te controleren zijn door bij de implementatie in \textit{Clean} de functies een voor een op een stack toe te passen.\\
\begin{alignat*}{2}