是否可以在flex中解析压缩文件?
yyin
是FILE*
类型的指针。所以我想做这样的事情:创建一个压缩文件管道并设置yyin吗?
答案 0 :(得分:2)
使用flex
,您可以定义宏YY_INPUT(buf,result,maxlen)
以更改flex
获取输入的方式。宏必须将最多 maxlen
个字节读入buf
,并返回result
中存储的实际字节数,或将result
设置为{ {1}}表示EOF。
例如,使用YY_NULL
的便捷界面,您可以在flex文件中插入如下内容:
zlib
(您可以使用 %{
#include <zlib.h>
gzFile gz_yyin;
#define YY_INPUT(buf,result,maxlen) do { \
int n = gzread(gz_yyin, buf, maxlen); \
if (n < 0) { /* handle the error */ } \
result = n > 0 ? n : YY_NULL; \
} while (0)
%}
// lots of stuff skipped
int main(int argc, char** argv) {
gz_yyin = gzopen(argv[1], "rb");
if (gz_yyin == NULL) { /* handle the error */ }
/* Start parsing */
// ...
使用打开的文件描述符(例如管道)创建gzdopen
。)