#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);
	}

