protected StringValue string() throws ParserException {
        Character openQuote = current;
        int initialPosition = pos;
        boolean escape = false;
        next();
        StringBuilder value = new StringBuilder(); 
        StringBuilder string = new StringBuilder();
        while (!end()) {
            if (escape) {
                //TODO implement UNICODE
                if (current == openQuote || current == '\\') {
                    value.append(current);
                    string.append(current);
                    escape = false;
                } else {
                    throw new ParserException("Invalid escape character at position " + pos);
                }
            } else {
            	if (current == openQuote) break;
                string.append(current);
                if (current == '\\') {
                    escape = true;
                } else {
                    value.append(current);
                }
            }
            next();
        }
        
        if (current != openQuote) {
            throw new ParserException("String not closed!");
        }
        next();
        return new StringValue(new Context(content, string.toString(), initialPosition, pos), value.toString());
        
    }