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