2009-03-12 12 views
6

मैं अन्य प्रोग्रामिंग भाषाओं में जावा बाइटकोड का अनुवाद करने के लिए तरीकों/उपकरण/परियोजनाओं की तलाश कर रहा हूं या कम से कम एक संरचित प्रतिनिधित्व (जैसे एक्सएमएल) में विफल रहा हूं। आदर्श रूप से खुले स्रोत, स्वाभाविक रूप से।अन्य बाधाओं और प्रोग्रामिंग भाषाओं में जावा बाइटकोड का अनुवाद

मैंने ASM, "बाइटकोड मैनिपुलेशन और विश्लेषण ढांचे" को देखा है। यह अन्य प्रस्तुतियों के अनुवाद का समर्थन नहीं करता है, लेकिन इस तरह के एक परियोजना के लिए एक अच्छी नींव की तरह दिखता है। अफसोस की बात है, उनके users page पर सूचीबद्ध कोई भी परियोजना करीब आती है।

उत्तर

7

एएसएम में पेड़ एपीआई है जो मूल रूप से आपको बाइटकोड की पूरी संरचना दे सकती है। ऐसा लगता है कि एक्सएमएल या किसी अन्य प्रारूप में इसे मुद्रित करने के लिए विज़िटर एपीआई का उपयोग करना बहुत आसान है। यकीन नहीं है कि इसका क्या उपयोग है।

जावा में वापस अनुवाद करना एक डिकंपेलर का काम है और जैसे जैड ठीक है। लेकिन यह मुश्किल है क्योंकि ए) स्रोत के दौरान बाइटकोड अनुवाद में खोई गई जानकारी है और बी) उस एकाधिक स्रोत में अस्पष्टता एक ही बाइट कोड उत्पन्न कर सकती है।

यदि आप वास्तव में बाइटकोड से सीधे किसी अन्य उच्च स्तर की भाषा में जाना चाहते हैं, तो व्यापक रूप से और अर्थपूर्ण रूप से दोनों करना मुश्किल होगा, क्योंकि सभी कारणों से डिकंपलिंग कठिन है, दूसरी भाषा में भी बदतर है।

यदि आप जावा स्रोत से दूसरे भाषा के स्रोत में जाना चाहते हैं, तो यह Java-to-Python converter में पहले किया गया है। यह कुछ आसान है क्योंकि आप जावा को एएसटी में Antlr, या अंतर्निहित जावा कंपाइलर टूल्स, Project Jackpot इत्यादि के साथ कनवर्ट कर सकते हैं। फिर भी, मुझे लगता है कि आपको लक्षित भाषा में बहुत ही मूर्ख कोड नहीं मिलेगा।

1

ऐसा लगता है कि आप एक क्रॉस-कंपाइलर की तलाश में हैं। मैं परियोजना xmlvm के बारे में जानता हूं लेकिन इसका कभी भी उपयोग नहीं किया है। शायद यह आपकी जरूरतों के अनुरूप है।

1

आप gcj को देशी कोड में बाइट-कोड परिवर्तित करने के लिए प्रयास कर सकते हैं।

आप की तरह अजगर/ग्रूवी/माणिक शायद JVM पर सीधे उन भाषाओं में लिखने पर विचार भाषाओं में कन्वर्ट करने के लिए चाहते हैं (मुझे पता है यह बिल्कुल आप जो खोज रहे हैं नहीं है)।

शायद इस उदाहरण को कुछ Eclipse Byte Code outline viewer से कुछ उदाहरणों से छेड़छाड़ करें।

आखिरकार, एक निम्न-स्तरीय भाषा (बाइट-कोड) से दूसरे में कनवर्ट करना बहुत मुश्किल होगा और शुद्धता एक मुद्दा होगा।

2

BCEL (बाइट कोड इंजीनियरिंग लाइब्रेरी) आज़माएं। आप एक विज़िटर इंटरफ़ेस को कार्यान्वित कर सकते हैं, जिसका उपयोग आप जो भी चाहते हैं उसे उत्पन्न करने के लिए कर सकते हैं (किसी अन्य भाषा में स्रोत कोड, एक कस्टम एएसटी, एक्सएमएल, जो भी हो)।

मैंने इसे कॉलेज में एक परियोजना के लिए उपयोग किया जहां मैंने (ज्यादातर) एक प्रोग्राम विश्लेषण ढांचे को संशोधित किया जो जावा स्रोत कोड पर काम करता था जो जावा बाइट कोड के खिलाफ भी काम कर सकता था। उस कार्य में विश्लेषण ढांचे के आंतरिक एएसटी प्रतिनिधित्व के लिए नोड उत्पन्न करना शामिल था।

इसके अलावा,

मैं संक्षिप्त "एएसएम" परियोजना आप का उल्लेख के लिए दस्तावेज़ स्किम्ड। ऐसा लगता है कि यह कई विशाल वर्गों को परिभाषित करता है। आप जो भी चाहते हैं उसे करने के लिए आप उन लोगों का उपयोग करने में सक्षम होना चाहिए।

यदि आप विज़िटर पैटर्न से परिचित नहीं हैं, तो विवरण here देखें। इसके अलावा, अगर आपने इसे अभी तक नहीं पढ़ा है, तो "Gang of Four" पुस्तक अच्छी पढ़ी गई है।

संबंधित मुद्दे