Inheritance: SingleValueNode
 public WhenConstructed()
 {
     this.node = new UnaryOperatorNode(this.operand, unaryOperatorKind);
 }
            private SingleValueNode ParseSingleValueNode()
            {
                SingleValueNode node = null;

                switch (this.tokens.Peek().TokenType)
                {
                    case TokenType.FunctionName:
                        node = this.ParseSingleValueFunctionCall();
                        break;

                    case TokenType.UnaryOperator:
                        var token = this.tokens.Dequeue();
                        node = this.ParseSingleValueNode();
                        node = new UnaryOperatorNode(node, UnaryOperatorKindParser.ToUnaryOperatorKind(token.Value));
                        break;

                    case TokenType.OpenParentheses:
                        this.groupingDepth++;
                        this.tokens.Dequeue();
                        node = this.ParseSingleValueNode();
                        break;

                    case TokenType.PropertyName:
                        node = this.ParseSingleValuePropertyAccess();
                        break;

                    default:
                        throw new NotSupportedException(this.tokens.Peek().TokenType.ToString());
                }

                return node;
            }
 /// <summary>
 /// Binds the specified <see cref="UnaryOperatorNode"/>.
 /// </summary>
 /// <param name="unaryOperatorNode">The <see cref="UnaryOperatorNode"/> to bind.</param>
 protected abstract void BindUnaryOperatorNode(UnaryOperatorNode unaryOperatorNode);