Apuntes compiladores

406 views

Published on

compiladores

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Apuntes compiladores

  1. 1. Apuntes de compiladores El Analizador léxico y su función El analizador léxico es una de las fases de un compilador, donde su principal consiste en leer el programa fuente de izquierda a derecha y elaborar como salida una secuencia de caracteres que tienen un significado, llamados componentes léxicos o tokens, que son utilizados por el analizador sintáctico para hacer el análisis. Esta interacción convierte al analizador léxico en una subrutina del analizador sintáctico (ver figura 3). Cada vez que el analizador léxico recibe orden “obtén el siguiente componente léxico” del analizador sintáctico, el analizador léxico lee los caracteres de entrada hasta que puede identificar el siguiente componente léxico. Componente léxico Programa fuente Analizador léxico Analizador sintáctico Obtén el siguiente. Componente léxico Tabla de símbolos Figura 3.-Interacción de un analizador léxico con el analizador sintáctico Cada componente léxico es una secuencia lógicamente coherente de caracteres relativa a un identificador, una palabra reservada, un operador o un carácter de puntuación. A la secuencia de caracteres que representa un componente léxico se le llama lexema (o con su nombre en inglés token). En el caso de los identificadores creados por el programador no solo se genera un componente léxico, sino que se genera otro lexema en la tabla de símbolos. Rubén Jerónimo Yedra 18/31
  2. 2. Apuntes de compiladores El analizador también puede realizar ciertas funciones secundarias en la interfaz del usuario como:  Eliminar del programa fuente comentarios  Eliminar espacio en blanco en forma de:  Carácter de espacio en blanco  Carácter de tab.  Línea nueva  Relacionar los mensajes de error del compilador con el programa fuente. Componentes léxicos, patrones y lexemas Componente léxico (token): Secuencia de caracteres que tienen un significado colectivo. Patrón Es una regla que va a permitir generar la secuencia de caracteres que puede representar a un determinado componente léxico. Lexema Cadena de caracteres que concuerda con un patrón que escribe un componente léxico. En la mayoría de los lenguajes de programación se consideran componentes léxico:  Palabras reservadas: Ejemplos:  if, for, while, do Identificadores: Asociados de nombres de variables, de funciones o de Tipos definido por el usuario.  Operadores: Aritméticos: +, -, *, /, % Rubén Jerónimo Yedra 19/31
  3. 3. Apuntes de compiladores Relacionales: >, <, >=, <=, ==, != Lógicos: ||, &&, ! Asignación: =  Símbolos especiales: Paréntesis ( , ) Llaves { , } Corchetes [ , ]  Número o constantes numéricas: Ejemplo: 105, -4.2, 5E-2  Literal o constante de caracteres: literales que representan cadenas de caracteres: Ejemplo: “el resultado es:”, “los datos son:”  Carácter de puntuación: Punto y coma (;) Coma (,) Nota  El conjunto de lexema de palabras reservadas es finito, por lo tanto el componente léxico es finito.  El conjunto de lexema de identificadores es infinito, por lo tanto su correspondiente componente léxico tiene una infinidad de posibilidades.  El conjunto de lexemas de números o contantes numéricos es infinito, por lo tanto su correspondientes componente léxico tiene una infinidad de posibilidades. Rubén Jerónimo Yedra 20/31
  4. 4. Apuntes de compiladores Ejemplo: a) suma=5 + A - 4.3 * dato; Componentes léxico Lexema patrón Identificador suma Letra seguido por letra o numero Operador de asignación Numero o constante numérica Operador aritmético identificador Operador aritmético Numero o constante numérica Operador aritmético identificador = Carácter (=) 5 Cualquier constante numérica + A 4.3 Cualquier caracter + | - | * | / | % Letra seguido por letra o numero Cualquier caracter + | - | * | / | % Cualquier constante numérica * dato Cualquier caracter + | - | * | / | % Letra seguido por letra o numero ; Punto y coma(;),coma(,) Carácter de puntuación b) if (nuevo>3.5) Componentes léxico Palabra reservada lexema if Símbolo especial ( patrón Cualquiera de las palabras reservadas Cualquier carácter[,],{,},(,) identificado Operador relacional nuevo > Letra seguido por letra o numero >|>=|<|<=|==|!= Numero o constante numérica 3.5 Cualquier constante numérica Símbolo especial ) Cualquier carácter[,]{,},(,),; Rubén Jerónimo Yedra 21/31
  5. 5. Apuntes de compiladores ALFABETO, CADENA Y LENGUAJE a) Alfabeto (Conjunto de símbolos) Un alfabeto denota cualquier conjunto de símbolos. Ejemplo:  El conjunto del alfabeto del idioma español ∑= {A, B, C, D, E…., Z}  El conjunto de los dígitos del código hexadecimal ∑={1,2,3,4,5,6,7,8,9, A, B, C, D, E, F}  El conjunto de los dígitos del código binario ∑= {0,1}  El conjunto de caracteres de tabla del código ASCII  El conjunto de código EBCDIC b) Cadena(S): Una cadena sobre algún alfabeto es una secuencia finita de símbolos tomados de ese alfabeto. Ejemplo: ∑= {A, B, C,…, Ñ, …,Z} s=casa s=ABCD s=nuevo alfabeto del idioma español s∑ s∑ s∑ Longitud de cadena (s) : Una cadena, también llamada frase o palabra, es el número de apariciones de símbolos en ∑ y se denota |s|, donde: 0 si s= ε |s| = n si s=a, a2, a3…. an Siendo ξ, la cadena vacía que tiene una longitud cero. Ejemplo: 1) s=casado 2) s=ABCD |s|=6 |s|=4 Rubén Jerónimo Yedra 22/31
  6. 6. Apuntes de compiladores Algunos términos comunes asociados con las partes de una cadena son: Figura 4.- Términos de partes de una cadena c) Lenguajes (L) El termino lenguaje se refiere a cualquier conjunto de cadena de un alfabeto fijo y se denota como L C ∑. Dentro de esta definición se abarca lenguajes abstractos como el conjunto vacio Ø o {ε} y el conjunto que solo contiene la cadena vacía. Si x e y son cadenas, entonces la concatenación de x con y se escribe xy, es la cadena que resulta de agregar y a x. Ejemplo: x=caza y=fortunas  xy=cazafortunas La concatenación se puede visualizar como si estuviera uniendo por medio de un producto ambas cadenas. Operaciones aplicadas a los lenguajes Hay varias operaciones importantes que se pueden aplicar a los lenguajes. Para el análisis léxico, interesan principalmente la unión, la concatenación y la cerradura. Rubén Jerónimo Yedra 23/31
  7. 7. Apuntes de compiladores Figura 5.- Definiciones de Operaciones sobre lenguajes Ejemplo: Sea L, el alfabeto que contiene el conjunto de letras mayúsculas y minúsculas, L={A,B,C,D,..Z,a,b,c,…z}, y sea D, el alfabeto que contiene el conjunto de los diez dígitos decimales, M={0,1,2,3,4,5,6,7,8,9}, las operaciones: 1.- LUD Es el conjunto de cadenas formado por letras y digito Ejemplo: A0, A01, AB012, A012B 2.- LD Es el conjunto de cadenas que consta de una letra seguido de un digito. Ejemplo: B1, a3, r8 3.- L4 Es un conjunto de todas las cadenas formadas por 4 letras (L*L*L*L). Ejemplo: unos, tavo, alas 4.- L* Es el conjunto de todas las cadenas de letras, incluyendo la cadena vacia. Ejemplo: abc, abababdf, Nuevos, casados 5.-L(L υ D)* El conjunto de todas las cadenas que comienzan con una letra, seguido de todas las cadenas que tienen una letra y un digito incluyendo la cadena vacía. Ejemplo: aa1, b, ba1a2, cb2h4g3 6.D+ Conjunto de uno o más combinaciones de dígitos de cadenas Ejemplo: 1, 23,3245,283838 Rubén Jerónimo Yedra 24/31

×