26
Proyecto final de Teoría de la Computación Proyecto final Teoría de la computación Objetivos: Diseñar un Analizador Léxico. Conocer la estructura interna de una Analizador Léxico. Implementar un Analizador Léxico para reconocer código fuente para el programa PseInt. pseint.sourceforge.net Tabla de calificación Item Apartado Descripción Puntos 1 Análisis Describir las expresiones regulares 4 2 Procesos AFN Generar un AFN a partir de las e.r. 4 3 Proceso AFD Implementar un AFD a partir del AFN 4 4 Proceso AFD mínimo Minimizar el AFD 4 5 Programación Usar una herramienta para crear el Analizador Léxico (Java source y Java JAR) 4 TOTAL 20 Presentación por el formulario: http://goo.gl/forms/InmE1B9aqp Fecha límite Viernes 24 hasta las 11:59:59 p.m. Índice de los apartados del documento El Analizador Léxico Herramientas para generar Analizadores Léxicos Prof. Richart Escobedo ([email protected] ) [UNSATC]

TC AnalizadorLexico

Embed Size (px)

DESCRIPTION

TC AnalizadorLexico

Citation preview

Proyecto final de Teoría de la Computación

Proyecto final ­ Teoría de la computación Objetivos:

Diseñar un Analizador Léxico. Conocer la estructura interna de una Analizador Léxico.

Implementar un Analizador Léxico para reconocer código fuente para el programa PseInt. pseint.sourceforge.net Tabla de calificación

Item Apartado Descripción Puntos

1 Análisis Describir las expresiones regulares 4

2 Procesos AFN Generar un AFN a partir de las e.r. 4

3 Proceso AFD Implementar un AFD a partir del AFN 4

4 Proceso AFD mínimo Minimizar el AFD 4

5 Programación Usar una herramienta para crear el Analizador Léxico (Java source y Java JAR)

4

TOTAL 20 Presentación por el formulario: http://goo.gl/forms/InmE1B9aqp Fecha límite Viernes 24 hasta las 11:59:59 p.m. Índice de los apartados del documento

El Analizador Léxico Herramientas para generar Analizadores Léxicos

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Marco teórico:

El Analizador Léxico La función primordial es agrupar caracteres de la entrada en tokens. Estos tokens son suministrados (“bajo demanda”) al analizador sintáctico.

Los tokens se pasan como valores “simples” •Algunos tokens requieren algo más que su propia identificación: –constantes: su valor –identificadores: el string –operadores relacionales: su identificación •Por lo tanto, el scanner debe realizar, a veces, una doble función: –identificar el token –“evaluar”el token

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Esquema de procesamiento

Algunas definiciones token “nombre”que se da a cada componente léxico lexema Secuencia de caracteres de la entrada que corresponden a un token patrón Forma compacta de describir conjuntos de lexemas Además –un token se corresponde con un patrón –un token se puede corresponder con muchos lexemas

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Tokens más habituales –palabras reservadas –identificadores –operadores –constantes –símbolos de puntuación: ; , . : –símbolos especiales: ( ) [ ] Pero, a la vez que el propio token, el scanner puede (debe) devolver más información –si es un token CONSTANTE, su valor –si es un identificador, el string correspondiente –si es un símbolo de puntuación, cuál Esta información, se devuelve mediante “atributos” Pero aún puede hacer algo más: –puede detectar algunos (pocos) errores léxicos »no hay concordancia con ningún patrón –puede llevar a cabo algunas recuperaciones de errores »filtrado de caracteres “extraños” »completar algún patrón »reemplazar algún carácter

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Proceso de construcción (con ayuda de herramientas)

¿Qué pinta tiene un scanner? –un conjunto de funciones–una para cada símbolo a reconocer–estas funciones son controladas/invocadas por una función que:

»selecciona, en función de los caracteres de entrada, quéfunción invocar Opcionalmente, también mediante tablas Pero puede ser complicado: –necesidad de recorrer varios caracteres antes de decidir el tipo de token –“pre­análisis”ó“look­ahead” –Ejemplo: reconocido “<“en C, puede corresponder a

» MENOR “<“ » MENOR_O_IGUAL“<=“ » SHIFT_LEFT“<<“

–“IF”vs. “IFNI”

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Operadores sobre lenguajes: –Sean L,M dos lenguajes

Para un token dado, los lexemas correspondientes los expresaremos mediante expresiones regulares Expresión regular: forma compacta para definir un lenguaje regular

también llamado conjunto regular

Una expresión regular r: –Será definida a partir del lenguaje L(r) que genera –operadores sobre expresiones regulares mediante operadores sobre lenguajes Sea Σ un alfabeto

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Importante: Dar la posibilidad del uso de paréntesis para establecer prioridades • Útil, usar prioridades:

Ejemplo 1: Sea Σ=a,b

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Ejemplo 2: Sea Σ=0,1

Ya sabemos expresar los lexemas correspondientes a los tokens •Necesitamos implementar el analizador léxico •Esquema para su implementación

Autómatas Finitos. Generalidades •Los autómatas finitos pueden ser utilizados para reconocer los lenguajes expresados mediante expresiones regulares •Un autómata finito (AF) es una máquina abstracta que reconoce strings correspondientes a un conjunto regular •También se denominan reconocedores Misión de un AF: –“reconocer”si un string de entrada respeta las reglas determinadas por una expresión regular

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Ejemplo: –e.r.: (ab|c)*d –¿autómata?

