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.
我正在编写一个程序来解析 HTML 以使用 Ragel 从那里提取 URLs。
找到URL后需要对其进行一些操作,然后准备处理下一个URL.
所以我需要在 URL 结束时停止执行主循环,在解析器之外执行一些操作,然后从我中断的地方开始。
fbreak
似乎是一个很好的变量,但不幸的是它吃掉了缓冲区中的下一个符号。这里的问题,除了可能已经存在缓冲区结束之外,是我们有效地跳过了输入流中的一个符号。
有没有像fbreak
那样在不进入输入流中的下一个符号的情况下中断执行的方法?
到目前为止,我只知道写 goto _out;
而不是 fbreak.
我认为您需要在 fbreak
之前打一个 fhold
电话。
引用 Ragel 用户指南:
fhold;
-- Do not advance over the current character. If processing data in multiple buffer blocks, thefhold
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. Thefhold
statement does not imply any transfer of control. It is equivalent to thep--;
statement.