使用这样的机器:
main:=(any +);
当我向它提供一个超过1个字节的数据块时,它似乎在出现(正常)%% write exec块之前只消耗1个字节。我希望它贪婪并消耗所有提供的输入。
我总能检查p< pe和goto在%%写exec之前,但它似乎是hackish。
如何让它“贪婪”?
答案 0 :(得分:2)
也许您的问题缺少一些关键数据,但默认行为是尽可能消耗pe
以内的所有内容。显然,使用你的机器,Ragel 6.9和这个简单的程序是可能的:
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
%%{
machine main;
alphtype char;
main := (any+);
}%%
int main()
{
static char data[] = "Some string!";
int cs;
char *p, *pe, *eof;
%% write data;
%% write init;
p = data;
pe = data + sizeof(data);
eof = pe;
printf("p: 0x%"PRIxPTR", pe: 0x%"PRIxPTR", eof: 0x%"PRIxPTR"\n",
(uintptr_t) p, (uintptr_t) pe, (uintptr_t) eof);
%% write exec;
printf("p: 0x%"PRIxPTR", pe: 0x%"PRIxPTR", eof: 0x%"PRIxPTR"\n",
(uintptr_t) p, (uintptr_t) pe, (uintptr_t) eof);
return 0;
}
你应该在输出中得到这样的东西:
p: 0x601038, pe: 0x601045, eof: 0x601045
p: 0x601045, pe: 0x601045, eof: 0x601045