// File: etree.C // // Implementation of the ETree class #include #include #include "etree.h" ETree::ETree() { } // Default constructor does nothing ETree::ETree(data x) { itemp = new Item(x) ; left = right = NULL ; } ETree::ETree(data x, ETree *lchild, ETree *rchild) { itemp = new Item(x) ; left = lchild ; right = rchild ; } ETree::~ETree() { } // Tree destructor does the job int ETree::Evaluate() { int ltemp, rtemp ; ETree *lchild ; if (itemp == NULL) return 0 ; if (left != NULL) { lchild = (ETree *) left ; ltemp = lchild->Evaluate() ; } if (right != NULL) { rtemp = ((ETree *) right)->Evaluate() ; } switch(itemp->item->kind) { case NUMBER : return itemp->item->value ; case PLUS : return ltemp + rtemp ; case MINUS : return ltemp - rtemp ; case TIMES : return ltemp * rtemp ; case DIVIDE : return ltemp / rtemp ; default : return 0 ; } }