38 lines
2.2 KiB
TeX
38 lines
2.2 KiB
TeX
|
\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}
|