|
|
1.1 root 1: %start SOURCE COMMENT STRING CHAR DEFN SETDEFN INIT C_DEFN C_SETDEFN C_INIT
2:
3: %{
4: #include "sets.h"
5:
6: #define RETURN return (int)
7: %}
8:
9: A [A-Za-z_]
10: AN [A-Za-z_0-9]
11: X [0-9A-Fa-f]
12: D [0-9]
13: O [0-7]
14: WS [ \t\n\f]+
15:
16: %%
17:
18: <SOURCE>"/*" {
19: ECHO;
20: BEGIN COMMENT;
21: }
22:
23: <SOURCE>\" {
24: ECHO;
25: BEGIN STRING;
26: }
27:
28: <SOURCE>"'" {
29: ECHO;
30: BEGIN CHAR;
31: }
32:
33: <SOURCE>set {
34: BEGIN SETDEFN;
35: RETURN sy_set;
36: }
37:
38: <SOURCE>typedef {
39: ECHO;
40: BEGIN DEFN;
41: RETURN sy_typedef;
42: }
43:
44: <SOURCE>enum {
45: ECHO;
46: BEGIN DEFN;
47: RETURN sy_enum;
48: }
49:
50: <SOURCE>{A}{AN}* ECHO;
51:
52: <SOURCE>"[[" {
53: BEGIN INIT;
54: RETURN sy_on_squares;
55: }
56:
57: <SOURCE>. putchar(*yytext);
58:
59: <STRING>\\\" ECHO;
60:
61: <STRING>\" {
62: ECHO;
63: BEGIN SOURCE;
64: }
65:
66: <STRING>\\\\ ECHO;
67:
68: <STRING>. ECHO;
69:
70: <CHAR>\\"'" ECHO;
71:
72: <CHAR>"'" {
73: ECHO;
74: BEGIN SOURCE;
75: }
76:
77: <CHAR>\\\\ ECHO;
78:
79: <CHAR>. ECHO;
80:
81: <COMMENT>"*/" {
82: ECHO;
83: BEGIN SOURCE;
84: }
85:
86: <COMMENT>. ECHO;
87:
88: <DEFN>"/*" {
89: ECHO;
90: BEGIN C_DEFN;
91: }
92:
93: <DEFN>{WS} ECHO;
94:
95: <DEFN>enum {
96: ECHO;
97: RETURN sy_enum;
98: }
99:
100: <DEFN>set {
101: BEGIN SETDEFN;
102: RETURN sy_set;
103: }
104:
105: <DEFN>{A}{AN}* {
106: ECHO;
107: RETURN sy_id;
108: }
109:
110: <DEFN>"{" {
111: ECHO;
112: RETURN sy_on_curly;
113: }
114:
115: <DEFN>"}" {
116: ECHO;
117: RETURN sy_off_curly;
118: }
119:
120: <DEFN>"," {
121: ECHO;
122: RETURN sy_comma;
123: }
124:
125: <DEFN>. {
126: ECHO;
127: fprintf(stderr, "%s: line %d, ignored unknown character (%s) in definition\n", myname, yylineno, print_char());
128: }
129:
130: <C_DEFN>"*/" {
131: ECHO;
132: BEGIN DEFN;
133: }
134:
135: <C_DEFN>. ECHO;
136:
137: <SETDEFN>"/*" {
138: ECHO;
139: BEGIN C_SETDEFN;
140: }
141:
142: <SETDEFN>{WS} ECHO;
143:
144: <SETDEFN>char RETURN sy_char;
145:
146: <SETDEFN>{A}{AN}* RETURN sy_id;
147:
148: <SETDEFN>. fprintf(stderr, "%s: line %d, ignored unknown character (%s) in set definition\n", myname, yylineno, print_char());
149:
150: <C_SETDEFN>"*/" {
151: ECHO;
152: BEGIN SETDEFN;
153: }
154:
155: <C_SETDEFN>. ECHO;
156:
157: <INIT>"/*" {
158: ECHO;
159: BEGIN C_INIT;
160: }
161:
162: <INIT>{WS} ECHO;
163:
164: <INIT>"]]" {
165: BEGIN SOURCE;
166: RETURN sy_off_squares;
167: }
168:
169: <INIT>"," RETURN sy_comma;
170:
171: <INIT>".." RETURN sy_dot_dot;
172:
173: <INIT>{A}{AN}* RETURN sy_id;
174:
175: <INIT>0[xX]{X}+ {
176: sscanf(yytext + 2, "%x", &yylval);
177: RETURN sy_int;
178: }
179:
180: <INIT>0{O}+ {
181: sscanf(yytext, "%o", &yylval);
182: RETURN sy_int;
183: }
184:
185: <INIT>{D}+ {
186: sscanf(yytext, "%d", &yylval);
187: RETURN sy_int;
188: }
189:
190: <INIT>'.' {
191: yylval = yytext[1];
192: RETURN sy_int;
193: }
194:
195: <INIT>'\\{O}[{O}[{O}]]' {
196: sscanf(yytext + 2, "%o", &yylval);
197: RETURN sy_int;
198: }
199:
200: <INIT>'\\.' {
201: switch (yytext[2])
202: {
203: case 'n':
204: yylval = '\n';
205: break;
206:
207: case 't':
208: yylval = '\t';
209: break;
210:
211: case 'b':
212: yylval = '\b';
213: break;
214:
215: case 'r':
216: yylval = '\r';
217: break;
218:
219: case 'f':
220: yylval = '\f';
221: break;
222:
223: default:
224: yylval = yytext[2];
225: break;
226: }
227: RETURN sy_int;
228: }
229:
230: <INIT>. fprintf(stderr, "%s: line %d, ignored unknown character (%s) in set initialisation\n", myname, yylineno, print_char());
231:
232: <C_INIT>"*/" {
233: ECHO;
234: BEGIN INIT;
235: }
236:
237: <C_INIT>. ECHO;
238:
239: %%
240:
241: begin_source()
242: {
243: BEGIN SOURCE;
244: }
245:
246: begin_setdefn()
247: {
248: BEGIN SETDEFN;
249: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.