Ninguno

Solo disponible en BuenasTareas
  • Páginas : 31 (7667 palabras )
  • Descarga(s) : 7
  • Publicado : 24 de junio de 2010
Leer documento completo
Vista previa del texto
LEX: El Analizador Léxico

8.1. Introdución El lex es un generador de programas diseñado para el proceso léxico de cadenas de caracteres de input. El programa acepta una especificación, orientada a resolver un problema de alto nivel para comparar literales de caracteres, y produce un programa C que reconoce expresiones regulares. Estas expresiones las especifica el usuario en lasespecificaciones fuente que se le dan al lex. El código lex reconoce estas expresiones en una cadena de input y divide este input en cadenas de caracteres que coinciden con las expresiones. En los bordes entre los literales, se ejecutan las secciones de programas proporcionados por el usuario. El fichero fuente lex asocia las expresiones regulares y los fragmentos de programas. Puesto que cada expresión apareceen el input del programa escrito por el lex, se ejecuta el fragmento correspondiente. El usuario proporciona el código adicional necesario para completar estas funciones, incluyendo código escrito por otros generadores. El programa que reconoce las expresiones se genera en forma de fragmentos de programa C del usuario, El lex no es un lenguaje completo sino un generador que representa unacualidad de un nuevo lenguaje que se añade al leguaje de programación C. El lex convierte las expresiones y acciones del usuario (llamadas fuente en este capítulo) en un programa C llamado yylex. El programa yylex reconoce expresiones en un flujo (llamado input en este capítulo) y lleva a cabo las acciones especificadas para cada expresión a medida que se va detectando. Considere un programa para borrardel input todos los espacios en blanco y todos los tabuladores de los extremos de las líneas. Las líneas siguientes: %% [b\ t]+ $ ;

es todo lo que se requiere. El programa contiene un delimitado %% para marcar el principio de las órdenes, y una orden. Esta orden contiene una expresión que coincide con una o más apariciones de los caracteres espacio en blanco o tabulador (escrito \ t para que sevea con mayor claridad, de acuerdo con la convención del lenguaje C) justo antes del final de una línea. Los corchetes indican la clase del carácter compuesto de espacios en blanco y tabuladores; el + indica uno o más del item anterior; y el signo de dólar ($) indica el final de la línea. No se especifica ninguna acción, por lo tanto el programa generado por el lex ignorará estos caracteres. Todolo demás se copiará . Para cambiar cualquier cadena de caracteres en blanco o tabuladores que queden en un solo espacio en blanco, añada otra orden: %% [b\ t]+$ [b\ t] + ; printf (“

”);
1

Guía del Programador del XENIX.

La automatización generada por este fuente explora ambas órdenes a la vez, observa la terminación de la cadena de espacios o tabuladores haya o no un carácter newline,y después ejecuta la acción de la orden deseada. La primera orden coincide con todas las cadenas de caracteres de espacios en blanco o tabuladores hasta el final de las líneas, y la segunda orden coincide con todos los literales restantes de espacios o tabuladores. El lex se puede usar sólo para transformaciones sencillas, o por análisis o estadísticas buscando en un nivel léxico. El lex tambiénse puede usar con un generador reconocedor para llevar a cabo la fase de análisis léxico; es especialmente fácil hacer que el lex y el yacc funcionen juntos. Los programas lex reconocen sólo expresiones regulares; yacc escribe reconocedores que aceptan una amplia clase de gramáticas de texto libre, pero que requieren un analizador de nivel bajo para reconocer tokens de input. Por lo tanto, a menudoes conveniente una combinación del lex y del yacc. Cuando se usa como un preprocesador para un generador, el lex se usa para dividir el input, y el generador de reconocimiento asigna una estructura a las piezas resultantes. Los programas adicionales, escritos por otros generadores o a mano, se pueden añadir fácilmente a programas que han sido escritos por el lex. Los usuarios del yacc se darán...
tracking img