/* File: woof5.l In this version, C code is reformatted to be easier to read. */ %option noyywrap %{ #include #include typedef char* YYSTYPE ; YYSTYPE yylval ; #define END 0 #define HEARD 1 #define NEWLINE 2 #define IGNORED 3 %} %% <> { sprintf(yylval, "\nWoof! are we done talking?\n"); return END; } treat { sprintf(yylval, "\n!!!%s!!! Woof! yummy!\n", yytext); return HEARD; } walk { sprintf(yylval, "\n!!!%s!!! Woof! where's the leash?\n", yytext); return HEARD; } dinner { sprintf(yylval, "\n!!!%s!!! Woof! I'm hungry!\n", yytext); return HEARD; } good\ dog { sprintf(yylval, "\n!!!%s!!! Woof! talking about me!\n", yytext); return HEARD; } \n { yylval[0] = '\0' ; return NEWLINE; } . { yylval[0] = '\0' ; return IGNORED; } %% int main(int argc, char **argv) { int r ; yylval = (char *) malloc(10000) ; while ( r = yylex() ) { switch (r) { case HEARD : printf("%s", yylval) ; printf("== pat, pat, nice doggy == \n") ; break ; case NEWLINE : printf("\n") ; break ; case IGNORED : printf(".") ; break ; default : fprintf(stderr, "Oops! that wasn't supposed to happen!\n") ; } // end of switch } // end of while printf("%s", yylval) ; free(yylval) ; return 0 ; }