2

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

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

有没有一种方法可以中断执行而不提前到输入流中的下一个符号,就像fbreak那样?
到目前为止,我发现只有脏 hack 可以写goto _out;而不是 fbreak。

4

1 回答 1

3

我相信你需要在fhold你的fbreak.

引用 Ragel 用户指南:

fhold;-- 不要越过当前字符。如果在多个缓冲区块中处理数据,则该fhold语句应仅在对字符执行的一组操作中使用一次。多次调用可能会导致在缓冲区块的开头进行备份。该fhold声明并不暗示任何控制权的转移。它相当于p--;声明。

于 2016-08-18T14:52:09.553 回答