2012-12-08 28 views
1

我已經寫了一個C語言的簡單CLI,瞭解四個基本指令:添加,扣除和乘以兩個數字並退出。如何讓用戶在我的CLI中定義一個變量?

我可以在提示符後鍵入類似add(4,5)的東西,它完美的工作。但我希望用戶能夠定義變量並在之後使用它們。我的意思是,用戶輸入myvar = myobj(param_1,param_2),然後mymethod(myvar),一切正常。

我怎樣才能得到這個?

編輯:

最後我用特洛伊漢森用C語言編寫的uthash庫,你可以在http://uthash.sourceforge.net/

感謝所有的答案找到。

+5

你想要一個地圖,字典或名稱散列值。 – Linuxios

+2

這真的取決於你的命令行的「解析器」是什麼。在某些情況下,使用一些正則表達式來識別「符號」就足夠了,但在其他情況下(如果您打算對輸入表達式進行迷你AST),則需要更復雜的處理。 –

+0

Map解決方案非常好,你可以使用一組來存儲所有的參數,而不用每個句子重複,就像一個shell一樣。然後用集合逐個刪除,用地圖進行處理,進行交互。編寫代碼很簡單,易於維護。 – jonaprieto

回答

0

第一部分是解析(「你將如何識別輸入中的名字?」),第二部分:「如何存儲和管理變量?」。

解析。如果您的解析器非常簡單,只需在應該識別整數的地方放置一些額外的檢查,如果不是,請在變量存儲中按名稱查找值(請參閱下面的更多內容)。建議使用一些正則表達式將輸入拆分爲有意義的部分(編譯器/解釋器說法中的「詞位」)。

存儲。您需要一個能夠通過名稱輕鬆快速訪問項目的結構,並且支持添加和刪除條目。這可以通過映射或散列表很好地處理(C標準庫中沒有標準映射實現,但C++中的<map>/<unordered_map>就足夠了)。對於少量的變量,可以使用一個數組或struct variable { const char *name; vardata_t var; }的列表(儘管查找速度可能會越來越慢,您可以考慮使用二進制搜索來增強此功能)。

+0

謝謝。事實上,我不使用REGEX來解析命令,而是使用'strtok()'來分割它們,因爲它需要更少的代碼。我認爲我可以稍後改變它以保證命令的語法。我將閱讀有關哈希表以便使用這個想法。 –

相關問題