我堅持使用lex而不是flex。在lex和yacc中切換輸入流
正在開發中的法像一個現有的柔性UTIL(yy_switch_buffer,yy_create_buffer ...)提供給多個緩衝區之間切換的可能性的API。
這是我的主要困難到現在爲止:
- 例如,當我遇到一個
#include
令牌我應該緩衝切換到包含的文件。所以首先我應該打斷當前的解析操作(我試過fclose(yyin)
失敗)解析器完成整個當前yyin。不好,因爲我應該解析包含的文件以存儲主文件中使用的結構(例如)。
的問題是:我怎麼能立即中斷解析器?使用yyin = fopen(somefile, "r");
定義一個新的緩衝區就足夠了嗎?
之間切換的一部分,爲什麼你需要經歷的痛苦重新實現其他地方已經實施的內容? – 2012-01-30 15:33:58
@JonathanLeffler我沒有選擇,正在爲多平臺(solaris,aix,win)開發我的解決方案,對於其中的一些平臺我們無法安裝flex,因爲本地lex現有解決方案可能會遇到問題。 – Aymanadou 2012-01-30 15:38:24
這沒有什麼意義。本地'lex'可能有問題,所以你必須使用它?您可以在一臺機器上使用'flex'進行編譯,並簡單地在本地機器上編譯Flex庫('-lfl'),以及從Flex生成的傳輸C源代碼。但'flex'可以輕鬆地運輸到這些機器上。 Windows上沒有「本地Lex」。你可以在Flex中使用MKS Lex&Yacc或Cygwin(如果你還需要語法,也可以使用Bison)。 – 2012-01-30 15:42:16