Какие инструменты для переноса программ с платформы А на Б

В качестве любимого проекта я подумывал написать программу для переноса приложений, написанных на языке А, на язык Б. А и Б должны быть объектно-ориентированными языками. Я предполагаю, что это очень трудная задача: сопоставление языковых конструкций, которые похожи, выполнимо, но сопоставление концепций библиотек будет очень долгой задачей.

Мне было интересно, какие инструменты использовать, я знаю, что это связано с компиляцией, но я немного боюсь использовать Lex и Yacc и все такое. Я думал о том, чтобы, возможно, использовать Eclipse Modeling Framework, который помог бы мне писать модели (кода приложения) преобразования в удобочитаемой форме. Но сначала мне нужно было бы написать парсеры для создания моделей (а также создать метамодель из грамматики языка).

Существуют ли инструменты, которые облегчили бы мою задачу?


person Alain Michel    schedule 04.07.2009    source источник


Ответы (6)


Вы можете использовать специальные инструменты/языки преобразования для этого TXL или Стратего/XT.

Также вы можете посмотреть и легко попробовать Java to Python и Java to Tcl перенос проектов, сделанных мной с помощью TXL.

Вы правы насчет сопоставления концепций библиотек. Это довольно сложная и долгая задача. Здесь есть два пути:

  • Полностью перенесите библиотеку классов с языка A на язык B.
  • Перенесите классы/функции с языка A на соответствующие концепции языка B.

Подход, который вы выберете, зависит от ваших целей и доступного времени/ресурсов. Также во многих случаях вы не будете выполнять общую миграцию A->B, которая будет охватывать все возможные случаи, вам нужно будет просто преобразовать какой-либо проект/библиотеку/и т.д. так что вы увидите в ваших конкретных случаях, что лучше делать с классами/библиотеками.

person msorc    schedule 13.07.2009

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

person Community    schedule 04.07.2009
comment
Да, я не ясно выразился: я выбрал 2 конкретных языка. Я не хочу делать общее решение для всех существующих языков, это было бы безумием. - person Alain Michel; 04.07.2009
comment
Ну, не держите нас в напряжении - какие языки? - person ; 04.07.2009
comment
Я еще не уверен, но я думаю, что исходным языком/фреймворком будет Java/Swing, а целевым будет какой-нибудь язык RIA, такой как Flex или фреймворк Javascript/Ajax. - person Alain Michel; 04.07.2009

Есть несколько инструментов для прямой миграции для некоторых комбинаций A и B.

Существует множество инструментов обратного проектирования и генерации кода для разных языков и платформ. Довольно редко можно увидеть инструменты обратного проектирования, которые охватывают всю семантику исходного языка, а семантика UML не определена четко (поскольку он предназначен для сопоставления с различными языками реализации, он сам по себе не определяет полную модель выполнения для своего языка). поведенческие репрезентации), поэтому вы вряд ли сможете реконструировать и генерировать код между инструментами. Вы можете найти один инструмент, который выполняет полный обратный инжиниринг и полную генерацию кода для ваших языков A и B, и, таким образом, вы сможете чего-то достичь.

Как правило, вы не используете одни и те же идиомы на разных платформах, поэтому вы, скорее всего, получите что-то, что эмулирует код A на B, а не что-то, что соответствует собственному решению B.

person Pete Kirkham    schedule 04.07.2009
comment
Я согласен, я не хочу использовать UML, это было бы недостаточно точно для миграции. Когда я пишу о модели, я думаю об использовании, например, метамодели Java. Код Java будет проанализирован в модель Java, что фактически позволит мне хранить абстрактное синтаксическое дерево и использовать инструменты (такие как QVT, Eclipse ATL и т. д.) для преобразования программы Java в модель B (соответствующую метамодели). языка программирования Б). - person Alain Michel; 04.07.2009
comment
Платформа моделирования Eclipse, QVT и ATL основаны на метамодели UML или, по крайней мере, были на момент их создания. - person Pete Kirkham; 04.07.2009
comment
Да, но использование метамодели UML (MOF), то есть метаметамодели (метамодели для определения метамоделей), не означает использование UML. UML — это сложная метамодель с сотнями понятий, в то время как вы можете определить меньшие пользовательские метамодели, например метамодель для пользовательского интерфейса, для конкретного бизнеса. QVT и ATL могут преобразовывать модели UML, а также модели из любой другой метамодели. - person Alain Michel; 14.08.2009

Если вы хотите использовать Java в качестве исходного языка (тот язык, который вы пытаетесь преобразовать), вы можете использовать Checkstyle AST (он используется для написания правил). Это дает вам древовидную структуру с каждой операцией, выполняемой в исходном коде. Это будет намного проще, чем писать собственный пайзер или использовать регулярное выражение.

Вы можете запустить com.puppycrawl.tools.checkstyle.gui.Main из checkstyle-4.4.jar, чтобы запустить графический интерфейс Swing, который анализирует исходный код Java.

person martin    schedule 04.07.2009

На основании вашего комментария

Я еще не уверен, но я думаю, что исходным языком/фреймворком будет Java/Swing, а целевым будет какой-нибудь язык RIA, такой как Flex или фреймворк Javascript/Ajax. — Ален Мишель 3 часа назад

Возможно, стоит обратить внимание на Google Web Toolkit.

person Pete Kirkham    schedule 04.07.2009