//------------------- class Exponentiation extends Expression{ Exponentiation(Expression parent){ this.parent = parent; initSubExp(2); w = 2; h = 2; } int height(){ return subExp[0].height() + subExp[1].height() + h; } int width(){ return subExp[0].width() + subExp[1].width() + w; } void draw(int x, int y){ int subW = subExp[0].width(); int subH = height(); subExp[0].draw( x, y+subExp[1].height()+2 ); subExp[1].draw( x+subExp[0].width()+2, y ); } } //------------------- class Addition extends Expression{ Addition(Expression parent){ this.parent = parent; initSubExp(2); w = 15; h = 0; } int height(){ return max( subExp[0].height(), subExp[1].height() ) + h; } int width(){ return subExp[0].width() + subExp[1].width() + w; } void draw(int x, int y){ int subW = subExp[0].width(); int subH = height(); line( x+subW+w/2-1, y+subH/2 , x+subW+w/2+3, y+subH/2 ); line( x+subW+w/2+1, y+subH/2-2, x+subW+w/2+1, y+subH/2+2 ); subExp[0].draw(x,y + height()/2 - subExp[0].height()/2 ); subExp[1].draw(x+subW+w,y + height()/2 - subExp[1].height()/2 ); } } //------------------- class Multiplication extends Addition{ Multiplication(Expression parent){ super( parent ); } void draw(int x, int y){ int subW = subExp[0].width(); int subH = height(); line( x+subW+w/2-1, y+subH/2-2, x+subW+w/2+3, y+subH/2+2 ); line( x+subW+w/2+3, y+subH/2-2, x+subW+w/2-1, y+subH/2+2 ); subExp[0].draw(x,y + height()/2 - subExp[0].height()/2 ); subExp[1].draw(x+subW+w,y + height()/2 - subExp[1].height()/2 ); } } //------------------- class Division extends Expression{ Division(Expression parent){ this.parent = parent; initSubExp(2); w = 4; h = 4; } int width(){ return max( subExp[0].width(), subExp[1].width() ) + w; } int height(){ return subExp[0].height() + subExp[1].height() + h; } void draw(int x, int y){ line(x,y+2+subExp[0].height(),x+width(),y+2+subExp[0].height()); subExp[0].draw(x + width()/2 - subExp[0].width()/2,y); subExp[1].draw(x + width()/2 - subExp[1].width()/2,y+4+subExp[0].height()); } }