You are on page 1of 20

COMPILADOR Y TRADUCTOR DE PSEUDOCDIGO PARA LA LGICA DE

PROGRAMACIN
(CompiProgramacin)

Resumen

CompiProgramacin es una herramienta diseada como recurso didctico para la enseanza de la


lgica de programacin. La herramienta maneja tres mdulos. El primero permite la creacin de
algoritmos en pseudocdigo utilizando el paradigma estructurado; el pseudocdigo puede verificarse
mediante un compilador que permitir detectar posibles errores semnticos o sintcticos, adems,
puede realizarse la traduccin del seudocdigo a los lenguajes de programacin C++ y Java. El
segundo mdulo permite hacer un seguimiento del pseudocdigo paso a paso; all el usuario
interacta con las entradas y salidas del algoritmo. El tercer mdulo es un evaluador de expresiones
que mostrar al usuario el desarrollo de una expresin aritmtica y/o lgica paso a paso.
Palabras clave: compilador, seudocdigo, algoritmo, lgica, programacin.
Key words: compiler, pseudocode, algorithm, logic, programming
1. Introduccin

Las tcnicas de programacin se constituyen en temtica obligada de los usuarios o estudiantes de


informtica en sus primeros aos de estudio. Esta circunstancia convierte a las asignaturas
especficas de programacin de los planes de estudio en espacios acadmicos claves de la formacin
profesional; el xito o fracaso en ellas influir decisivamente en el resto de sus estudios superiores
(Joyanes, 1998: 5). En un curso de esta rea la lgica de programacin es indispensable; se pretende
desarrollar en el usuario su capacidad analtica y creadora, para mejorar su destreza en la

elaboracin de algoritmos que sirven de base para la codificacin de los diversos programas que
tendrn que desarrollar.

En la programacin es de gran importancia seguir un estilo y una metodologa apropiada. El


propsito no es que el cdigo fuente quede ms bonito, sino mejorar su calidad y eficiencia. Debe
entenderse y asumirse la diferencia entre quien consigue que sus programas funcionen y quien
elabora sus programas de forma coherente, pero adems consigue mejorar la ejecucin de los
mismos, en trminos de velocidad o consumo de recursos (Vanegas, 2005: 25).

Programar es algo ms que aprender un lenguaje; es tambin tener el conocimiento previo para
analizar y disear un algoritmo que de solucin a un problema planteado. Un lenguaje de
programacin no es ms que el vehculo con el que se da forma a las ideas; por tanto este no es lo
primordial; lo es ms bien la lgica de programacin, que a su vez aportar parmetros de solucin
al problema que se desea resolver.

CompiProgramacin es una herramienta que servir como recurso didctico para el proceso de
formacin en lgica de programacin, y al mismo tiempo permitir al usuario, de manera
interactiva, la creacin de algoritmos, su depuracin y seguimiento paso a paso; tambin le ayudar
en la evaluacin de expresiones aritmtica y/o lgicas.

2. Qu es CompiProgramacin?

CompiProgramacin es una herramienta didctica desarrollada en el lenguaje de programacin Java


(Deitel, 2004), que tiene como objetivo apoyar el aprendizaje de la lgica de programacin,

utilizando el paradigma estructurado1. La herramienta cuenta con una interfaz comunicativa con un
modelo pedaggico que le permite al estudiante un fcil aprendizaje de la sintaxis y las reglas
semnticas del seudocdigo, para esto la herramienta cuenta con un analizador gramatical con
recuperacin de errores con

submens y barra de herramientas que permite al usuario una

interaccin agradable y de fcil manejo.

La herramienta consta de tres mdulos. El primero es llamado compilador y traductor de


