lunes, 20 de febrero de 2017

COMPILADORES: Análisis Léxico

Un compilador toma como su entrada un programa escrito en lenguaje fuente y produce un programa equivalente escrito lenguaje objeto. Un compilador se compone internamente de varias etapas o fases que ser realizan operaciones lógicas:

·         Analizador léxico: Lee la secuencia de caracteres de izquierda a derecha del programa fuente  y agrupa las secuencias de caracteres en unidades con significado propio(componente léxico o tokens). Las palabras clave, identificadores operadores constantes numéricas, signos de puntuación, como separadores de sentencias, llaves, paréntesis, etc. Son diversas clasificaciones de componentes léxicos.
l  
Lee los caracteres del programa fuente de izquierda a derecha, y los agrupa en tokens


👉 Funciones del Analizador Léxico 

  • Convierte el programa fuente en una cadena de tokens 
  • Para reconocer el token usa un patrón, una regla que describe como se forman las cadenas que corresponden a un token. 
  • Salta comentarios y espacios en blanco (tabuladores, saltos de línea...) 
  • Tener el registro de la línea del archivo fuente que está siendo analizada 
  • Genera mensajes de error léxico, y se recupera del error 
  • Convierte los valores literales al tipo que corresponda 
  •  Si la entrada debe obedecer a un formato, verifica el formato  
👉 Tokens y Lexemas 


Token
Lexema
q Elemento básico del lenguaje q Unidad léxica indivisible
q Identifica una entidad lógica dentro del lenguaje
q Incluyen: Palabras Reservadas, Constantes, Operadores, Signos de Puntuación e Identificadores
q La cadena original que se identifica como token  
q No hay correspondencia 1-1 entre token-lexema
q La cadena original que se identifica como token
q No hay correspondencia 1-1 entre token-lexema


EJEMPLO:



👉 Palabras Reservadas
  • Identificador es una palabra que inicia con una letra, y es seguida por letras o dígitos 
  • Las palabras clave cumplen con este mismo patron de construcción 
  • Se hace necesario un mecanismo que permita decidir cuando una cadena es una palabra clave o un identificador 
  • Solución sencilla: Palabras Reservadas (que no pueden ser usadas como identificadores)

👉 Manejo de Buffers 

  • Cuando se implementa el scanner es necesario manejar un buffer de entrada para hacer mas eficiente la lectura de la cadena de entrada 
  • Generalmente se define un buffer del tamaño de un bloque de disco
  •  Se maneja un apuntador que marca el inicio del lexema que se está analizando, y un apuntador que marca el carácter que está siendo analizado 
 Posibilidades: 

 Un buffer


 Par de Buffers



Sentinelas: marcar el final del buffer con EOF. Entonces EOF significa: 
  • Llegó al final del 1er. buffer : debe cargar el segundo 
  • Llegó al final del 2o. Buffer: debe cargar el primero
  • Llegó al final del archivo 


No hay comentarios:

Publicar un comentario