public void ReverseBracket() { if (type.Equals(BoolExpressionOperatorType.BracketOn)) { type = BoolExpressionOperatorType.BracketOff; } else if (type.Equals(BoolExpressionOperatorType.BracketOff)) { type = BoolExpressionOperatorType.BracketOn; } }
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; }