使用 Flex & Bison 解析压缩文件?
parsing compressed files with flex & bison?
是否可以在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
。
相关文章:
- 浏览压缩文件与游览解压缩它们
- 如何在视觉工作室中使用C++解压缩压缩文件 (.zip)
- 霍夫曼解码压缩文件
- 如何以非阻塞方式压缩文件
- 从本地代码访问apk中的压缩文件(从zip中读取zip)
- 如何将多个协议缓冲区的消息写入可附加的压缩文件中?
- 使用结构 c++ 读取压缩文件 Gzread
- 使用Qt qUnCompress功能解压缩文件
- 如何将二进制数据写入压缩文件
- 使用boost iostreams将数组读写到压缩文件中
- 压缩和解压缩文件 C++
- 在C++中,如何在使用gzstream编写压缩文件时检查错误
- 对解压缩文件(popen)的权限被拒绝
- 无法打开压缩文件
- Qt-包括DLL和压缩文件
- 如何检查 zip 文件或压缩文件是否存在
- 如何压缩文件夹使用 lzma sdk
- 在霍夫曼压缩后将代码表存储在压缩文件中,并从此表构建用于解压缩的树
- c++中的压缩文件IO
- 通过套接字发送和接收压缩文件