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

Could lex/flex be used to parse binary format source files?

当我学习 lex 工具时,我发现它有助于解析文本格式的源文件,比如构建一种新的编程语言等。我也用它来构建一个工具来分析一些二进制输入流,比如codec/decoders。

lex/flex/yacc/bison是否支持此类要求,他们是否有特殊的命令行选项和语法来启用此功能?

谢谢!

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

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