如何使用 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 处),值得研究它以获取使用提示。
我知道 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 处),值得研究它以获取使用提示。