2012-01-25 4 views
0

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

Я знаю, что существуют существующие работы, подобные этому, но мне нужно создать свои собственные (также для практических целей), и я не совсем уверен, как начать. Я рассмотрел создание проекта C#, который будет вызывать исходный код .Java, и пройдите через него по очереди и преобразуйте текст в то, что выглядит C#. Пример: public class Car extends Vehicle {} переходит в открытый класс Car: Vehicle {} и продолжает изменять каждую разницу между двумя языками.

Правильно ли это подход и есть ли другие?

* Примечание. Я нашел статьи об этом, и я увидел, что АСТ и парсинг вышли очень много, а также несколько парсеров, таких как NRefactory. Может ли кто-нибудь объяснить, как эти термины связаны с моей проблемой, и как работает парсер (NRefactory)? Определения дали мне обзор, но я все еще не уверен, понимаю ли я концепцию.

+2

Это сложнее, чем просто портировать синтаксис и семантику языка, есть функции, которые вы найдете в Java и отсутствующие в .NET и наоборот. Некоторые склонны думать, что .NET - это клон Java, но на самом деле оба являются разными монстрами ... В любом случае, я уверен, что лучший способ портирования Java на C# работает непосредственно с байтовым кодом обеих платформ. –

+1

@ MatíasFidemraizer Итак, как я могу использовать байтовый код для преобразования между двумя? – Alexey

+0

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

ответ

3

У Java есть функции, которых нет в C#, а на C# есть функции, которых нет в Java, поэтому простое одно-одно преобразование соответствия невозможно.

Просмотрите here, чтобы узнать, где вы столтитесь.

Парсер необходим для правильного преобразования синтаксиса одного языка, который не существует в другом, поэтому вам необходимо построить interpreter, который не является тривиальным проектом.

Компиляторы, такие как переводчики, основаны на синтаксическом синтаксическом анализаторе. Вы можете найти множество хороших обучающих программ и ресурсов в Интернете для построения компиляторов с помощью поиска google. Например, here является хорошим.

+0

Эта сравнительная статья не показывает много различий. 80% таблицы зеленого цвета. И я не понимаю, зачем нужен переводчик. Если вы говорите, что синтаксический анализатор правильно преобразует синтаксис, то то, что я изначально планировал сделать, было парсером. Если парсер работает, у меня будет рабочий исходный код C#, который я могу просто скопировать в мой проект. – Alexey

+1

Опубликованная статья в Википедии показывает много важных различий между C# и Java. Парсер возвращает дерево разбора, которое вам нужно будет преобразовать обратно в исходный код. – Amichai

+0

Так исправьте меня, если я ошибаюсь: исходный код Java -> Parser -> Преобразует в нечто независимо от языка (дерево синтаксического анализа) -> Parse (любой желаемый язык)? – Alexey

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