可以使用lex/flex来解析二进制格式的源文件吗?

问题描述:

当我学习lex工具时,我发现它有助于以文本格式解析源文件,比如构建新的编程语言等。我还用它来构建工具来分析一些二进制输入流,如编解码器/解码器。可以使用lex/flex来解析二进制格式的源文件吗?

是否lex/flex/yacc/bison支持这样的需求,他们是否有特殊的命令行选项和语法来启用它?

谢谢!

Flex(和我熟悉的其他lex实现)对非ascii字符(包括NUL字符)没有问题。您可能必须使用8bit选项,尽管它是默认选项,除非您请求快速状态表。

但是,大多数二进制格式使用长度前缀可变长度字段,它不能用正则表达式表示。而且,固定长度字段与上下文相关是相当普遍的;您可以使用启动条件在flex中构建一个状态机,但这样做很多工作,并且可能会浪费您的时间和flex的功能。

+1

对于带有“长度前缀可变长度”字段而不是lex的二进制文件,您会推荐哪种工具? – Janthelme