2013-02-15 81 views
1

当您运行bison时,它会在“stack.hh”中为您创建一个堆栈类。文件名是固定的,但内容包装在您选择的名称空间中。在野牛中使用C++ api的多个解析器,与stack.hh冲突

如果您使用bison生成2个独立的文法(即2 * .y文件)并且使用C++模式,那么“stack.hh”文件会发生冲突并被覆盖。

类似的事情发生了“location.hh”和“position.hh”被自动生成的类,但有一个工作野牛2.7

%define api.location.type "foo::location" 

,让你重用foo语法命名空间周围在您的bar语法名称空间中。

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

回答

2

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

+0

我也面临着OP的问题。实际的问题是关于包含多个解析器。他们都会生成一个parser.h,它依赖于location.h,stack.h和position.h直接包含在内。当你编译一个需要它们的项目时,你将面临在同一个包含空间中有多个“stack.h”(和其他)的问题。 – 2015-07-30 00:50:52