通常,当我们编译 .l 和 .y 文件时,我们会得到 .tab.h、.tab.c 和 .yy.c 文件。但是,我需要在 C++ 环境中使用这些仅在 C++ 中可用的类型。你如何修改你的代码来做到这一点?

最佳答案

您可以使用值得信赖的 C++ 编译器编译生成的文件,因此您不必重写整个过程。

如果您想使用“完整的 C++”,请继续阅读。

对于 Flex ,您需要在文件中指定 %option c++
您还可以使用 --yyclass=NAME 命令行参数更改生成的 C++ 词法分析器名称。

对于 Bison ,只需按照这些说明操作(摘自 Bison 手册)

if you need to put  C++  code  in  the
input  file, you can end his name by a C++-like extension (.ypp or .y++), then bison will follow your exten-
sion to name the output file (.cpp or .c++).  For instance, a grammar description file named parse.yxx would
produce the generated parser in a file named parse.tab.cxx, instead of yacc y.tab.c or old Bison version's
parse.tab.c.

P.S:请注意, c++ 可重入 选项在 Flex 中是互斥的。

关于c++ - 将 flex 和 bison 编译成 cpp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26619079/

10-11 19:35