如何使用 Bison 和 CMake 生成 C++ 文件来生成树?

How do I generate C++ files with Bison and CMake to generate a tree?

我知道 Bison 在初学者水平上是如何工作的。 我的问题是如何强制 CMake 从给定的 Bison 输入文件生成 C++ 文件。
我有一个我必须使用的树的现有结构。
这是我目前用来学习 Bison 的构建脚本。

find_package(BISON)
find_package(FLEX)

BISON_TARGET(MyParser Parser.yxx ${CMAKE_CURRENT_BINARY_DIR}/Parser.c)
FLEX_TARGET(MyScanner Lexer.l  ${CMAKE_CURRENT_BINARY_DIR}/Lexer.c)
ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser)

add_executable(mathParser
    ${BISON_MyParser_OUTPUTS}
    ${FLEX_MyScanner_OUTPUTS}
)

如果我现在想生成 Cpp 代码,我将如何更改我的 Bison 文件?

你需要告诉 Bison 使用 C++ 框架

%skeleton "lalr1.cc"

Bison 也能识别语言声明

%language "c++"

不过我觉得没必要

如果您打算使用 C++ API,请务必仔细阅读 documentation


虽然我确信 C++ 接口有优势,但我几乎没有使用过它。由 C 框架生成的代码可以用 C++ 编译,但不能使用任何非平凡对象作为语义类型的一部分 YYSTYPE。 (您可以使用 指针 但不能使用对任意 C++ 类型的引用,但您不能使用智能指针。)

然而,在 bison 手册中有一个完整的示例(在之前粘贴的 link 处),值得研究它以获取使用提示。