2009-09-17 93 views
0

我如何才能將遠離(在C++)惱人的菜單,如:建設命令行應用程序

(一)做一些 (B)做點其他的 (c)採取的是第三件事 (X)退出

基本上我希望能夠運行該程序,然後執行諸如「calc 32/5」或「open data.csv」之類的操作,顯然,我會爲「calc」和「open」編寫代碼。只要向正確的方向推進就會很棒,我相信我能把它全部弄清楚,我只需要一些東西給google-fu。

+0

什麼操作系統? –

+1

你想寫一個解釋器?大量的資源在這裏:http://stackoverflow.com/questions/1669/learning-to-write-a-compiler和http://stackoverflow.com/questions/294852/references-needed-for-implementing-an-解釋器在-CC。如果這是你的問題,那麼第二個鏈接是重複的。 – dmckee

+0

也http://stackoverflow.com/questions/41785/learning-resources-on-parsers-interpreters-and-compilers – dmckee

回答

2

你應該拿起The C++ Programming Language,這是書上的C + +(還有其他人,但這是一個偉大的)。它有一個示例程序,分散在幾章中,關於標記,解析參數和製作計算器。

+0

我有這本書! (白色精裝版,帶有兩個絲帶書籤!)。在第一章中,它超越了我,並且無法進入它,但它可能是時候讓它再去一次。 – Silvanus

2

你想要的是一個命令行解析器。我不記得名字,但實際上有一個設計模式。但是,this site爲您提供了一些可用於編寫代碼的示例代碼。希望這不會給你太多的答案:)

+0

我不知道他確實需要一個命令行解析器;他想在程序運行後輸入命令。 –

+0

啊,你說得對,我誤解了。我知道這是一個設計模式,雖然... –

3

我想你想要做的是這樣的:

string cmd; 
cout << "Enter your command:" << endl; 
cin >> cmd; 
if(cmd == "open") { 
    // read file name and open file 
} else if (cmd == "calc") { 
    // read and evaluate expression 
} ... 

雖然這取決於你想多麼複雜的命令語言是一個更復雜的設計(甚至可能使用解析器生成器)可能是合適的。

0

而不是像a,b等尋找輸入,只是要求通用輸入。在空格處分割輸入,在第一個上執行「開關」以將其與您的函數調用進行匹配,然後將其餘部分視爲參數。

0

您的菜單基於對getchar()的調用嗎?如果你想允許在處理之前輸入整行,你可以使用fgets()或者在C++ land中使用std::getline

0

有些人會將它們的C++類定義封裝爲Python類,方法是在C++中添加一個Python接口。

然後他們使用內置的cmd庫在Python中編寫頂級解釋器。

0

看看到:

  • ANTLR這是一個很好的和易於解析器也C++生成代碼。
  • 你可以看看Natural CLI(java)來獲得靈感。 (免責聲明:我是該項目的開發者)。