0

我有一个申请;为了与之交互,我必须开发一个交互式外壳。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 接口有哪些实现方式?我将非常感谢一些代码示例。

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

4

4 回答 4

2

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

于 2012-09-05T17:20:31.427 回答
1

Python 中的cmd模块,也许加上Pyparsing应该完美地满足您的需求。

于 2012-09-05T18:04:30.200 回答
1

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

于 2012-09-05T17:53:40.497 回答
0

去 cmd 模块:

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

于 2012-09-05T21:46:31.357 回答