protected int parseCharacter( int c ) throws IOException {
        // A single character in a char-literal can be:
        // [U+0020 - U+0026] | [U+0028 - U+005B] | [U+005D - U+007E] | escape-char
        // 
        // The first character is passed to us because we already
        // read it. 
        if( c == '\\' ) {
            c = parseEscapeSequence(false);
        }
        if( c < 0 ) {
            error("Expected character, found end of file");
        }
            
        // Check range
        if( !(c >= 0x20 && c <= 0x26) 
            && !(c >= 0x28 && c <= 0x58) 
            && !(c >= 0x5d && c <= 0x7e) ) {
            error("Character digit not in allowed range", position(-1));          
        }

        return c;                    
    }