private IReadOnlyCollection <BooleanExpressionToken> ReduceParenTokens(IReadOnlyCollection <BooleanExpressionToken> tokens) { var cursor = new BooleanExpressionTokenReaderCursor { Tokens = tokens.ToList() }; List <BooleanExpressionToken> allTokens = new List <BooleanExpressionToken>(); while (cursor.Read(out var token)) { if (token is OpenParenToken) { var innerTokens = ReadUntilClosingParen(cursor); var parenExpression = new BooleanParenExpression { InnerExpression = new BooleanExpressionTokenReader().CreateBooleanExpressionFromTokens(innerTokens) }; var reduced = new ReducedToken { ReducedExpression = parenExpression }; allTokens.Add(reduced); } else { allTokens.Add(token); } } return(allTokens); }
private bool EvaluateParenExpression(BooleanParenExpression parenExpresion) { return(Evaluate(parenExpresion.InnerExpression)); }