Joh*_*ugo 2 c++ yacc lex bison flex++
我在 Debian Squeeze 上运行,并使用 apt-get install flex 安装了 flex/flex++。
不过我注意到 flex++ 只是一个指向 flex 的符号链接。那么,真的存在一个生成 C++ 扫描仪的“程序”flex++,还是只是一个我应该切换的 Flex 标志?
另外,常见的问题是:互联网上的许多示例无法在flex或flex++下“编译”。Flex 出现以下错误:
test.lex:1: invalid character: %
...
Run Code Online (Sandbox Code Playgroud)
当仅使用以下命令处理输入时:
%name Test
Run Code Online (Sandbox Code Playgroud)
这里出了什么问题?
Flex/Flex++ 版本为 2.5.35
实际上有一个 Flex++ 项目,但它与原始 Flex 是分开的:
Flex 确实支持生成与 C++ 一起使用的扫描器代码,但它被归类为实验性的(尽管它已经存在相当长一段时间了):
符号链接的解释是,某些程序会根据调用方式修改其行为。出于兼容性原因,他们检查argv[0]并查看可执行文件名称。例如,当运行为 时flex++,它可以启用-+C++ 支持标志。
(BusyBox 使用这一技术让一个二进制文件表现得像许多单独的程序一样,从而节省了空间。)