2013-02-15 21 views
1

當您運行bison時,它會在「stack.hh」中爲您創建一個堆棧類。文件名是固定的,但內容包裝在您選擇的名稱空間中。在野牛中使用C++ api的多個解析器,與stack.hh衝突

如果您使用bison生成2個獨立的文法(即2 * .y文件)並且使用C++模式,那麼「stack.hh」文件會發生衝突並被覆蓋。

類似的事情發生了「location.hh」和「position.hh」被自動生成的類,但有一個工作野牛2.7

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

,讓你重用foo語法命名空間周圍在您的bar語法名稱空間中。

但是我在處理「stack.hh」文件時找不到這個練習。

回答

2

解決這個問題的最簡單方法就是將Bison文件放在兩個單獨的目錄中。然後,當您生成代碼時,文件不會發生衝突,假設每個文件集都在與相應的Bison文件相同的位置生成。

+0

我也面臨着OP的問題。實際的問題是關於包含多個解析器。他們都會生成一個parser.h,它依賴於location.h,stack.h和position.h直接包含在內。當你編譯一個需要它們的項目時,你將面臨在同一個包含空間中有多個「stack.h」(和其他)的問題。 – 2015-07-30 00:50:52