Compiladores Libro

of 95

  • date post

    14-Oct-2015
  • Category

    Documents

  • view

    59
  • download

    1

Embed Size (px)

Transcript of Compiladores Libro

  • Compiladores

    Ingeniera Informtica, 4 curso Master en Informtica, 1er curso

    Primer cuatrimestre:

    Introduccin Lenguajes y gramticas Anlisis Lxico Anlisis Sintctico

    Profesores: Bernardino Arcay

    Carlos Dafonte Departamento de Tecnoloxas da Informacin e as Comunicacins. Universidade da Corua Curso 2009/2010 Rev.061009

  • ii

    NDICE

    1 INTRODUCCIN. ................................................................................................... 1 1.1 Estructura de un compilador.......................................................................... 2 1.2 Ejemplo de las fases de un compilador. ......................................................... 3

    2 LENGUAJES Y GRAMTICAS. ............................................................................ 5 2.1 Notacin de Chomsky (1959). ......................................................................... 6 2.2 Clasificacin de Chomsky. .............................................................................. 7 2.3 Gramticas de contexto libre (GCL).............................................................. 8 2.4 Diagramas de Conway..................................................................................... 9 2.5 Reglas BNF. .................................................................................................... 10 2.6 Problemas en las GCL................................................................................... 11

    2.6.1 Recursividad. ........................................................................................................................11 2.6.2 Reglas con factor repetido por la izquierda. .........................................................................13 2.6.3 Ambigedad. ........................................................................................................................13

    2.7 Simplificacin de gramticas. ....................................................................... 14 2.7.1 Deteccin de un lenguaje vaco. ...........................................................................................14 2.7.2 Eliminacin de reglas lambda ().........................................................................................14 2.7.3 Eliminacin de reglas unitarias o reglas cadena. ..................................................................16 2.7.4 Eliminacin de smbolos intiles..........................................................................................17

    2.8 Gramtica limpia. .......................................................................................... 19 2.9 Forma normal de Chomsky (FNC). ............................................................. 19 2.10 Resumen. ..................................................................................................... 20 2.11 Ejercicios. .................................................................................................... 21

    3 ANLISIS LXICO............................................................................................... 22 3.1 Tipos de mquinas reconocedoras o autmatas.......................................... 23 3.2 Autmatas Finitos. ......................................................................................... 23 3.3 Conversin de una Gramtica Regular en un Autmata finito................. 25 3.4 Expresin regular. ......................................................................................... 26 3.5 Algoritmo de Thompson................................................................................ 27

    3.6 Transformacin de un AFND- en un AFD. ............................................... 28 3.7 Traductores finitos (TF). ............................................................................... 30 3.8 Implementacin de autmatas. ..................................................................... 31

    3.8.1 Tabla compacta.....................................................................................................................31 3.8.2 Autmata programado. .........................................................................................................33

    3.9 Ejemplo. Scanner para nmeros reales sin signo en Pascal....................... 33 3.10 Acciones semnticas. .................................................................................. 36 3.11 Generador LEX. ......................................................................................... 37

  • iii

    3.11.1 Partes de un programa LEX .............................................................................................37 3.11.2 Expresiones regulares.......................................................................................................38 3.11.3 Paso de valores en Lex. ....................................................................................................39 3.11.4 Ejemplos...........................................................................................................................39

    4 Anlisis sintctico (Parsing). ................................................................................. 43 4.1 Mquinas tericas, mecanismos con retroceso............................................ 46

    4.1.1 Autmatas con pila (AP). .....................................................................................................46 4.1.2 Esquemas de traduccin (EDT). ...........................................................................................50 4.1.3 Traductores con pila (TP). ....................................................................................................52

    4.2 Algoritmos sin retroceso................................................................................ 53 4.2.1 Anlisis sintctico ascendente por precedencia simple.........................................................54 4.2.2 Anlisis sintctico ascendente por precedencia de operadores. ............................................64 4.2.3 Analizadores descendentes LL(K)........................................................................................67 4.2.4 Analizadores ascendentes LR(k). .........................................................................................73 4.2.5 Generador de analizadores sintcticos YACC......................................................................89

  • iv

    BIBLIOGRAFA. Aho, A.V.; Lam M.; Sethi, R. ; Ullman, J.D. "Compiladores: Principios, tcnicas y herramientas" Addison-Wesley, Reading, Massachussetts (2008). Louden D. K. [2004], Construccin de compiladores. Principios y Prctica, Paraninfo Thomson Learning. Garrido, A. ; Iesta J.M. ; Moreno F. ; Prez J.A. [2004] Diseo de compiladores, Publicaciones Universidad de Alicante. Sanchis, F.J.; Galn, J.A. "Compiladores, teora y construccin" Ed. Paraninfo (1987). Aho, A.V.; Ullman, J.D. "The theory of parsing, translation and compiling", I y II Prentice-Hall (1972). Aho, A.V.; Ullman J.D. "Principles of compiler design" Addison-Wesley, Reading, Massachussetts. Hopcroff, J.E. ; Motwani R. ; Ullman, J. D. [2002] Introduccin a la teora de autmatas, lenguajes y computacin, Addison-Wesley, Madrid. Allen I.; Holub "Compiler design in C" Prentice-Hall (1991). Snchez, G.; Valverde J.A. "Compiladores e Intrpretes" Ed. Daz de Santos (1984). Sudkamp T.A. Languages and machines Addison-Wesley.

  • 1

    1 INTRODUCCIN.

    Un lenguaje es un conjunto de oraciones finito o infinito, cada una de ellas de longitud finita (es decir, constitudas cada una de ellas por un nmero finito de elementos). Compilacin: Proceso de traduccin en el que se convierte un programa fuente (en un lenguaje de alto nivel) en un lenguaje objeto, generalmente cdigo mquina (en general un lenguaje de bajo nivel). La Teora de compiladores se usa para:

    Realizar compiladores. Disear procesadores de texto. Manejo de datos estructurados (XML). Inteligencia Artificial (en el diseo de interfaces hombre-mquina). Traductores de lenguajes naturales. Etc.

    Se denominan tokens a los lexemas, las unidades mnimas de informacin (por ejemplo, una instruccin FOR). La identificacin de estos elementos es la finalidad del anlisis lxico. Sintaxis de un lenguaje: Conjunto de reglas formales que nos permiten construir las oraciones del lenguaje a partir de los elementos mnimos. Semntica: Es el conjunto de reglas que nos permiten analizar el significado de las frases del lenguaje para su interpretacin. Intrprete: Conjunto de programas que realizan la traduccin de lenguaje fuente a objeto, paso a paso, no de todo el programa (aparecieron por problemas de memoria). Ensamblador: Compilador sencillo donde el lenguaje es simple, con una relacin uno-a-uno entre la sentencia y la instruccin mquina. Compilacin cruzada: La compilacin se realiza en una mquina A y la ejecucin se realiza en otra mquina B. Link (encadenar, enlazar): Es el proceso por el cual un programa dividido en varios mdulos, compilados por separado, se unen en un solo. Pasadas en compilacin: Recorridos de todo el programa fuente que realiza el compilador. Cuantas ms pasadas, el proceso de compilacin es ms completo, aunque ms lento. Traductor o compilador incremental, interactivo o conversacional: Es un tipo de compilador que, al detectar un error, intenta compilar el cdigo del entorno en donde est el error, no todo el programa de nuevo.

  • 2

    El programa fuente es el conjunto de oraciones escritas en el lenguaje fuente, y que normalmente estar en un fichero. Bootstraping: Mediante esta tcnica se construye un lenguaje L utilizando el mismo lenguaje L, realizando mejoras en el propio compilador como puede ser, por ejemplo, la inclusin de nuevas sentencias y estructuras. Existe una notacin grfica, denominada Notacin de Bratman, que muestra como se realiza un compila