Top Banner
ANALISIS LEXICO ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES COMPILADORES Elizabeth Reinoso [email protected]
23

ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso [email protected].

Jan 28, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

ANALISIS LEXICOANALISIS LEXICO

Universidad Nacional de Jujuy

Facultad de Ingeniería

COMPILADORESCOMPILADORES

Elizabeth Reinoso

[email protected]

Page 2: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Objetivos Generales

Conocer el funcionamiento de un analizador léxico

Entender las relaciones de éste con La tabla de símbolos La gestión de errores

Aprender a especificar formalmente un analizador

Conocer las distintas técnicas de implementación

Eliz2abeth Reinoso: [email protected]

Usuario
Page 3: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Índice General

Introducción Especificación de un Analizador Léxico Implementación de un Analizador Léxico

Elizabeth Reinoso: [email protected]

Page 4: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

INTRODUCCION

Análisis Léxico Scanner Tabla de Símbolos Gestión de Errores

Funciones Tratar con la tabla de símbolos Generar tokens bajo demanda del analizador

sintáctico Manejar el fichero fuente Ignorar comentarios Contabilizar posición de tokens Preprocesar macros, constantes, includes …

Elizabeth Reinoso: [email protected]

e d a d

ScannerT. Símbolo

G. Errores[ID, “edad”]

Page 5: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Análisis Léxico Utilidad:

Se utiliza para la construcción de compiladores, como para interpretar el código HTML de una página web.

Va leyendo del fichero de entrada los caracteres secuencialmente y los va agrupando en tokens con un significado conocido por el programador.

Hace la función de preprocesador ya que se encarga de eliminar los caracteres innecesarios para el proceso de compilación Por ejemplo: elimina los espacio en blanco que hay

entre palabra y palabra

Page 6: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Funciones

Agrupar caracteres según categorías establecidas por la especificación del lenguaje fuente.

Rechazar texto con caracteres ilegales o agrupados según un criterio no especificado

Page 7: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Funcionamiento

La relación entre el A-L y el A-S es una relación de maestro-esclavo. El sintáctico demanda al léxico que lea el

siguiente lexema y el léxico lee los caracteres necesarios del fichero de entrada hasta que consiga completar un lexema, que será entregado a su maestro.

Page 8: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Código Fuente

Analizador léxico

Analizador Sintactico

Lee caracteres

Componente léxico

Solicita un componente lexico

Siguiente fase

Page 9: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Funcionamiento

Construir tokens validos a partir de la lectura carácter a carácter del fichero de entrada.

Pasar tokens validos al analizador sintáctico Gestionar el manejo de fichero de entrada. Ignorar los espacio en blanco, comentarios y demás

caracteres o tokens innecesarios para el proceso de análisis

Avisar de los errores encontrados en esta fase. Llevar la cuenta del numero de líneas par incluir lo en el

aviso de error. Hacer las funciones de preprocesador

Page 10: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Funcionamiento

El analizador léxico va leyendo carácter a carácter el fichero de entrada y va guardando estos caracteres en el buffer. Cuando encuentra un carácter que no le sirve para construir un token valido, se para y envía los caracteres acumulados al A-L y espera una nueva petición de lectura. Cuando recibe una nueva petición del A-S, limpia el buffer y vuelve a leer el carácter donde paro la vez anterior.

Page 11: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Funcionamiento

Ejemplo: Tenemos el siguiente fichero de entrada:

int x;

main() {

}.

Entrada Buffer Accion

i i Leer otro caracter

n in Leer otro caracter

t int Leer otro caracter

Espacio en blanco int Enviar token y limpiar buffer

x x Leer otro caracter

; x Enviar token y limpiar buffer

; ; Leer otro carácter….

Page 12: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Términos utilizados

Patron: Es una representación lógica de una serie de agrupación de caracteres con unas características comunes. Por ejemplo, en Java el identificador de una variable puede ser cualquier combinación de letras y numero que no comience con un numero. Para describir formalmente esta definición, se utilizan las expresiones regulares. Por ejemplo: letra::=(a-zA-Z), digito::=(0-9)

Identificador::=(letra)(letra|digito)

Page 13: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Términos utilizados

Lexema: es cada una de las combinaciones de caracteres que encajan en la definición de un patrón. Por ejemplo: variable1, x

Es decir el patrón es la definición formal y el lexema es cada una de las secuencia que pueden encajar en esa definición.

