JRuby と Jython が JVM バイトコードを生成するために使用するパーサーを知っていますか? ANTLR または JavaCC ですか、それとも実装で他のパーサーを使用していますか?
2 に答える
JRuby は既に回答されているようですので、Jython について知っていることを追加します。
Jython はANTLRv3で生成されたパーサーを使用して、コンパイル関数に組み込まれている Python から取得できる仕様に準拠する AST を生成します (AST を要求した場合、Jython はこの段階の後に返されます)。これは、 ASM Java バイトコード生成ライブラリを使用して Java バイトコードを生成するカスタム コンパイラを介して供給され、その後ロードされて実行されます。Jython には (JRuby とは対照的に) 最初のインタープリター段階はありませんが、Java バイトコードに直接コンパイルし、JVM がそこから処理できるようにします。このため、人々が Jython を Java で書かれた Pythonインタープリターと説明するのは好きではありません。私はそれを Java の Python実装と呼びたいと思います。
JRuby は、必要に応じて Ruby 関数をコンパイルするカスタム コンパイラを使用します。これはJavaで書かれています。これについては、このブログ投稿で詳しく説明されています。
Jython にもおそらく同様のアプローチがあります。Google 検索では、物事がどのように達成されるかを説明する適切なドキュメントは見つかりませんでしたが、Jython は Java で記述された Python インタープリターであると言及しているドキュメントがいくつかあり、Java コードをコンパイラーでコンパイルすることによってバイトコードを作成していることを示しています。