C++ 使用C++;bison中的api,与stack.hh冲突

C++ 使用C++;bison中的api,与stack.hh冲突,c++,parsing,bison,C++,Parsing,Bison,当您运行bison时,它会在“stack.hh”中为您创建一个堆栈类。文件名是固定的,但内容包装在您选择的名称空间中 如果使用ByScript生成2个单独的语法(即2 *.Y文件),并且使用C++模式,则“Stas.Hh”文件冲突并被覆盖。 自动生成的“location.hh”和“position.hh”类也会发生类似的情况,但在bison 2.7中有一个解决方案 %define api.location.type "foo::location" 这使您可以在bar语法名称空间中重用foo语法

当您运行bison时,它会在“stack.hh”中为您创建一个堆栈类。文件名是固定的,但内容包装在您选择的名称空间中

如果使用ByScript生成2个单独的语法(即2 *.Y文件),并且使用C++模式,则“Stas.Hh”文件冲突并被覆盖。 自动生成的“location.hh”和“position.hh”类也会发生类似的情况,但在bison 2.7中有一个解决方案

%define api.location.type "foo::location"
这使您可以在
bar
语法名称空间中重用
foo
语法名称空间


但是在处理“stack.hh”文件时,我找不到做这个练习的方法。

处理这个问题最简单的方法就是将Bison文件放在两个单独的目录中。然后,当您生成代码时,这些文件将不会冲突,假设每一组文件都是在与相应Bison文件相同的位置生成的。

我也面临OP的问题。实际问题在于包含多个解析器。它们都将生成一个parser.h,它依赖于location.h、stack.h和position.h被直接包含。当您编译一个需要所有这些文件的项目时,您将面临在同一包含空间中有多个“stack.h”(和其他文件)的问题。