diff options
-rw-r--r-- | defio.tex | 10 | ||||
-rw-r--r-- | defmeta.tex | 3 | ||||
-rw-r--r-- | defsyn.tex | 7 | ||||
-rw-r--r-- | introcoms.tex | 7 | ||||
-rw-r--r-- | rules.tex | 12 |
5 files changed, 24 insertions, 15 deletions
@@ -20,8 +20,12 @@ Op een stack zijn twee instructies gedefinieerd: \pop{[e:\stk]} \isdef (e,\stk) \\ \end{gather*} -In de documentatie \cite{safalra} wordt niet beschreven wat er gebeurt wanneer een $\popop$ wordt uitgevoerd op een lege stack. In de \texttt{Perl}-interpreter van de taal wordt ervoor gekozen om het programma abrupt te termineren met een error. Wij hebben ervoor gekozen om $\popop$ als een partiële functie te zien waar $\pop\Nil$ ongedefinieerd blijft zodat er geen afleidingsbomen bestaan voor programma's waar dit gebeurt. - +In de documentatie \cite{safalra} wordt niet beschreven wat er gebeurt wanneer +een $\popop$ wordt uitgevoerd op een lege stack. In de +\emph{Perl}-interpreter van de taal wordt ervoor gekozen om het programma +abrupt te termineren met een error. Wij hebben ervoor gekozen om $\popop$ als +een partiële functie te zien waar $\pop\Nil$ ongedefinieerd blijft zodat er +geen afleidingsbomen bestaan voor programma's waar dit gebeurt. \medskip We zullen de input en output beide als $\Stack{\String}$ modelleren. In feite @@ -29,7 +33,7 @@ zal zelfs blijken dat we op $\Input$ de operatie $\pushop$ niet nodig hebben, en op $\Output$ de operatie $\popop$ niet zullen gebruiken. Informeel beschouwen we $\Input$ als een `bron' van $\String$s en $\Output$ als een `put' van $\String$s. Formeel: + \begin{align*} \Input &\isdef \Stack{\String} \\ \Output &\isdef \Stack{\String} \end{align*} - diff --git a/defmeta.tex b/defmeta.tex index 51f5ddd..05a1de1 100644 --- a/defmeta.tex +++ b/defmeta.tex @@ -9,7 +9,8 @@ We zullen de volgende metavariabelen gebruiken: \item[$s$] voor strings ($\String$), \item[$\var$] voor strings die als naam van een variabele worden gebruikt, \item[$\val$] voor strings die als waarde van een variabele worden gebruikt, - \item[$e$] voor elementen van stacks ($a$ voor een element van $\Stack{a}$), + \item[$e$] voor elementen van stacks ($a$ voor een element van $\Stack{a}$ + (zie \autoref{sec:def:io}), \item[$\stk$] voor stacks ($\Stack{a}$ voor willekeurige $a$), \item[$\ip$] voor inputstacks ($\Input$), \item[$\op$] voor outputstacks ($\Output$), @@ -16,7 +16,8 @@ We definiëren de volgende syntax: <String> ::= <Char><String> | $\lambda$ \end{grammar} -Een karakter, $\SynChar$, is een symbool uit de ASCII tabel. - -Programma's zijn lijsten van statements. Merk op dat compositie van statements hier expliciet is door middel van de ``:'', waar compositie in de oorspronkelijke versie van de syntax impliciet was. +Een karakter, $\SynChar$, is een symbool uit de ASCII tabel. +Programma's zijn lijsten van statements. Merk op dat compositie van statements +hier expliciet is door middel van de \lit{:}, waar compositie in de +oorspronkelijke versie van de syntax impliciet was. diff --git a/introcoms.tex b/introcoms.tex index 202f525..638a11e 100644 --- a/introcoms.tex +++ b/introcoms.tex @@ -28,10 +28,11 @@ bespreken. Alle commando's betekenen nog steeds hetzelfde. \item[\smurfinline{p} of $\StmPut$] Hierbij wordt ervoor gezorgd dat de waarde van de variabelenaam bovenop de stack verwijst naar de string die daaronder staat. - \item[\smurfinline{g} of $\StmGet$] - Zoekt de variabele op met als naam de bovenste waarde van de stack en zet de waarde van die variabele bovenop de stack. + \item[\smurfinline{g} of $\StmGet$] + Zoekt de variabele op met als naam de bovenste waarde van de stack en zet + de waarde van die variabele bovenop de stack. \item[\smurfinline{h} of $\StmHead$] - Vervang de string bovenop de stack met zijn eerste karakter. + Vervangt de string bovenop de stack door zijn eerste karakter. \item[\smurfinline{t} of $\StmTail$] Zet alles behalve de head van de string bovenop de stack op de stack. \item[\smurfinline{q} of $\StmQuotify$] @@ -8,11 +8,13 @@ geldt dat als elementen van de stack worden gebruikt in die regel, de stack niet leeg mag zijn voor het uitvoeren van de regel. %todo waarom deze keuze? De documentatie \cite{safalra} beschrijft niet wat er gebeurt wanneer er niet -genoeg argumenten op de stack staan om een bepaalde instructie uit te voeren. In de \texttt{Perl}-interpreter van de taal is ervoor gekozen om een dergelijk programma abrupt te laten termineren met een foutmelding. -Wij kiezen er echter voor om het in zulk soort gevallen onmogelijk te maken een -afleidingsboom te maken (in tegenstelling tot bijvoorbeeld een errorstatus aan -de rechterkant van transities toe te voegen), omdat dit het redeneren over -Smurfprogramma's makkelijker zal maken. +genoeg argumenten op de stack staan om een bepaalde instructie uit te voeren. +In de \emph{Perl}-interpreter van de taal is ervoor gekozen om een dergelijk +programma abrupt te laten termineren met een foutmelding. Wij kiezen er echter +voor om het in zulk soort gevallen onmogelijk te maken een afleidingsboom te +maken (in tegenstelling tot bijvoorbeeld een errorstatus aan de rechterkant van +transities toe te voegen), omdat dit het redeneren over Smurfprogramma's +makkelijker zal maken. \input{ruleslambda} \input{rulespush} |