• No se han encontrado resultados

05 Análisis léxico I Compiladores - Profr. Edgardo Adrián Franco Martínez

N/A
N/A
Protected

Academic year: 2021

Share "05 Análisis léxico I Compiladores - Profr. Edgardo Adrián Franco Martínez"

Copied!
19
0
0

Texto completo

(1)
(2)

Contenido

Introducción

Análisis léxico

Funciones del analizador léxico

Tokens y lexemas

Palabras reservadas

Estrategias de recuperación de errores léxicos

(3)

Introducción

Para la construcción de todo traductor, compilador o interprete, es necesario analizar el texto de entrada de manera eficiente.

En el ámbito de compiladores, el análisis léxico es la parte que tiene contacto directo con el código fuente, el analizador léxico hace las funciones, a la vez, de preprocesador y de scanner o lexer.

(4)

Análisis léxico

• La función principal del analizador léxico consiste en

leer los caracteres de entrada y elaborar como

salida una secuencia de componentes léxicos que utiliza el analizador sintáctico para hacer el análisis.

• Esta interacción, suele aplicarse convirtiendo al analizador léxico en una subrutina o corrutina del analizador sintáctico.

• Recibida la orden “Dame el siguiente componente léxico” del analizador sintáctico, el analizador léxico lee los caracteres de entrada hasta que pueda identificar el siguiente componente léxico.

(5)

Análisis Léxico

Analizador léxico Analizador Sintáctico Tabla de símbolos Programa Fuente Al análisis semántico token ObtenerSiguiente Token

Interacciones entre el analizador léxico y el analizador sintáctico

(6)

Funciones del analizador léxico

1. Eliminar o saltar comentarios, espacios en blanco, tabuladores, retorno de carro, ..., y en general, todo aquello que carezca de significado según la sintaxis del lenguaje. (Preprocesamiento).

2. Reconocer los tokens: identificadores del usuario, números, palabras reservadas del lenguaje, ..., y tratarlos correctamente con respecto a la tabla de símbolos (solo en los casos que debe de tratar con la

tabla de símbolos).

Para reconocer el token usa un patrón o regla que describe como se forman las cadenas que corresponden a un token.

(7)

Funciones del analizador léxico

3. Llevar la cuenta del número de línea por la que

va leyendo, por si se produce algún error, dar información sobre donde se ha producido.

4. Avisar de errores léxicos. P.g., si @ no

pertenece al lenguaje, avisar de un error, es posible que recupere el error. *No se encuentre el

patrón

5. Puede hacer funciones de preprocesador.

(8)

Tokens y lexemas

Token:

Elemento básico del lenguaje

Unidad léxica indivisible

• Identifica una entidad lógica dentro del lenguaje

Incluyen: Palabras Reservadas, Constantes, Operadores, Signos de

Puntuación e Identificadores

Lexema:

La cadena original que se identifica como token

• No hay correspondencia 1-1 entre token-lexema

(9)

Palabras Reservadas

Una palabra reservada es aquella que inicia con una letra, y es seguida por letras o dígitos.

• Las palabras clave cumplen con este mismo patrón de construcción por lo tanto.

• Se hace necesario un mecanismo que permita decidir cuando una

cadena es una palabra clave o un identificador

Solución sencilla: Las palabras reservadas no pueden ser usadas como

(10)

errores léxicos

Modo Pánico: obvia los siguientes caracteres de la

entrada hasta encontrar un token bien formado.

Tratar de Arreglar la entrada:

• Borrar el carácter extraño • Insertar el carácter perdido

• Reemplazar un carácter incorrecto por uno correcto

• Encontrar que cambio genera el menor numero de errores sintácticos, y aplicarlo

(11)

Manejo de búferes

• El manejo de búferes tiene la intención de mejorar el rendimiento de esta primera fase donde se hace necesario el acceso al archivo con el código fuente de entrada.

