% vim: set spelllang=nl: \section{Regels in de natuurlijke semantiek} \label{sec:rules} We zullen nu ieder syntaxelement nader specificeren. Ook zullen regels voor de natuurlijke semantiek van Smurf worden geïntroduceerd. Bij elk van deze regels geldt dat als elementen van de stack worden gebruikt in die regel, de stack niet leeg mag zijn voor het uitvoeren van de regel. 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 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. Hieronder worden de regels gedefinieerd en beargumenteerd. We zullen eerst regels bekijken die de stack manipuleren. Daarna laten we de regels die de variable store gebruiken zien. Vervolgens bekijken we regels die input en output gebruiken. We sluiten af met de regel voor $\StmExec$. In \autoref{sec:app:rules} is een alfabetisch overzicht van de regels te vinden. \input{ruleslambda} \input{rulespush} \input{ruleshead} \input{rulestail} \input{rulesquotify} \input{rulescat} \input{rulesget} \input{rulesput} \input{rulesinput} \input{rulesoutput} \input{rulesexec}