Какой анализатор используют JRuby и Jython для генерации байт-кода JVM? - PullRequest
1 голос
/ 28 июля 2011

Ребята, вы знаете, что парсер JRuby и Jython используют для генерации байт-кода JVM?Это ANTLR или JavaCC, или они используют какой-то другой парсер в своей реализации?

Ответы [ 2 ]

5 голосов
/ 29 июля 2011

JRuby, кажется, уже ответил, поэтому я добавлю то, что я знаю о Jython.

Jython использует сгенерированный ANTLRv3 синтаксический анализатор для генерации AST, который соответствует спецификации дляодин вы можете получить из встроенной функции компиляции Pythons (если вы попросите AST, Jython просто вернется после этой стадии).Затем он подается через специальный компилятор, который использует библиотеку генерации байт-кода Java ASM для генерации байт-кода Java, который затем загружается и выполняется.Jython (в отличие от JRuby) не имеет начального этапа интерпретации, но компилируется непосредственно в байт-код Java и позволяет JVM обрабатывать его оттуда.Из-за этого мне никогда не нравилось, когда люди описывали Jython как интерпретатор Python , написанный на Java, я бы предпочел назвать его реализацией Python для Java.

2 голосов
/ 28 июля 2011

JRuby использует собственный компилятор, который компилирует функции Ruby по мере необходимости.Это написано на Java.Это очень хорошо описано в этом сообщении .

Jython, вероятно, имеет аналогичный подход.Поиски в Google не привели меня ни к одному хорошему документу для описания того, как все происходит, но в нескольких документах упоминается, что Jython является интерпретатором Python, написанным на Java, что указывает на то, что они создают байт-код путем компиляции кода Java с помощью компилятора.*

...