перевести один язык на другой? - PullRequest
7 голосов
/ 13 января 2010

можно ли перевести один язык на другой с переводчиком?

слышал, что quercus может переводить php в java? Сначала я подумал, что это дешевое паршивое решение, которое может привести к ошибкам кода, но, похоже, это вполне возможно.

не могли бы вы перевести php на другие языки, такие как python или ruby? с ++ к яве и тд?

Ответы [ 4 ]

11 голосов
/ 13 января 2010

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

Этот класс программы будет принимать поток входных символов («исходный код»), который может обычно описываться формальной грамматикой и выводить поток символов.

Этот выходной поток символов может быть:

  • Собственный код сборки, обычно для операционной системы и оборудования, на котором работает машина. Если это так, программа называется компилятором;
  • Собственный код сборки для другой ОС и / или оборудования. Это тоже можно назвать компилятором, но его часто называют кросс-компилятором;
  • К промежуточной форме, которая может быть выполнена виртуальной машиной некоторого вида. Это не настоящий компилятор, но его все равно часто называют компилятором. Компиляторы Java, C #, F #, VB.NET и т. Д. Попадают в эту категорию;
  • На другой язык целиком. Это называется переводчиком, и есть примеры, скажем, переводчиков с Java на C #. Как правило, они имеют разную степень успеха, потому что идиомы часто нелегко переводить;
  • Переводчики следуют тому же принципу, но обычно выполняют обработанную форму на месте, а не сохраняют ее где-то. Perl, PHP и shell-скрипты все попадают в эту категорию. Например, PHP будет хранить коды операций в кэше кода операции в качестве промежуточной формы (если включено кэширование кода операции), но эта промежуточная форма не сохраняется, поэтому все еще безопасно называть PHP интерпретатором.
5 голосов
/ 13 января 2010

Проблема возникает, когда у вас есть идиомы, которые плохо переводятся, ни от, ни к. Вы получаете код, который синтаксически действителен, но выглядит так, как будто он был написан кем-то на acid.

2 голосов
/ 13 января 2010

Ищите «транспортер» для некоторых указателей: https://stackoverflow.com/search?q=transpiler

1 голос
/ 13 января 2010

Это может быть не то, что вы ищете, но есть SWIG http://en.wikipedia.org/wiki/SWIG

Мы использовали его в одном из наших проектов для создания привязок / оболочек для python, java и ruby ​​для платформы C ++. Смотрите это в действии на http://marsyas.sness.net

...