Está en la página 1de 2

Diseño de compiladores 1

LABORATORIO N°4

FECHA DE ENTREGA: jueves, 30 de mayo de 2022

I. Dado los siguientes ejemplos, identifique cuáles son las 3 secciones que forman una estructura en
Flex.

EJEMPLO 1:
/* descripción: El analizador léxico convierte las letras
mayúsculas en minúsculas, elimina blancos al final de la
línea y sustituye una serie de blancos por uno solo. */
%}
%%
[A-Z] putchar(yytext[0]+'a'-'A');
[ ]+ $;
[]+ putchar (' ');
%% Comentado [WAAV1]: Sección: Reglas

EJEMPLO 2.
/* descripción: El analizador léxico distingue entre verbos
y no verbos */
%}
[\t]+; /* Se ignoran los espacios en blanco */

es | soy | eres | éramos | era | ser |


siendo | sido | hacer | hace | hizo |
puede | podía | tiene | tener | tenia |
ir {printf ("%s: es un verbo\n", yytext);}
[a-zA-Z]+ {printf ("%s: no es un verbo\n", yytext);}

. |\n {ECHO; /* resto de cadenas */} Comentado [WAAV2]: Sección: Reglas


%%
main ()
{
yylex ();
} Comentado [WAAV3]: Sección: código de usuario
II. En el siguiente ejemplo, explique, línea por línea, que hace cada una de ellas, y de forma general,
que hace este analizador.

%{
#include <stdlib.h>
int num_lines=0; num_chars=0; num_words=0; Comentado [WAAV4]: Aquí declaramos 3 definiciones de
%} nombre sencillas

%option noyywrap

caracter [A-ZÁÉÍÓÚÜÑa-záéíóúüñ0-9] Comentado [WAAV5]: Le asignamos a carácter los


posibles entradas aceptadas
%%
{caracter}+ {++num_words; num_chars+=yyleng;}
\n {++num_lines; ++num_chars;}
. {++num_chars;} Comentado [WAAV6]: Creamos algunas reglas con las
definiciones creadas
Diseño de compiladores 2

%%
void main()
{
yyin=fopen("entrada.txt","r");
yylex();

printf("# de líneas : %d\n",num_lines);


printf("# de palabras : %d\n",num_words);

printf("# de caracteres: %d\n",num_chars);


}

III. Qué hace este analizador?:


%{
#include <stdlib.h>
#include <malloc.h>
%}
%option noyywrap
palabra [\t\n]+
%%
{palabra} {printf("%s\n",yytext);}
%%
void main()
{
yylex();
}

También podría gustarte