Компилятор байт-кода Java в Java: как получить информацию о библиотеке классов Java? - PullRequest
2 голосов
/ 15 февраля 2012

Я пишу компилятор байт-кода Java в Java, скомпилировав код Jasmin и собрав его.Я создаю его с намерением, чтобы файлы исходного кода могли ссылаться на классы библиотеки Java и использовать их (вам в значительной степени это нужно для строк, печати и т. Д.).Моя проблема в том, как именно это сделать.

До сих пор я только что использовал ссылку на список всех классов библиотеки, который содержится в текстовом файле в папке установки Java (он просто перечисляет ихпакеты и имена).Я использовал его при кодировании анализатора / средства проверки типов, хотя это было далеко не идеально, поскольку средство проверки типов не могло выполнять какую-либо проверку типов при использовании библиотечных классов.

Сейчас действительно проблема в том, что яработая над генерацией кода, потому что, если вы хотите вызвать метод из класса библиотеки, вы должны дать ему полную сигнатуру метода - то, к чему у меня нет доступа.

Я бродил, что бы посоветовал людямо том, как прогрессировать.Одним из способов было бы пройти через все классы, создавая базу данных / список всех их параметров и возвращаемых типов.Это было бы чрезвычайно трудоемким, очевидно, и, вероятно, слишком нереальным.Возможны ли другие, более элегантные подходы?

Спасибо, Уилл

PS Я использую Python для кодирования этого.Я полагаю, если решение должно использовать код Java, я мог бы запустить его как подпроцесс.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2012

Если посмотреть дальше, кажется, что это возможно при использовании Java Reflection.Я отвечу на это сообщение, сообщив вам, насколько успешным я был.

0 голосов
/ 15 февраля 2012

Там уже есть компилятор Java для байт-кода, вы знаете. И JVM Python. Какова ваша реальная цель?

Что заставляет вас думать, что создание коллекции методов / возвращаемых типов будет «чрезвычайно трудоемким»? Как много времени занимает «чрезвычайно»? Это похоже на то, как это работает в реальной жизни, и не требуется много времени, чтобы извлечь эту информацию из файлов классов, даже используя javap. Кроме этого, есть ASM, BCEL и несколько других библиотек, которые извлекают информацию непосредственно из .class файлов, но javap обеспечивает простой вывод текста и, вероятно, подходит для ваших нужд.

Чтобы использовать символы, вам нужна таблица символов. Единственный способ получить то, что доступно, - это сохранить то, что доступно. Это быстрее и меньше, чем вы думаете, особенно если вы используете сокращенную запись.

...