Está en la página 1de 9

Universidad de Panamá

Nombre

Eric Patterson

Cedula

8-931-2223

Materia

Diseño en Compiladores

Trabajo

Laboratorio N2

Año

2023
introducción al Analizador Léxico FLEX

Enunciado:

El objetivo de esta práctica consiste en aprender a cómo utilizar el analizador léxico

FLEX. Para este propósito se empezará describiendo brevemente cómo funciona un

programa FLEX, cómo está estructurado y cómo compilarlo.

Breve introducción al analizador léxico FLEX.

¿Qué es un analizador léxico? Un analizador léxico es un programa que

busca en, generalmente, grandes ficheros de texto, aquellas cadenas que se

corresponden con unos patrones especificados en el analizador.

¿Qué es FLEX? FLEX es un analizador léxico bajo licencia GPL. Cada vez que

se encuentre uno de los patrones especificados en FLEX se puede ejecutar un conjunto

de acciones asociadas. FLEX es el analizador de dominio público compatible con el

analizador léxico más frecuentemente utilizado: LEX (bajo sistema UNIX). FLEX (y

LEX) genera, dada una especificación correcta de patrones y acciones, un programa en

lenguaje C que puede ser compilado para obtener un programa ejecutable.

¿Cómo se especifican los patrones? Cada patrón es una expresión regular.


Ejercicio 1

Este programa busca en una cadena de texto números enteros y nombre de


variables válidos.
Solo puede ser considerado un entero si la cadena de texto empieza poralgún digito
entre 0-9 y más coincidencias.
Para que sea considerado una variable debe empezar con cualquier letra oun guion bajo _ y
luego cualquier combinación de letras, dígitos o _.
Cualquier otra cosa se omitirá, se puede decir que no es válido.

Ejemplos:
Texto Entrada Funcionamiento
El programa clasifica 123456 como un
123456Panama1 entero y Panama1 como una variable y
te dice la longitud de 7 caracteres.
Clasifica toda la cadena como una
Panama124_
variable y longitud de 10 caracteres.
123 Clasifica 123 como un entero.
No lo clasifica y no imprime nada. Se
###### puede tomar como un error o solo
omitirlo
Ejercicio 2

Este programa lee un fichero de texto como entrada y por cada salto de línea se
incrementa a las variables num_lineas y num_caracteres. Y cualquier otra cosa
dentro del fichero se le incrementara la variable num_caracteres.
En resumen lo que hace el programa es obtener el total de líneas dentro del fichero
y el total de caracteres.
Ejercicio 3
Diseñe patrones FLEX que reconozcan:

Reconocer Patrón
Nombres de variables [a-zA-Z_][a-zA-Z0-9_]*
Números enteros con y sin signo -?[0-9]+
Números reales en coma flotante con y
[-+]?[0-9]*\.?[0-9]+
sin signo
Números reales en notación
exponencial con signo opcional y con ^-?\d+(\.\d+)?([eE][+-]?\d+)?$
punto también opcional
Operadores matemáticos: =, +, -, *, /,
=|\+|-|\*|/|DIV|MOD
DIV, MOD
Paréntesis: (,) [()]
Comentarios: #esto es un comentario
#.*
que acaba en una línea.

Ejercicio 4

¿Cómo se pueden incluir comentarios en un programa FLEX?


En FLEX los comentarios se pueden incluir en un programa utilizando el símbolo #.
Este tipo de comentaros es solo de una línea.
# este es un comentario de una sola linea
Para colocar comentarios de varias líneas se utiliza /* */.
/*
Esto es un comentario
De varias lineas
*/
Ejercicio 5
Entrega 5: Diseñe un programa que analice un texto
de entrada y sustituya dos o mas espacios en blanco seguidos

por un unico espacio y dos o mas tabuladores por un unico

tabulador.

*/

%{

#include<stdio.h>

%}

%%
[ \t][ \t]+ {printf("%c", ' ');}

. {printf("%c", yytext[0]);}

%%

int yywrap() {
return 1;

int main() {
yylex();

return 0;

}
Ejercicio 6

/*

Entrega 6: Diseñe un programa FLEX que borre los comentarios que

aparecen en un fihero de texto (Se suponen comentarios de una sola

linea que empiezanpor el simbolo #, como en el caso del patron g de la

Entrega 3).

*/

%{

#include<stdio.h>

%}

%%

#.*\n? {}

.|\n {printf("%c", yytext[0]);}

%%

int yywrap() {

return 1;

int main(int argc, char**

argv) { yyin =

fopen(argv[1],

"r");yylex();
fclos

e(yyi

n);

retur

n 0;

También podría gustarte