#include // std::string #include // std::cout #include // std::stringstream #include #include using namespace std; class Relation { string name; public: Relation() { name = NULL; } Relation(string str) { name = str; } void setRelation(string str) { name = str; } string getName() { return name; } }; class Attribute { string name; public: Attribute() { name = NULL; } Attribute(string str) { name = str; } void setAttribute(string str) { name = str; } string getAttribute() { return name; } }; class Union { string Un1; string Un2; public: Union() { Un1 = NULL; Un2 = NULL; } Union (string s1, string s2) { Un1 = s1; Un2 = s2; } string getUnion() { return "Union of " + Un1 + " and " + Un2; } }; class Product { string Pr1; string Pr2; public: Product() { Pr1 = NULL; Pr2 = NULL; } Product(string s1, string s2) { Pr1 = s1; Pr2 = s2; } string getProduct() { return "Product of " + Pr1 + " and " + Pr2; } }; class Difference { string D1; string D2; public: Difference() { D1 = NULL; D2 = NULL; } Difference(string s1, string s2) { D1 = s1; D2 = s2; } string getDifference() { return "Difference of " + D1 + " and " + D2; } }; class Renaming { string newName; string oldName; public: Renaming() { newName = NULL; oldName = NULL; } Renaming(string s1, string s2) { newName = s1; oldName = s2; } string doRename() { return "Renaming " + oldName + " to " + newName; } }; class Projection { string newName; string oldName; public: Projection() { newName = NULL; oldName = NULL; } Projection(string s1, string s2) { newName = s1; oldName = s2; } string doProjection() { return "Projecting " + oldName + " onto " + newName; } }; class Operand { string op; public: Operand() { op = NULL; } Operand(string str) { op = str; } void setOperand(string str) { op = str; } string getOperand() { return op; } }; class Op { string op; public: Op() { op = NULL; } Op(string str) { op = str; } void setOp(string str) { op = str; } string getOp() { return op; } }; class Comparison { Op op; Operand operand1; Operand operand2; public: Comparison() { op = NULL; operand1 = NULL; operand2 = NULL; } Comparison(string str1, string str2, string str3) { operand1.setOperand(str1); op.setOp(str2); operand2.setOperand(str3); } void setComparison(string str1, string str2, string str3) { operand1.setOperand(str1); op.setOp(str2); operand2.setOperand(str3); } string getComparison() { return operand1.getOperand() + " " + op.getOp() + " " + operand2.getOperand(); } }; class Conjunction { string conj; public: Conjunction() { conj = NULL; } Conjunction(string str) { conj = str; } void setConjunction(string str) { conj = str; } string getConjunction() { return conj; } }; class Condition { string cond; public: Condition() { cond = NULL; } Condition(string str) { cond = str; } void setCondition(string str) { cond = str; } string getCondition() { return cond; } }; class Selection { string select; public: Selection() { select = NULL; } Selection(string str) { select = str; } string getSelection() { return select; } }; class Expression { string exp; public: Expression() { exp = NULL; } Expression(string str) { exp = str; } void setExpression(string str) { exp = str; } string getExpression() { return exp; } };