pseudocdigo2 a C++ y Java; permite escribir un pseudocdigo y compilarlo, con el fin de detectar
posibles errores semnticos o sintcticos. Cuando la compilacin se ha realizado con xito el usuario
podr traducir el pseudocdigo a los lenguajes de programacin C++ y Java (autnomos y applets 3).
Un segundo mdulo permitir el seguimiento de un algoritmo en seudocdigo, ejecutndolo paso a
paso y visualizando el efecto de cada lnea de cdigo sobre el algoritmo; este proceso es similar a un
depurador de cdigo, pero en este caso la depuracin no se utiliza para buscar errores, sino para ver
la ejecucin de entradas y salidas del algoritmo. En un tercer mdulo, llamado evaluador de
expresiones, pueden incluirse varias expresiones aritmticas y/o lgicas, con el fin de evaluarlas
para determinar los valores que pueden tomar las diferentes expresiones, variables o constantes.

Con CompiProgramacin pueden manejarse los siguientes conceptos del paradigma estructurado:

Las estructuras de secuencia

La estructura de alternativa simple Si

La estructura de alternativa compuesta Si-Sino

La estructura de alternativa mltiple Seleccionar Caso

2
3

El software fue desarrollado como trabajo de grado para optar al ttulo de Magster en Ingeniera de Sistemas de
la Universidad Nacional de Colombia
El pseudocdigo es un lenguaje para especificar un algoritmo
El applet es un programa en Java que es diseado para ser ejecutado desde otra aplicacin, normalmente desde
un navegador de Internet.

La estructura de repeticin Mientras

La estructura de repeticin Haga / Mientras

La estructura de repeticin Desde / Para

Estructura de datos (arreglos).

El manejo de funciones de usuario y recursivas

El manejo de procedimientos

Manejo bsico de archivos

3. Mdulo compilador de pseudocdigo y traductor a C++ y Java

Este es el mdulo principal de CompiProgramacin. Cuenta con una interfaz que contiene tres
ventanas: la primera permite crear, modificar eliminar un seudocdigo, abrirlo desde
un archivo, como tambin almacenarlo en disco (al ingresar a la aplicacin est
contiene un ejercicio ejemplo de seudocdigo). Para la creacin del pseudocdigo es
necesario que ste contenga un procedimiento principal, en el cual se escribirn todas
las instrucciones del algoritmo. Su esquema es el siguiente:
procedimiento principal()
constantes
<declaracin de constantes>
variables
<declaracin de variables>
inicio
<instrucciones>
fin_procedimiento

Adems CompiProgramacin cuenta con tipos de datos (reales, enteros) y palabras reservadas. Las
palabras reservadas no pueden ser nombre de variables, constantes, funciones o procedimientos. Las
palabras reservadas de CompiProgramacin son:

escribir: permite imprimir en pantalla un texto, su formato es:


escribir (<variable o mensaje>)

Ejemplo: Si deseamos imprimir en pantalla "hoy es da de fiesta", escribiramos lo siguiente:


escribir("hoy es da de fiesta")

leer: permite almacenar en una variable un valor ledo desde el teclado, su formato es:
leer (<nombre de variable>)

Ejemplo: Si deseamos almacenar en una variable X un valor digitado desde el teclado, escribiramos
lo siguiente:
leer(X)

cambioLinea: permite realizar un salto de lnea en la pantalla, su formato es:


escribir (cambioLinea)

Ejemplo: Si deseamos imprimir en pantalla en una lnea "hola" y en la siguiente lnea


"CompiProgramacin", escribiramos lo siguiente:
escribir("hola")
escribir(cambioLinea)
escribir("CompiProgramacin")

si: representa una toma de decisin sencilla, es decir, si la condicin es verdadera se realizan
las acciones que pertenezcan al si y continuara con el resto del programa. Si la condicin es
falsa no entrara al si y por consiguiente todas las instrucciones que estn en el si no se
ejecutaran. Su formato es:

si (<condicin>) entonces
<accin>
fin_si
Ejemplo:
Si tenemos A=10 y B=8
si (A>B) entonces
escribir("Hola Gente")
fin_si
Como la condicin en verdadera (A es mayor que B) entrar al si e imprimir Hola Gente.

