/* --*-c-mode-*-- */ %{ #include %} %Start DEF CCOMMENT CPPCOMMENT STRING CHAR PREPROC IDCHAR [_a-zA-Z0-9] NIDCHAR [^_a-zA-Z0-9] %% BEGIN DEF; ^#ifn?def | ^#if | ^#define | ^#undef ; ^#. { BEGIN CPPCOMMENT; } "/*" { BEGIN CCOMMENT; } "*/" { BEGIN DEF; } \n | . ; "//" { BEGIN CPPCOMMENT; } \n { BEGIN DEF; } . ; "\"" { BEGIN STRING; } "\"" { BEGIN DEF; } . | \n ; "'" { BEGIN CHAR; } "'" { BEGIN DEF; } \n | . ; auto{NIDCHAR} | break{NIDCHAR} | case{NIDCHAR} | char{NIDCHAR} | const{NIDCHAR} | continue{NIDCHAR} | default{NIDCHAR} | do{NIDCHAR} | double{NIDCHAR} | else{NIDCHAR} | enum{NIDCHAR} | extern{NIDCHAR} | float{NIDCHAR} | for{NIDCHAR} | goto{NIDCHAR} | if{NIDCHAR} | int{NIDCHAR} | long{NIDCHAR} | register{NIDCHAR} | return{NIDCHAR} | short{NIDCHAR} | signed{NIDCHAR} | sizeof{NIDCHAR} | static{NIDCHAR} | struct{NIDCHAR} | switch{NIDCHAR} | typedef{NIDCHAR} | union{NIDCHAR} | unsigned{NIDCHAR} | void{NIDCHAR} | volatile{NIDCHAR} | while{NIDCHAR} { yyless(yyleng-1); } [a-zA-Z_][a-zA-Z_0-9]{3,} { printf("%s\n", yytext); } "\n" | . ; %% int main(int argc, char *argv[]) { if (argc <= 1) yylex(); else { int i; for (i = 1; i < argc; i++) { if (!(freopen(argv[i], "r", stdin))) { fprintf(stderr, "Failed to open file: %s\n", strerror(errno)); return 1; } yylex(); } } return 0; }