60
|
1 #define EXTERN /**/
|
|
2
|
|
3 #include "mc.h"
|
|
4
|
66
|
5 #include "conv/convdef.h"
|
60
|
6
|
68
|
7 extern void type_print(int type,NMTBL *nptr,FILE *out);
|
|
8 extern void sym_print(int type,FILE *out);
|
|
9
|
60
|
10 static FILE *vout;
|
|
11
|
|
12 static void
|
67
|
13 comment_(int c)
|
66
|
14 {
|
67
|
15 fprintf(vout,"%c",c);
|
66
|
16 }
|
|
17
|
|
18 static void
|
|
19 open_(char *s)
|
65
|
20 {
|
|
21 char *p=cheapp;
|
66
|
22 while ((*cheapp++ = *s++)) {
|
65
|
23 if (*s=='.') {
|
|
24 *cheapp++=*s++; *cheapp++='c';
|
|
25 *cheapp++='c'; *cheapp++=0;
|
|
26 break;
|
|
27 }
|
|
28 }
|
|
29 vout = fopen(p,"w");
|
66
|
30 if (!vout) error(-1);
|
65
|
31 }
|
|
32
|
|
33 static void
|
66
|
34 print_(char *s)
|
60
|
35 {
|
|
36 fprintf(vout,"c: %s\n",s);
|
|
37 }
|
65
|
38
|
|
39 static void
|
66
|
40 close_()
|
65
|
41 {
|
|
42 fclose(vout);
|
|
43 }
|
66
|
44
|
|
45 void
|
67
|
46 case_begin_(int cases,int def){
|
|
47 fprintf(vout,"case ");
|
|
48 }
|
|
49
|
|
50 void
|
66
|
51 case_(int cases,int def){
|
67
|
52 if (def)
|
|
53 fprintf(vout,"default:");
|
|
54 else
|
|
55 fprintf(vout,":");
|
66
|
56 }
|
|
57
|
|
58 void
|
68
|
59 code_(NMTBL *n,int arglist){
|
|
60 fprintf(vout,"code %s(",n->nm);
|
|
61 while(args) {
|
|
62 n=(NMTBL *)car(args);
|
|
63 type_print(n->ty,n,vout);
|
|
64 args=cadr(args);
|
|
65 if(args) fprintf(vout,",");
|
|
66 }
|
|
67 fprintf(vout,")");
|
66
|
68 }
|
|
69
|
|
70 void
|
|
71 code_end_(){
|
|
72
|
|
73 }
|
|
74
|
|
75 void
|
|
76 comma_(){
|
67
|
77 fprintf(vout,",");
|
66
|
78 }
|
|
79
|
|
80 void
|
|
81 cond_(){
|
|
82
|
|
83 }
|
|
84
|
|
85 void
|
|
86 cond1_(){
|
|
87
|
|
88 }
|
|
89
|
|
90 void
|
|
91 cond2_(){
|
|
92
|
|
93 }
|
|
94
|
|
95 void
|
|
96 cond_end_(){
|
|
97
|
|
98 }
|
|
99
|
|
100 void
|
|
101 decl_data_begin_(){
|
|
102
|
|
103 }
|
|
104
|
|
105 void
|
|
106 decl_data_end_(){
|
|
107
|
|
108 }
|
|
109
|
|
110 void
|
|
111 def_(NMTBL *n){
|
|
112 }
|
|
113
|
|
114 void
|
|
115 dowhile_(){
|
|
116
|
|
117 }
|
|
118
|
|
119 void
|
|
120 dowhile_cond_(){
|
|
121
|
|
122 }
|
|
123
|
|
124 void
|
|
125 dowhile_end_(){
|
|
126
|
|
127 }
|
|
128
|
|
129 int
|
|
130 error_(n){
|
|
131 return 0;
|
|
132 }
|
|
133
|
|
134 void
|
|
135 extern_(){
|
67
|
136 fprintf(vout,"extern ");
|
66
|
137 }
|
|
138
|
|
139 void
|
|
140 for_(){
|
68
|
141 fprintf(vout,"for(");
|
66
|
142 }
|
|
143
|
|
144 void
|
|
145 for1_(){
|
68
|
146 fprintf(vout,";");
|
66
|
147 }
|
|
148
|
|
149 void
|
|
150 for2_(){
|
68
|
151 fprintf(vout,";");
|
66
|
152 }
|
|
153
|
|
154 void
|
|
155 for3_(){
|
68
|
156 fprintf(vout,")");
|
66
|
157 }
|
|
158
|
|
159 void
|
|
160 for_body_(){
|
|
161
|
|
162 }
|
|
163
|
|
164 void
|
|
165 for_end_(){
|
|
166
|
|
167 }
|
|
168
|
|
169 void
|
|
170 funcall_(int type){
|
68
|
171 fprintf(vout,"(");
|
66
|
172 }
|
|
173
|
|
174 void
|
|
175 funcall_args_(){
|
68
|
176 fprintf(vout,")");
|
66
|
177 }
|
|
178
|
|
179 void
|
68
|
180 function_(NMTBL *n,int args){
|
|
181 type_print(n->ty,0,vout);
|
|
182 fprintf(vout,"%s(",n->nm);
|
|
183 while(args) {
|
|
184 n=(NMTBL *)car(args);
|
|
185 type_print(n->ty,n,vout);
|
|
186 args=cadr(args);
|
|
187 if(args) fprintf(vout,",");
|
|
188 }
|
|
189 fprintf(vout,")");
|
66
|
190 }
|
|
191
|
|
192 void
|
|
193 function_end_(){
|
|
194
|
|
195 }
|
|
196
|
|
197 void
|
|
198 goto_(){
|
|
199
|
|
200 }
|
|
201
|
|
202 void
|
|
203 goto_label_(){
|
|
204
|
|
205 }
|
|
206
|
|
207 void
|
68
|
208 id_(int sym,NMTBL *nptr){
|
|
209 fprintf(vout," %s ",nptr->nm);
|
|
210 }
|
|
211
|
|
212 void
|
|
213 string_(char *s){
|
|
214 fprintf(vout,"\"%s\"",s);
|
|
215 }
|
|
216
|
|
217 void
|
|
218 const_(int symval){
|
|
219 fprintf(vout,"%d",symval);
|
|
220 }
|
66
|
221
|
68
|
222 void
|
|
223 return_f_(){
|
|
224 fprintf(vout,"return");
|
|
225 }
|
|
226
|
|
227 void
|
|
228 defined_(char *s){
|
|
229 fprintf(vout,"defined(%s)",s);
|
|
230 }
|
|
231
|
|
232 void
|
|
233 environment_(){
|
|
234 fprintf(vout,"environment");
|
66
|
235 }
|
|
236
|
|
237 void
|
|
238 if_(){
|
68
|
239 fprintf(vout,"if (");
|
66
|
240 }
|
|
241
|
|
242 void
|
|
243 if_else_(){
|
68
|
244 fprintf(vout,"} else {");
|
66
|
245 }
|
|
246
|
|
247 void
|
|
248 if_endif_(){
|
68
|
249 fprintf(vout,"}");
|
66
|
250 }
|
|
251
|
|
252 void
|
|
253 if_then_(){
|
68
|
254 fprintf(vout,") {");
|
66
|
255 }
|
|
256
|
|
257 void
|
|
258 jump_(int env){
|
|
259
|
|
260 }
|
|
261
|
|
262 void
|
|
263 label_(){
|
|
264
|
|
265 }
|
|
266
|
|
267 void
|
67
|
268 lpar_(){
|
|
269 fprintf(vout,"(");
|
|
270 }
|
|
271
|
|
272 void
|
|
273 rpar_(){
|
|
274 fprintf(vout,")");
|
|
275 }
|
|
276
|
|
277 void
|
66
|
278 lbra_(int sym){
|
67
|
279 fprintf(vout,"[");
|
|
280 }
|
66
|
281
|
67
|
282 void
|
|
283 rbra_(int sym){
|
|
284 fprintf(vout,"]");
|
66
|
285 }
|
|
286
|
|
287 void
|
|
288 lc_(){
|
67
|
289 fprintf(vout,"{");
|
|
290 }
|
66
|
291
|
67
|
292 void
|
|
293 rc_(){
|
|
294 fprintf(vout,"}");
|
66
|
295 }
|
|
296
|
|
297 void
|
|
298 localvar_end_(){
|
|
299
|
|
300 }
|
|
301
|
|
302 void
|
|
303 op_(int sym){
|
68
|
304 sym_print(sym,vout);
|
66
|
305 }
|
|
306
|
|
307 void
|
|
308 postfix_(int sym){
|
68
|
309 /* sym_print(sym,vout); */
|
66
|
310 }
|
|
311
|
|
312 void
|
|
313 prefix_(int sym){
|
68
|
314 /* sym_print(sym,vout); */
|
66
|
315 }
|
|
316
|
|
317 void
|
|
318 register_(){
|
67
|
319 fprintf(vout,"register ");
|
66
|
320 }
|
|
321
|
|
322 void
|
|
323 return_(){
|
68
|
324 fprintf(vout,"return (");
|
66
|
325 }
|
|
326
|
|
327 void
|
|
328 return_end_(){
|
68
|
329 fprintf(vout,")");
|
66
|
330 }
|
|
331
|
|
332
|
|
333 void
|
67
|
334 return_type_(int t,NMTBL *nptr,int cont){
|
|
335 if (cont) {
|
|
336 if(nptr) fprintf(vout,"%s",nptr->nm);
|
|
337 while (t>0&&car(t)==ARRAY) {
|
|
338 if(caddr(t)==0)
|
|
339 fprintf(vout,"[]");
|
|
340 else
|
|
341 fprintf(vout,"[%d]",caddr(t));
|
|
342 t=cadr(t);
|
|
343 }
|
|
344 } else
|
|
345 type_print(t,nptr,vout);
|
66
|
346 }
|
|
347
|
|
348 void
|
|
349 sm_(){
|
67
|
350 fprintf(vout,";");
|
66
|
351 }
|
|
352
|
|
353 void
|
|
354 static_(){
|
67
|
355 fprintf(vout,"static ");
|
66
|
356 }
|
|
357
|
|
358 void
|
|
359 switch_(){
|
68
|
360 fprintf(vout,"switch (");
|
66
|
361 }
|
|
362
|
|
363 void
|
|
364 switch_body_(){
|
68
|
365 fprintf(vout,") {");
|
66
|
366 }
|
|
367
|
|
368 void
|
|
369 switch_end_(){
|
68
|
370 fprintf(vout,"}");
|
66
|
371 }
|
|
372
|
|
373 void
|
|
374 typedef_(){
|
67
|
375 fprintf(vout,"typedef ");
|
66
|
376 }
|
|
377
|
|
378 void
|
|
379 while_(){
|
68
|
380 fprintf(vout,"while (");
|
66
|
381 }
|
|
382
|
|
383 void
|
|
384 while_body_(){
|
68
|
385 fprintf(vout,") {");
|
66
|
386 }
|
|
387
|
|
388 void
|
|
389 while_end_(){
|
68
|
390 fprintf(vout,"}");
|
66
|
391 }
|
|
392
|
|
393 /* end */
|