si sino: representa una toma de decisin con dos opciones, si la condicin es verdadera se
ira por el si, en caso contrario entrara al sino. En esta sentencia de control el programa solo
tomara una de las dos posibilidades y en ningn caso las dos alternativas. Su formato es:
si (<condicin>) entonces
<accion1>
sino
<accion2>
fin_si

Ejemplo: Si tenemos A=10 y B=8


si (B>A) entonces
escribir("entre por el si")
sino
escribir(" entre por sino")
fin_si
Como la condicin en falsa (B no es mayor que B) entrar al sino e imprimira "entre por sino".

Seleccionar: es una toma de decisin con varias opciones, esto es, segn sea el valor de una
variable escoger un solo caso entre varias alternativas. Su formato es:
seleccionar (<variable>) de
caso 1<literal>:
<instrucciones>
retornar
caso 2 <literal>:
<instrucciones>
retornar

otrocaso:
<instrucciones>
retornar
fin_seleccionar
Ejemplo: Si tenemos A=2
seleccionar (A) de
caso 1:
escribir("en el caso uno")
retornar
caso 2:
escribir("en el caso dos")
retornar
.
otrocaso:
escribir("No es un nmero")

retornar
fin_seleccionar

Es este ejemplo como la variable A tiene un valor de 2 ingresara al caso 2 e imprimira en pantalla
"en el caso dos".

para / hasta: ejecuta las instrucciones del ciclo un nmero especificado de veces y de modo
automtico controla el nmero de iteraciones o pasos a travs del cuerpo del ciclo. Su
formato es:

para (<variable> = <valor inicial> hasta <valor final> paso <valor_incremento>) hacer
<instrucciones>
fin_para

Ejemplo 1: calcular la suma de los nmeros de 1 a 10


suma=0
para (i = 1 hasta 10 ) hacer
suma=suma +i
fin_para
escribir("suma igual a:"+suma)
En este caso la variable suma obtendra un valor de:55
En algunos casos es necesario hacer incrementos decrementos diferentes de 1 (por omisin el
incremento es de 1) es necesario especificarle el incremento decremento con la opcin paso
Ejemplo 2: Hacer la suma de los nmeros pares entre 2 y 20

para (i = 2 hasta 20 paso 2 ) hacer


suma=suma +i
fin_para
escribir("suma igual a:"+suma)
En este caso la variable suma obtendra un valor de:110

mientras: La estructura repetitiva mientras es aquella donde el cuerpo del ciclo se repite
mientras se cumple una determinada condicin. Si se evala falsa, ninguna accin se toma y
el programa prosigue en la siguiente instruccin despus del ciclo. Si la expresin es
verdadera, entonces de ejecuta las instrucciones del ciclo, despus de lo cual se evala de
nuevo la expresin. Este proceso se repite una y otra vez mientras la expresin sea
verdadera. Su formato es:
mientras (<condicin>) hacer
<instrucciones>
<incremento> <decremento>
fin_mientras

Ejemplo: calcular la suma de los nmeros de 1 a 10


suma=0
i=1
mientras i<=10 hacer
suma=suma +i
i=i+1
fin_mientras
escribir("suma igual a:"+suma)
En este caso la variable suma obtendra un valor de:55

haga / mientras: existen muchas situaciones en las que se desea que un ciclo se ejecute al
menos una vez antes de comprobar la condicin de repeticin. En la estructura mientras si el
valor de la expresin es inicialmente falso, el cuerpo del ciclo no se ejecutar; por ello, se
necesitan otros tipos de estructuras repetitivas. La estructura haga/mientras se ejecuta por lo
menos una vez. Su formato es:
haga
<instrucciones>
mientras (<condicin>)

Ejemplo : calcular la suma de los nmeros de 1 a 10


suma=0
i=1
haga
suma=suma+i
i=i+1
mientras (i<=10)
escribir(" la suma total es:"+suma)
En este caso la variable suma obtendra un valor de:55

funciones: una funcin la podemos definir como un conjunto de instrucciones agrupadas