•Notación gráfica:

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

•AFN como grafo de transiciones

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Conversión de una expresión regular a AFN Objetivo: dada una expresión regular, generar un AFD que la reconozca •Método: construcción de Thompson (Bell Labs.)

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Ejemplo: proceso de construcción para (ab|c)*d

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Sobre implementación de AL

Un analizador léxico muy simple

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Herramientas para generar Analizadores Léxicos El paso de una expresión regular a un AF se puede hacer de manera automatizada. También existen generadores de analizadores léxicos. ¿Qué hace LEX? Especifica un analizador léxico. Flex es una herramienta que permite generar analizadores léxicos. A partir de un conjunto de expresiones regulares (patrones léxicos), Flex busca concordancias en un fichero de entrada y ejecuta acciones asociadas a estas expresiones. FLEX : Especifica un analizador léxico en C. JFlEX : Especifica un analizador léxico en JAVA.

FLEX, JFLEX siguen un esquema

Donde:

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

–patrón: expresión regular –acción: fuente C,JAVA con las acciones a realizar cuando el patrón concuerde con un lexema Funcionamiento: –FLEX recorre entrada estándar hasta que encuentra una concordancia ­Un lexema correspondiente al lenguaje de algunas de las e.r. representadas por los patrones ­Entonces, ejecuta el código asociado (acción) ­Permite acceder a la información asociada al lexema (string, longitud del mismo, nºde línea en el fuente,...)

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Ejemplo:

Tokens, lexemas y patrones léxicos

Token:cada uno de los elementos reconocidos por el analizador léxico Lexema:secuencia de caracteres de la entrada que corresponden a un token Patrón léxico:forma compacta de describir conjuntos de lexemas

Token 1 : 1 patrón Token 1 : N lexemas Los tokens se pasan como valores simples •Pero algunos requieren algo más de información: –Ej: para una constante, habitualmente no sólo se necesita saber que es una constante sino también cuál es su valor Expresiones regulares Definición formal de los lexemas que corresponden a un token •Permitirá decidir cuándo se reconoce un token a partir de una secuencia de elementos de la entrada •Se pueden“bautizar” para poder referenciarlas posteriormente

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Como es el comportamiento de un Analizador Léxico Para la expresión a evaluar crea una lista compuesta por lexema y descripción. El lexema es por los token’s y la descripción e el valor o nombre.

Estructura del archivo FLEX

Sección de definiciones: –bloques literales

»se copian “tal cual”al fuente lex.yy.c o a la clase java que se generará(JFLEX) »entre ‘%‘y ‘%’

–definiciones regulares (“bautismo”) –declaraciones propias para el manejo de tablas de LEX –condiciones iniciales

»cambiar el funcionamiento del reconocedor

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Sección de reglas –Formato:

–dos tipos de líneas:

»empiezan por blanco, ‘%‘ó’%’fuente C »empiezan por otra cosa: línea patrón­código

–las líneas de fuente C se copian directamente en el fuente lex.yy.c –al encontrar concordancia, ejecutará código asociado –si no encuentra concordancia, ejecuta ECHO(copia el lexema en salida estándar)

Sección de rutinas de usuario –su contenido se copia literalmente en el fuente lex.yy.c –contiene funciones C escritas por el usuario y necesarias para el analizador

»manejo de tabla de símbolos »generación de salidas (cuando no es necesario generación de código)

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Ejemplo:

También se pueden dar nombres a expresiones regulares

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Expresiones regulares en Flex

¿Qué pasa cuando hay ambigüedad? •FLEX aplica dos reglas:

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Accediendo al lexema yytext contiene un puntero global al lexema reconocido •yyleng contiene la longitud del lexema •Hay otras más: yyin, yyout... •También hay funciones: yylex(), yywrap(), yymore(), yyless(), yyterminate()... Ventajas de usar estos generadores El código queda más elegante •Esto nos permitirá enlazar el analizador léxico con el sintáctico(Yacc/Bison) de un modo más simple Consideraciones a tener en cuenta Ser muy riguroso con la estructura: –Si comienza por blanco, ya no es línea de patrón­acción –Definir claramente las tres zonas delimitadas por %% •Tener cuidado con los anidamientos de (),[], •Tener presente la forma de resolución de múltiples patrones coincidentes –Elige el que concuerda con el string más largo –Si los patrones reconocen el mismo string, elige el que aparece primero en las declaraciones Flex Seguir principio“divide y vencerás” –Si falla el analizador léxico, lo más simple esireliminandopatrón­acciónhastalocalizarel conflictivo •Seguir principio KISS (Keep it simple, stupid!) –Pensar muy bien las E.R. a utilizar puede simplificar mucho la tarea •Tener presente la diferencia entre mayúsculas y minúsculas de los lexemas: –Complicaría el código con un montón de [aA][nN][dD]... –Se resuelve con flex –i

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Prof. Richart Escobedo ([email protected]) [UNSA­TC]

Proyecto final de Teoría de la Computación

Enlaces URL para envío del trabajo.

http://goo.gl/forms/kXkSQaYX9z https://sites.google.com/site/teorialacomputacion/home/analizador­lexico http://pseint.sourceforge.net/

Prof. Richart Escobedo ([email protected]) [UNSA­TC]