/* --*-c-*-- $Id$ */ %{ #include #include static void print_with_subwords(const char *w) { const char *e; printf("%s\n", w); if ((e = strchr(w, '_'))) { /* Split at dashes.*/ do { for (; *e == '_'; e++); if (strlen(e) < 3) break; printf("S:%s\n", e); e = strchr(e, '_'); } while (e); } else { /* Split a place where an uppercase letter follows a lowercase * letter */ e = w; for (;;) { for (; *e && !(islower(*e) && isupper(*(e+1))); e++); if (!*e) break; e++; if (strlen(e) < 3) break; printf("S:%s\n", e); } } } %} %Start DEF CCOMMENT CPPCOMMENT STRING STRINGESC CHAR CHARESC 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 STRINGESC; } "\"" { BEGIN DEF; } . | \n ; . { BEGIN STRING; } "'" { BEGIN CHAR; } "\\" { BEGIN CHARESC; } "'" { BEGIN DEF; } \n | . ; . { BEGIN CHAR; } [a-zA-Z_][a-zA-Z_0-9]{3,} { print_with_subwords(yytext); } [0-9]+ ; 0x[0-9a-fA-F]+ ; "\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; }