bajo un nombre que cumple una tarea especfica dentro de un programa. Cuando los
programas empiezan a ser ms complejos es necesario dividirlo en partes ms pequeas,
estas partes son llamadas funciones. Cada funcin ejecutara una tarea especfica. Para

invocar o llamar a la funcin slo es necesario especificar el nombre y entre parntesis la


lista de parmetros. Su formato es:
funcion <nombre_funcion> (<arg1:tipo1,...>) : <tipo_del_valor_retornado>
constantes
<declaracin de constantes>
variables
<declaracin de variables>
inicio
<instrucciones>
retornar <expresin>
fin_funcion

Ejemplo : capturar dos nmeros e imprimir la suma de estos por medio de una funcin
funcion suma(arg:entero, arg2:entero ):entero
variables
c:entero
inicio
c=arg+arg2
retornar c
fin_funcion

Un ejemplo prctico de seudocdigo es:

procedimiento principal()
variables
alto: real
ancho: real
largo: real
volumen: real
inicio
escribir("Escriba el alto: ")
leer(alto)
escribir(cambioLinea)
escribir("Escriba el ancho: ")
leer(ancho)
escribir(cambioLinea)
escribir("Escriba el largo: ")
leer(largo)
escribir(cambioLinea)
volumen = largo * alto * ancho
escribir("el volumen de la caja es: ")
escribir(volumen)
fin_procedimiento

El pseudocdigo se compila con el propsito de encontrar los posibles errores semnticos o


sintcticos; la segunda ventana permite visualizar los errores generados al compilar el seudocdigo;
por cada error generado se muestra el identificador del error, su descripcin y el nmero de fila y
columna donde ocurri el error. Por ejemplo:

Compilacin terminada con errores. 3 errores.


Cod 160: Error Sin: Lnea 9:6: Llamado a procedimiento: Se esperaba encontrar )
Cod 1033: Error Sem: Lnea 17:6: Expresin a la derecha de = puede tener variables no
inicializadas
Cod 1050: Error Sem: Lnea 19:6: Llamado a procedimiento puede que no se haya inicializado
una variable en el parmetro 1.

Una tercera ventana permite visualizar la traduccin del seudocdigo a los lenguajes de
programacin C++ y Java (autnomos y applets); estas traducciones pueden ser almacenadas en
disco. Continuando con el ejemplo anterior, al realizar la traduccin a C++ la herramienta genera el
siguiente cdigo:

#include <iostream.h>
void main()
{
float alto;
float ancho;
float largo;
float volumen;
cout<<"Escriba el alto: ";
cin>>alto;
cout<<"\n";
cout<<"Escriba el ancho: ";
cin>>ancho;
cout<<"\n";
cout<<"Escriba el largo: ";
cin>>largo;
cout<<"\n";
volumen=largo*alto*ancho;
cout<<"el volumen de la caja es: ";
cout<<volumen;
}

Realizando la traduccin a lenguaje Java en un subprograma applet, se genera el siguiente cdigo:

import java.awt.*;
import java.applet.*;
public class MyClase extends Applet{
public boolean action(Event e, Object o) {
float alto=0;
float ancho=0;
float largo=0;
float volumen=0;
if(e.target==myButton1){
alto = Float.parseFloat(t_alto.getText());
ancho = Float.parseFloat(t_ancho.getText());
largo = Float.parseFloat(t_largo.getText());
l_aux17.setText(""+"Escriba el alto: ");
l_aux19.setText(""+"Escriba el ancho: ");
l_aux21.setText(""+"Escriba el largo: ");
volumen=largo*alto*ancho;
l_aux23.setText(""+"el volumen de la caja es: ");
l_volumen.setText(""+volumen);}
return true;}
public void init(){
add(l_aux17 = new Label());
add(t_alto = new TextField(10));
add(l_aux19 = new Label());
add(t_ancho = new TextField(10));
add(l_aux21 = new Label());
add(t_largo = new TextField(10));
add(l_aux23 = new Label());
add(l_volumen = new Label());
add(myButton1 = new Button("Respuesta"));}
Button myButton1;
TextField t_alto;
TextField t_largo;
TextField t_ancho;
Label l_aux19;
Label l_volumen;
Label l_aux17;
Label l_aux23;
Label l_aux21;}

