0

アプリケーションがあります。それと相互作用するには、インタラクティブシェルを開発する必要があります。シェルはユーザーからの入力を受け取り、それをサーバーにディスパッチします。サーバーは応答を処理して返します。

過去に私はそのようなことをしましたが、それらは通常次の形式でした:

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

4 に答える 4

2

bisonとflexを使用して独自のパーサーとインタープリターを開発できますが、Python、Lua、Squirrelなどの既存のインタープリターを組み込むのがおそらく賢明です。

于 2012-09-05T17:20:31.427 に答える
1

boost :: spiritを見てみるか、他の人が提案したようにLuaを埋め込んでください。

于 2012-09-05T17:53:40.497 に答える
1

Pythonのcmdモジュールは、おそらくPyparsingが追加されており、ニーズに完全に適合するはずです。

于 2012-09-05T18:04:30.200 に答える
0

cmdモジュールに移動します:

Cmdクラスは、行指向のコマンドインタープリターを作成するための単純なフレームワークを提供します。これらは、テストハーネス、管理ツール、および後でより洗練されたインターフェイスにラップされるプロトタイプに役立つことがよくあります。

于 2012-09-05T21:46:31.357 に答える