1

当您运行野牛时,它会在“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”文件时,我无论如何都找不到做这个练习。

4

1 回答 1

2

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

于 2013-02-16T00:44:42.637 回答