La interfaz tambin cuenta con submens y una serie de iconos que permiten que la interaccin
usuario sistema se efecte de forma sencilla y dinmica.

Al ejecutar los anteriores pasos se obtendr la siguiente pantalla:

Figura 1. Compilador y traductor de pseudocdigo a C++ y Java

El compilador y traductor de pseudocdigo a C++ y Java est compuesto por analizadores


gramaticales (analizador lxico, sintctico y semntico) con recuperacin de errores. La herramienta
toma como entrada un algoritmo en pseudocdigo; ste es compilado y evaluado por los
analizadores gramaticales con el fin de detectar los posibles errores escritos en el pseudocdigo.

3.1. Analizador lxico

Es la parte del compilador4 que verifica el programa fuente, carcter a carcter, y a partir de ste
construye unas entidades primarias llamadas tokens5. En otras palabras, el analizador lexicogrfico
transforma el programa fuente en unidades lexicogrficas (Vanegas, 2005: 14), (TEUFEL, 1995).

Un compilador es un programa que recibe como entrada un programa escrito en un lenguaje de nivel medio o
superior (el programa fuente) y lo transforma a su equivalente en lenguaje ensamblador (el programa objeto).
El token es una palabra del lenguaje conformada por smbolos terminales de la gramtica. En lenguaje Java un
token puede ser variable, pero dependiendo del contexto tendr diferentes interpretaciones; en cambio el token int
denota un tipo de dato entero.

3.2. Analizador sintctico

Comprueba que las sentencias que componen el texto fuente sean correctas en el lenguaje
correspondiente, creando una representacin interna que corresponde a la sentencia analizada. De
esta manera se garantiza que slo sern procesadas las sentencias que pertenezcan al lenguaje
fuente. As como en las dems etapas, durante el anlisis sintctico se van mostrando los errores que
se encuentran (Vanegas, 2005: 14), (TEUFEL, 1995).

3.3. Analizador semntico


Se ocupa de analizar si la sentencia tiene algn significado. Pueden encontrarse sentencias
sintcticamente correctas, pero que no pueden ejecutarse porque carecen de sentido. En general, el
anlisis semntico se hace simultneamente con el sintctico, introduciendo en ste ltimo rutinas
semnticas (Vanegas, 2005: 15), (TEUFEL, 1995).

4. Mdulo ejecucin pseudocdigo paso a paso

Para acceder a este mdulo debe existir un pseudocdigo previamente compilado (sin errores
sintcticos ni semnticos) y almacenado en disco.
Este mdulo de ejecucin paso a paso contiene la misma interfaz del mdulo compilador y
traductor de Seudocdigo a C++ y Java. En l se encontrarn tres ventanas: la primera permite al
usuario hacer un seguimiento del algoritmo paso a paso, visualizando lnea por lnea el
pseudocdigo; en la segunda ventana se visualizarn los diferentes valores que toman las variables y
constantes contenidas en el algoritmo; una tercera ventana permite visualizar la simulacin de una
consola con las entrada y salidas del programa. El mdulo tambin contiene las opciones que le

permitan realizar el seguimiento del algoritmo, a saber: inicio, paso a paso, reiniciar y ejecucin
contina.

La pantalla del mdulo paso a paso es la siguiente:

Figura 2. Ejecucin seudocdigo paso a paso

5. Mdulo evaluador de expresiones

Para acceder a este mdulo no es necesario que exista un pseudocdigo, pero s es necesario acceder
el mdulo compilador y traductor de pseudocdigo a C++ y Java. All el usuario puede realizar la
evaluacin de una expresin aritmtica y/o lgica, visualizando paso a paso el procedimiento de
evaluacin de la expresin.

