#include "stable.h" #include "cgram.h" #include "tokens.h" extern int debug; extern NODE *getnode(); void fwalk(); void walkf(); void fwalk(NODE *p,int (*f)(),int t){ if(p==(NODE *)0)return; (*f)(p,t); if(p->left)fwalk(p->left,f,t+1); if(p->right)fwalk(p->right,f,t+1); } void walkf(NODE *p, int (*f)(), int t){ if(p==(NODE *)0)return; if(p->left)walkf(p->left,f,t+1); if(p->right)walkf(p->right,f,t+1); (*f)(p,t); } eprint(NODE *p,int t){ int i=t; for(; t > 2 ; t-=2)printf("\t"); if(t>0)printf(" "); printf("%X) %s, %X, %X",p,tokens[p->op],p->left,p->right); if(p->value)printf(", %d",p->value); if(p->symbol){ printf(", %s, %X\n",p->symbol->name,p->symbol->init); if(p->symbol->init)fwalk(p->symbol->init,eprint,i+1); } else printf("\n"); } NODE * bldtree(int op, NODE *left, NODE *right){ NODE *p; p=getnode(); p->op=op; p->left=left; p->right=right; if(debug)fwalk(p,eprint,0); return(p); }