Пример #1
0
    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());
    }
Пример #2
0
 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);
}