我正在使用C,Flex和Bison構建外殼。目前,我已經能夠創建別名,將它們與它們各自的命令一起存儲在表中,並識別何時輸入了有效的別名。現在我試圖實現處理別名,以便在輸入有效別名時執行正確的命令。我的想法是,一旦找到一個有效的別名,我必須以某種方式通過flex/bison再次運行相應的命令,就好像它是一個完全獨立的獨立輸入使用Flex和Bison將別名功能添加到外殼
我是Flex和Bison的新手,所以我不確定如何去做這件事。總的來說,我希望「你應該檢查X函數」而不是堅實的實現,因爲我正在使用這個項目作爲學習體驗。這裏是我的flex和野牛檔案,以防萬一:http://pastebin.com/t9QhkVUe
編輯:如果需要,我也可以提供主要的Shell代碼。
謝謝你的迴應。我檢查了你提出的主題,但我仍然陷入困境,在輸入有效的別名命令後,我能夠成功地將yytext設置爲等於別名的命令。不過,我想我仍然無法理解如何去替換用戶輸入別名的名字,這個命令與Flex一起使用,可以讓Bison理解。我已經把我的更新的lex文件放在這裏,如果你可以這樣看待它:(http://pastebin.com/cLAXzy6p) –
@TheAlex:我不認爲我可以做一個代碼審查一個註釋,但是當推入緩衝區狀態時,你絕對不應該試圖打開文件(???)或設置yytext。 (或者調用BEGIN(INITIAL),因爲你不使用開始條件。)你需要做什麼來將字符串推送到緩衝區堆棧上是:'yypush_buffer_state(YY_CURRENT_BUFFER); yy_scan_string(alias_value);'。當你點擊'<>','yypop_buffer_state();'。第一個序列略微不明顯;它是必需的,因爲yy_scan_string調用'yy_switch_to_buffer'。 –
rici