2015-09-23 40 views
2

我在寫一個解析器,我希望它儘可能便攜。GNU bison和yacc有什麼區別?

現在我使用GNU野牛產生我的解析器,但我不知道如果我的代碼是依靠YACC擴展,並非完全便攜。

所以我想知道的功能GNU bison已經有原始yacc缺失。

我擔心的原因是我注意到我的解析器無法在Windows上使用bison端口進行編譯。我會犧牲GNU野牛功能,並堅持原來的標準化yacc如果它會使我的解析器更容易在不同平臺之間移植。

那麼,什麼是GNU野牛和原來的標準YACC之間的區別是什麼?我應該避免使用GNU bison如果我希望我的程序儘可能便攜,應該具備哪些功能?

+0

最近你不是問這個問題嗎?並獲得一些意見? – EJP

+0

是的,但並不完全一樣。我決定刪除另一個問題,因爲這個問題非常混亂,我當時不太清楚我在說什麼。另一個問題是,當我真正想知道我能做些什麼使它儘可能便攜時,還要問爲什麼某個特定程序無法編譯。 – wefwefa3

回答

4

通常,您分發野牛生成的解析器的方式是分發生成的解析器。這意味着無論是野牛還是yacc都需要安裝在目標機器上,並允許您自由選擇您熟悉的野牛版本並使用它的功能。 (當然,野牛輸入文件也將在發行版中;包括野牛輸出文件僅僅意味着野牛不需要運行來編譯代碼)。

如果你想驗證你的解析器描述是與yacc兼容,您可以在生成解析器時嘗試使用--yacc標誌。這將使野牛試圖模仿yacc,儘管它並不妨礙你尋求明顯超出yacc範圍的特徵,如%glr-parser或Java/C++輸出。但坦率地說,我認爲用第一段所述的策略會比較好。

如果你想獲得不在yacc中的野牛特徵列表,你可以從搜索bison manual中的單詞yacc開始。或者你可以閱讀Posix yacc documentation