#include // std::string #include // std::cout #include // std::stringstream #include #include using namespace std; class PRelation { string name; public: PRelation() { name = "~"; } PRelation(string str) { name = str; } void setPRelation(string str) { name = str; } string getName() { return name; } }; class PAttribute { string name; string type; string size; public: PAttribute() { name = "~"; type = "~"; size = "~"; } PAttribute(string str, string t) { name = str; type = t; size = "~"; } PAttribute(string str, string t, string s) { name = str; type = t; size = s; } void setPAttributeName(string str) { name = str; } void setPAttributeType(string t) { type = t; } void setPAttributeSize(string s) { size = s; } string getPAttribute() { return name; } }; class PUnion { string Un1; string Un2; public: PUnion() { Un1 = "~"; Un2 = "~"; } PUnion (string s1, string s2) { Un1 = s1; Un2 = s2; } string getPUnion() { return "Union of " + Un1 + " and " + Un2; } }; class PProduct { string Pr1; string Pr2; public: PProduct() { Pr1 = "~"; Pr2 = "~"; } PProduct(string s1, string s2) { Pr1 = s1; Pr2 = s2; } string getPProduct() { return "Product of " + Pr1 + " and " + Pr2; } }; class PDifference { string D1; string D2; public: PDifference() { D1 = "~"; D2 = "~"; } PDifference(string s1, string s2) { D1 = s1; D2 = s2; } string getPDifference() { return "Difference of " + D1 + " and " + D2; } }; class PRenaming { string newName; string oldName; public: PRenaming() { newName = "~"; oldName = "~"; } PRenaming(string s1, string s2) { newName = s1; oldName = s2; } string doRename() { return "Renaming " + oldName + " to " + newName; } }; class PProjection { string newName; string oldName; public: PProjection() { newName = "~"; oldName = "~"; } PProjection(string s1, string s2) { newName = s1; oldName = s2; } string doPProjection() { return "Projecting " + oldName + " onto " + newName; } }; class POperand { string op; public: POperand() { op = "~"; } POperand(string str) { op = str; } void setPOperand(string str) { op = str; } string getPOperand() { return op; } }; class POp { string op; public: POp() { op = "~"; } POp(string str) { op = str; } void setPOp(string str) { op = str; } string getPOp() { return op; } }; class PComparison { POp op; POperand operand1; POperand operand2; public: PComparison() { op.setPOp("~"); operand1.setPOperand("~"); operand2.setPOperand("~"); } PComparison(string str1, string str2, string str3) { operand1.setPOperand(str1); op.setPOp(str2); operand2.setPOperand(str3); } void setPComparison(string str1, string str2, string str3) { operand1.setPOperand(str1); op.setPOp(str2); operand2.setPOperand(str3); } string getPComparison() { return operand1.getPOperand() + " " + op.getPOp() + " " + operand2.getPOperand(); } }; class PConjunction { string conj; public: PConjunction() { conj = "~"; } PConjunction(string str) { conj = str; } void setPConjunction(string str) { conj = str; } string getPConjunction() { return conj; } }; class PCondition { string cond; public: PCondition() { cond = "~"; } PCondition(string str) { cond = str; } void setPCondition(string str) { cond = str; } string getPCondition() { return cond; } }; class PSelection { string select; public: PSelection() { select = "~"; } PSelection(string str) { select = str; } string getPSelection() { return select; } }; class PExpression { PRelation rel; PSelection sel; PProjection proj; PRenaming ren; PUnion un; PDifference diff; PProduct prod; string temp; public: PExpression() { } PExpression(string str) { temp = str; } void setPExpression(string str) { temp = str; } string getPExpression() { return temp; } };