From 1afdd041fa48a4badc48369b29bdd9d99e632a82 Mon Sep 17 00:00:00 2001 From: Marjolein Zwerver Date: Tue, 20 May 2014 15:29:25 +0200 Subject: [PATCH] natuurlijke taal bij semantiek --- semantics.tex | 57 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/semantics.tex b/semantics.tex index eb7922e..d80eb80 100644 --- a/semantics.tex +++ b/semantics.tex @@ -16,16 +16,18 @@ $\langle S, s_i, s_o, s\rangle\Rightarrow\langle s_i', s_o', s'\rangle$\\ Waarbij de laatste transitie duidt op een terminerende transitie en de eerste op een niet terminerende transitie.\\ -\subsection{Semantiek beschrijving} +\subsection{Semantiekbeschrijving} -Om het eerste element van een stack weg te kunnen gooien gebruiken we de volgende +Om het bovenste element van een stack weg te kunnen gooien gebruiken we de volgende functie:\\ -$$\mathcal{D} : s \rightarrow s$$\\ -Deze neemt een stack en gooit het bovenste element weg.\\ +$$\mathcal{D} : Stack \rightarrow Stack$$ +$$\mathcal{D} [\:] = [\:]$$ +$$\mathcal{D} [a:rest] = [rest] $$ +Deze functie haalt het bovenste element van de stack en gooit deze weg.\\ Om een stack uit te kunnen breiden met een element gebruiken we de volgende functie:\\ -$$\mathcal{E} : s, \mathbb{Z} \rightarrow s$$\\ +$$\mathcal{E} : Stack\rightarrow (\mathbb{Z} \rightarrow Stack)$$\\ Deze functie neemt een stack en een integer en voegt de integer toe bovenop de stack.\\ @@ -35,6 +37,8 @@ $$\mathcal{ADD} : Stack \rightarrow Stack$$ $$\mathcal{ADD} [\:] = [\:]$$ $$\mathcal{ADD} [a] = [a] $$ $$\mathcal{ADD} [a:b:rest] = [b+a:rest] $$\\ +Deze functie haalt de bovenste twee waarden van de stack, telt ze bij elkaar op, en stopt +het resultaat bovenop de stack.\\ Om de bovenste twee elementen van een stack van elkaar af te trekken gebruiken we de volgende functie:\\ @@ -42,6 +46,8 @@ $$\mathcal{SUB} : Stack \rightarrow Stack$$ $$\mathcal{SUB} [\:] = [\:]$$ $$\mathcal{SUB} [a] = [a] $$ $$\mathcal{SUB} [a:b:rest] = [b-a:rest] $$\\ +Deze functie haalt de bovenste twee elementen van de stack, trekt de bovenste +waarde van de tweede bovenste waarde af, en stopt het resultaat bovenop de stack. Om de bovenste twee elementen van een stack te vermenigvuldigen gebruiken we de volgende functie:\\ @@ -49,41 +55,54 @@ $$\mathcal{MUL} : Stack \rightarrow Stack$$ $$\mathcal{MUL} [\:] = [\:]$$ $$\mathcal{MUL} [a] = [a] $$ $$\mathcal{MUL} [a:b:rest] = [b*a:rest] $$\\ +Deze functie haalt de bovenste twee elementen van de stack, vermenigvuldigt ze, +en stopt het resultaat bovenop de stack.\\ -Om de integer deling van de bovenste twee elementen van de stack bovenop de +Om de geheeltallige deling van de bovenste twee elementen van de stack bovenop de stack te krijgen gebruiken we de volgende functie:\\ $$\mathcal{DIV} : Stack \rightarrow Stack$$ $$\mathcal{DIV} [\:] = [\:]$$ $$\mathcal{DIV} [a] = [a] $$ $$\mathcal{DIV} [a:b:rest] = [b/a:rest] $$\\ +Deze functie haalt de bovenste twee elementen van de stack, berekent de +geheeltallige deling van de tweede bovenste waarde door de bovenste waarde, +en stopt het resultaat bovenop de stack.\\ -Om de bovenste twee elementen van een stack op te tellen gebruiken we de +Om gebruiken we de volgende functie:\\ $$\mathcal{MOD} : Stack \rightarrow Stack$$ $$\mathcal{MOD} [\:] = [\:]$$ $$\mathcal{MOD} [a] = [a] $$ $$\mathcal{MOD} [a:b:rest] = [b \: mod \: a:rest] $$\\ +Deze functie haalt de bovenste twee elementen van de stack, berekent het resultaat van de tweede bovenste +waarde modulo de bovenste waarde, en stopt dit bovenop de stack.\\ Om het bovenste element van een stack te dupliceren gebruiken we de volgende functie:\\ $$\mathcal{DUP} : Stack \rightarrow Stack$$ $$\mathcal{DUP} [\:] = [\:]$$ $$\mathcal{DUP} [a:rest] = [a:a:rest] $$\\ +Deze functie haalt stopt een kopie van de bovenste waarde bovenop de stack.\\ -Om de bovenste twee elementen van een stack op te tellen gebruiken we de +Om de gebruiken we de volgende functie:\\ $$\mathcal{NOT} : Stack \rightarrow Stack$$ $$\mathcal{NOT} [\:] = [\:]$$ $$\mathcal{NOT} [a:rest] = [0:rest] \: \text{if} \: a \neq 0$$ $$\mathcal{NOT} [a:rest] = [1:rest] \: \text{if} \: a = 0$$\\ +Deze functie neemt het bovenste element van de stack en stopt 0 bovenaan de +stack als deze waarde niet gelijk is aan 0 en 1 als deze waarde gelijk is aan 0.\\ -Om de bovenste twee elementen van een stack op te tellen gebruiken we de +Om gebruiken we de volgende functie:\\ $$\mathcal{GRE} : Stack \rightarrow Stack$$ $$\mathcal{GRE} [\:] = [\:]$$ $$\mathcal{GRE} [a] = [a] $$ $$\mathcal{GRE} [a:b:rest] = [0:rest] \: \text{if} \: a \geq b$$ $$\mathcal{GRE} [a:b:rest] = [1:rest] \: \text{if} \: a < b$$\\ +Deze functie haalt de bovenste twee elementen van de stack en stopt 1 bovenop +de stack als het tweede bovenste element een hogere waarde heeft als dat van het +bovenste element. Anders word 1 bovenop de stack gestopt.\\ Met behulp van deze gedefineerde functies kunnen we nu de volgende semantiekregels opstellen:\\ @@ -114,5 +133,23 @@ $ \langle s_i, s_o, \mathcal{NOT}(s)\rangle\\ {[greater_{sos}]} \qquad \langle greater, s_i, s_o, s\rangle \Rightarrow -\langle s_i, s_o, \mathcal{GRE}(s)\rangle \qquad \\ +\langle s_i, s_o, \mathcal{GRE}(s)\rangle\\ +{[push_{sos}]} \qquad +\langle push, s_i, s_o, s\rangle \Rightarrow +\langle s_i, s_o, s\rangle\\ +{[roll_{sos}]} \qquad +\langle roll, s_i, s_o, s\rangle \Rightarrow +\langle s_i, s_o, s\rangle\\ +{[inchar_{sos}]} \qquad +\langle inchar, s_i, s_o, s\rangle \Rightarrow +\langle s_i, s_o, s\rangle\\ +{[innum_{sos}]} \qquad +\langle innum, s_i, s_o, s\rangle \Rightarrow +\langle s_i, s_o, s\rangle\\ +{[outchar_{sos}]} \qquad +\langle outchar, s_i, s_o, s\rangle \Rightarrow +\langle s_i, s_o, s\rangle\\ +{[outnum_{sos}]} \qquad +\langle outnum, s_i, s_o, s\rangle \Rightarrow +\langle s_i, s_o, s\rangle\\ $ -- 2.20.1