Desarrollo practico compilador
El presente ensayo tiene como fin abarcar ciertos aspectos básicos dentro de la construcción de un compilador, estructurándolos de forma clara y concisa por lo cual se ha decidido enfocarlo en cuatro temas principales.
Explicar de forma sencilla las herramientas involucradas en su construcción y sus principales ventajas. Como funciona internamente un compilador.
Mostrar lospasos requeridos para la construcción de un compilador y llevarlos a cabo de forma práctica.
Capitulo 1
Funcionamiento
Un compilador acepta programas escritos en un lenguaje de alto nivel y los traduce a otro lenguaje, generando un programa equivalente independiente, que puede ejecutarse tantas veces como se quiera. Este proceso de traducción se conoce como compilación y para lograrlose necesitan ciertas herramientas conocidas como analizadores.
Fig. 1 Etapas de Desarrollo de un compilador
Capitulo 2
Pasos Requeridos
Analizador Léxico o Scanner: Es la fase del compilador en la cual se analizan los caracteres de entrada con la finalidad de reconocen los patrones y símbolos aceptados dentro de un lenguaje, y posteriormente enviar una cadena de componentes léxicos(tokens) al analizador sintáctico, otra de sus tareas es eliminar cabeceras o librerías y comentarios, así como espacios en blanco, saltos de línea y tabuladores (entiéndase eliminar como la acción de omitirlos y no enviarlos al analizador sintáctico). Si dentro del análisis se encuentra un errores (símbolos raros, o expresiones mal escritas) estos errores son mostrados en pantalla. Los componentesléxicos principalmente representan:
Palabras reservadas: if, while, do, etc.
Identificadores: asociados a variables, nombres de funciones, tipos definidos por el usuario, etiquetas,... Por ejemplo: posición, velocidad, tiempo, etc.
Operadores: = * + - / == > < & ! =
Símbolos especiales: ; ( ) [ ] {}
Constantes numéricas: literales que representan valores enteros
Constantes decaracteres: literales que representan cadenas concretas de caracteres.
Fig. 2 Etapas de un Análisis Léxico
Analizador Sintáctico o Parser: Es un programa que reconoce si una o varias cadenas de caracteres forman parte de un determinado lenguaje. Los lenguajes habitualmente reconocidos por los analizadores sintácticos son los lenguajes libres de contexto. El análisis sintáctico convierte eltexto de entrada en otras estructuras (comúnmente árboles), que son más útiles para el posterior análisis y capturan la jerarquía implícita de la entrada.
El analizador sintáctico trabaja con los tokens obtenidos del analizador léxico, agrupando estos tokens de acuerdo a producciones (especificadas por la gramática libre de contexto).
Ejemplo: bool b1, b2;
bool b1, b2 ;
Fig. 3 Ejemplo de Árbol de tokens
La tarea esencial de un analizador es determinar si una determinada entrada puede ser derivada desde el símbolo inicial, usando las reglas de una gramática formal, y como hacer esto, existen esencialmente dos formas:
* Top-Down-Parser: Un analizador puede empezar con el símbolo inicial e intentar transformarlo enla entrada, intuitivamente esto sería ir dividiendo la entrada progresivamente en partes cada vez más pequeñas, de esta forma funcionan los analizadores LL, un ejemplo es el javaCC.
* Bottom-Up-Parser: Un analizador puede empezar con la entrada e intentar llegar hasta el símbolo inicial, intuitivamente el analizador intenta encontrar los símbolos más pequeños y progresivamente construir lajerarquía de símbolos hasta el inicial, los analizadores LR funcionan así y un ejemplo es el Yacc.
Analizador Semántico: El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y preparar la generación de código. Entre las funciones de un analizador semántico están las siguientes:...
Regístrate para leer el documento completo.