60 likes | 182 Views
Compiladores. Análisis Léxico. Oscar Bonilla obonilla@galileo.edu 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.
E N D
Compiladores Análisis Léxico Oscar Bonilla obonilla@galileo.edu 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 /* 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 .....