使用Flex和Bison一起我開發一個項目,我要開發一個編譯器(實際上是一個解析器)除了主要的項目。我正在使用Qt 5.3和Windows(但在Ubuntu 14.04上的結果幾乎相同)。
我在使用flex和野牛方面很有經驗,但是這一次,我開發了掃描儀,然後是Parser。我仔細測試掃描儀並確保它的錯誤較少。但正如我解析器添加到項目中發生了許多錯誤。(例如未定義參考yylex()
,但是我宣佈extern int yylex()
,我不能利用圖書館,我會提到),之後當我消除解析器,其工作過的一些功能現在不工作!例如,現在我不能使用#include <QDebug>
!
當我使用這個頭文件時,Compiler說這個庫有很多錯誤(77錯誤)!我感到困惑,這是我在這方面工作的兩天,沒有任何進展。
我使用了「自定義構建步驟」,並將路徑設置爲${sourceDir}
。此外,我在SOURCES
和y.tab.h
在HEADERS
在.pro
文件添加lex.yy.c
,y.tab.c
。
我通過here第一次學會了如何使用flex和bison。而對於那些錯誤,我看了如下:
Undefined Reference to yylex()
How to Integrate Flex and Bison
和其他一些鏈接...不能Qt的
Q
不能Qt的
0
A
回答
1
Qt的程序是在C++中,沒有C.
如果您還沒有太古老的版本的flex和bison,使用C++編譯它們生成的代碼時不會有任何問題,但是您需要告訴編譯器它們將用C++編譯。 (用C的組合和C++當然是可能的,但它需要一定的照顧。)
使用GCC,它應該足以確保野牛生成的文件和Flex的名稱具有.cc
延伸,而不是.c
,您可以使用-o
命令行選項執行此操作。 (強烈建議在任何情況下,因爲它允許您選擇更有意義的文件名,然後y.tab.c
和lex.yy.c
。)這需要對您的Makefile進行一些調整。 (您也可以使用%output "filename"
指令在flex
bison
和%option outfile="filename"
,但你仍然需要在你的Makefile調整依存關係。)
另一個不那麼建議選擇是使用-x c++
命令行選項GCC。
沒有你正在使用Windows工具集的詳細信息,這是不容易給予更多的建議,尤其是對我來說(因爲我已經在Windows工具集0經驗)。但關鍵是要確保這兩個文件都編譯爲C++。
的事實,你想#include
Qt的頭,好像編譯掃描器和分析器作爲C程序是不實際的。但是,如果我誤解了你的項目,並且掃描器和解析器都不需要C++,那麼你可以這樣做;您需要在稱爲yylex
的C++翻譯單元中聲明extern "C" int yylex();
。 (不要把這個聲明在scanner.l文件,它不會工作,如果你與C編譯)柔性/野牛的
0
C++設置是棘手的。看看這個例子項目:
https://github.com/ezaquarii/bison-flex-cpp-example
它是一個完整的,工作的C++ Flex和野牛「解釋」,封裝在一個類中。事實上,我在Qt 4.8中使用了它幾次。
相關問題
- 1. 不能在Qt的
- 2. 不能被Qt
- 3. 不能編譯Qt Creator的
- 4. 不能編譯C++與QT
- 5. 不能說出在QT
- 6. strcmp不能使用Qt
- 7. 我不能在Qt類以外的Qt 5.5中使用tr()
- 8. 不能得到的makefile與Qt庫
- 9. 不能覆蓋QT中的VideoWidget paintEvent()C++
- 10. 更新的Qt庫;不能再建立
- 11. 不能編譯/使用Qt 5.2的ArchLinux
- 12. 不能在Windows的Qt 5.7(C++)
- 13. Qt for Symbian S60 - 「不支持的功能」
- 14. 功能NOW()Qt的
- 15. QT。 QLabel性能
- 16. qt - qml性能
- 17. pcap_lookupdev功能QT
- 18. setWindowFlag(Qt :: Dialog | Qt :: WindowStaysOnTopHint)不能在Centos上工作
- 19. qtHaveModule(ftp)不能在Qt 5中工作
- 20. SetStyleSheet不能在qt中工作
- 21. 靜態qt對話窗口不可能?
- 22. C + + Qt 4 Sqlite:不能創建表
- 23. Qt Creator中不能建立任何
- 24. OpenGL程序不能用QT 5.0編譯
- 25. Qt - MDI兒童不能正常關閉
- 26. QBS:模塊QT /芯不能被加載
- 27. Qt QPrinter setPaperSize不能正常工作
- 28. Qt Creator不能使用const char *
- 29. Qt同步在這裏不可能嗎?
- 30. QT定時器不能調用函數
可能是'extern「C」int yylex();'會有幫助嗎? – Matt 2015-02-24 13:58:41
@ user4419802:沒有工作! – bahrami307 2015-02-24 14:45:05
什麼是_第一個錯誤? – Matt 2015-02-24 14:56:12