19.04.2015 Views

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 ...

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!