El mdulo cuenta con cuatro ventanas. La primera permite el ingreso de variables; el usuario puede
escribir el nombre y valor de cada una de las que intervienen en la evaluacin de la expresin; en
una segunda ventana se visualiza el valor de cada variable mostrando el tipo de dato, nombre y valor
de la variable. La tercera ventana permite visualizar el proceso de evaluacin paso a paso y en la
cuarta se visualizan los posibles errores contenidos en la expresin.

El evaluador de expresiones sta compuesto por los analizadores gramaticales que son utilizados en
el mdulo compilador y traductor de pseudocdigo a C++ y Java.

La pantalla del mdulo de evaluacin de expresiones se presenta en la figura 3:

Figura 3. Evaluador de expresiones

6. Conclusiones

CompiProgramacin es una herramienta que sirve de apoyo didctico para todos los interesados
en la lgica de programacin, con el propsito de analizar y disear algoritmos que den solucin
a un problema planteado.

La herramienta cuenta con una interfaz comunicativa diseada con propsitos pedaggicos; ella
permite al usuario una interaccin agradable con el sistema y su fcil manejo. El usuario siempre
estar en contacto con la aplicacin, permitindole manejar los diferentes mdulos de la
aplicacin con sencillez.

CompiProgramacin contiene una ayuda didctica que permite al usuario la operacin sencilla
para la creacin de seudocdigo y la traduccin a los lenguajes de programacin C++ y Java;
adems puede hacerse un seguimiento paso a paso del seudocdigo para determinar las entradas
y salidas del algoritmo.

Compiprogramacin contiene una ayuda en ambiente Windows que permite conocer todo acerca
de la aplicacin, la gramtica del seudocdigo, la relacin de errores sintcticos y semnticos
identificables y las funciones preexistentes.

REFERENCIAS BIBLIOGRFICAS
[1] DEITEL, H y DEITEL, P. Cmo programar el Java. 5 edicin. Mxico D.F.: Prentice Hall. 2004.
[2] JOYANES AGUILAR, Lus. Fundamentos de programacin, algoritmos y estructura de datos, 1 ed.
Mxico D.F.: Prentice Hall. 2003.
[3] TEUFEL, Bernand; SCHMIDT, Stephanie y TEUFEL, Thomas. Compiladores, conceptos fundamentales.
Wilmington, Delaware, USA: Addison-Wesley. 1995.
[4] VANEGAS, Carlos Alberto. Compilador y traductor de pseudocdigo para la lgica de programacin.
Trabajo de grado para optar al ttulo de Magster en Ingeniera de Sistemas. Bogot: Universidad Nacional de
Colombia. 2005.

BIBLIOGRAFA RECOMENDADA
[1] AHO A., John E. and Ullman Jeffrey D., Compiladores: principios, Tcnicas y Herramientas,,. 1 Edicin.
Addison- Wesley. 1988.
[2] BECERRA SANTAMARIA, Cesar. Lenguaje C, el nuevo concepto. Tomo I. Bogot: Kimpres Ltda. 1993.
[3] BOOCH, Grandy. Anlisis y diseo orientado a objetos con aplicaciones. 2. ed. USA: 1996.
[4] CEBALLOS,, Carmona Miguel Angel. Trabajo de Lenguajes y Autmatas. ITESI, Febrero de 2002.
[5] JOYANES AGUILAR, Lus. Fundamentos de programacin, algoritmos y estructura de datos, 1 ed.
Mxico D.F.: Prentice Hall. 1998.
[6] LEMONE, Karen. Fundamentos de compiladores, como traducir al lenguaje de computadora. 1. ed.
Mxico D.F.: Continental. 1996.
[7] PRESSMAN, Roger. Ingeniera del software, un enfoque prctico. 3. ed. Madrid: McGraw Hill. 1994.
[8] The on-line Java 2 SDK Documentation.2001. En: http://java.sun.com/j2se/1.3/docs/index.html

You might also like