MANTA 3.1
MANUAL DEL USUARIO
Documento por Vladimir Támara.
Porciones debidas a Cesar Muñoz y Hernán Aponte
Mayo de 1997, Santafé de Bogotá D.C. COLOMBIA
Universidad de los Andes, Derechos Reservados 1985 - 1997
TABLA DE CONTENIDO
1. INTRODUCCIÓN
ManTa es un sistema para la manipulación de Tipos Abstractos de
Datos (TADs), que permite:
-
Crear nuevos tipos inductivos con un lenguaje de especificación
recursivo bastante sencillo e intuitivo.
-
Representar unos tipos empleando otros (e.g. Representar el TAD Cola con
el TAD Pila)
-
Probar teoremas con respecto a los tipos creados
-
Generar código en C, que implementa los tipos especificados
En este manual se describe la operación de la versión 3.1
de este sistema. Se asume que el lector tiene familiaridad con la teoría
de TADs. Si no la tiene puede consultar el Tutorial o los documentos de
nuestro sitio WEB.
1.1. Nota Legal
ManTa es un sistema desarrollado en la Universidad de los Andes bajo asesoría
del profesor Rodrigo Cardoso. Los ejecutables y las fuentes están
disponibles al público bajo la GNU
General Public License.
1.2. Referencias
[1] CARDOSO, Rodrigo. Verificación y Desarrollo de Programas.
Ediciones Uniandes. 1ra edición. 1993.
[2] MUÑOZ, Cesar. ManTa: Un sistema para la implantación certificada y
automática de Tipos Abstractos de Datos. Tesis de Magister en Ingeniería de
Sistemas y Computación. Universidad de los Andes. 1992.
[3] APONTE, Hernán. MANTA 3.0: Un sistema para la implantación certificada y
automática de tipos abstractos de datos. Tesis de Magister en Ingeniería de
Sistemas y Computación. Universidad de los Andes. 1995
[4] Tutorial de Manta
[5] TORO, Victor Manuel. Organización y documentación de programas grandes en C
(ANSI), Memo de investigación 52, Circulación privada Centro de Documentación
de la Facultad de Ingeniería de la Universidad de los Andes, 1991.
2. INSTALACIÓN DE MANTA
Debe obtener de nuestro sitio WEB, uno de los precompilados para su plataforma
y consultar la sección de este capítulo que le corresponde.
Si su plataforma no está en este manual o lo prefiere, puede obtener
las fuentes y seguir las instrucciones para compilación e instalación
que las acompañan.
2.1. DOS / Windows 3.1
Requerimientos:
-
DOS de 32 bits o Windows 3.1 s32. Si solo tiene DOS de 16 bits, necesitará
un servidor de DPMI. Se recomienda CWSDPMI, que puede obtener en nuestro
sitio WEB.
-
Pkunzip o Winzip
-
800KB en Disco Duro.
Descomprima los precompilados con pkunzip en DOS o Winzip
en Windows. Asegurese de activar la opción para crear subdirectorios:
pkunzip -d manta.zip
Continúe consultando las instrucciones en la sección 2.4.
2.2. Windows 95/NT
Requerimientos:
-
Windows 95 o NT
-
Pkunzip o Winzip
-
800KB en Disco Duro.
Empleando pkunzip o Winzip descomprima los precompilados.
En nuestro sitio WEB encontrará un PkUnzip que le permite
manejar nombres largos. Asegúrese de activar la opción para
crear subdirectorios
pkunzip -d manta.zip
Continúe consultando las instrucciones en la sección 2.4.
2.3. UNIX/LINUX
Requerimientos:
-
Sistema Operativo Unix o Linux
-
Utilidades gzip y tar
-
800KB en Disco
-
Si no había disponibles precompilados en nuestro sitio WEB para
su plataforma, deberá bajar las fuentes que pueden compilarse con
herramientas GNU.
Descomprima los precompilados con gzip:
gzip -d manta.tar.gz
Separa los archivos con tar:
tar xvf manta.tar
Continúe consultando las instrucciones en la sección 2.4.
2.4. Directorios
La estructura de directorios que obtendrá será algo como:
d_manta - Ejecutables y archivo de configuración
|
-- D_ADT Archivos con TADs
|
-- D_MENSAJ Mensajes, Palabras Claves y Menús
|
-- D_PLANT Plantillas para generación de código
|
-- D_PRNADT TADs impresos
|
-- D_PROT Prototipos
|
-- D_THEO Teoremas probados y Conjeturas no Probadas
Cámbiese al directorio d_manta, ahora puede editar el archivo de
configuración para ajustarlo a sus preferencias y a su sistema operativo.
Es particularmente importante que configure bien el editor de texto
que ManTa empleará. Si quiere comenzar rápidamente sin leer
el capítulo 3 edite el archivo manta.ini y modifique la
segunda línea, coloque allí el nombre del editor de texto
que planee usar (e.g. edit en DOS, vi, pico
o emacs en UNIX) entre puntos (e.g: .edit.). Además
asegúrese de que la primera línea sea .0.
Desde el mismo directorio d_manta puede teclear manta para iniciar una
sesión con ManTa. Ya ha completado la instalación.
3. CONFIGURACIÓN
Los siguientes aspectos pueden configurarse en ManTa 3.1:
-
Interfaz plana o emacs
-
Editor de texto
-
Opciones del editor de texto
-
Directorios de Trabajo
-
Mensajes presentados al usuario
-
Menús
-
Palabras claves del lenguaje
-
Plantillas para generación de código
Todos los archivos de configuración tienen el mismo formato, las
cadenas de caracteres siempre deben colocarse entre puntos. Cadenas que
no aparezcan entre puntos se consideran comentarios dentro del archivo.
Los números los archivos al comienzo de cada línea deben
ir seguidos de un espacio en blanco.
3.1. Archivo de Inicio
El archivo principal de configuración es manta.ini, que se debe
encontrar en el directorio d_manta. El formato de este archivo se presenta
a continuación.
.<Interfaz EMACS>. 0 si desea interfaz plana, 1 si desea interfaz EMACS
.<editor>. Nombre del editor de texto que se empleará
.<opcion1>. Opción del editor para ir a una línea del archivo
.<opcion2>. Opción del editor para editar en modo solo-lectura
.<dir_mensaje>. Directorio de mensajes del sistema
.<dir_plant>. Directorio de plantillas de código
.<dir_tads>. Directorio para guardar archivos con TADs
.<dir_reps>. Directorio para guardar archivos con Representaciones
.<dir_tads_impr>. Directorio para guardar TADs impresos
.<dir_rep_impr>. Directorio para guardar representaciones impresas
.<dir_conj>. Directorio para guardar conjeturas y teoremas
.<dir_prot>. Directorio para guardar prototipos
.. Línea en blanco
.<archivo_pal_claves>. Archivo con palabras clave
.<archivo_menus>. Archivo con definición de menús
.<archivo_mensajes>. Archivo de mensajes
.<enc_func.i>. Archivo con la plantilla de encabezado de funciones
.<tad.c>. Archivo con plantilla de las selectoras
.<tad.h>. Archivo con plantilla de encabezado de selectoras
.<tad.mak>. Archivo con plantilla del makefile
.<tad_cons.inc>. Archivo con plantilla para constructoras
.<tad_defs.h>. Archivo con plantilla para definición de datos
.<tad_inter.c>. Archivo con plantilla para funciones de interfaz
.<tad_inter.h>. Archivo con plantilla para encabezados de funciones de interfaz
.<tad_main.c>. Archivo con plantilla para el programa principal
Por defecto manta emplea archivos de menús, palabras clave, plantillas
y mensajes en español, aunque también hay versiones de estos
archivos en ingles. Puede reemplazar el archivo manta.ini o emplear
la opción -i al iniciar ManTa (ver Cap.
4), con otros archivos de configuración. En el directorio d_manta
podrá encontrar los siguientes archivos de configuración
además de manta.ini:
-
mantaeng.ini: Menús, mensajes, plantillas y palabras clave
en inglés.
-
mandos.ini: Configurado para emplear archivo en español
y el editor edit de DOS (este editor no cuenta con opciones para
ir a una línea ni para abrir un archivo como sólo lectura).
-
manunix.ini: Configurado para emplear archivos en español
y el editor vi de unix.
3.2. Mensajes
En el archivo manta.ini (Ver 3.1), las cadenas
<archivo_mensajes> y <dir_mensaje> especifican
el archivo de mensajes. Este es un archivo tipo texto y cada una de sus
líneas tiene el siguiente formato:
# .<mensaje>.
El número # que aparece en cada línea es el código
interno del mensaje, es requerido un espacio después del código.
Los puntos que aparecen a los lados de cada cadena son requeridos. El mensaje
puede contener caracteres de control como \n, \t, %d, %s e incluso el carácter
punto.
ManTa se distribuye con dos archivos de mensajes, ubicados en el directorio
D_MENSAJ (Ver 2.4):
-
messaesp.msg mensajes en español
-
messaeng.msg mensajes en inglés
3.3. Menús
En el archivo manta.ini (Ver 3.1), las cadenas
<archivo_menus> y <dir_mensaje> especifican el
archivo de menús. Este es un archivo tipo texto. ManTa se distribuye
con dos archivos de menús, ubicados en el directorio D_MENSAJ:
-
menusesp.msg menús en español
-
menuseng.msg menús en inglés
3.4. Palabras Clave
En el archivo manta.ini (Ver 3.1), las cadenas
<archivo_pal_clave> y <dir_mensaje> especifican
el archivo de palabras clave del lenguaje. Estas palabras pueden ser cambiadas
a gusto del usuario, aunque se recomienda no hacerlo para evitar problemas
de portabilidad o con futuras versiones de ManTa. Este archivo tipo texto
tiene el siguiente formato:
.<TAD>. Palabra que indica comienzo de un TAD
.<INICIALIZADORAS>. Palabra que indica comienzo de inicializadoras.
.<CONSTRUCTORAS>. Palabra que indica comienzo de constructoras.
.<SELECTORAS>. Palabra que indica comienzo de funciones selectoras
.<AXIOMAS>. Palabra que indica comienzo de axiomas
.<REP_ADT>. Palabra que indica TAD que representa
.<OPERACION_AUXILIAR>. Directorio para guardar archivos con Representaciones
.<PROGRAMAS>. Directorio para guardar TADs impresos
.<IF>. Directorio para guardar representaciones impresas
.<THEN>. Directorio para guardar conjeturas y teoremas
.<ELSE>. Directorio para guardar prototipos
.<THEN>. Directorio para guardar prototipos
.<ERROR>. Directorio para guardar prototipos
.<EQUAL>. Directorio para guardar prototipos
.<C>. Directorio para guardar prototipos
.<I>. Directorio para guardar prototipos
.<FI>. Directorio para guardar prototipos
ManTa se distribuye con dos archivos de palabras clave, ubicados en el
directorio D_MENSAJ (Ver 2.4):
-
claves.msg palabras clave en español
-
keywords.msg palabras clave en inglés
3.5. Plantillas
En el archivo manta.ini (Ver 3.1), las cadenas
.<enc_func.i>,<tad.c>,<tad.h>, <tad.mak>,<tad_cons.inc>,<tad_defs.h>,<tad_inter.c>,.<tad_inter.h>
y <tad_main.c> junto con <dir_plant> especifican los archivos
con plantillas que se emplearán al generar código en ANSI
C.
Las plantillas incluidas en la distribución de la versión
3.1 de ManTa, se crearon según los Estándares de Documentación
de Código Fuente en C de Victor Toro [5].
Hay versiones en ingles de las plantillas, en el directorio D_PLANT
(Ver 2.4).
4. INTERFAZ
4.1. Inicio de una sesión con ManTa
La sintaxis de invocación es:
manta [-i <archivo>]
[-i <NomArc>] Indica que debe usarse el archivo cuyo nombre
es <NomArc> como archivo de configuración del sistema.
Si el programa se invoca sin esta opción el archivo de configuración
será manta.ini. Una vez haya comenzado una sesión
debe aparecer en pantalla:
4.2. Menús y Edición
Toda la interacción en esta versión se hace por medio de
Menús. Puede elegir la opción que desee tecleándola,
o tecleando algunas letras iniciales y después presionando ENTER.
Si varias opciones de un mismo menú comienzan con las mismas letras
digitadas, se escoge la primera de izquierda a derecha. (e.g. En el menú
inicial tanto Tipos como Teoremas comienzan con T, si escribe T entrara
al menú de Tipos, porque está primero). Todo menú
tiene la opción Salir, para regresar al menú anterior (o
al sistema en el caso del menú principal). Presionar ENTER sin escribir
opción alguna equivale a escoger Salir.
Es indispensable un editor de texto para realizar muchas operaciones
en ManTa como crear, editar o ver tanto tipos como representaciones y teoremas.
El editor empleado se indica en el archivo de configuración (Ver
3.1)
4.3. Uso de ManTa
En ManTa los TADs y las representaciones pueden estar en el ambiente (memoria)
o en disco. Siempre que se inicia una sesión con ManTa se cargan
los TADs BOOL y NAT en el ambiente, a estos tipos se les llama básicos
y no es posible modificarlos ni borrarlos. En ManTa existen los conceptos
de TAD actual y Representación actual, el nombre del TAD actual
aparece en todo menú. Al iniciar ManTa el TAD actual es BOOL.
El menú principal tiene las opciones: Tipos, Representaciones,
Teoremas, Prototipos y Salir, que se explican en detalle a continuación.
4.3.1. Tipos
Opción
|
Descripción
|
Directorio
|
Despliega el directorio de TADs en disco. La extensión de los nombres
de archivos con TADs es .adt y están ubicados en el directorio indicado
por <dir_tads> del archivo de configuración (Ver 3.1)
|
Nuevo
|
Entra a un Menú donde podrá definir un nuevo TAD, que queda
como TAD actual. Esta opción se explica en detalle más adelante
Si Ud.
es usuario de DOS sin soporte para nombres largos se recomienda emplear
nombres de menos de 5 caracteres de longitud.
|
Editar
|
Permite consultar o modificar un TAD del ambiente. El TAD editado queda
como actual. Esta opción se explica en detalle más adelante
|
Cargar
|
Despliega un menú con los TADs conocidos (vea opción Directorio)
y carga en el ambiente el TAD escogido. El TAD cargado queda como actual.
|
Salvar
|
Salva el TAD actual.
|
Imprimir
|
Guarda el TAD actual en el directorio para impresión de TADs, cadena
<dir_prn_tad> del archivo de configuración (Ver 3.1)
|
Borrar
|
Borra el TAD actual del ambiente y del disco
|
Salir
|
Retorna al menú principal
|
Opción Nuevo: Al escoger esta opción aparece una ventana
con los nombres de todos los TADs conocidos y se piede al usuario el nombre
del nuevo TAD. Después aparece el menu de Definición de Tipo.
-
Inductiva: El usuario debe editar la signatura y los axiomas del TAD. El
sistema genera plantillas de edición para que sean completadas en
el editor configurado. Terminada la edición el sistema verifica
la sintaxis de las definiciones
-
Instanciación: El sistema pide el TAD genérico, el parámetro
que se desa instnaicar y el TAD con el cual se instancia
-
Copia: El sistema pide el TAD que se desea copiar
-
Producto Cartesiano: El sistema pide los TADs para hacer el producto cartesiano
-
Restricción: El sistema pide el TAD sobre el cual se hace la restricción
y la definición del predicado de restricción
-
Extensión: Se presenta un menú con las opciones:
-
Suma directa: El sistema pide los TAD para hace la suma directa
-
Completación: El sistema pide el TAD que se desea completar, y el
nombre del elemento de la completación
-
Variación: El sistema pide los TAD para hacer la variación
-
Salir: Retorna al menú de Definición de Tipo
-
Salir: Retorna al menú de tipos
Opción editar: El sistema pide el TAD que se desea editar.
Luego aparece un menú de edición.
-
Signatura: Permite la edición de la signatura del TAD. El sistema
verifica la corrección sintáctica de la signatura.
-
Axiomas: Permite la edición de los axiomas del TAD. El sistema despliega
un menú para permitir al usuario elegir el axioma que desea editar.
-
Estado: Permite cambiar el estado del TAD de modificable a inmodificable
o viceversa.
-
Todo: Despliega toda la información de la definición del
TAD
-
Salir: Retorna al menú de tipos
4.3.2. Representaciones
Para trabajar con representaciones es necesario cargarlas antes del disco.
En el ambiente (memoria) siempre hay una Representación activa.
Sobre esta actúan varias operaciones como editar y salvar.
Opción
|
Descripción
|
Directorio
|
Despliega el directorio de representaciones en disco. Están ubicadas
en el directorio indicado por <dir_reps> del archivo de configuración
(Ver 3.1)
|
Nuevo
|
Entra a un Menú donde podrá definir una nueva Representación,
que queda como Representación actual. Esta opción se explica
en detalle más adelante
Si Ud. es usuario
de DOS sin soporte para nombres largos, tanto el TAD fuente como el TAD
destino deben tener menos de 3 caracteres de longitud. Así mismo
el nombre de la función de representación no debe exceder
3 caracteres.
|
Editar
|
Permite consultar o modificar una Representación del ambiente. La
representación editada queda como actual. Esta opción se
explica en detalle más adelante
|
Cargar
|
Permite cargar en el ambiente una representación del directorio
de definiciones, para esto despliega un menú vertical que contiene
todas las representaciones conocidas por el sistema.
|
Salvar
|
Salva la representación actual.
|
Probar
|
Verifica la corrección de la representación actual. El sistema
informa cuantas conjeturas pudo probar y cuantas no. Finalmente despliega
el archivo con las demostraciones de las conjeturas probadas y no probadas.
|
Imprimir
|
Guarda la representación actual en el directorio de archivos de
impresión de representaciones.
|
Borrar
|
Borra la representación actual del ambiente y del disco
|
Salir |
Retorna al menú principal |
Opción Nuevo: Al escoger esta opción se le solicitarán
los nombres de los TAD fuente y destino, después vera el Menú
de Definición de Representación.
-
Inductiva: Debe editar los programas de la representación y los
axiomas de las funciones auxiliares. El sistema genera plantillas de edición
que el usuario debe completar. Terminada la edición, el sistema
verifica la sintaxis de las definiciones.
-
Composición: El sistema pide, en orden, las representaciones que
se van a componer.
-
Salir: Retorna al menú de tipos
Opción editar: El sistema pide la Representación que
se desea editar. Luego aparece un menú de edición.
-
Programas: Permite la edición de los programas de la representación.
El sistema verifica la corrección sintáctica de estos.
-
Operaciones Auxiliares: Muestra la signatura de las operaciones auxiliares
de la representación
-
Axiomas: Permite la edición de los axiomas de las operaciones auxiliares
de la representación. El sistema despliega un menú que le
permitirá escoger el axioma de una operación auxiliar a editar.
-
Todo: Despliega toda la información de la definición de la
representación
-
Salir: Retorna al menú de representaciones
4.3.3. Teoremas
En el ambiente existe una lista con las conjeturas probadas y otra con
las conjeturas no probadas. Estas listas se colocan en vacío siempre
que se entre al menú de teoremas.
Opción
|
Descripción
|
Directorio
|
Despliega el directorio de conjeturas y teoremas. La extensión de
los nombres de archivos con representaciones es .the y están
ubicados en el directorio indicado por <dir_conj> del archivo
de configuración (Ver 3.1)
|
Normalización
|
Permite al usuario editar una lista de expresiones. Estas expresiones se
verifican sintácticamente y, si no hay errores, se normalizan con
los axiomas de los TAD del ambiente. Por último se muestra un archivo
con el resultado de la normalización
|
Conjeturas
|
Permite al usuario editar una lista de conjeturas. Esta lista se inicia
con la lista de conjeturas no probadas. Las conjeturas se verifican sintácticamente
y si no hay errores se aplica el algoritmo de prueba. Finalmente se muestra
cuántas conjeturas se probaron y cuántas no.
|
Probadas
|
Permite ver un archivo de conjeturas probadas. Se despliega un menú
que contiene:
-
Una opción para ver la lista de conjeturas probadas
-
Una opción por cada archivo de conjeturas probadas que exista en
el directorio de teoremas
|
No_Probadas
|
Permite ver un archivo de conjeturas no probadas. Se despliega un menú
que contiene:
Una opción para ver la lista de conjeturas no probadas
Una opción por cada archivo de conjeturas no probadas que exista
en el directorio de teoremas
|
Salvar_Probadas
|
Pide un nombre de archivo para salvar la lista de conjeturas probadas.
La lista de conjeturas probadas se coloca en vacío.
|
Salvar _No_Probadas
|
Pide un nombre de archivo para salvar la lista de conjeturas no probadas.
La lista de conjeturas no probadas se coloca en vacío.
|
Salir
|
Retorna al menú principal
|
4.3.4. Prototipos
Opción
|
Descripción
|
Directorio
|
Despliega el directorio de prototipos generados por el sistema. Están
ubicados en el directorio indicado por <dir_prot> del archivo
de configuración (Ver 3.1)
|
Automático
|
Genera automáticamente un prototipo para el TAD actual. Se despliega
un menú con las opciones:
-
Todo: Genera todos los archivos que implantan el TAD
-
Constructoras: Genera el archivo de definición de estructura de
datos y de las funciones constructoras.
-
Selectoras: Genera el archivo de las funciones selectoras
-
Encabezados: Genera el archivo con la declaración de las funciones
externas del prototipo.
-
Interfaces: Genera los archivos con las funciones de interfaces y el banco
de pruebas
|
Manual
|
Genera los esqueletos de los archivo para implantar el TAD actual. El usuario
debe rellenar estos archivos. Se despliega un menú con las mismas
opciones de Automático.
|
Compilar
|
Genera el archivo de make y compila los archivos generados. Antes de compilar
se debe generar todos los archivos de los TAD que aparezcan nombrados en
la signatura del TAD actual.
|
Editar
|
Permite editar los archivos del prototipo generado. Para esto muestra un
menú que tiene una opción por cada archivo generado del TAD
actual.
|
Ejecutar
|
Ejecuta el banco de pruebas generado para el TAD actual.
|
Salir
|
Retorna al menú principal
|

