Вот ещё пример прорухи (выкинул лишнее): static unsigned int yy_find_shift_action(
yyParser *pParser, /* The parser */
YYCODETYPE iLookAhead /* The look-ahead token */
){
int i;
int stateno = pParser->yytos->stateno;
if( stateno>=YY_MIN_REDUCE ) return stateno;
assert( stateno <= YY_SHIFT_COUNT );
do{
i = yy_shift_ofst[stateno];
assert( iLookAhead!=YYNOCODE );
i += iLookAhead;
if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
return yy_default[stateno];
}else{
return yy_action[i];
}
}while(1);
}
YY_MIN_REDUCE равно 1000, YY_SHIFT_COUNT равно 455, массив yy_shift_ofst описан как:
static const short yy_shift_ofst[] = {456 циферок тут}
Вот вроде бы и тестом покрыто, но stateno может быть больше 455, например, 999. Ошибка.
Вопрос только что должно быть правильно.