public void Visit(ValueExpression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            expr = expression.Text;
        }
        /// <summary>
        /// Visits a value expression
        /// </summary>
        /// <param name="expression">The expression</param>
        /// <exception cref="ArgumentNullException">Thrown when the input parameter is null</exception>        
        public void Visit(ValueExpression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            switch (expression.Type)
            {
                case ValueExpressionType.Integer:
                    result = int.Parse(expression.Text);
                    break;
                case ValueExpressionType.Variable:
                    int value;
                    int dereferencedValue;
                    int pointerValue;
                    if (context.TryResolveSymbol(expression.Text, out value))
                    {
                        result = context.Variables[expression.Text];
                    }
                    else if (context.TryResolveDereference(expression.Text, out dereferencedValue, out pointerValue))
                    {
                        // give a dummy pointer address for the pointer.
                        result = pointerValue;
                    }
                    else
                    {
                        int intValue;
                        if (Int32.TryParse(expression.Text, out intValue))
                        {
                            result = intValue;
                        }
                        else
                        {
                            result = expression.Text;
                        }
                    }
                    break;
                case ValueExpressionType.Null:
                    result = expression.Text;
                    break;
                default:
                    break;
            }
        }