2010-11-19 1 views
1

Я пытаюсь разобрать java-байт-коды в промежуточную структуру данных для последующего использования. Я наткнулся на ASM. Он мощный и стабильный. Тем не менее, мне сложно перевести двоичные инструкции обратно в нормальное java-выражение и выражения. Может ли кто-нибудь указать мне направление? Структура данныхКак сопоставить двоичные инструкции с операторами или выражениями с использованием библиотеки ASM?

Сделка может выглядеть следующим образом:

ClassInfo 
- FieldInfo 
- MethodInfo 
-- ForLoopStatement 
-- WhileStatement 
--- AssignmentExpression 
--- FunctionCallExpression 
... 

В принципе это не более чем абстракции языка Java.

Спасибо.

ответ

2

В db4o мы использовали, по иронии судьбы, BLOAT library, чтобы получить полностью построенный AST из тела метода. Он работал достаточно хорошо для нас, но он не основан на ASM.

+0

Спасибо, Jb. Но может ли эта библиотека быть слишком старой? Книга была закончена в 1999 году. –

+0

Winston, вы можете использовать ее в db4o, она поддерживается и обновляется: http://source.db4o.com/db4o/trunk/bloat/ –

+0

Отлично! Большое спасибо!! –

1

Почему бы не остаться с Java-байт-кодом так, как есть, и если вам нужна читаемая человеком форма, просто разоберите ее? По крайней мере, ваш вопрос не дает понять, почему сам байт-код Java не может быть промежуточной структурой данных, используемой для хранения.

Официальный выпуск Java SDK имеет инструмент под названием javap, который преобразует байт-код обратно в источник Java. Другим вариантом для той же работы будет javad.

+0

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

+0

@Winston Chen: Является ли исходный код Java достаточно высоким? – Saul

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