PostgreSQL Source Code: src/tools/pg_bsd_indent/parse.c Source File (original) (raw)
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#if 0
33#ifndef lint
34static char sccsid[] = "@(#)parse.c 8.1 (Berkeley) 6/6/93";
35#endif
36#endif
37
38#include "c.h"
39
41#include <stdio.h>
45
46static void reduce(void);
47
48void
50{
51 int i;
52
53#ifdef debug
55#endif
56
58
60
61 reduce();
62 }
63
64
65 switch (tk) {
66
67
68 case decl:
70
72
73 break_comma = true;
74
77
78 if (ps.ljust_decl) {
79
81 for (i = ps.tos - 1; i > 0; --i)
84
86 }
87 }
88 break;
89
90 case ifstmt:
92
93
94
95
96
98
99
100 case dolit:
101 case forstmt:
104 ++ps.i_l_follow;
106 break;
107
108 case lbrace:
109 break_comma = false;
112 ++ps.i_l_follow;
113
114 else {
116
117
118
120
121
122
125
126
127
128 }
129 }
130
134
136 break;
137
138 case whilestmt:
140
144 }
145 else {
150 }
151
152 break;
153
154 case elselit:
155
157 diag2(1, "Unmatched 'else'");
158 else {
160
162
164
166 }
167 break;
168
169 case rbrace:
170
174 }
175 else
176 diag2(1, "Statement nesting error");
177 break;
178
179 case swstmt:
182
185
186
188
190 break;
191
192 case semicolon:
193 break_comma = false;
194
197 break;
198
199 default:
200 diag2(1, "Unknown code to parser");
201 return;
202
203
204 }
205
207 errx(1, "Parser stack overflow");
208
209 reduce();
210
211#ifdef debug
212 for (i = 1; i <= ps.tos; ++i)
215#endif
216
217 return;
218}
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259static void
261{
262 int i;
263
264 for (;;) {
265
266
268
271
274
276 break;
277
278 case dolit:
281 break;
282
284
287 (
289 &&
291 &&
293 );
294 --i);
296
297
298
299
300
301 break;
302
304
306
307 case decl:
309
311
313
316 break;
317
318 default:
319 return;
320
321 }
322 break;
323
324 case whilestmt:
326
328 break;
329 }
330 else
331 return;
332
333 default:
334 return;
335
336 }
337 }
338}
void errx(int eval, const char *fmt,...)
void diag2(int, const char *)