public void ReverseBracket()
 {
     if (type.Equals(BoolExpressionOperatorType.BracketOn))
     {
         type = BoolExpressionOperatorType.BracketOff;
     }
     else if (type.Equals(BoolExpressionOperatorType.BracketOff))
     {
         type = BoolExpressionOperatorType.BracketOn;
     }
 }
示例#2
0
        public override bool ToBool()
        {
            //Reverse Polish Notation reader

            Stack <bool> stack = new Stack <bool>();

            foreach (IBoolExpressionElement el in elements)
            {
                if (el is IBoolable)
                {
                    stack.Push((el as IBoolable).ToBool());
                }
                else if (el is BoolExpressionOperator)
                {
                    if ((el as BoolExpressionOperator).GetOperatorType().Equals(BoolExpressionOperatorType.Not))
                    {
                        bool a = stack.Pop();
                        stack.Push(!a);
                    }
                    else
                    {
                        BoolExpressionOperatorType type = (el as BoolExpressionOperator).GetOperatorType();

                        bool a = stack.Pop();
                        bool b = stack.Pop();

                        switch (type)
                        {
                        case BoolExpressionOperatorType.And:
                            stack.Push(a & b);
                            break;

                        case BoolExpressionOperatorType.Or:
                            stack.Push(a | b);
                            break;

                        case BoolExpressionOperatorType.Xor:
                            stack.Push(a ^ b);
                            break;
                        }
                    }
                }
            }
            return(stack.Pop());
        }
 public BoolExpressionOperator(BoolExpressionOperatorType type)
 {
     this.type = type;
 }