/** Die Klasse "Expression" beinhaltet die Struktur eines mathematischen
Ausdrucks in abstrakter Form.
**/

class Expression {
	
}

/** Die Klasse "Operator" ist die abstrakte Basisklasse für alle Operatoren.
**/
abstract class Operator {
	abstract public String getSymbol();
	abstract public void readArguments( FloatStack src );
	abstract public float valueOf();
}

/** Die Klasse "Addition" beinhaltet eine Verknüpfung mit '+' **/
class Addition extends Operator {
	public Addition() {
		super();
		op_1 = 0;
		op_2 = 0;
	}
	public String getSymbol() {
		return "+";
	}
	public void readArguments( FloatStack src ) {
		op_2 = src.pop();
		op_1 = src.pop();
	}
	public float valueOf() {
		return op_1 + op_2;
	}
	protected float op_1;
	protected float op_2;
}

/** Die Klasse "Subtraction" beinhaltet eine Verknüpfung mit '-' **/
class Subtraction extends Operator {
	public Subtraction() {
		super();
		op_1 = 0;
		op_2 = 0;
	}
	public String getSymbol() {
		return "-";
	}
	public void readArguments( FloatStack src ) {
		op_2 = src.pop();
		op_1 = src.pop();
	}
	public float valueOf() {
		return op_1 - op_2;
	}
	protected float op_1;
	protected float op_2;
}

/** Die Klasse "Multiplication" beinhaltet eine Verknüpfung mit '*' **/
class Multiplication extends Operator {
	public Multiplication() {
		super();
		op_1 = 1;
		op_2 = 1;
	}
  public String getSymbol() {
		return "*";
	}
	public void readArguments( FloatStack src ) {
		op_2 = src.pop();
		op_1 = src.pop();
	}
	public float valueOf() {
		return op_1 * op_2;
	}
	protected float op_1;
	protected float op_2;
}

/** Die Klasse "Division" beinhaltet eine Verknüpfung mit '/' **/
class Division extends Operator {
	public Division() {
		super();
		op_1 = 1;
		op_2 = 1;
	}
  public String getSymbol() {
		return "/";
	}
	public void readArguments( FloatStack src ) {
		op_2 = src.pop();
		op_1 = src.pop();
	}
	public float valueOf() {
		return op_1 / op_2;
	}
	protected float op_1;
	protected float op_2;
}