2012-02-14 5 views
2

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

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

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

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

Спасибо, Will

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

ответ

0

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

+0

Да, я в конце концов пошел с этим вариантом. Я написал небольшую программу Java, которая принимает имена метода/поля и возвращает класс, к которому они принадлежат (если они существуют). Все это возможно в API Java Refleion API. –

0

У вас уже есть компилятор Java для байткода. И JVM Python. Какова ваша фактическая цель?

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

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

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^