3

これには C (または C++ ではない理由) が当然の選択であることはわかっていますが、個人的な理由から Java で試してみたいと思っています。

実装したいもの:

  • |
  • >
  • >>
  • echoとのようないくつかの組み込みif

ProcessBuilder、PipedInputStream、PipedOutputStream などを使用して目標を達成することを考えていました。

JNIに頼らなくてもこれは可能だと思いますか?

antlr のようなツールを使用して文法を理解する必要がありますか?それとも、私が必要としているものに対してやり過ぎだと思いますか?

他の提案、資料はありますか?

4

5 に答える 5

1

これは複製の練習になりますが、それを行うためだけにやりたい場合は、コンソールを複製する場合は、コンソール処理部分のjlineから開始する必要があります。jlineはすべてのネイティブ機能を処理するため、対処しなければならない JNI はありません。jlineは、OSX、Linux、および Windows で同等に動作します。

ANTLR は、このような単純なことを行う場合には何のメリットもありませんが、JSAPのようなコマンド ライン パーサーは役に立ちます。

jline と JSAP は、シェルがサポートする「コマンド」の機能的なシェルとコマンド ライン解析を構築するために必要なすべてを提供します。

于 2012-07-08T07:28:44.810 に答える
1

これに対する唯一の実際の課題は、入力の実際の解析です。たとえば、たとえば bash をシミュレートする場合は特に、Antlr を使用して文法とそれに関連するコードを構築することは間違いありません。Antlr を使用すると、適切な解析が提供され、実際のシェル関数の実装が容易になるため、Antlr を使用することはやり過ぎではないと思います。なぜなら、記述しなければならないコードのかなりの部分が削除されるからです。一部の領域では JNI が必要になる場合がありますが、多くてもいくつかの特殊なケースを除けば、コードの非常に重要な部分になるとは思いません。

私は他のシェルの実装を見て、これと同様の割り当てを持つオペレーティング システムをカバーする大学のコースがいくつかあることも知っています。

于 2012-07-08T07:28:54.943 に答える
1

| > >>特にやのような単純な要件では可能forです。ただし、ネイティブ コードがないと、exec などの一部の機能を実装できません。出発点としてJShellを使用できます。ただし、現在の JDK およびライブラリでコンパイルするには、いくつかの作業が必要です。

于 2012-07-10T05:52:35.603 に答える
1

はい、可能です。実際、JNode ではそれが行われています。JNode には、多かれ少なかれ完全で、多かれ少なかれ POSIX 互換の「bjorne」と呼ばれるシェルが含まれています。

問題は、現在の形式の「bjorne」では、Linux や Windows プラットフォームではなく、JNode オペレーティング システム上/下で実行されるコマンドを実行することです。Processしたがって、コマンドを起動するために使用される「インターフェース」は、従来の JVM での実装が必要とするように、fork/exec または に依存しません。しかし、それが演習の要点でした...


これを自分で実装する場合、Antlr はあまり役に立ちません。これは、基本的なシェルの文法が状況依存であるためです。さらに、POSIX を実装する際の「難しい部分」は、引用と展開を正しく行うことと、サブシェル、リダイレクトなどを処理することです。

于 2012-07-08T07:55:04.927 に答える
1

http://www.beanshell.org/があります。これは何年も前からあり、多くの IDE のデバッガーで評価された式に使用されています。

于 2012-07-08T08:01:03.183 に答える