5. CODIGO GENERADO
5.1. Archivos Generados
Los archivos que se generan para implantar un TAD de nombre X
son:
-
X_de.h Definición de constantes, macros y tipos del TAD
-
X.h: Declaración de los encabezados de las funciones externas
del TAD
-
X_co.inc: Implantación de las funciones constructoras del
TAD
-
X.c: Implantación de las funciones selectoras del TAD
-
X_in.h: Declaración de los encabezados de las funciones
de interfaz externas del TAD.
-
X_in.c: Implantación de las funciones de interfaz del TAD
-
X_ma.c: Banco de pruebas del TAD
-
X.mak: Archivo make para compilar el prototipo
Todos estos archivos se generan totalmente documentados con las plantillas
del directorio de plantillas. Algunas operaciones usuales y los archivos
que se deben modificar se describen a continuación:
-
Para modificar manualmente las selectoras del TAD X se debe editar
el archivo X.c.
-
Para modificar la representación física de los datos se deben
editar los archivo X_defs.h y X_cons.inc.
-
Para modificar las funciones de interfaz (salvar, cargar, imprimir, borrar,
copiar) se debe editar el archivo X_inter.c.
-
Para modificar el banco de pruebas se debe editar el archivo X_main.c.
-
Para cambiar de compilador, o las opciones de compilación, se debe
editar el archivo X.mak.
5.2. El Banco de Pruebas
El banco de pruebas tiene una lista con todos los objetos que se han creado
en su ejecución (ambiente). Esta lista de objetos se despliega en
la parte derecha de la pantalla. Al iniciar la ejecución la lista
está vacía.
Al ejecutarlo despliega un menú que contiene:
-
Una opción para manejar el ambiente de objetos
-
Una opción con el nombre del TAD principal
-
Una opción por cada TAD nombrado en la signatura del TAD principal
5.2.1.Ambiente
Se muestra un menú con las opciones:
-
Salvar: Salva los objetos del ambiente en un archivo, cuyo nombre digita
el usuario
-
Cargar: Carga en el ambiente un archivo de objetos, cuyo nombre digita
el usuario
-
Borrar: Borra toda la lista de objetos
5.2.2. Tipos
Las otras opciones corresponden a tipos que se han implantado con el
banco de pruebas. Estas opciones despliegan en menús que contienen:
-
Una opción por cada función generadora o selectora del TAD.
Para estas funciones se piden los parámetros correspondientes y
se muestra en pantalla el resultado de la operación. Los parámetros
pueden ser:
-
De tipo NAT: En este caso se debe digita un número
-
De tipo BOOL: En este caso se debe digita TRUE o FALSE
-
De otro tipo: En este caso el usuario debe digitar el nombre de un objeto
del ambiente que corresponda con el tipo solicitado.
Cuando el resultado es de un tipo no básico, el sistema pide un
nombre para guardar el objeto en el ambiente. El usuario puede:
-
Cancelar la entrada (presionando ENTER con una cadena vacía), en
cuyo caso no se guarda en el ambiente.
-
Digitar un nombre que no existe, en cuyo caso se crea un nuevo objeto en
el ambiente y su valor será el resultado
-
Digitar un nombre que exista en la lista (y que corresponda en tipo), y
en tal caso se asigna al nombre el valor del resultado.
-
Una opción para las funciones de interfaz. Se despliega un menú
con las opciones
-
Imprimir: Pide el nombre de un objeto del ambiente y lo imprime en pantalla
-
Salvar: Pide el nombre de un objeto del ambiente y lo salva en un archivo
-
Cargar: Pide el nombre de un archivo y carga el objeto guardado en este
-
Copiar: Pide el nombre de un objeto del ambiente y el nombre del objeto
donde se quiere copiar
-
Borrar: Pide el nombre del objeto que se quiere borrar del ambiente
-
Una opción de salir del banco de pruebas.
APENDICE A. TADs PRIMITIVOS
A.1. TAD BOOL
TAD BOOL [ ]
INICIALES
TRUE : -> BOOL
FALSE : -> BOOL
CONSTRUCTORAS
SELECTORAS
AND (c): BOOL * BOOL(i) -> BOOL
OR (c): BOOL * BOOL(i) -> BOOL
NOT (c): BOOL(i) -> BOOL
IMP (c): BOOL(i) * BOOL(i) -> BOOL
EQ_BOOL (c): BOOL(i) * BOOL(i) -> BOOL
AXIOMAS
AND(B1,TRUE) = B1
AND(B1,FALSE) = FALSE
OR(B1,TRUE) = TRUE
OR(B1,FALSE) = B1
NOT(TRUE) = FALSE
NOT(FALSE) = TRUE
IMP(TRUE,TRUE) = TRUE
IMP(TRUE,FALSE) = FALSE
IMP(FALSE,TRUE) = TRUE
IMP(FALSE,FALSE) = TRUE
EQ_BOOL(TRUE,TRUE) = TRUE
EQ_BOOL(TRUE,FALSE) = FALSE
EQ_BOOL(FALSE,TRUE) = FALSE
EQ_BOOL(FALSE,FALSE) = TRUE
A.2. TAD NAT
TAD NAT [ ]
INICIALES
ZERO : -> NAT
CONSTRUCTORAS
SUC : NAT -> NAT
SELECTORAS
ADD : NAT * NAT(i) -> NAT
ISZERO : NAT(i) -> BOOL
MULT : NAT(i) * NAT -> NAT
PRED : NAT(i) -> NAT
MAX : NAT(i) * NAT(i) -> NAT
MIN : NAT(i) * NAT(i) -> NAT
GT : NAT(i) * NAT(i) -> BOOL
LT : NAT(i) * NAT(i) -> BOOL
GE : NAT * NAT -> BOOL
LE : NAT * NAT -> BOOL
FACT : NAT(i) -> NAT
EXP : NAT * NAT(i) -> NAT
EVEN : NAT(i) -> BOOL
ODD : NAT(i) -> BOOL
DIV : NAT * NAT -> NAT
MOD : NAT * NAT -> NAT
DIVIDES : NAT * NAT -> BOOL
SUBS : NAT * NAT(i) -> NAT
EQ_NAT (c): NAT(i) * NAT(i) -> BOOL
AXIOMAS
ADD(N1,ZERO) = N1
ADD(N1,SUC(N2)) = SUC(ADD(N1,N2))
ISZERO(ZERO) = TRUE
ISZERO(SUC(N1)) = FALSE
MULT(ZERO,N1) = ZERO
MULT(SUC(N1),N2) = ADD(MULT(N1,N2),N2)
PRED(ZERO) = ZERO
PRED(SUC(N1)) = N1
MAX(ZERO,ZERO) = ZERO
MAX(ZERO,SUC(N1)) = SUC(N1)
MAX(SUC(N1),ZERO) = SUC(N1)
MAX(SUC(N1),SUC(N2)) = SUC(MAX(N1,N2))
MIN(ZERO,ZERO) = ZERO
MIN(ZERO,SUC(N1)) = ZERO
MIN(SUC(N1),ZERO) = ZERO
MIN(SUC(N1),SUC(N2)) = SUC(MIN(N1,N2))
GT(ZERO,ZERO) = FALSE
GT(ZERO,SUC(N1)) = FALSE
GT(SUC(N1),ZERO) = TRUE
GT(SUC(N1),SUC(N2)) = GT(N1,N2)
LT(ZERO,ZERO) = FALSE
LT(ZERO,SUC(N1)) = TRUE
LT(SUC(N1),ZERO) = FALSE
LT(SUC(N1),SUC(N2)) = LT(N1,N2)
GE(N1,N2) = OR(EQ_NAT(N1,N2),GT(N1,N2))
LE(N1,N2) = OR(EQ_NAT(N1,N2),LT(N1,N2))
FACT(ZERO) = SUC(ZERO)
FACT(SUC(N1)) = MULT(SUC(N1),FACT(N1))
EXP(N1,ZERO) = SUC(ZERO)
EXP(N1,SUC(N2)) = MULT(EXP(N1,N2),N1)
EVEN(ZERO) = TRUE
EVEN(SUC(ZERO)) = FALSE
EVEN(SUC(SUC(N1))) = EVEN(N1)
ODD(ZERO) = FALSE
ODD(SUC(ZERO)) = TRUE
ODD(SUC(SUC(N1))) = ODD(N1)
DIV(N1,N2) = IF(ISZERO(N2),ERROR,IF(GE(N1,N2),SUC(DIV(SUBS(N1,N2),N2)),ZERO))
MOD(N1,N2) = IF(ISZERO(N2),ERROR,IF(GE(N1,N2),MOD(SUBS(N1,N2),N2),N1))
DIVIDES(N1,N2) = ISZERO(MOD(N2,N1))
SUBS(N1,ZERO) = N1
SUBS(N1,SUC(N2)) = PRED(SUBS(N1,N2))
EQ_NAT(ZERO,ZERO) = TRUE
EQ_NAT(ZERO,SUC(N1)) = FALSE
EQ_NAT(SUC(N1),ZERO) = FALSE
EQ_NAT(SUC(N1),SUC(N2)) = EQ_NAT(N1,N2)

Derechos Reservados 1985-1997 Universidad
de los Andes. Departamento de Ingeniería de Sistemas y Computación.