SIGACLE: SIMULADOR GRÁFICO ASISTIDO POR COMPUTADOR PARA LA ENSEÑANZA DE PROGRAMACIÓN DE LENGUAJES ESTRUCTURADOS
 

George Franco Cendales - María Paula Díaz - Rafael J. Barros
gfranco@sanmartin.edu.co


Se plantea la importancia que brinda el desarrollo de herramientas asistidas por computador como apoyo al proceso de enseñanza. SIGACLE (Simulador Gráfico Asistido por Computador Para la Enseñanza de Programación de Lenguajes Estructurados), tiene como principal objetivo el desarrollo de habilidades cognoscitivas en estudiantes de pregrado en las materias de programación de computadores. Este documento define específicamente los conceptos necesarios para comprender los principios de SIGACLE y además, la motivación y el propósito detrás de este. Finalmente el documento direcciona usos potenciales de SIGACLE, mediante un ejemplo completo de simulación gráfica de apuntadores.

Palabras Clave: Simulación, sistemas de apoyo educativo, educación, SIGACLE.
 

Lexemas de ejemplo

Descripción informal

Const

Const

Const

if

If

if

Relación

<, <=, >, >=, = =, !=

< 0 <= 0

Id

Pi, cuenta, d2

Letra seguida de letras y dígitos

Num

3.1416, 0

Cualquier constante numérica

Literal

"Refresque pantalla"

Cualquier caracter







El componente léxico también permite la recuperación de errores en los siguientes niveles:

Intercambia dos caracteres adyacentes en un componente léxico
Al obtener una cadena de componentes léxicos, el analizador sintáctico comprueba si la cadena puede ser generada o no por la gramática del lenguaje fuente.

El proceso de análisis se puede apreciar en la siguiente figura:
 


Figura 1. Proceso de análisis sintáctico


El algoritmo de solución se basa en un método de análisis descendente, construyendo un árbol binario de sintaxis que examina los componentes léxicos de entrada de izquierda a derecha, un símbolo a la vez.

Las principales funciones de este componente son:

Un tipo básico de un lenguaje es una expresión de tipo. Entre los tipos básicos se encuentran los booleanos, caracteres, enteros y reales.

Se puede dar nombre a las expresiones de tipos.

Construcción de tipos:

Matrices: si T es una expresión de tipo entonces vector(I, T) es una expresión que indica el tipo de una matriz, con elementos de tipo T y conjunto de índices I
  1. Productos: si T1 y T2 son expresiones de tipo entonces su producto cartesiano es una expresión de tipo.
  2. Registros: se aplica a túplas formadas con nombres de campos y tipos de campos.
  3. Apuntadores: si T es una expresión de tipo, entonces apuntador(T) es una expresión de tipo que indica el tipo de apuntador a un objeto de tipo T.
  4. Funciones: son transformaciones de un dominio tipo D a un rango tipo R, la expresión de tipo Dà R indica el tipo de dicha función.
Existen expresiones para realizar operaciones con los tipos, como regla general se tiene implícita la idea de que cada expresión tiene asociada un tipo [Aho73].

Conforme avanza la compilación del archivo fuente, el simulador informa si existen errores de tipos, de unicidad, de control de flujo, y efectúa comprobaciones relacionadas con nombres para actualizar su tabla de signos en una estructura dinámica, con el objeto de llevar un registro del ámbito y de las relaciones existentes entre los nombres. Así, cuando encuentre un nombre o información nueva sobre una variable ya existente podrá actualizar sus registros. El diseño de la tabla de símbolos permite la realización de e consultas sobre n nombres en un tiempo proporcional a n(n+e)/m, para cualquier constante m elegida, m puede llegar a ser igual a n dando como resultado un método bastante eficiente de verificación.

Es la simulación de la ejecución normal de un programa. El simulador genera el proceso de referencias a tipos y funciones, obteniendo la información de la tabla de símbolos, la cual es construida por el componente sintáctico del simulador. Luego se despliega en pantalla un explorador de ejemplos por tema y un editor de texto en el cual se pueden escribir programas nuevos.

En el proceso de ejecución se muestran cuatro ventanas: la ventana de código fuente, la ventana de explicación, la ventana de pantalla y la ventana de memoria interna. La primera visualiza el código que se está ejecutando; la segunda explica línea por línea las acciones que se están realizando en la ventana de código; la tercera visualiza todas las entradas y salidas del programa, y la cuarta, simula gráficamente el proceso de ejecución interna de este.
 
 

A continuación se presenta un ejemplo para ilustrar el proceso, en diferentes situaciones. La generación gráfica de este ejemplo implica operaciones de creación de tipos: datos enteros y apuntadores a tipos de datos enteros. Adicionalmente, se realizan asignaciones simples, direccionamiento en memoria y salida por pantalla.

Se procede a generar la secuencia básica de imágenes, (ver figuras 2 y3) que el simulador le proporcionaría a un usuario al ejecutar un programa:


 

Figura 2. Un programa listo para empezar su ejecución gráfica

Figura 3 El programa realiza direccionamiento en memoria


 
 

Conclusiones

SIGACLE constituye una herramienta de apoyo al proceso de enseñanza de conceptos básicos de programación mediante el uso de simulación gráfica. Se espera brindar soporte al proceso educativo, en el área de programación de computadores en las universidades que lo utilicen.

Actualmente se realizan estudios de aceptación para validar la mejora al proceso real de aprendizaje con estudiantes que participan en pruebas piloto realizadas con el simulador.

La continuación del trabajo sigue en el proceso de reingeniería aplicando teoría de patrones de diseño y la implantación en un lenguaje orientado por objetos para fortalecer la posibilidad de mantener y extender la aplicación. En necesario mejorar la representación gráfica de los objetos de memoria adicionando algoritmos de visualización de grafos.

Al revisar en detalle el método propuesto y hacer una evaluación práctica, se puede concluir que sus mayores fortalezas son:

También es posible afirmar que los puntos en los cuales resulta débil son: [Abel72] Abel, N.E.; Bell, J. R. Global optimization in compilers. Proc. First USA Japan Computer Cof., AFIST Press, Montvale, Nueva Jersey. 1972

[Abel96] Abel, Peter. Lenguaje Ensamblador y Programación para PC IBMâ y Compatibles, Prentice Hall, 1996.

[Aho73] Aho, A.V.;Ullman, J. The theory of parsing, translation and compiling. Prentice Hall, Englewood Cliffs, Nueva Jersey, 1973.

[Deit94] Deitel, Harvey. C: How to Program. Prentice Hall, 1994

[Díaz96] Díaz, María Paula; Morales, Jorge. Conceptos básicos de Programación. Fundación Universitaria San Martín, 1996

[Galv94] Gálvis, A. H., Ingeniería de Software Educativo. Ediciones Uniandes 1994.

[Hum97] Watts S. Humphrey, Introduction to the Personal Software Process, Addison Wesley, SEI Series in SE - 1997

[Klau84] Klauss, J. Computer Lexicon. Circulo de Lectores, 1984.

[Lem74] Lemone A Karen, Fundamentos de Compiladores, CECSA, 1996.

Marg91] Margolis, Philip, Personal Computer Dictionary, Random House, New York, 1991.

[Morr82] Morris, M. Lógica digital y diseño de Computadores. Prentice Hall, 1982.

[Vill96] Villalobos, Jorge. Diseño y Manejo de Estructuras de Datos en C. McGraw Hill 1996.