2009-09-17 91 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)来获得灵感。 (免责声明:我是该项目的开发者)。