Pull to refresh

Comments 2

Предупреждение в yy_find_shift_action очень похоже на ложное срабатывание. Если бы они хотели проверить тем условием границы индеса, то не было бы assert далее, разве нет?

Очень похоже на ложное: поле stateno из автосгенерированного LALR-парсера явно может хранить значение, представляющее индексы в разных массивах. В зависимости от значения, может быть индексом состояния сдвига или смещённым на YY_MIN_REDUCE индексом состояния свёртки, так что проверка вполне корректна. Здесь нет дополнительной проверки на попадание состояния в диапазон [YY_SHIFT_COUNT; YY_MIN_REDUCE), но она и не нужна: переменная stateno не может быть напрямую изменена пользовательскими данными и устанавливается только в процессе перехода автомата между состояниями. Код, конечно, всё равно запутанный — но автосгенерированному коду парсера такое простительно.

Sign up to leave a comment.