blob: e9c2f8e7db099ed935fe7d439a286eee81c24bf5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
/* --*-c-*-- $Id$ */
%{
#include <stdio.h>
#include <ctype.h>
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;
<DEF>^#ifn?def |
<DEF>^#if |
<DEF>^#define |
<DEF>^#undef ;
<DEF>^#. { BEGIN CPPCOMMENT; }
<DEF>"/*" { BEGIN CCOMMENT; }
<CCOMMENT>"*/" { BEGIN DEF; }
<CCOMMENT>\n |
<CCOMMENT>. ;
<DEF>"//" { BEGIN CPPCOMMENT; }
<CPPCOMMENT>\n { BEGIN DEF; }
<CPPCOMMENT>. ;
<DEF>"\"" { BEGIN STRING; }
<STRING>"\\" { BEGIN STRINGESC; }
<STRING>"\"" { BEGIN DEF; }
<STRING>. |
<STRING>\n ;
<STRINGESC>. { BEGIN STRING; }
<DEF>"'" { BEGIN CHAR; }
<CHAR>"\\" { BEGIN CHARESC; }
<CHAR>"'" { BEGIN DEF; }
<CHAR>\n |
<CHAR>. ;
<CHARESC>. { BEGIN CHAR; }
<DEF>[a-zA-Z_][a-zA-Z_0-9]{3,} { print_with_subwords(yytext); }
<DEF>[0-9]+ ;
<DEF>0x[0-9a-fA-F]+ ;
<DEF>"\n" |
<DEF>. ;
%%
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;
}
|