Когда вы запускаете 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».
Самый простой способ справиться с этим — просто поместить файлы Bison в две отдельные директории. Затем, когда вы генерируете код, файлы не будут конфликтовать, предполагая, что каждый набор файлов генерируется в том же месте, что и соответствующий файл Bison.
Других решений пока нет …