2012-01-09 34 views
3

我將在Qt中編寫一個文本編輯器,它可以爲編程語言(玩具語言,用於學習目的)提供突出顯示/代碼完成/語法分析。起初,我想寫手工C++,因爲我更熟悉,所以對我來說會更舒服。然而,在搜索時,我發現flex/bison可以簡化解析器的創建。在嘗試幾個簡單的例子之後,似乎工作示例接受來自終端中標準輸入的輸入。所以,我只想知道,flex/bison可以接受來自GUI框架中文本編輯器小部件的輸入(例如Qt,在我完成解析器引擎中的一些功能之後,我將同時學習這些),然後將結果輸出迴文本編輯器?彎曲和野牛接受來自其他來源的輸入嗎?

回答

5

flex從yyin讀取其輸入。如果您將它指向不是stdin ...例如,請參閱here

編輯:btw,yyinFILE *。你正在使用C++,這意味着你想要傳遞一個流。請閱讀flex的documentation on C++ interfacing

Edit2:對於輸出...你是一個編程規則的yacc/bison動作,也是錯誤處理程序。從這個意義上說,你在那裏做了很多自由。例如,您可以「發出」突出顯示的代碼,並在分析代碼時使用錯誤處理程序指出錯誤。完成會迫使你實現至少一部分語義(符號表等),但這是一個不同的故事...

+0

謝謝。我會研究這個。 – Amumu 2012-01-09 20:25:28

6

如果你不想使用文件*指針,你也可以從 - 通過創建FLEX輸入緩衝區來存儲緩衝區,例如字符數組和字符串終止的C類型字符串 - yy_scan_string()從空終止的字符串中創建緩衝區,yy_scan_bytes從固定長度的字符數組中創建緩衝區。有關更多信息,請參閱flex文檔中的Multiple Input Buffers

如果這不符合您的需求,您還可以重新定義YY_INPUT宏來完成控制 - 請參閱Generated Scanner