/* scanner for a toy Pascal-like language */ %option noyywrap DIGIT [0-9] ID [a-z][a-z0-9]* %% {DIGIT}+ printf( "An integer: %s\n", yytext ); {DIGIT}+"."{DIGIT}* printf( "A float: %s\n", 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]*"}" /* eat up one-line comments */ [ \t\n]+ /* eat up whitespace */ . printf( "Unrecognized character: %s\n", yytext ); %% main( int argc, char **argv ) { ++argv, --argc; /* skip over program name */ if ( argc > 0 ) yyin = fopen( argv[0], "r" ); else yyin = stdin; yylex(); }