• El estar continuamente accediendo a llamadas del sistema que operan con archivos, no siempre es eficiente. Es bien conocido que el realizar una transferencia previa de la información de un archivo a memoria, permitirá obtener una mayor eficiencia a la hora de procesar dicha información.

(12)

Manejo de búferes

• Cuando se implementa analizador léxico se hace necesario manejar un búfer de entrada para hacer mas eficiente la lectura de la cadena de entrada y así evitar la sobrecarga requerida en el procesamiento de un solo carácter de entrada.

(13)

Manejo de búferes

Generalmente se define un búfer del tamaño de un

bloque de disco (4096 bytes).

Se maneja un apuntador que marca el inicio del

lexema que se esta analizando, y un apuntador que

marca el carácter que esta siendo analizado.

v e l = d i s / t i

inicioLexema

avance

(14)

Manejo de búferes

• Existen ocasiones en que es necesario buscar uno o más caracteres más allá del siguiente lexema para poder estar seguros de que tenemos el lexema correcto.

P.g. en C los caracteres -, = o < podrán ser un operador o el principio de otros ->, == o <=.

(15)

Manejo de búferes

v e l = d i s / t i inicioLexema … avance Posibilidades

Un búfer Final del buffer

Par de búferes

v e l = d

(16)

Manejo de búferes

v e l = d i s EOF inicioLexema … avance Centinelas Final del buffer

Es un carácter especial que no puede formar parte del programa fuente. (P.g. EOF) .

v e l = EOF

= d / t i e ;

inicioLexema avance Entonces EOF significa:

Se llego al final del 1er búfer y debe ser cargado el segundo.

Se llego al final del 2do búfer y debe ser cargado el primero

(17)

Implementación del algoritmo

• Se construyen dos buffers, cada búfer de tamaño N, por lo general de un bloque de disco (4096 bytes). Mediante un comando de lectura del sistema podemos leer N caracteres y colocarlos en el buffer, en vez de utilizar una llamada al sistema por cada carácter. Si quedan menos de N caracteres en el archivo de entrada, entonces se coloca un EOF, marcando el final del archivo fuente.

• Se mantienen dos apuntadores a la entrada:

El apuntador inicioLexema marca el inicio del lexema actual, cuya extensión se está tratando de determinar.

(18)

Implementación del algoritmo

• Una vez que se determina el siguiente lexema,

avance se coloca en el carácter que se encuentra en

su extremo derecho. Después una vez que el lexema se registra como un valor de atributo de un token devuelto al analizador sintáctico, inicioLexema se coloca en el carácter que va justo después del lexema que acabamos de encontrar.

(19)

Implementación del algoritmo

Para desplazar avance hacia adelante primero tenemos que probar si hemos llegado al final de uno de los dos búferes, y de ser así, debemos recargar el otro búfer de la entrada, y mover avance al principio del búfer recién cargado. Siempre y cuando no tengamos que alejarnos tanto del lexema como para que la suma de su longitud más la distancia que nos alejamos sea mayor que N (Evitar sobrescribir el lexema en su búfer antes de poder determinarlo).

Referencias

Documento similar

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

o Si dispone en su establecimiento de alguna silla de ruedas Jazz S50 o 708D cuyo nº de serie figura en el anexo 1 de esta nota informativa, consulte la nota de aviso de la

Si bien los ejemplos a los que se ha tenido acceso hasta el momento no son abundantes, parece tratarse de una voz de uso frecuente al menos en el siglo XVII, puesto

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..

Se estima una distancia de más de 11 millones de años luz hablando de una cantidad de sistemas solares que no tendrían espacio en nuestra mente y esto solo hablando del grupo

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de

Gastos derivados de la recaudación de los derechos económicos de la entidad local o de sus organis- mos autónomos cuando aquélla se efectúe por otras enti- dades locales o

Y esto no solo por el hecho de ser una obra colectiva, sino sobre todo porque, como se verá, se ha trata- do de recoger diversos estudios que, desde muy distintos marcos teóricos