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

multiple parsers using C++ api in bison, conflicts with stack.hh

本文关键字:stack 冲突 hh bison C++api      更新时间:2023-10-16

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

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

自动生成的"location.hh"answers"position.hh"类也会发生类似的情况,但在bison 2.7 中也有一个变通方法

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

它允许您在bar语法名称空间中重用foo语法名称空间。

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

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