Expression ESolver::CreateOrExpression(const vector<Expression>& Disjuncts) { if(Disjuncts.size() == 0) { return Expression::NullObject; } if(Disjuncts.size() == 1) { return Disjuncts[0]; } Expression Current = CreateOrExpression(Disjuncts[0], Disjuncts[1]); uint32 NumDisjuncts = Disjuncts.size(); for(uint32 i = 2; i < NumDisjuncts; ++i) { Current = CreateOrExpression(Current, Disjuncts[i]); } return CreateExpression("or", Current->GetChildren()); }
Expression ESolver::CreateImpliesExpression(const Expression& Exp1, const Expression& Exp2) { vector<Expression> Children; Children.push_back(CreateNotExpression(Exp1)); Children.push_back(Exp2); return CreateOrExpression(Children); }
VbCodeExpressionPtr VbCodeExpressionFactory::CreateOrExpression(const Sentence& sentence) { VbOrExpression expression{ sentence }; if (!expression.orExpression) return CreateXorExpression(expression.xorExpression); return std::make_shared<VbCodeBinaryExpression>( VbCodeBinaryExpressionType::Or, CreateOrExpression(*expression.orExpression), CreateXorExpression(expression.xorExpression)); }
VbCodeExpressionPtr VbCodeExpressionFactory::CreateExpression(const Sentence& sentence) { VbExpression expression{ sentence }; return CreateOrExpression(expression.orExpression); }