Prototipo de intérprete de Basic a Ansi-C Basicce - Universidad de ...
Prototipo de intérprete de Basic a Ansi-C Basicce - Universidad de ...
Prototipo de intérprete de Basic a Ansi-C Basicce - Universidad de ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA<br />
PROTOTIPO DE INTÉRPRETE DE BASIC A ANSI - C<br />
BASICCE<br />
Carlos E. Trillos Barón 1 – Efraín Corzo García 2<br />
Asesor: Ing. Carlos A. Acevedo Rey<br />
Resumen<br />
BASICCE recoge las Técnicas y conceptos <strong>de</strong> la teoría <strong>de</strong> Compiladores e<br />
Intérpretes que fueron empleadas en la Asignatura Compiladores <strong>de</strong> la<br />
<strong>Universidad</strong> Cooperativa <strong>de</strong> Colombia - Seccional Bucaramanga.<br />
Aplicación que toma una sentencia <strong>de</strong>l programa Fuente y las traduce a<br />
lenguaje Objeto, en este caso el lenguaje <strong>Basic</strong> fue utilizado como lenguaje<br />
Fuente, el cual se traduce al código equivalente en el lenguaje ANSI - C.<br />
BASICCE utiliza una serie <strong>de</strong> Estrategias y/o técnicas para cada una <strong>de</strong> las<br />
fases que <strong>de</strong>sarrolla, en el caso se utilizaron lenguajes formales,<br />
específicamente una gramática in<strong>de</strong>pendiente <strong>de</strong>l contexto la forma Backus<br />
Naur (BNF), con el fin <strong>de</strong> formalizar la gramática <strong>de</strong>l lenguaje <strong>de</strong> entrada al<br />
igual que la utilización <strong>de</strong> Autómatas Finitos no Deterministas para el<br />
<strong>de</strong>sarrollo <strong>de</strong>l Analizador Léxico, para la fase <strong>de</strong> Análisis Sintáctico y Análisis<br />
Semántico se utilizo la Traducción Dirigida por Sintaxis basada en Reglas<br />
Semánticas que fueron las que realizaron el proceso <strong>de</strong> traducción final.<br />
Se encuentra apoyado en un Manejador <strong>de</strong> Errores y una tabla <strong>de</strong> Símbolos<br />
que permiten realizar el proceso <strong>de</strong> compilación y análisis <strong>de</strong> la gramática <strong>de</strong>l<br />
lenguaje <strong>de</strong> entrada. De igual forma posee un Analizador Semántico que<br />
utiliza la verificación <strong>de</strong> Tipos. BASICCE es un <strong>Prototipo</strong> <strong>de</strong> Interprete que<br />
busca <strong>de</strong>spertar el interés <strong>de</strong>l estudiante en la investigación y en la<br />
comprensión <strong>de</strong> la base conceptual <strong>de</strong> todo Software, el proceso <strong>de</strong><br />
Compilación e Interpretación.<br />
Introducción<br />
E ambiente y la base conceptual <strong>de</strong> la Informática y los Sistemas(Software)<br />
está soportada en el diseño y <strong>de</strong>sarrollo <strong>de</strong> Compiladores e Interpretes <strong>de</strong><br />
diferente índole, los cuales han permitido que se puedan realizar toda serie<br />
<strong>de</strong> trabajos entre estos po<strong>de</strong>mos observar los Sistemas Operativos; software<br />
indispensable para la administración <strong>de</strong> los recursos <strong>de</strong>l computador, los<br />
controladores (Drivers) que permiten la correcta comunicación con periféricos<br />
<strong>de</strong> diferentes fabricantes, aplicaciones <strong>de</strong> escritorio que nos permiten realizar<br />
tareas administrativas y/o creativas.<br />
1 <strong>Universidad</strong> Cooperativa <strong>de</strong> Colombia – Seccional Bucaramanga, trillosbaron2005@yahoo.es<br />
2 <strong>Universidad</strong> Cooperativa <strong>de</strong> Colombia- Seccional Bucaramanga, efracor03@hotmail.com<br />
VENTANA INFORMÁTICA No. 12 – <strong>Universidad</strong> <strong>de</strong> Manizales, enero – junio / 2005 – pp 69-78
- <strong>Universidad</strong> <strong>de</strong> Manizales, enero – junio / 2005<br />
Todas estas aplicaciones compiladas bajo especificaciones <strong>de</strong>l lenguaje <strong>de</strong><br />
maquina <strong>de</strong> un procesador en particular. Al igual que los compiladores se<br />
pue<strong>de</strong>n observar una serie <strong>de</strong> Intérpretes y/o traductores que no tienen como<br />
resultado <strong>de</strong>l proceso un lenguaje objeto (Código <strong>de</strong> Maquina o<br />
Ensamblador) si no otro lenguaje, en el caso ANSI – C, los más conocidos<br />
son aquellos que han permitido que los límites geográficos <strong>de</strong>saparezcan y<br />
han promovido el conocimiento a nivel global, tales interpretes <strong>de</strong>nominados<br />
BROWSERS o interpretes <strong>de</strong> Comandos HTML, DHTML, referenciados en el<br />
mercado como NetsCape, Explorer, Mozilla entre otros.<br />
Por en<strong>de</strong> se ha convertido en una necesidad el conocimiento básico que<br />
permita el entendimiento y/o comprensión <strong>de</strong> las fases <strong>de</strong>l diseño y<br />
<strong>de</strong>sarrollo <strong>de</strong> Compiladores e Interpretes, mediante la implementación <strong>de</strong> un<br />
<strong>Prototipo</strong> <strong>de</strong> Interprete que cumpla con las fases principales <strong>de</strong>l proceso <strong>de</strong><br />
Compilación, el cual traducirá y/o interpretará BASIC a Lenguaje C(ANSI),<br />
aplicando las técnicas Básicas, brindando el conocimiento básico, suficiente<br />
y necesario para empren<strong>de</strong>r proyectos <strong>de</strong> investigación <strong>de</strong> mayor<br />
envergadura en cuanto al <strong>de</strong>sarrollo <strong>de</strong> Software <strong>de</strong> Propósito general y<br />
especifico.<br />
Objetivos<br />
• Análisis <strong>de</strong>l lenguaje fuente y formalización <strong>de</strong>l mismo mediante BNF.<br />
• Desarrollo <strong>de</strong> las Producciones (Reglas) ligadas al Lenguaje Fuente<br />
(BASIC) utilizando BNF.<br />
• Desarrollo <strong>de</strong> la Tabla <strong>de</strong> símbolos y Tabla <strong>de</strong> palabras Reservadas<br />
• Diseño <strong>de</strong> una Analizador Léxico utilizando BNF y Autómatas.<br />
• Desarrollo <strong>de</strong>l Analizador léxico mediante el método <strong>de</strong> Autómatas<br />
Finitos no <strong>de</strong>terministas.<br />
• Desarrollo <strong>de</strong>l Manejador <strong>de</strong> Errores.<br />
• Implementación <strong>de</strong> un Traductor Dirigido por Sintaxis, tomando como<br />
base reglas semánticas con el fin <strong>de</strong> realizar el proceso <strong>de</strong> traducción.<br />
• Desarrollo <strong>de</strong>l Interfaz Grafico <strong>de</strong>l Usuario (GUI).<br />
• Desarrollo <strong>de</strong> manuales y sistema <strong>de</strong> Ayuda.<br />
Contenido<br />
El proceso <strong>de</strong> <strong>de</strong>sarrollo <strong>de</strong> Compiladores e Intérpretes esta basado en las<br />
siguientes fases (Ver Fig. 1):
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA<br />
Análisis Léxico<br />
Análisis Sintáctico<br />
Análisis Semántico<br />
Manejador <strong>de</strong> Errores<br />
Tabla <strong>de</strong> Símbolos<br />
Generador <strong>de</strong> Código Intermedio<br />
Optimizador <strong>de</strong> Código<br />
Generador <strong>de</strong> Código<br />
Figura 1.<br />
De las anteriores fases, BASICCE realiza las tres primeras <strong>de</strong>l proceso <strong>de</strong><br />
compilación y/o interpretación, las cuales efectúan la traducción <strong>de</strong>l lenguaje<br />
fuente (BASIC) a lenguaje objeto (C – ANSI), <strong>de</strong>bido a que el objetivo final <strong>de</strong><br />
BASICCE no es el <strong>de</strong> generar código <strong>de</strong> maquina y/o ensamblador.<br />
BASICCE utiliza un lenguaje formal <strong>de</strong>nominado Formas Backus Naur BNF<br />
(Backus-Naur Form). Las formas Backus-Naur son <strong>de</strong> las primeras<br />
notaciones que se utilizaron para especificar intérpretes y lenguajes <strong>de</strong><br />
programación.<br />
Notación BNF: elemento no terminal = Definicion1|<br />
Definicion 2|<br />
...<br />
Los elementos terminales, o sea, que pertenecen al vocabulario, se escriben<br />
tal cual. Los elementos no terminales se escriben entre los símbolos .<br />
La notación BNF está conformada por un conjunto <strong>de</strong> Símbolos Terminales<br />
(Componentes Léxicos), un conjunto <strong>de</strong> Símbolos No Terminales (reflejados<br />
en funciones) y un conjunto <strong>de</strong> Reglas <strong>de</strong> Producción.<br />
Ejemplo: Descripción sintáctica <strong>de</strong> una expresión matemática en notación<br />
BNF:<br />
4 3 1<br />
expresion = numero |<br />
|<br />
( expresion ) expresion operador expresion<br />
operador = +| − |<br />
/<br />
numero digito numero digito
- <strong>Universidad</strong> <strong>de</strong> Manizales, enero – junio / 2005<br />
digito 1 2 3 4 5 6 7 8 9 0<br />
Expresiones regulares o gramáticas in<strong>de</strong>pendientes <strong>de</strong>l contexto: Toda<br />
construcción que se pueda <strong>de</strong>scribir mediante una expresión regular también<br />
se pue<strong>de</strong> <strong>de</strong>scribir mediante una gramática. Por ejemplo la expresión regular<br />
(a|b)*abb y la gramática<br />
A 0<br />
aA 0<br />
bA 0<br />
aA 1<br />
A 1<br />
bA 1<br />
A 2<br />
bA 3<br />
A 3<br />
ε<br />
Análisis Léxico (Lineal)<br />
Fase en la cual el Intérprete realiza la lectura <strong>de</strong> la ca<strong>de</strong>na <strong>de</strong> caracteres que<br />
constituye el programa fuente (Código en <strong>Basic</strong> ) y agrupa los Componentes<br />
Léxicos, aquellos que se encuentran léxica y sintácticamente correctos;<br />
evaluando si se encuentran correctamente escritos Palabra Reservadas,<br />
Variables (i<strong>de</strong>ntificadores) y signos <strong>de</strong> puntuación; generando interrupciones<br />
controladas por el manejador <strong>de</strong> errores en el momento en que se<br />
encuentren caracteres inválidos y que no pertenezcan al lenguaje <strong>de</strong> entrada<br />
(BASIC).<br />
Esta etapa se encuentra vinculada con la tabla <strong>de</strong> Símbolos, que es la<br />
encargada <strong>de</strong> guardar un registro por variable (i<strong>de</strong>ntificador); éste <strong>de</strong>be<br />
contener tipo, ámbito, y NOMBRE <strong>de</strong> la misma.<br />
Tabla I. Tabla <strong>de</strong> Símbolos<br />
I<strong>de</strong>ntificador Lexemas Ámbito Tipo<br />
Id 0 Velocidad Local Float<br />
La implementación <strong>de</strong>l analizador léxico se llevo a cabo utilizando autómatas<br />
finitos no Deterministas. Siendo un autómata finito, un programa que toma<br />
como entrada una ca<strong>de</strong>na X y respon<strong>de</strong> si X es una frase <strong>de</strong>l programa, y no<br />
si no lo es.<br />
La Fig. 2 pue<strong>de</strong> ser la representación <strong>de</strong> los dígitos:
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA<br />
d<br />
Inicio<br />
0<br />
d<br />
Otro<br />
1 2<br />
Figura 2.<br />
Análisis Sintáctico<br />
Su objetivo consiste en examinar la secuencia <strong>de</strong> Tokens (Componentes<br />
Léxicos) <strong>de</strong>vuelta por el analizador léxico y verificar si es sintácticamente<br />
correcta mediante la obtención <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>rivación asociado a dicha<br />
secuencia. La Fig. 3 muestra la forma en que interactúa con los <strong>de</strong>más<br />
módulos.<br />
Programa<br />
fuente<br />
Analizador<br />
léxico<br />
Componente<br />
léxico<br />
Obtener siguiente<br />
componente léxico<br />
Analizador<br />
sintáctico<br />
Árbol <strong>de</strong> análisis<br />
sintáctico<br />
Resto <strong>de</strong> la<br />
etapa inicial<br />
Representación<br />
Intermedia<br />
Tabla <strong>de</strong><br />
Símbolos<br />
Figura 3.<br />
El analizador sintáctico interactúa con el analizador léxico mediante la<br />
solicitud <strong>de</strong> Componentes Léxicos para verificar que pertenezcan a frases<br />
gramaticales validas <strong>de</strong>l lenguaje fuente (<strong>Basic</strong>); por otro lado genera un<br />
árbol <strong>de</strong> análisis sintáctico que es empleado por el resto <strong>de</strong> las fases <strong>de</strong>l<br />
proceso <strong>de</strong> Compilación y/o interpretación.<br />
El árbol <strong>de</strong> Análisis Sintáctico se forma mediante la aplicación <strong>de</strong> un Análisis<br />
<strong>de</strong>scen<strong>de</strong>nte, que construye el árbol partiendo <strong>de</strong>s<strong>de</strong> la raíz hacia las hojas.<br />
Para efectos <strong>de</strong> interpretación y/o traducción se implementa la estrategia <strong>de</strong><br />
Traducción dirigida por la sintaxis, que son especificaciones <strong>de</strong> alto nivel<br />
para traducciones. Analiza sintácticamente la ca<strong>de</strong>na <strong>de</strong> componentes<br />
léxicos <strong>de</strong> entrada, construye el árbol <strong>de</strong> análisis sintáctico y <strong>de</strong>spués recorre<br />
el árbol para evaluar las reglas semánticas en sus nodos. La traducción <strong>de</strong><br />
la ca<strong>de</strong>na <strong>de</strong> componentes léxicos es el resultado obtenido al evaluar las<br />
reglas semánticas. Estas Reglas son las que realizan el proceso <strong>de</strong><br />
interpretación con la ayuda <strong>de</strong>l analizador sintáctico predictivo<br />
Manejo <strong>de</strong> errores Sintácticos: Se sabe que los programas pue<strong>de</strong>n<br />
contener errores <strong>de</strong> muy diverso tipo.
- <strong>Universidad</strong> <strong>de</strong> Manizales, enero – junio / 2005<br />
Gran parte <strong>de</strong> la <strong>de</strong>tección y recuperación <strong>de</strong> errores <strong>de</strong> un compilador o<br />
interprete se centran en la fase <strong>de</strong> análisis sintáctico. El manejador esta en<br />
capacidad <strong>de</strong> <strong>de</strong>tectar errores <strong>de</strong> tipo léxico, sintáctico, semántico.<br />
Análisis Semántico<br />
Esta fase se encarga <strong>de</strong> revisar que cada agrupación o conjunto <strong>de</strong><br />
Componentes Léxicos tenga sentido; es aquí don<strong>de</strong> se reúne la información<br />
sobre los tipos para la fase posterior, en esta etapa se utiliza la estructura<br />
jerárquica <strong>de</strong> la etapa anterior y así po<strong>de</strong>r <strong>de</strong>terminar los operadores, y<br />
operandos <strong>de</strong> expresiones y preposiciones.<br />
Comprobación <strong>de</strong> Tipos: un compilador o interprete <strong>de</strong>be informar un error<br />
si se aplica un operador a un operando incompatible, por ejemplo, si se<br />
suman una variable tipo matriz y una variable <strong>de</strong> función. La Fig. 4 muestra<br />
<strong>de</strong> que forma los módulos interactúan entre sí, don<strong>de</strong> el verificador <strong>de</strong> tipos,<br />
es el filtro para la siguiente fase <strong>de</strong>l proceso <strong>de</strong> compilación.<br />
El verificador <strong>de</strong> tipos se encuentra vinculado con la tabla <strong>de</strong> símbolos,<br />
siendo esta ultima la base para observar si las variables (I<strong>de</strong>ntificadores) ya<br />
se encuentran <strong>de</strong>claradas.<br />
Ca<strong>de</strong>na <strong>de</strong><br />
componentes<br />
léxicos<br />
Analizador<br />
sintáctico<br />
Árbol<br />
sintáctico<br />
Comprobador <strong>de</strong><br />
Tipos<br />
Árbol<br />
sintáctico<br />
Generador <strong>de</strong><br />
código<br />
intermedio<br />
Representación<br />
intermedia<br />
Figura 4.<br />
Métodos<br />
El analizador Léxico fue implementado bajo las Formas Backus Naur (BNF)<br />
don<strong>de</strong> cada producción (regla) maneja la sintaxis apropiada para la<br />
gramática (léxico-sintáctico) <strong>de</strong>l lenguaje <strong>de</strong> entrada y para su<br />
implementación se utilizaron autómatas finitos no <strong>de</strong>terministas.<br />
Ejemplo:<br />
Producción para i<strong>de</strong>ntificadores y/o variables:<br />
La Fig. 5 correspon<strong>de</strong> al Autómata asociado a la regla anterior.<br />
Id<br />
L L D
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA<br />
E<br />
E<br />
2<br />
L<br />
3<br />
E<br />
Inicio<br />
0<br />
L<br />
1<br />
E<br />
6 7<br />
E<br />
4<br />
D<br />
5<br />
E<br />
Figura 5.<br />
Des<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong>l algoritmo se utilizó una función por producción<br />
(regla) y una función llamada SigComplex o Parea que es la encargada <strong>de</strong><br />
leer los lexemas.<br />
Function SigComplex LenguajeFuente AsString<br />
While apuntador
- <strong>Universidad</strong> <strong>de</strong> Manizales, enero – junio / 2005<br />
Resultados<br />
Al iniciar el programa se mostrará la siguiente Ventana. fig (6).<br />
Figura 6.<br />
La Fig. 6 muestra el entorno <strong>de</strong> <strong>de</strong>sarrollo (IDE) que esta conformado por un<br />
menú principal que contiene los Ítems Archivo don<strong>de</strong> se encuentran las<br />
opciones Abrir y Salir; Traducir don<strong>de</strong> está la opción <strong>Basic</strong> a C; Edición<br />
don<strong>de</strong> se ubican Búscar, Palabras Reservadas e i<strong>de</strong>ntificadores; y Ayuda<br />
don<strong>de</strong> se encuentran las Opciones Contenido y Acerca <strong>de</strong>.<br />
Del mismo modo se muestra el contenido <strong>de</strong> un archivo con extensión .BAS<br />
que se carga y se visualiza en el lado izquierdo <strong>de</strong>l IDE (Entorno Integrado<br />
<strong>de</strong> Desarrollo). Con este archivo el programa se basa para traducir al<br />
lenguaje ANSI C, mostrando la interpretación en la parte <strong>de</strong>recha <strong>de</strong> la Fig.<br />
6.
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA<br />
En la parte inferior aparece una Tabla que controla los posibles errores<br />
presentados en el proceso <strong>de</strong> Interpretación y/o traducción.<br />
En la Fig. 7 se observa la función <strong>de</strong>l manejador <strong>de</strong> errores.<br />
Figura 7.<br />
Cuando está en el proceso <strong>de</strong> traducción, el intérprete muestra en la parte<br />
inferior los posibles errores <strong>de</strong> tipo léxico, sintáctico y semánticos que tiene el<br />
archivo cargado en la parte izquierda <strong>de</strong> la gráfica anterior. El encargado <strong>de</strong><br />
esta tarea es el manejador <strong>de</strong> errores; el error es subrayado y se muestra la<br />
<strong>de</strong>scripción junto con la fila y la columna en don<strong>de</strong> se ubica el error, también<br />
se muestra el nombre <strong>de</strong>l archivo y el código que hace referencia a tal error.<br />
Como todo software BASICCE también incluye en el menú principal la ayuda<br />
al usuario.<br />
Conclusiones<br />
La teoría <strong>de</strong> compiladores e Intérpretes esta soportada en una<br />
fundamentación matemática profunda en la cual se encuentran gramáticas,
- <strong>Universidad</strong> <strong>de</strong> Manizales, enero – junio / 2005<br />
lenguajes, autómatas que permiten formalizar cualquier lenguaje fuente,<br />
siendo esta teoría base fundamental para investigadores y <strong>de</strong>sarrolladores<br />
en el área <strong>de</strong> los sistemas y la informática, áreas que se encuentran en<br />
continuo cambio y <strong>de</strong>sarrollo.<br />
El principio y base conceptual <strong>de</strong> todo software se encuentra soportado en el<br />
diseño y <strong>de</strong>sarrollo <strong>de</strong> compiladores e intérpretes, que en últimas son los que<br />
permiten los sistemas y la informática.<br />
BASICCE es un prototipo <strong>de</strong> Intérprete, que tiene como finalidad <strong>de</strong>spertar el<br />
interés, en la investigación y <strong>de</strong>sarrollo <strong>de</strong> software <strong>de</strong> propósito general y<br />
específico, utilizando la matemática como piedra angular.<br />
Bibliografía<br />
Autómatas y Lenguajes. Un enfoque <strong>de</strong> diseño. Ramón Brena.<br />
Compiladores. Principios, técnicas y herramientas. Alfred V. Aho, Ravi Sethi,<br />
Jeffrey D. Ullman. Addison-Wesley. 1990.<br />
Compiladores. Conceptos Fundamentales. B. Teufel, S. Schmidt, T. Teufel.<br />
Addison-Wesley Iberoamericana. 1995.