/// <summary> /// Given token stream and operator type determines if operator is unary /// </summary> /// <param name="tokens">Token stream</param> /// <param name="operatorType">Operator type</param> /// <param name="offset">Offset of the operator relatively to the current token position</param> public static bool IsUnaryOperator(TokenStream <RToken> tokens, OperatorType operatorType, int offset = 0) { bool possibleUnary = Operator.IsPossibleUnary(operatorType); if (!possibleUnary) { return(false); } if (tokens.Position == offset) { // First operator in the expression is unary return(true); } // If operator is preceded by an operator, it is then unary // Look back two tokens since operator parsing already consumed its token. if (tokens.LookAhead(offset - 1).TokenType == RTokenType.Operator) { return(true); } return(false); }