PFM-CIS-XA-001
UNIVERSIDAD NACIONAL DE LOJA ´ a de la Energ Area Are Energ´ ıa las Industrias y los Recursos Recursos Naturales Naturales No Renovables
Carrera Carrera de Ingenier Ingenier´ ıa en Sistemas
Compiladores ´ Analiz Analizado ador r Lexico exico Chimbo-Coronel, Chimbo-Coronel, Ver´ onica-Paulina onica-Paulina
1 Introducci´ on on En 1946 se desarroll´ o la primera computadora digital. En un principio, estas m´ aquinas aquinas ejecutaban instrucciones consistentes en c´ odigos odigo s num´ericos erico s que se˜ nalaban nalaban a los circuitos de la m´aquina aquina los estados correspondientes a cada operaci´ on, lo que se denomin´o lenguaje m´ aquina. aquina. El primer compilador fue escrito por Grace Hopper, en 1952 para el lenguaje de programaci´on on A-0. En 1950 John Backus dirigi´ o una investigaci´ on en IBM sobre un lenguaje on algebraico. En 1954 1954 se empez empez´ o´ a desarrol desarrollar lar un lenguaje lenguaje que permit permit´ıa escribi escribirr f´ ormulas ormulas matem´aticas aticas de manera traducible por un ordenador; le llamaron FORTRAN (FORmulae TRANslator). Fue el primer lenguaje de alto nivel y se introdujo en 1957 para el uso de la computadora IBM modelo 704. La tarea de realizar un compilador no fue f´ acil. El primer compilador de FORTRAN acil. tard´ o 18 a˜ nos-persona en realizarse y era muy sencillo. nos-persona El primer compilador autocontenido, es decir, capaz de compilar su propio c´ odigo odigo fuente fue el creado para Lisp por Hart y Levin en el MIT en 1962. Desde 1970 se ha convertido en una pr´ actica actica com´ un escribir el compilador en el mismo lenguaje que este un compila, aunque Pascal y C han sido alternativas muy usadas.
1
2 Descripci´ on Un compilador es un programa que lee un programa escrito en un lenguaje (c´ odigo fuente) y lo traduce a un programa equivalente en otro lenguaje (c´ odigo objeto). En el proceso se informa al usuario sobre la presencia de errores en el c´ odigo fuente. Para desarrollar un compilador se debe de guiar mediante las siguientes fases:
Figura 1: Fig.1. Fases de un compilador En el presente informe se estudiar´ a la primera fase: •
Alalizador l´ exico
Habitualmente el t´ermino “an´ alisis l´exico” se refiere al tratamiento de la entrada que produce como salida la lista de tokens. Un token hace alusi´o n a las unidades mas simples que tiene significado. Habitualmente un token o lexema queda descrito por una expresi´ on regular. L´exico viene del griego lexis, que significa “palabra”. Perl es, sobra decirlo, una herramienta eficaz para encontrar en que lugar de la cadena se produce un emparejamiento. Sin embargo, en el an´ alisis l´exico, el problema es encontrar la subcadena a partir de la ultima ´ posici´o n en la que se produjo un emparejamiento y que es aceptada por una de las expresiones regulares que definen los lexemas del lenguaje dado. La estructura general del analizador l´exico consiste en un bucle en el que se va recorriendo la entrada, buscando por un emparejamiento con uno de los patrones/lexemas especificados y, cuando se encuentra, se retorna esa informaci´ o n al analziador sint´ actico. Como no tenemos escrito el analaizador sint´ actico simplemente iremos a˜ nadi´endo los terminales al final de una lista.
2
Figura 2: Fig.2. Estructura analizador l´exico Objetivo del Analizador lexico: – Leer caracteres e identificar componentes l´exicos (tokens) – Filtrar comentarios – Detectar errores l´exicos Ejemplo: •
Herramienta JFlex ◦
Definici´ on
JFlex es un generador de analizador l´ exico escrito y utilizado para Java, es una nueva versi´ oon de JLex ◦
Caracter´ısticas
- Liberado bajo la licencia GPL y est´ a disponible para su descarga de forma gratuita. - Multiplataforma - Soporte completo con caracteres Unicode Puede ser implementado junto con CUP, BYACC/J y Antlr ◦
Estructura de un archivo de JFlex - C´ oodigo de Usuario
Se colocan los paquetes y clases que se vayan a utilizar o importar. Al final de la secci´ on se colocan los dos signos de porcentaje para definir el inicio de la nueva secci´ on. - Opciones y declaraciones
Se incluyen los estados l´exicos y declaraciones, cada opci´on debe empezar en una nueva l´ınea con un %.
3
- Reglas Lexicogr´ aficas
Contiene expresiones regulares y acciones (c´ oodigo java) que se ejecutan cuando el analizador encuentra cadenas asociadas a las expresiones regulares. 3 Conclusiones - El analizador l´exico convierte el programa que va a ser compilado en una serie de unidades m´ as complejas que desempe˜ nan el papel de simbolos terminales para el analizador sint´ actico. - Para que el analizador l´exico consiga el objetivo de dividir la entrada en partes, tiene que poder decidir por cada una de esas partes si es un componente separado y, en su caso, de qu´e tipo. - Existen diversas herramientas que permiten realizar un analizador l´exico tales como: Lex,Flex,Jlex,Jflex,Antlr,JFlap y SP-PS1. 4 Bibliograf´ıa ˆ ˆ 1 Vi˜ nuela, P. I., Vi˜nuela, P. I., Mill Oan, D. B., FernOandez, P. M., Mart´ınez, P., Borrajo, D., ... Mill´an, D. B. (1997). Lenguajes, gram´aticas y aut´ omatas: un enfoque pr´ actico. Pearson Educaci´on. 2 Aho, A. V., Sethi, R., Ullman, J. D. (1998). Compiladores: principios, t´ecnicas y herramientas. Pearson Educaci´ on. 3 Guti´errez, J. J., Escalona, M. J., Villadiego, D., Mej´ıas, M. (2005). Comparativa de herramientas para la ense˜ nanza de lenguajes relacionales. Actas de las XI Jornadas de Ense˜ nanza Universitaria de la Inform´ atica. 4 Sanchis Llorca, F. J., Pascual, C. G. (1986). Compiladores: teor´ıa y construcci´ on. Paraninfo. 5 Vivancos Rubio, E. (2011). Flex. Desarrollo de un analizador l´exico usando Flex.
4