我將在Qt中編寫一個文本編輯器,它可以爲編程語言(玩具語言,用於學習目的)提供突出顯示/代碼完成/語法分析。起初,我想寫手工C++,因爲我更熟悉,所以對我來說會更舒服。然而,在搜索時,我發現flex/bison可以簡化解析器的創建。在嘗試幾個簡單的例子之後,似乎工作示例接受來自終端中標準輸入的輸入。所以,我只想知道,flex/bison可以接受來自GUI框架中文本編輯器小部件的輸入(例如Qt,在我完成解析器引擎中的一些功能之後,我將同時學習這些),然後將結果輸出迴文本編輯器?彎曲和野牛接受來自其他來源的輸入嗎?
3
A
回答
5
flex從yyin
讀取其輸入。如果您將它指向不是stdin
...例如,請參閱here。
編輯:btw,yyin
是FILE *
。你正在使用C++,這意味着你想要傳遞一個流。請閱讀flex的documentation on C++ interfacing
Edit2:對於輸出...你是一個編程規則的yacc/bison動作,也是錯誤處理程序。從這個意義上說,你在那裏做了很多自由。例如,您可以「發出」突出顯示的代碼,並在分析代碼時使用錯誤處理程序指出錯誤。完成會迫使你實現至少一部分語義(符號表等),但這是一個不同的故事...
6
如果你不想使用文件*指針,你也可以從 - 通過創建FLEX輸入緩衝區來存儲緩衝區,例如字符數組和字符串終止的C類型字符串 - yy_scan_string()從空終止的字符串中創建緩衝區,yy_scan_bytes從固定長度的字符數組中創建緩衝區。有關更多信息,請參閱flex文檔中的Multiple Input Buffers。
如果這不符合您的需求,您還可以重新定義YY_INPUT宏來完成控制 - 請參閱Generated Scanner。
相關問題
- 1. 野牛&彎曲錯誤
- 2. 如何做彎曲/野牛
- 3. 問題的typedef與野牛和彎曲
- 4. 「初始」處理在彎曲和野牛
- 5. 來自其他輸入
- 6. 嵌入其他語言的Flex /野牛
- 7. 來自野牛的ANTLR語法
- 8. 來自其他來源的扭曲延期變量
- 9. Jekyll可以包含來自其他來源的源代碼嗎?
- 10. 彎曲/野牛修復內存泄漏與意外的令牌
- 11. 接受來自Activity的用戶輸入
- 12. 接受來自Tkinter的輸入
- 13. 來自其他項目的來源文件,其中來源
- 14. stunnel不接受來自其他機器的傳入請求
- 15. 使用來自其他類的輸入
- 16. 登錄與捲曲其他來源(eg.naukri.com)
- 17. 如何接受來自JButtons輸入的鍵盤輸入?
- 18. 野牛晃來晃去別的
- 19. 在來自其他主機的輸入中輸入數據
- 20. GtkEntryCompletion其他來源
- 21. Flex和野牛
- 22. 引用來自c#中其他資源的嵌入式資源
- 23. 新函數不接受來自其他函數的返回值
- 24. asp.net接受來自其他域的帖子
- 25. 用於彎曲和野牛的Emacs模式,或者刪除這些模式的自動縮進?
- 26. 自動設置其他輸入的輸入和值嗎?
- 27. flex和野牛:錯誤的輸出
- 28. 來自野牛語法文件的條帶動作代碼
- 29. Nasm方法來接受輸入
- 30. 彎曲度輸出
謝謝。我會研究這個。 – Amumu 2012-01-09 20:25:28