当你运行bison时,它会在“stack.hh”中为你创建一个堆栈类。文件名是固定的,但内容包装在您选择的命名空间中。
如果您使用bison生成2个单独的语法(即2 * .y文件)并使用C ++模式,则“stack.hh”文件会发生冲突并被覆盖。
类似的事情发生在自动生成的“location.hh”和“position.hh”类中,但是在bison 2.7中有一个解决方法
%define api.location.type "foo::location"
允许您在foo
语法命名空间中重用bar
语法命名空间。
但在处理“stack.hh”文件时,无论如何都找不到这个练习。
答案 0 :(得分:2)
解决这个问题最简单的方法就是将Bison文件放在两个单独的目录中。然后,当您生成代码时,文件不会发生冲突,假设每组文件都生成在与相应Bison文件相同的位置。