ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 июля
1221237 Топик полностью
symbions (06.07.2022 13:48, просмотров: 159) ответил symbions на Да, это впечатлило. Но и на старуху бывает проруха. В данном случае нашлось странное - но может так и надо, а я просто не допёр ещё.
Вот ещё пример прорухи (выкинул лишнее): 
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. Ошибка.

Вопрос только что должно быть правильно.