private void parseProperties(LineNumberReader lnr) 
            throws IOException, LineParserException {
        
        String line;
        while ((line = lnr.readLine()) != null) {
            String readValue;
            String[] delimited = line.split(DELIMITER);
            
            if (delimited.length == 2) {
                readValue = delimited[1];
            } else if (delimited.length == 1) {
                readValue = null;
            } else {
                throw new LineParserException(
                        "invalid property", lnr.getLineNumber());
            }
                
            String[] keyInfo = delimited[0].split(
                    "\\" + CLASS_OPEN + "|\\" + CLASS_CLOSE);
            if (keyInfo.length != 2) {
                throw new LineParserException(
                        "invalid property", lnr.getLineNumber());
            }
            try {
                Class<?> type = Class.forName(keyInfo[1]);
                Object value = parser.toValue(type, keyInfo[0], readValue);

                if (has(keyInfo[0])) {
                    set(keyInfo[0], value);
                }
            } catch (ClassNotFoundException e) {
                throw new LineParserException(
                        "invalid class", lnr.getLineNumber());
            } catch (ParserException e) {
                throw new LineParserException(
                        "unexpected value", lnr.getLineNumber());
            }
        }
    }