|
|
1.1 ! root 1: /* Copyright (c) 1982 Regents of the University of California */ ! 2: ! 3: static char sccsid[] = "@(#)tr_equal.c 1.1 1/18/82"; ! 4: ! 5: /* ! 6: * A recursive tree search routine to test if two trees ! 7: * are structurally equivalent. ! 8: */ ! 9: ! 10: #include "defs.h" ! 11: #include "tree.h" ! 12: #include "tree.rep" ! 13: ! 14: BOOLEAN tr_equal(t1, t2) ! 15: register NODE *t1; ! 16: register NODE *t2; ! 17: { ! 18: if (t1 == NIL && t2 == NIL) { ! 19: return(TRUE); ! 20: } ! 21: if (t1 == NIL || t2 == NIL) { ! 22: return(FALSE); ! 23: } ! 24: if (t1->op != t2->op || degree(t1->op) != degree(t2->op)) { ! 25: return(FALSE); ! 26: } ! 27: switch(degree(t1->op)) { ! 28: case LEAF: ! 29: switch(t1->op) { ! 30: case O_NAME: ! 31: return(t1->nameval == t2->nameval); ! 32: ! 33: case O_QNAME: ! 34: if (!tr_equal(t1->right, t2->right)) { ! 35: return(FALSE); ! 36: } ! 37: return(tr_equal(t1->left, t2->left)); ! 38: ! 39: case O_LCON: ! 40: return(t1->lconval == t2->lconval); ! 41: ! 42: case O_FCON: ! 43: return(t1->fconval == t2->fconval); ! 44: ! 45: case O_SCON: ! 46: return(t1->sconval == t2->sconval); ! 47: ! 48: default: ! 49: panic("tr_equal: leaf %d\n", t1->op); ! 50: } ! 51: /*NOTREACHED*/ ! 52: ! 53: case BINARY: ! 54: if (!tr_equal(t1->right, t2->right)) { ! 55: return(FALSE); ! 56: } ! 57: /* else fall through */ ! 58: case UNARY: ! 59: return(tr_equal(t1->left, t2->left)); ! 60: ! 61: default: ! 62: panic("tr_equal: bad degree for op %d\n", t1->op); ! 63: } ! 64: /*NOTREACHED*/ ! 65: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.