| #include <stdio.h> | |
| #include <ctype.h> | |
| #include "set.h" | |
| #include "syn.h" | |
| #include "hash.h" | |
| #include "generic.h" | |
| void | |
| #ifdef __USE_PROTOS | |
| dumpcycles(void) | |
| #else | |
| dumpcycles() | |
| #endif | |
| { | |
| Cycle *c; | |
| CacheEntry *f; | |
| ListNode *p; | |
| int i=0; | |
| int k; | |
| int degree; | |
| for (k=1; k <= CLL_k; k++) { | |
| if (Cycles[k] == NULL) continue; | |
| for (p = Cycles[k]->next; p!=NULL; p=p->next) { | |
| c = (Cycle *) p->elem; | |
| degree=set_deg(c->cyclicDep); | |
| fprintf(stderr,"Cycle %d: (degree %d) %s -->\n", i++, degree, RulePtr[c->croot]->rname); | |
| fprintf(stderr," *self*\n"); | |
| MR_dumpRuleSet(c->cyclicDep); | |
| fprintf(stderr,"\n"); | |
| f = (CacheEntry *) | |
| hash_get(Fcache,Fkey(RulePtr[c->croot]->rname,'o',k)); | |
| if (f == NULL) { | |
| fprintf(stderr," *** FOLLOW(%s) must be in cache but isn't ***\n", | |
| RulePtr[c->croot]->rname); | |
| }; | |
| }; | |
| }; | |
| } | |
| void | |
| #ifdef __USE_PROTOS | |
| dumpfostack(int k) | |
| #else | |
| dumpfostack(k) | |
| int k; | |
| #endif | |
| { | |
| int i=0; | |
| int *pi; | |
| fprintf(stderr,"\n"); | |
| if (FoStack[k] == NULL) { | |
| fprintf(stderr,"FoStack[%d] is null\n",k); | |
| }; | |
| if (FoTOS[k] == NULL) { | |
| fprintf(stderr,"FoTOS[%d] is null\n",k); | |
| } | |
| if (FoTOS[k] != NULL && FoStack[k] != NULL) { | |
| for (pi=FoStack[k]; pi <= FoTOS[k]; pi++) { | |
| i++; | |
| fprintf(stderr,"#%d rule %d %s\n",i,*pi,RulePtr[*pi]->rname); | |
| } | |
| } | |
| } |