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()); } }