Ragel альтернатива Fbreak; но без перехода к следующему символу?

Я пишу программу, которая анализирует HTML для извлечения URL-адресов с помощью Ragel.
После нахождения URL мне нужно выполнить некоторые действия с ним, а затем готов обработать следующий URL.
Поэтому мне нужно прекратить выполнение основного цикла в конце URL, выполнить некоторые действия вне синтаксического анализатора, а затем начать с того места, где я сломался.

fbreak кажется хорошим вариантом, но, к сожалению, он съел следующий символ в буфере. Проблема здесь, кроме того, что может быть уже конец буфера, состоит в том, что мы эффективно пропускаем один символ во входном потоке.

Есть ли способ прервать выполнение без перехода к следующему символу во входном потоке, так как fbreak делает?
Пока я разбираюсь только в грязном хакере, чтобы написать goto _out; вместо фрик.

1 ответ

Решение

Я считаю, что вам нужно сделать fhold вызов, предшествующий вашему fbreak,

Цитирую руководство пользователя Ragel:

fhold; - Не продвигаться над текущим персонажем. При обработке данных в нескольких буферных блоках fhold оператор должен использоваться только один раз в наборе действий, выполняемых над персонажем. Многократные вызовы могут привести к резервному копированию в начале блока буфера. fhold Заявление не подразумевает какую-либо передачу контроля. Это эквивалентно p--; заявление.

Другие вопросы по тегам