Ragel 替代 fbreak;但没有前进到下一个符号?

Ragel alternative to fbreak; but without advance to next symbol?

我正在编写一个程序来解析 HTML 以使用 Ragel 从那里提取 URLs。
找到URL后需要对其进行一些操作,然后准备处理下一个URL.
所以我需要在 URL 结束时停止执行主循环,在解析器之外执行一些操作,然后从我中断的地方开始。

fbreak 似乎是一个很好的变量,但不幸的是它吃掉了缓冲区中的下一个符号。这里的问题,除了可能已经存在缓冲区结束之外,是我们有效地跳过了输入流中的一个符号。

有没有像fbreak那样在不进入输入流中的下一个符号的情况下中断执行的方法?
到目前为止,我只知道写 goto _out; 而不是 fbreak.

的脏 hack

我认为您需要在 fbreak 之前打一个 fhold 电话。

引用 Ragel 用户指南:

fhold; -- Do not advance over the current character. If processing data in multiple buffer blocks, the fhold statement should only be used once in the set of actions executed on a character. Multiple calls may result in backing up over the beginning of the buffer block. The fhold statement does not imply any transfer of control. It is equivalent to the p--; statement.