使用flex& amp解析压缩文件野牛?

时间:2014-04-23 13:36:17

标签: c++ bison lex

是否可以在flex中解析压缩文件?

yyinFILE*类型的指针。所以我想做这样的事情:创建一个压缩文件管道并设置yyin吗?

1 个答案:

答案 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。)