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

时间:2016-06-29 21:49:41

标签: c parsing ragel

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

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

有没有办法在没有前进到输入流中的下一个符号的情况下中断执行,如fbreak那样? 到目前为止,我只想弄脏{ha}来编写goto _out;而不是fbreak。

1 个答案:

答案 0 :(得分:3)

我认为您需要在fhold之前拨打fbreak

引用Ragel用户指南:

  

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