ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso...
-
Upload
herminio-moralez -
Category
Documents
-
view
243 -
download
1
Transcript of ANALISIS LEXICO Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth Reinoso...
ANALISIS LEXICOANALISIS LEXICO
Universidad Nacional de Jujuy
Facultad de Ingeniería
COMPILADORESCOMPILADORES
Elizabeth Reinoso
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]
Índice General
Introducción Especificación de un Analizador Léxico Implementación de un Analizador Léxico
Elizabeth Reinoso: [email protected]
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”]
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
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
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.
Código Fuente
Analizador léxico
Analizador Sintactico
Lee caracteres
Componente léxico
Solicita un componente lexico
Siguiente fase
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
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.
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….
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)
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,
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
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.
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
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
Construcción de un Analizador Léxico
o5 6
24
3
*
digito
digito
otro
++
otro
PRODUCTO
* ENTERO
INCREMENTO
* SUMA
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.
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
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.
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.
[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.