/// <summary>
        /// Create a new expression node.
        /// </summary>
        /// <param name="parent">Parent node that defines this expression.</param>
        protected ExpressionNode(SemanticNode parent)
        {
#if DEBUG
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }
#endif
            this.Parent = parent;
        }
        /// <summary>
        /// Create and initialize a new assignment expression.
        /// </summary>
        /// <param name="parent">Parent node that defines this expression.</param>
        /// <param name="identifier">Identifier token of the assignment target.</param>
        /// <param name="token">Token representing the assignment operator.</param>
        protected internal AssignmentNode(SemanticNode parent, IdentifierToken identifier, AssignmentOperatorToken token)
            : base(parent)
        {
#if DEBUG
            if (identifier == null)
            {
                throw new ArgumentNullException("identifier");
            }
            if (token == null)
            {
                throw new ArgumentNullException("token");
            }
#endif
            this.Target             = new AssignmentTargetNode(this, identifier);
            this.AssignmentOperator = token;
        }
 /// <summary>
 /// Create a new basic expression parse node.
 /// </summary>
 /// <param name="parent">Parent node that defines this expression.</param>
 protected internal BasicExpressionNode(SemanticNode parent)
     : base(parent)
 {
 }