在bison中使用C ++ api的多个解析器与stack.hh冲突

时间:2013-02-15 23:07:47

标签: c++ parsing bison

当你运行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”文件时,无论如何都找不到这个练习。

1 个答案:

答案 0 :(得分:2)

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