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

Uso De Compilador Lex


Enviado por   •  4 de Mayo de 2015  •  1.147 Palabras (5 Páginas)  •  231 Visitas

Página 1 de 5

Concepto y generalidades de Lex

Lex o también conocida como Flex es un programa para generar analizadores léxicos (en inglés scanners o lexers). Lex es el analizador léxico estándar en los sistemas Unix y se utiliza comúnmente con el programa yacc (genera análisis sintáctico), toma como entrada una especificación de analizador léxico y devuelve como salida el código fuente implementando el analizador léxico en C.

Cuando se emplea el término LEX, se mencionan dos posibles significados:

• Una notación para especificar las características lexicográficas de un lenguaje de programación.

• Un traductor de especificaciones lexicográficas.

Formalmente, podemos definir a LEX como una herramienta para construir analizadores léxicos o "lexers".

Conociendo que Flex es una herramienta que traduce la especificación de un analizador léxico a un programa escrito en C que lo implementa, debemos saber que la forma en que especificaremos dicho programa será mediante el uso de expresiones regulares a las que se puede asociar acciones escritas en C.

Cada vez que el analizador encuentra en la cadena de entrada una secuencia que encaja en una de las expresiones regulares especificadas, ejecutará la acción que asociamos previamente.

PROPÓSITO DE USO

La tarea básica resuelta mediante el código generado por LEX es la detección en un texto de la presencia de secuencias de caracteres (consecutivos) que tienen una determinada forma, es decir, que se ajustan a unos determinados patrones; una vez resuelto este aspecto, el código C incorporado a las especificaciones puede aplicarse para realizar diferentes tareas, para resolver diversos proble¬mas.

Un lexer lee de un flujo de entrada cualquiera, y la divide en unidades léxicas (tokens), para ser procesada por otro programa o como producto final.

Para escribir una especificación léxica en LEX, es necesario crear un conjunto de patrones (Expresiones Regulares), mismos, que cuando el programa este completo, van a ser reconocidos como tokens o unidades léxicas.

LEX no produce un programa compilado, lo que hace, es traducir esa especificación a C, incluyendo una rutina llamada yylex(), que es la usada para iniciar en análisis de la entrada.

La entrada es tomada de yyin, que por defecto su valor es stdin, es decir, la pantalla o terminal, pero este valor puede ser modificado por cualquier apuntador a un archivo.

También es posible leer la entrada desde un arreglo de caracteres u otros medios, para lo cual es necesario implementar algunas funciones de LEX.

Estructura de un archivo de Lex

La estructura de un archivo de lex es intencionadamente similar a la de un archivo del yacc; los archivos se dividen en tres secciones, separadas por líneas que contienen solamente dos símbolos "%", las dos primeras son obligatorias, aunque pueden estar vacías, como sigue:

Sección de declaraciones

%%

Sección de reglas

%%

Sección de código en C

- En la sección de declaraciones podemos definir:

- Código C necesario para las acciones:

Se incluye código C necesario para las acciones asociadas a los patrones.

El código C se incluirá entre los símbolos %{ y %}, y será copiado tal cual al fichero lex.yy.c.

(Generalmente serán #includes y/o estructuras y variables del código de usuario que se vean afectadas por las acciones)

- Definición de macros.

Se definen "alias" asociados a expresiones regulares que se usarán en la sección de reglas.

Ej. : LETRA_MAYUSCULA [A-Z]

(En la sección de reglas se referenciará entre llaves como {LETRA_MAYUSCULA})

- Definición de entornos de reconocimiento (start conditions)

Permite especificar entornos dentro de los cuales se tendremos sub-expresiones dependiendo del contexto, permite generar mini-analizadores dentro del analizador.

- La sección de reglas es la sección más importante; asocia patrones a sentencias de C. Los patrones son simplemente expresiones regulares.

Esta sección tiene el siguiente formato:

(exp reg 1 ) (acción 1 )

....

....

(exp reg n ) (acción n )

Cada par (exp. reg., acción) recibe el nombre de regla.

NOTA: El primer carácter de la expresión regular debe de comenzar

...

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