question: private void dtdsub ( ) throws Exception { char ch ; for ( short st = 0 ; st >= 0 ; ) { ch = getch ( ) ; switch ( st ) { case 0 : switch ( chtyp ( ch ) ) { case '<' : ch = getch ( ) ; switch ( ch ) { case '?' : pi ( ) ; break ; case '!' : ch = getch ( ) ; bkch ( ) ; if ( ch == '-' ) { comm ( ) ; break ; } bntok ( ) ; switch ( bkeyword ( ) ) { case 'n' : dtdent ( ) ; break ; case 'a' : dtdattl ( ) ; break ; case 'e' : dtdelm ( ) ; break ; case 'o' : dtdnot ( ) ; break ; default : panic ( FAULT ) ; break ; } st = 1 ; break ; default : panic ( FAULT ) ; break ; } break ; case '%' : pent ( ' ' ) ; break ; case ']' : st = - 1 ; break ; case ' ' : break ; case 'Z' : if ( getch ( ) != ']' ) { panic ( FAULT ) ; } st = - 1 ; break ; default : panic ( FAULT ) ; } break ; case 1 : switch ( ch ) { case '>' : st = 0 ; break ; case ' ' : case '\n' : case '\r' : case '\t' : break ; default : panic ( FAULT ) ; break ; } break ; default : panic ( FAULT ) ; } } }
target:  Parses the document type declaration subset.