private void Read()
        {
            var  constantExpression = new StringBuilder();
            char character;

            while (reader.ReadNext(out character))
            {
                switch (character)
                {
                case '\\':
                    constantExpression.Append(ReadEscapedCharacter());
                    break;

                case '[':
                    visitor.VisitConstant(constantExpression.ToString());
                    constantExpression.Clear();
                    visitor.VisitRange(ReadRange());
                    break;

                default:
                    constantExpression.Append(character);
                    break;
                }
            }

            if (constantExpression.Length > 0)
            {
                visitor.VisitConstant(constantExpression.ToString());
            }
        }