このようなマシンでは:
メイン := (任意の +);
1 バイトを超えるデータのチャンクをフィードすると、%%write exec ブロックから (通常は) 出る前に 1 バイトしか消費しないようです。貪欲で、提供されたすべての入力を消費することを期待しています。
私はいつでも p < pe をチェックして %%write exec の前に移動できますが、それはハックのようです。
どうすればそれを「貪欲」にできますか?
このようなマシンでは:
メイン := (任意の +);
1 バイトを超えるデータのチャンクをフィードすると、%%write exec ブロックから (通常は) 出る前に 1 バイトしか消費しないようです。貪欲で、提供されたすべての入力を消費することを期待しています。
私はいつでも p < pe をチェックして %%write exec の前に移動できますが、それはハックのようです。
どうすればそれを「貪欲」にできますか?
あなたの質問にはいくつかの重要なデータが欠けているかもしれませんが、デフォルトの動作は可能な限りすべてを消費する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