diff options
-rw-r--r-- | defio.tex | 6 | ||||
-rw-r--r-- | defsyn.tex | 3 | ||||
-rw-r--r-- | deftrans.tex | 2 | ||||
-rw-r--r-- | intro.tex | 4 | ||||
-rw-r--r-- | introcoms.tex | 2 | ||||
-rw-r--r-- | rules.tex | 4 |
6 files changed, 10 insertions, 11 deletions
@@ -2,7 +2,7 @@ \subsection{Input en output} \label{sec:def:io} -Allereerst definiëren we het type $\Stack{a}$, omdat stacks we veel met stacks +Allereerst definiëren we het type $\Stack{a}$, omdat we veel met stacks doen in onze semantiekregels. Een $\Stack{a}$ (lees: een stack van elementen van type $a$) is een simpel datatype met de volgende syntax: @@ -20,8 +20,8 @@ Op een stack zijn twee instructies gedefinieerd: \pop{[e:\stk]} \isdef (e,\stk) \\ \end{gather*} -$\popop$ is een partiële functie omdat $\pop\Nil$ niet gebruikt mag worden in -onze semantiekregels. %todo waarom niet? +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. + \medskip We zullen de input en output beide als $\Stack{\String}$ modelleren. In feite @@ -18,6 +18,5 @@ We definiëren de volgende syntax: Een karakter, $\SynChar$, is een symbool uit de ASCII tabel. -Programma's zijn lijsten van statements. Compositie van statements is -impliciet. +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. diff --git a/deftrans.tex b/deftrans.tex index 2a9fb34..d83bf55 100644 --- a/deftrans.tex +++ b/deftrans.tex @@ -1,7 +1,7 @@ % vim: set spelllang=nl: \subsection{Transities} \label{sec:def:trans} -We hebben gekozen om de semantiek van Smurf in natuurlijke semantiek te definiëren. In principe hadden we er ook voor kunnen kiezen om te gaan voor structurele operationele semantiek, echter denk wij dat we door het gebruik van natuurlijke semantiek meer kunnen in onze analyse. +We hebben gekozen om de semantiek van Smurf in natuurlijke semantiek te definiëren. In principe hadden we er ook voor kunnen kiezen om te gaan voor structurele operationele semantiek, echter denken wij dat we door het gebruik van natuurlijke semantiek meer kunnen in onze analyse. Bij het definiëren van de natuurlijke semantiek van Smurf zullen we de verzameling van transities als een relatie $\to$ tussen @@ -12,8 +12,8 @@ Westcott. In de specificatie~\cite{safalra} beschrijft hij kort wat Smurf is: strings in a forty manner. \end{quote} Voor iemand die niet in de materie zit is deze beschrijving misschien wat -overweldigend. Het gaat om een Forth-achtige programmeertaal. De eigenschappen -van Forth die belangrijk zijn in Smurf, zijn de volgende: +overweldigend. In het kort zijn de eigenschappen +van Smurf die het belangrijkst zijn de volgende: \begin{itemize} \item Stack-geörienteerd: alle operaties werken op een stack van strings. \item Reflection: het is mogelijk (en in veel gevallen zelfs noodzakelijk) diff --git a/introcoms.tex b/introcoms.tex index 7ac091a..adbf118 100644 --- a/introcoms.tex +++ b/introcoms.tex @@ -26,7 +26,7 @@ bespreken. Alle commando's betekenen nog steeds hetzelfde. \item[\smurfinline{o} of $\StmOutput$] Stuurt het bovenste element van de stack naar `de output'. \item[\smurfinline{p} of $\StmPut$] - Hierbij wordt ervoor gezorgd dat de waarde van de variablenaam bovenop de + 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. @@ -8,8 +8,8 @@ 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. -We kiezen ervoor om het in zulk soort gevallen onmogelijk te maken een +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. |