DEFINICIÓN DE UN TRADUCTOR Y ETAPAS DE UN COMPILADOR
blackforestApuntes25 de Agosto de 2015
11.594 Palabras (47 Páginas)225 Visitas
INSTITUTO TECNOLÓGICO DE TAPACHULA
INGENIERÍA EN SISTEMAS COMPUTACIONALES.
MATERIA:
LENGUAJES Y AUTÓMATAS 1
CATEDRÁTICO:
ANAMIM VILLARREAL WONG
TEMA:
DEFINICIÓN DE UN TRADUCTOR Y ETAPAS DE UN COMPILADOR
EQUIPO:
JHONNY NEGRETE MADRID
FERNANDO ULISES ROJAS LOPEZ
ALEJANDRO PEREZ GONZALEZ
CARLOS MARTINEZ VAZQUEZ
RICARDO PINOT ABUNDIS
LUGAR Y FECHA:
TAPACHULA CHIAPAS A 8 DE JUNIO DEL 2015
CONTENIDO
Contenido
1. INTRODUCCIÓN 4
2. DEFINICIÓN DE UN TRADUCTOR (COMPILADORES) 5
2.1 Tipos de COMPILADORES 7
3. ETAPAS DE UN COMPILADOR (TRADUCTOR) 7
3.1 FASE DE ANÁLISIS 7
3.1.1 ANÁLISIS LÉXICO 7
3.1.2 ANÁLISIS SINTÁCTICO 8
3.1.3 ANÁLISIS SEMÁNTICO 9
3.2 FASE DE SÍNTESIS 10
3.2.1 GENERACIÓN DE CÓDIGO INTERMEDIO 11
3.2.2 OPTIMIZACIÓN DE CÓDIGO 11
3.2.3 ADMINISTRACIÓN DE LA TABLA DE CONTENIDOS 12
3.2.4 MANEJADOR DE ERRORES 13
3.2.5 TIPOS DE ERRORES 13
4. Lenguaje de programación 14
5. Palabra reservada 15
6. OPERADORES 23
6.1 Tipos de operadores: 23
6.2 Prioridades del operador 23
6.3 Identificadores 24
6.3.1 Ejemplos válidos de identificadores: 24
6.3.2 Ejemplos no válidos de identificadores: 24
7. ANÁLISIS LÉXICO 25
7.1 Funciones del analizador léxico. 25
7.2 Funcionamiento 26
7.3 Funciones del Análisis Léxico 27
7.4 Componentes Léxicos, Patrones, Lexemas. 28
7.5 Aspectos del Análisis Léxico 28
7.6 Tratamiento de errores léxicos 29
8. PALABRAS RESERVADAS DE NUESTRO LENGUAJE 30
9. AUTóMATA de PALABRAS RESERVADAS 31
10. AUTóMATA DE VARIABLES 33
11. AUTóMATA DE OPERADORES ARITMéTICOS 33
12. AUToMATA DE OPERADORES LóGICOS 34
13. AUToMATAS DE DELIMITADORES 35
14. ¿Qué ES ANáLISIS SINTáCTICO? 35
14.1 Funciones del analizador sintáctico 35
14.2 Lenguajes de programación 37
14.3 Visión general del proceso 38
14.4 Clasificación 38
14.5 Manejo de errores sintácticos 38
14.6 Tipo de gramática que acepta un analizador sintáctico. 39
14.7 Árbol sintáctico de una sentencia de un lenguaje. 41
14.8 Tipos de Análisis 42
14.9 Análisis descendente con retroceso. 43
14.10 Análisis descendente de gramáticas LL 44
15. Formas de implementar el análisis sintáctico 46
15.1 GRAMáTICAS LIBRES DE CONTEXTO 46
15.2 Derivaciones y árboles sintácticos 46
15.3 Ejemplo: gramática de expresiones aritméticas 46
15.4 ANÁLISIS SINTÁCTICO DESCENDENTE 47
15.5 ANÁLISIS SINTÁCTICO ASCENDENTE 49
16. EJEMPLOS 50
16.1 ANALISIS SINTACTICO ASCENDENTE POR MEDIO DE UN PIVOTE 50
16.2 Análisis sintáctico descendente ejemplo visto en clase: 55
11. CONCLUSIÓN 57
BIBLIOGRAFÍA 58
1. INTRODUCCIÓN
Tanto los compiladores como los intérpretes son programas de gran complejidad. Afortunadamente, se sabe suficiente acerca de cómo estructurarlos y hay suficientes herramientas formales para que la complejidad se reduzca a niveles razonables. En este tema veremos en qué fases se divide un compilador o un intérprete. Veremos también que tienen en común y como difieren entre compiladores e intérpretes.
En el mundo de la informática existen muchos lenguajes de programación, que trabajan con uno o varios paradigmas de programación (estilos, formas, métodos de programación), por lo tanto es de suponer que existen distintas reglas de sintaxis y semántica para cada lenguaje de programación como lo existe en cualquier otro lenguaje, sea cualquiera el tipo y contexto al que pertenezca.
Con el tiempo se vio que el estar realizando una interpretación y traducción cada vez que se necesita realizar algo era poco efectivo, en cuanto a tiempo de trabajo delHardware se refiere, y más aun si se trataba de un conjunto grande deinstrucciones (peticiones), es aquí donde entraron en juego los compiladores, quien al igual que sus antecesores realizan una traducción de los programas
(conjunto de intrusiones de un lenguaje) revisando que este dentro del marco de definición del lenguaje de programación utilizado. Con la diferencia que la traducción se realiza una sola vez y de todo el programa. Después de todos estos tópicos previos, podemos decir que la calidad de un buen software es producto de un lenguaje de computación versátil, flexible y veloz, todo sinónimo de buen compilador, claro sin dejar de lado la capacidad creadora del programador (usuario, nosotros)."¿Cómo funciona un compilador? ", es la pregunta de todo aquel que se hace llamar programador, a grandes rasgos un compilador toma un programa escrito en un lenguaje de programación con una gramática, sintaxis y semántica definida, revisa que este dentro de las pautas de definición del lenguaje, y lo traduce en programa de salida escrito en lenguaje binario, el cual es entendido por el ordenador y por lo tanto puede ser ejecutado por el mismo (recordar que un intérprete a diferencia de un compilador no traduce todo el programa sino que va realizando la traducción e interpretación de la misma paso a paso, sin crear ningún programa de salida ejecutable). Las partes del proceso de compilación se dividen en dos: una llamada fase de Análisis y otra llamada fase de Sintaxis, las cuales interactúan entre si para la creación de la tabla de símbolos y el control delmanejador de errores, dentro del análisis hay tres etapas llamadas análisislexicográfico, análisis sintáctico, análisis semántico. Dentro de la fase de Síntesis existen las etapas de generación de código intermedio, optimización de código intermedio, y generación de código.
Al tener que describir cómo funciona un compilador tenemos que tener en claro en no confundir los términos compilador y compilación, se debe entender que al decir compilador nos referimos al programa, y al decir compilación al proceso en sí. En esencia ambos términos cumplen con la definición más simple de un compilador, es decir, sea el programa compilador o el proceso de compilación, ambos reciben como entrada un código escrito en algún lenguaje y producen como salida otro código escrito en otro lenguaje.
2. DEFINICIÓN DE UN TRADUCTOR (COMPILADORES)
Un traductor es un metaprograma que toma como entrada un programa (o parte de un programa) escrito en lenguaje simbólico, alejado de la máquina, denominado programa fuente y proporciona como salida otro programa, semánticamente equivalente, escrito en un lenguaje comprensible por el hardware del ordenador, denominado programa objeto. Veremos dos tipos de traductores, los compiladores e intérpretes, que representan dos aproximaciones muy distintas a la tarea de permitir el funcionamiento de los programas escritos en un determinado lenguaje de programación de alto nivel.
Un compilador traduce completamente un programa fuente, escrito en un lenguaje de alto nivel, a un programa objeto, escrito en lenguaje ensamblador o máquina. El programa fuente suele estar contenido en un archivo, y el programa objeto puede almacenarse como archivo en memoria masiva para ser procesado posteriormente, sin necesidad de volver a realizar la traducción. Una vez traducido el programa, su ejecución es independiente del compilador, así, por ejemplo, cualquier interacción con el usuario sólo estará controlada por el sistema operativo. “Como parte importante de este proceso de traducción, el compilador informa al usuario de la presencia de errores en el programa fuente, pasándose a crear el programa objeto sólo en el caso de que no hayan sido detectados errores (por lo general, suele cancelarse la compilación al detectar un error)”. (Galvez rojas, 2005)
La traducción por un compilador (la compilación) consta de dos etapas fundamentales, que a veces no están claramente diferenciadas a lo largo del proceso: la etapa de análisis del programa fuente y la etapa de síntesis del programa objeto. Cada una de estas etapas conlleva la realización de varias fases. El análisis del texto fuente implica la realización de un análisis del léxico, de la sintaxis y de la semántica. La síntesis del programa objeto conduce a la generación de código y su optimización. (Marquez, 2001)
FIG.1 ¿QUÉ ES UN COMPILADOR?
Los lenguajes C y C++ son lenguajes que utiliza un compilador. El trabajo del compilador y su función es llevar el código fuente escrito en C/C++ a un programa escrito en lenguaje máquina. Entrando en más detalle, un programa en código fuente es compilado obteniendo un archivo parcial (un objeto) que tiene extensión obj. Luego el compilador invoca al “linker” que convierte al archivo objeto en un ejecutable con extensión exe; este último archivo es un archivo en formato binario (ceros y unos) y puede funcionar por sí sólo. Además, el compilador al realizar su tarea realiza también una comprobación de errores en el programa; es decir, revisa que todo esté en orden. Por ejemplo, variables y funciones bien definidas, todo lo referente a cuestiones sintácticas, etc. Está fuera del alcance del compilador que, por ejemplo, el algoritmo utilizado en el problema funcione bien. La siguiente figura muestra los pasos para tener un programa ejecutable desde el código fuente:
FIG. 2 ESTRUCTURA
...