Upload
eliana-weiss
View
27
Download
0
Embed Size (px)
DESCRIPTION
Compiladores. Análisis Léxico. Oscar Bonilla [email protected] Universidad Galileo. Flex. Generador de Analizadores Léxicos diseñado por Vern Paxson. Formato del archivo de entrada. Definiciones %% Reglas %% Código de usuario. Definiciones: %{ literal %}. Ejemplo. - PowerPoint PPT Presentation
Citation preview
CompiladoresAnálisis Léxico
Oscar [email protected] Galileo
FlexGenerador de Analizadores Léxicos diseñado por Vern Paxson
Definiciones%%Reglas%%Código de usuario
Formato del archivo de entrada
Definiciones:%{literal%}
Ejemplo
/* un scanner para un lenguaje similar a Pascal */%{#include <math.h>%}
DIGIT [0-9]ID [a-z][a-z0-9]*
:::
Ejemplo%%{DIGIT}++ {
printf( "An integer: %s (%d)\n", yytext,atoi(yytext) );
}{DIGIT}+"."{DIGIT}* {
printf("A float: %s (%g)\n", yytext,atof(yytext) );
}if|then|begin|end|procedure|function {
printf("A keyword: %s\n", yytext );}
{ID} printf ("An identifier: %s\n", yytext);"+"|"-"|"*"|"/" printf("An operator: %s\n", yytext);"{"[^}\n]*"}" /* eliminar comentarios */[ \t\n]+ /* eliminar blancos */. printf ("Invalid token: %s\n", yytext);
Ejemplo
%%
main(int argc, char** argv) {++argv, --argc;if (argc > 0)
yyin = fopen(argv[0], "r");else
yyin = stdin();yylex();
}
¿Cómo lo corremos?
● Lo guardamos en un archivo (pascal.lex)
$ flex pascal.lex$ cc -o pascal lex.yy.c$ ./pascal prueba.pas.....