ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Turorial Lex


Enviado por   •  23 de Febrero de 2012  •  3.898 Palabras (16 Páginas)  •  489 Visitas

Página 1 de 16

LEX: El Analizador Léxico

1

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 las especificaciones 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 aparece en 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 una

cualidad 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 borrar del 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 se vea 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. Todo lo 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 (“ ”);

Guía del Programador del XENIX.

2

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én se 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 menudo

es 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 cuenta de que el nombre yylex es el que el yacc da a su analizador

léxico, de forma que el uso de este nombre por el lex simplifica el interface.

El lex genera un autómata finito partiendo de expresiones regulares del

fuente. El autómata es interpretado, en vez de compilado, para ahorrar espacio.

El resultado es todavía un analizador rápido. En particular, el tiempo que utiliza

un programa lex para reconocer y dividir una cadena de input es proporcional a

la longitud del input. El número de órdenes lex o la complejidad de las órdenes

no es importante para determinar la velocidad, a no ser que las órdenes que

incluyan contexto posterior requieran una cantidad importante de exploración.

Lo que aumenta con el número y complejidad de las órdenes es el tamaño del

autómata finito, y por lo tanto el tamaño del programa generado por el lex.

En el programa escrito por el lex, los fragmentos del usuario

(representando acciones que se van a llevar a cabo a medida que se encuentra

cada expresión) se colectan como casos de un intercambio. El intérprete del

autómata dirige el flujo de control. Se proporciona la oportunidad al usuario para

insertar declaraciones o sentencias adicionales en la rutina que contiene las

acciones, o para añadir subrutinas fuera de esta rutina de acción.

El lex no está limitado a fuente que se puede interpretar sobre la base de

un posible carácter. Por ejemplo, si hay dos órdenes una que busca ab y la otra

que busca abcdefg, y la cadena de caracteres del input es abcdefh, el lex

reconocerá ab y dejará el puntero del input justo delante de cd. Tal precaución es

más costosa que el proceso de lenguajes más sencillos.

LEX: El Analizador Léxico

3

8.2. Formato fuente del lex

El formato general de la fuente lex es:

{definiciones}

%%

{órdenes}

%%

{subrutinas del usuario}

donde las definiciones y las subrutinas del usuarios se omiten a menudo. El

segundo %% es opcional, pero el primero se requiere para marcar el principio de

las órdenes. El programa lex mínimo absoluto es por lo tanto

%%

(sin definiciones, ni órdenes) lo cual

...

Descargar como (para miembros actualizados) txt (26 Kb)
Leer 15 páginas más »
Disponible sólo en Clubensayos.com