2008-09-05 14 views
6

Czy są jakieś dobre narzędzia do automatycznej konwersji kodu źródłowego innego niż Java na źródło Java?Narzędzia do konwersji innych niż Java w Java source

Nie oczekuję czegoś doskonałego, tylko po to, aby usunąć najgorsze z tych prac.

Zgaduję, że istnieje przesuwająca się skala trudności. C# powinno być względnie łatwe (tak długo, jak ignorujesz wszystkie biblioteki). (dobrze napisane) C++ nie jest takie złe. C wymaga trochę OO. (Typy statyczne) języki funkcjonalne mogą być łatwe do zdziwienia. Dynamiczne języki OO mogą wymagać analizy nielokalnej.

Odpowiedz

6

Jedna rzecz, którą możesz spróbować, to znaleźć kompilator kodu bajtowego Java dla języka, o którym mówisz (są kompilatory JVM dla wszystkich języków), a następnie dekompilować kod bajtowy z powrotem do Javy za pomocą dekompilatora takiego jak Jad.

To jest najeżone niebezpieczeństwem. Odtworzony kod zostanie zassany i prawdopodobnie nie będzie można go odczytać.

3

Google: ANTLR

+0

Dobra rada, ale w zależności od języka źródłowego będzie to ogromna rzecz do zrobienia. – user181750

-1

ADA Java można zrobić z find i zamień!

+0

co powiesz na odwrót? Jestem facetem z java, który chce się uczyć ADA – WolfmanDragon

+0

ADA nie jest zbyt różne, szablony są do siebie podobne, pakiety są jak klasy statyczne java, klasy ADA są podobne do Javy. Standardowa IO jest ogólna w ADA . Jedyną dziwną rzeczą jest rozszerzenie pakietu, a pliki drzew i nazwy pakietów nie są ustawione w linii 1: 1 tak jak w Javie. Tak jak C++ :) –

0

Jeśli chcesz tylko użyć starszego kodu C/Pascal, możesz użyć JNI, aby wywołać go z Javy.

Jeśli chcesz uruchomić go w aplecie Java lub w podobnym, ograniczonym środowisku i nie musi być bardzo wydajny, możesz użyć NestedVM (który jest konwerterem bajtowym MIPS na Java) w połączeniu z krzyżówką gcc kompilator kompilujący do MIPS). Ale nie oczekuj, że otrzymasz od tego czytelny kod Java.

+0

Łańcuch narzędziowy NestedVM jest raczej ciężki i nieco przestarzały. Zasadniczo konwertujesz instrukcje MIPS na kod bajtowy Java (MIPS32 został wybrany jako najbliższy JVM) –

1

Konwersja języka jest dość prosta, ale można zauważyć, że biblioteki są różne. To prawdopodobnie będzie większość Twojej pracy.

0

Każde z tych narzędzi może pomóc tylko wtedy, gdy twój kod inny niż java nie jest wystarczająco duży.

Jeśli jest to ogromny kod inny niż java i jeśli chcesz poważnie przetłumaczyć go na język Java, to trzeba pomyśleć o kilku rzeczach: nie jest to tylko setki linii kodu, nie ma wzoru pod nim, jest kilka decyzji zrobione przez ludzi pod kodem, dzięki czemu niektóre problemy mogły zostać rozwiązane, a niewiele rzeczy tam działało. a inwestowanie czasu w każdego dobrego tłumacza nie będzie warte, ponieważ nie będzie istnieć, to nie jest tylko tłumaczenie składni z jednego języka na inny.

Jeśli nie jest to tak wielki kod, lepiej napisać go w java, ponieważ ma wiele pakietów API z pudełka, to może nie być wielka sprawa, zatrudnienie kilku stażystów do tego również może pomóc.

5

Migracje z źródła do źródła należą do zakresu Program Transformation. Program-Transformation.org śledzi bunch of tools, które są przydatne do rozpoznawania, analizy i transformacji języka. Oto kilka, które są zdolne do migracji z źródła do źródła:

Jeśli spędzać czasu z jednym z narzędzi open source, można zauważyć, że mimo iż to źródło-do - migracja zasobów jako cecha, ciężko znaleźć przykłady pracy. Wyobrażam sobie, że dzieje się tak dlatego, że nie ma czegoś takiego jak migracja jednego rozmiaru dla wszystkich. Każdy projekt/zespół wykorzystuje język w unikalny sposób i może się różnić w zależności od użytej biblioteki, złożoności typu, idiomów, stylu itp. Sensowne jest definiowanie niektórych przekształceń na migrację. Oznacza to, że projekt musi osiągnąć pewną masę krytyczną, zanim automatyczna migracja jest warta wysiłku.

Kilka powiązane dokumenty:

Powiązane problemy