blob: 52f46a7d6b5b1e662f4e2cc6f0c23f488796bd79 (
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
|
/* --*-c-*-- $Id$ */
%{
#include <stdio.h>
%}
%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>auto{NIDCHAR} |
<DEF>break{NIDCHAR} |
<DEF>case{NIDCHAR} |
<DEF>char{NIDCHAR} |
<DEF>const{NIDCHAR} |
<DEF>continue{NIDCHAR} |
<DEF>default{NIDCHAR} |
<DEF>do{NIDCHAR} |
<DEF>double{NIDCHAR} |
<DEF>else{NIDCHAR} |
<DEF>enum{NIDCHAR} |
<DEF>extern{NIDCHAR} |
<DEF>float{NIDCHAR} |
<DEF>for{NIDCHAR} |
<DEF>goto{NIDCHAR} |
<DEF>if{NIDCHAR} |
<DEF>int{NIDCHAR} |
<DEF>long{NIDCHAR} |
<DEF>register{NIDCHAR} |
<DEF>return{NIDCHAR} |
<DEF>short{NIDCHAR} |
<DEF>signed{NIDCHAR} |
<DEF>sizeof{NIDCHAR} |
<DEF>static{NIDCHAR} |
<DEF>struct{NIDCHAR} |
<DEF>switch{NIDCHAR} |
<DEF>typedef{NIDCHAR} |
<DEF>union{NIDCHAR} |
<DEF>unsigned{NIDCHAR} |
<DEF>void{NIDCHAR} |
<DEF>volatile{NIDCHAR} |
<DEF>while{NIDCHAR} { yyless(yyleng-1); }
<DEF>[a-zA-Z_][a-zA-Z_0-9]{3,} { printf("%s\n", 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;
}
|