我正在编写一个程序解析HTML以使用Ragel从那里提取URL 找到URL后,我需要对其执行一些操作,然后准备处理下一个URL 所以我需要在URL端停止执行主循环,在解析器之外执行一些操作,然后从我破坏的地方开始。
fbreak
似乎是一个很好的varinat,但不幸的是它在缓冲区吃了下一个符号。除了可能已经缓冲结束之外,这里的问题是我们有效地跳过输入流中的一个符号。
有没有办法在没有前进到输入流中的下一个符号的情况下中断执行,如fbreak
那样?
到目前为止,我只想弄脏{ha}来编写goto _out;
而不是fbreak。
答案 0 :(得分:3)
我认为您需要在fhold
之前拨打fbreak
。
引用Ragel用户指南:
fhold;
- 不要超越当前角色。如果处理多个缓冲区块中的数据,fhold
语句只应在对字符执行的一组操作中使用一次。多次调用可能会导致在缓冲区块的开头进行备份。fhold
声明并不意味着任何控制权转移。它等同于p--;
语句。