#pragma once

#include "expression.h"
#include "expptr.h"
#include "unsupportedopexception.h"

/// Биранрные операции.
enum BOp
{
	/// Сумма.
	PLUS,
	/// Произведение.
	MULTIPLY
};

/**
 * Выражение с двумя аргументами.
 */
class BinaryExpression : public Expression
{
	/// левое подвыражение
	ExpPtr _left;
	/// правое подвыражение
	ExpPtr _right;
	/// операция
	BOp _operation;
public:
	/**
	 * Конструктор.
	 *
	 * @param operation операция
	 * @param left левое подвыражение
	 * @param right правое подвыражение
	 */
	BinaryExpression(BOp operation, const ExpPtr & left, const ExpPtr & right);
	
	/**
	 * Реализация. 
	 */
	double eval(); 

};
