diff --git a/tarea-lenguajes-imperativos.tex b/tarea-lenguajes-imperativos.tex new file mode 100644 index 0000000..73230f7 --- /dev/null +++ b/tarea-lenguajes-imperativos.tex @@ -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} \ No newline at end of file