Tarea definiciones lenguajes imperativos

This commit is contained in:
Carlos Galindo 2018-10-30 23:07:53 +01:00
parent 8e1116b56a
commit 7d44c025b8

View file

@ -0,0 +1,38 @@
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{amssymb}
\usepackage{amsmath}
\newcommand{\car}{\curvearrowright}
\newcommand{\lrh}{\leftrightharpoons}
\title{Funcionalidades complejas de lenguajes imperativos}
\author{Carlos S. Galindo Jiménez}
\begin{document}
\maketitle
\begin{enumerate}
\item \texttt{halt}, concluye la ejecución, y la memoria debe ser conservada. Ejemplo: \texttt{x:=0; halt; y:=0;} termina con \texttt{x -> 0}
$$exp(\texttt{halt}) \car K | \sigma_n \lrh \sigma_n$$
\item \texttt{and-then}, ``and'' con cortocircuito. Sólo evalúa el segundo argumento si el primero es cierto. Para este fin se puede emplear una estructura similar a la utilizada para los condicionales, sólo que limitamos las expresiones al tipo booleano.
\begin{align*}
exp(BE \texttt{ and-then } BE', Env) \car K \lrh \\
exp(BE, Env) \car \texttt{and-then} \car exp(BE', Env) \car K
\end{align*}
$$val(true) \car \texttt{and-then} \car exp(BE', Env) \car K \lrh exp(BE', Env) \car K$$
$$val(false) \car \texttt{and-then} \car exp(BE', Env) \car K \lrh val(false) \car K$$
\item \texttt{exp++}, incrementa un valor después de accederlo. Se debe depositar en lo alto de la pila el valor solicitado, y encima de éste, incrementar el valor en memoria. En este caso, vamos a restringir \texttt{exp} a ser una variable, puesto que otras expresiones no están guardadas en un entorno o en memoria.
\begin{align}
exp(X\texttt{++}, Env) \car K | Mem \lrh \\
val(Mem[Env[X]]) \car \texttt{++} \car exp(X = X + 1, Env) \car K | Mem \lrh^* \\
val(V) \car \texttt{++} \car \exp(X = X + 1, Env) \car K | Mem\lrh \\
exp(X = X + 1, Env) \car val(V) \car K | Mem \lrh \\
exp(X + 1, Env) \car writeTo(Env[X]) \car val(V) \car K | Mem \lrh \\
val(V) \car K | Mem
\end{align}
Para leer la expresión, como se detalla en las ecuaciones anteriores, habría que obtener el valor ($V$) de $X$, tal y como se indica en los pasos 2 y 3. A continuación, debemos invertir el orden del incremento y el valor en la pila (paso 4). Finalmente, se evalúa la expresión $X + 1$ y se guarda en $X$ (5), quedando en el último paso el valor y el resto de la pila.
\end{enumerate}
\end{document}