使用 Flex & Bison 解析压缩文件?

parsing compressed files with flex & bison?

本文关键字:压缩 文件 Flex Bison 使用      更新时间:2023-10-16

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

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

使用 flex ,您可以定义宏YY_INPUT(buf,result,maxlen)来更改flex获取输入的方式。宏必须最多读取maxlen字节到buf,并返回存储在result中的实际字节数,或将result设置为YY_NULL以指示EOF。

例如,使用 zlib 的便利界面,您可以在 flex 文件中插入类似以下内容的内容:

 %{
 #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使用打开的文件描述符(如管道(创建gzfile