Token: es el nombre que se le va a dar cada patrón definido. Este nombre se utilizara en los procesos de análisis en representación de todos los lexemas encontrados

Ej: el token es como la palabra fruta y los lexemas son las frutas en concreto, como manzana, banana,

Page 14: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Especificación del analizador léxico Para comprender el funcionamiento de una

A-L, lo especificaremos como un AF, muy parecida a una AFD con las siguientes diferencia: El AFD solo dice si la secuencia de caracteres

pertenece al lenguaje o no, y el DT debe leer la secuencia hasta completar un token y luego retornar el token y dejar la entrada para leer el token siguiente.

En un DT cada secuencia no determinada es un error Los estados de aceptación de los DT deben ser

terminales

Page 15: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Especificación de analizador léxico

En un DT, cuando se lea una carácter que no pertenezca a ninguna secuencia especificada, se debe ir a un estado especial terminal y volver el cursor de lectura de caracteres al carácter siguiente a la secuencia correcta leida.

Page 16: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Construcción de un analizador léxico Utilizar un DT Mediante programas especiales que

construyen analizadores. Identificar las palabras reservadas:

1. Hacer una tabla con todas las palabras y consultarla para cada identificador y ver si esta en la tabla o no.

2. Implementar cada una de las palabras reservadas en el DT para diferenciarlas del resto de identificadores, lo que complicaría bastante la programación.

Construir el diagrama de transiciones

Page 17: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Construcción de un Analizador Lexico

Construir el diagrama de transiciones:

Ejemplo: vamos a crear un analizador léxico para un lenguaje que reconoce numero enteros sin signo, la suma, incremento y el producto:

a) Definir los patrones o E-R:Entero::=(“0”|“1”|“2”|“3”|“4”|“5”|“6”|“7”|“8”|“9”)+

Suma::=“+”

Producto::=“*”

Incremento::=“++”

b) Creamos el Automata

Page 18: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Construcción de un Analizador Léxico

o5 6

24

3

*

digito

digito

otro

++

otro

PRODUCTO

* ENTERO

INCREMENTO

* SUMA

Page 19: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Construcción de un Analizador Léxico

c) Crear la tabla de transicion

Consta de tantas filas como estado del automata.

En cuanto a las columnas: una para numerar el estado, tantas como distintas posibles entradas, otra para señalar el token que se reconoce; una ultima para numerar los retrocesos que hay que hacer pata reconocer los lexemas.

Page 20: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Construcción de un Analizador Léxico

Entradas Entradas Entradas Entradas

Estado Digito + * Otro Token Retroc.

0 5 2 1 Error -

1 - - - - PRODUCTO 0

2 3 4 3 3 - -

3 - - - - SUMA 1

4 - . . . INCREMENT 0

5 5 6 6 6 6 6

6 - - - - ENTERO 1

Page 21: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Construcción de un Analizador LéxicoEj: tenemos la siguiente entrada:

25+5*13+33++5**/5

El automata efectuara los siguientes pasos:Estado=0, Entrada=2, Estado=5, Entrada=5, Estado=5, Entrada=+,

Estado=6, Token=ENTERO, Lexema=25, Retroceso=1,

Estado=0, Entrada=+,Estado=2, Entrada=5, Estado=3, Token=SUMA, Lexema=+,Retroceso=1,

Estado=0, Entrada=5, Estado=5, Entrada=*, Estado=6, Token=ENTERO, Lexema=5, Retroceso=1.

Page 22: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

Ejercicio

Diseñar un DT para reconocer los siguientes componentes lexicos: LETRAS: cualquier secuencia de una o mas letras ENTERO: cualquier secuencia de uno o mas números

(si tiene mas de un numero, no deberá comenzar por 0).

ASIGNAR: la secuencia =. SUMAR: la secuencia +. RESTAR: la secuencia -. IMPRIMIR: la palabra reservada print.

Page 23: ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso edrreinoso@fi.unju.edu.ar.

[AHO] AHO, SETHI, ULLMAN: Compiladores: Principios, técnicas y herramientas,: Addison-Wesley Iberoamericana, 1990

[GARRIDO] A. Garrido, J. Iñesta, F. Moreno y J. Pérez. 2002. Diseño de compiladores. Universidad de Alicante.

[CATALAN] Jacinto Ruiz Catalan.2010. Compiladores: Teoria e Implementacion. Alfaomega.