]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/CCode/Source/Pccts/antlr/dumpnode.c
Fixed all scripts to use new directory layout.
[mirror_edk2.git] / Tools / CCode / Source / Pccts / antlr / dumpnode.c
CommitLineData
878ddf1f 1#include <stdio.h>\r
2#include <ctype.h>\r
3\r
4#include "set.h"\r
5#include "syn.h"\r
6#include "hash.h"\r
7#include "generic.h"\r
8\r
9#ifdef __USE_PROTOS\r
10void dumpset1(set s)\r
11#else\r
12void dumpset1(s)\r
13 set s;\r
14#endif\r
15{\r
16 if (set_nil(s)) {\r
17 fprintf(stderr,"{}");\r
18 } else {\r
19 s_fprT(stderr,s);\r
20 };\r
21}\r
22\r
23#ifdef __USE_PROTOS\r
24void dumpset(set s)\r
25#else\r
26void dumpset(s)\r
27 set s;\r
28#endif\r
29{\r
30 dumpset1(s);\r
31 fprintf(stderr,"\n");\r
32}\r
33\r
34#ifdef __USE_PROTOS\r
35int isEndRule(Node * p)\r
36#else\r
37int isEndRule(p)\r
38 Node * p;\r
39#endif\r
40{\r
41 int result=0;\r
42 if ( p->ntype == nJunction &&\r
43 ( (Junction *) p)->jtype == EndRule) {\r
44 result=1;\r
45 };\r
46 return result;\r
47}\r
48\r
49#ifdef __USE_PROTOS\r
50void dumppred1(int depth,Predicate *p)\r
51#else\r
52void dumppred1(depth,p)\r
53 int depth;\r
54 Predicate *p;\r
55#endif\r
56{\r
57 int i;\r
58 int k;\r
59\r
60 for (i=0; i<depth ; i++) {\r
61 fprintf(stderr," ");\r
62 };\r
63 if (p->expr == PRED_AND_LIST ||\r
64 p->expr == PRED_OR_LIST) {\r
65 fprintf(stderr," %s", (p->expr == NULL ? "null expr" : p->expr));\r
66 if (p->inverted) fprintf(stderr," predicate inverted !");\r
67 if (p->redundant) {\r
68 fprintf(stderr," Redundant!");\r
69 };\r
70 if (p->isConst) fprintf(stderr," const %d !",p->constValue);\r
71 fprintf(stderr,"\n");\r
72 } else {\r
73 fprintf(stderr,"predicate k=%d",p->k);\r
74 k=set_int(p->completionSet);\r
75 if (k >= 0) {\r
76 fprintf(stderr," Incomplete Set=%d !",k);\r
77 };\r
78 k=set_int(p->completionTree);\r
79 if (k >= 0) {\r
80 fprintf(stderr," Incomplete Tree=%d !",k);\r
81 };\r
82 if (p->redundant) {\r
83 fprintf(stderr," Redundant!");\r
84 };\r
85 fprintf(stderr," \"%s\" (%x)", (p->expr == NULL ? "null expr" : p->expr) ,p);\r
86 if (p->source != NULL) {\r
87 fprintf(stderr,"line %d",p->source->line);\r
88 };\r
89 if (p->inverted) fprintf(stderr," predicate inverted !");\r
90 fprintf(stderr,"\n");\r
91 for (i=0; i<depth ; i++) {\r
92 fprintf(stderr," ");\r
93 };\r
94 fprintf(stderr,"scontext: ");\r
95 dumpset(p->scontext[1]);\r
96 for (i=0; i<depth ; i++) {\r
97 fprintf(stderr," ");\r
98 };\r
99 fprintf(stderr,"tcontext: ");\r
100 preorder(p->tcontext);\r
101 fprintf(stderr,"\n");\r
102 };\r
103 fprintf(stderr,"\n");\r
104 if (p->down != NULL) {\r
105 dumppred1(depth+1,p->down);\r
106 };\r
107 if (p->right != NULL) {\r
108 dumppred1(depth,p->right);\r
109 };\r
110}\r
111\r
112#ifdef __USE_PROTOS\r
113void dumppred(Predicate *p)\r
114#else\r
115void dumppred(p)\r
116 Predicate *p;\r
117#endif\r
118{\r
119 fprintf(stderr,"---------------------------------\n");\r
120 dumppred1(0,p);\r
121 fprintf(stderr,"\n");\r
122}\r
123\r
124#ifdef __USE_PROTOS\r
125void dumppredtree(Predicate *p)\r
126#else\r
127void dumppredtree(p)\r
128 Predicate *p;\r
129#endif\r
130{\r
131 fprintf(stderr,"predicate k=%d \"%s\" line %d\n",p->k,p->expr,p->source->line);\r
132 dumpset(p->scontext[1]);\r
133}\r
134\r
135#ifdef __USE_PROTOS\r
136void dumppredexpr(Predicate *p)\r
137#else\r
138void dumppredexpr(p)\r
139 Predicate *p;\r
140#endif\r
141{\r
142 fprintf(stderr," pred expr \"%s\"\n",p->expr);\r
143}\r
144\r
145#ifdef __USE_PROTOS\r
146void dt(Tree *t)\r
147#else\r
148void dt(t)\r
149 Tree *t;\r
150#endif\r
151{\r
152 MR_dumpTreeF(stderr,0,t,5);\r
153}\r
154\r
155#ifdef __USE_PROTOS\r
156void d(Node * p)\r
157#else\r
158void d(p)\r
159 Node * p;\r
160#endif\r
161{\r
162\r
163 Junction *j;\r
164 RuleRefNode *r;\r
165 TokNode *t;\r
166 ActionNode *a;\r
167\r
168 if (p==NULL) {\r
169 fprintf(stderr,"dumpNode: Node is NULL");\r
170 return;\r
171 };\r
172\r
173 switch (p->ntype) {\r
174 case nJunction :\r
175 j = (Junction *) p;\r
176 fprintf(stderr, "Junction (#%d in rule %s line %d) ",j->seq,j->rname,j->line);\r
177 if (j->guess) fprintf(stderr,"guess block ");\r
178 switch (j->jtype ) {\r
179 case aSubBlk :\r
180 fprintf(stderr,"aSubBlk");\r
181 break;\r
182 case aOptBlk :\r
183 fprintf(stderr,"aOptBlk");\r
184 break;\r
185 case aLoopBegin :\r
186 fprintf(stderr,"aLoopBeginBlk");\r
187 break;\r
188 case aLoopBlk :\r
189 fprintf(stderr,"aLoopBlk");\r
190 break;\r
191 case aPlusBlk :\r
192 fprintf(stderr,"aPlusBlk");\r
193 break;\r
194 case EndBlk :\r
195 fprintf(stderr,"EndBlk");\r
196 break;\r
197 case RuleBlk :\r
198 fprintf(stderr,"RuleBlk");\r
199 break;\r
200 case Generic :\r
201 fprintf(stderr,"Generic");\r
202 break;\r
203 case EndRule :\r
204 fprintf(stderr,"EndRule");\r
205 break;\r
206 };\r
207 if (j->halt) fprintf(stderr," halt!");\r
208 if (j->p1) fprintf(stderr," p1 valid");\r
209 if (j->p2) {\r
210 if (j->p2->ntype == nJunction) {\r
211 fprintf(stderr," (p2=#%d)",( (Junction *) j->p2)->seq);\r
212 } else {\r
213 fprintf(stderr," (p2 valid)");\r
214 };\r
215 };\r
216 if (j->ignore) fprintf(stderr, " ignore/plus-block-bypass");\r
217 if (j->fset != NULL && set_deg(*j->fset) != 0) {\r
218 fprintf(stderr,"\nfset:\n");\r
219 dumpset(*j->fset);\r
220 };\r
221 if (j->ftree != NULL) {\r
222 fprintf(stderr,"\nftree:\n");\r
223 preorder(j->ftree);\r
224 };\r
225 fprintf(stderr,"\n");\r
226 break;\r
227 case nRuleRef :\r
228 r = (RuleRefNode *) p;\r
229 fprintf(stderr, "RuleRefNode (in rule %s line %d) to rule %s\n", r->rname,r->line,r->text);\r
230 break;\r
231 case nToken :\r
232 t = (TokNode *) p;\r
233 fprintf(stderr, "TokNode (in rule %s line %d) token %s\n",t->rname,t->line,TerminalString(t->token));\r
234 break;\r
235 case nAction :\r
236 a =(ActionNode *) p;\r
237 if (a->is_predicate) {\r
238 fprintf(stderr, "Predicate (in rule %s line %d) %s",a->rname,a->line,a->action);\r
239 if (a->inverted) fprintf(stderr," action inverted !");\r
240 if (a->guardpred != NULL) {\r
241 fprintf(stderr," guarded");\r
242 dumppredexpr(a->guardpred);\r
243 if (a->ampersandPred) {\r
244 fprintf(stderr," \"&&\" style");\r
245 } else {\r
246 fprintf(stderr," \"=>\" style");\r
247 };\r
248 };\r
249 if (a->predEntry != NULL) fprintf(stderr," predEntry \"%s\" ",a->predEntry->str);\r
250 fprintf(stderr,"\n");\r
251 } else if (a->init_action) {\r
252 fprintf(stderr, "Init-Action (in rule %s line %d) %s\n",a->rname,a->line,a->action);\r
253 } else {\r
254 fprintf(stderr, "Action (in rule %s line %d) %s\n",a->rname,a->line,a->action);\r
255 };\r
256 break;\r
257 };\r
258}\r
259\r
260#ifdef __USE_PROTOS\r
261Node * dp1(Node * p)\r
262#else\r
263Node * dp1(p)\r
264 Node * p;\r
265#endif\r
266{\r
267 Node *result=NULL;\r
268\r
269 if (p->ntype == nJunction) {\r
270 result=( (Junction *) p )->p1;\r
271 d(result);\r
272 } else {\r
273 fprintf(stderr,"dp1: Not a Junction node");\r
274 };\r
275 return result;\r
276}\r
277\r
278#ifdef __USE_PROTOS\r
279Node * dp2(Node * p)\r
280#else\r
281Node * dp2(p)\r
282 Node * p;\r
283#endif\r
284{\r
285 Node *result=NULL;\r
286\r
287 if (p->ntype == nJunction) {\r
288 result=( (Junction *) p )->p2;\r
289 d(result);\r
290 } else {\r
291 fprintf(stderr,"dp2: Not a Junction node");\r
292 };\r
293 return result;\r
294}\r
295\r
296#ifdef __USE_PROTOS\r
297Node * dn(Node * p)\r
298#else\r
299Node * dn(p)\r
300 Node * p;\r
301#endif\r
302\r
303{\r
304 Node *result=NULL;\r
305\r
306 if (p->ntype == nRuleRef) {\r
307 result=( (RuleRefNode *)p )->next;\r
308 } else if (p->ntype == nAction) {\r
309 result=( (ActionNode *)p )->next;\r
310 } else if (p->ntype == nToken) {\r
311 result=( (TokNode *)p )->next;\r
312 } else {\r
313 fprintf(stderr,"No next field: Neither a RuleRefNode, ActionNode, nor TokNode");\r
314 };\r
315 if (result != NULL) d(result);\r
316 return result;\r
317}\r
318\r
319#ifdef __USE_PROTOS\r
320void df(Node * p)\r
321#else\r
322void df(p)\r
323 Node * p;\r
324#endif\r
325{\r
326 int count=0;\r
327 Node *next;\r
328\r
329 fprintf(stderr,"\n#%d ",++count);\r
330 d(p);\r
331\r
332 for (next=p; next != NULL && !isEndRule(next) ; ) {\r
333 fprintf(stderr,"#%d ",++count);\r
334 if (next->ntype == nJunction) {\r
335 next=dp1(next);\r
336 } else {\r
337 next=dn(next);\r
338 };\r
339 };\r
340}\r
341\r
342#ifdef __USE_PROTOS\r
343Node * dfn(Node * p,int target)\r
344#else\r
345Node * dfn(p,target)\r
346 Node * p;\r
347 int target;\r
348#endif\r
349{\r
350 Node *result=NULL;\r
351 int count=0;\r
352 Node *next;\r
353\r
354 fprintf(stderr,"#%d ",++count);\r
355 d(p);\r
356\r
357 for (next=p; next != NULL && !isEndRule(next) ; ) {\r
358 fprintf(stderr,"#%d ",++count);\r
359 if (next->ntype == nJunction) {\r
360 next=dp1(next);\r
361 } else {\r
362 next=dn(next);\r
363 };\r
364 if (count == target) {\r
365 result=next;\r
366 break;\r
367 };\r
368 };\r
369 return result;\r
370}\r
371\r
372\r
373static int findnodeMatch;\r
374\r
375#ifdef __USE_PROTOS\r
376Junction *findnode1(Node *n)\r
377#else\r
378Junction *findnode1(n)\r
379 Node *n;\r
380#endif\r
381{\r
382 Node *next;\r
383 Junction *j;\r
384 Junction *match;\r
385\r
386 if (n == NULL) return NULL;\r
387 if (n->ntype == nJunction) {\r
388 j=(Junction *) n;\r
389 if (j->seq == findnodeMatch) return j;\r
390 if (j->jtype == EndRule) return NULL;\r
391 if (j->jtype != RuleBlk && j->jtype != EndBlk) {\r
392 if (j->p2 != NULL && !j->ignore) {\r
393 match=findnode1(j->p2);\r
394 if (match != NULL) return match;\r
395 };\r
396 };\r
397 };\r
398 next=MR_advance(n);\r
399 return findnode1(next);\r
400}\r
401\r
402#ifdef __USE_PROTOS\r
403Junction *findnode(int match)\r
404#else\r
405Junction *findnode(match)\r
406 int match;\r
407#endif\r
408{\r
409 Junction *j;\r
410 Junction *result=NULL;\r
411\r
412 findnodeMatch=match;\r
413\r
414 for (j=SynDiag; j != NULL; j=(Junction *)j->p2) {\r
415 require (j->ntype == nJunction && j->jtype == RuleBlk,"Not a rule block");\r
416 result=findnode1( (Node *) j);\r
417 if (result != NULL) break;\r
418 };\r
419 if (result != NULL) {\r
420 d( (Node *) result);\r
421 };\r
422 return result;\r
423}\r