开发交互式s​​hell

时间:2012-09-05 17:15:14

标签: c++ python interpreter interactive-shell

我有申请;与它进行交互我必须开发一个交互式shell。 shell将从用户获取输入并将其分派给服务器,服务器将处理并返回响应。

过去我做过这样的事情,但它们通常有以下格式:

Shell>> COMMAND arg1 arg2 arg3 ..

我的实施方式与以下类似:

/* Mock implementation */
while(true) {
   in = readline()
   tokens = in.split(' ') //split based on space
   switch(token[0])  {
      case "Command_a": processA(token[1], token[2])
      case "Command_b": processB(token[1], token[2], token[3])
   }
}

这次我必须使用更广泛的语法来进行用户输入。如果我使用当前的方法,那么使用大量if , if-elseif-else, if-else, switch语句来解析和生成响应会使事情变得非常困难。

如何以能够使解释器模块化和可维护的方式解决此问题?有哪些流行的CLI-Interface实现方式?我将非常感谢一些代码示例。

PS:语言选择限制C ++ / Python

4 个答案:

答案 0 :(得分:2)

您可以使用bison和flex开发自己的解析器和解释器,但可能更明智的是嵌入现有的解释器,如Python,Lua或Squirrel。

答案 1 :(得分:1)

看看boost::spirit,或者像其他人建议的那样嵌入Lua。

答案 2 :(得分:1)

Python中的cmd模块,可能添加了Pyparsing,可以完全满足您的需求。

答案 3 :(得分:0)

转到cmd模块:

Cmd类为编写面向行的命令解释器提供了一个简单的框架。这些通常对测试工具,管理工具和原型很有用,这些工​​具随后会被包含在更复杂的界面中。

相关问题