переводить с одного языка на другой?
Можно ли перевести один язык на другой с помощью переводчика?
Слышал, что quercus может перевести php на java? сначала я думал, что это дешевое паршивое решение, которое может дать ошибки в коде, но, похоже, это вполне возможно.
Не могли бы Вы перевести php на другие языки, такие как python или ruby? с++ на java и так далее?
4 ответов:
Перевод одного языка на другой-это лишь частный случай для класса программ, называемых компиляторами, интерпретаторами и переводчиками.
Этот класс программ будет принимать поток входных символов ("исходный код"), который может обычно описываться формальной грамматикой и выводить поток символов.
Что выходной поток символов может быть:
- собственный ассемблерный код, обычно для операционной системы и оборудования, на котором работает машина. Если это так, то программа называется компилятором;
- собственный ассемблерный код для другой ОС и / или оборудования. Это также можно назвать компилятором, но часто упоминается как кросс-компилятор;
- к промежуточной форме, которая может быть выполнена какой-либо виртуальной машиной. Это не настоящий компилятор, но его все равно часто называют компилятором. Java, C#, F#, VB.NET, etc "компиляторы" все попадают в эту категорию;
- на совершенно другой язык. Это называется переводчик и есть примеры, скажем, переводчиков Java на C#. Они, как правило, имеют различную степень успеха, потому что идиомы часто не легко переводимы;
Интерпретаторы следуют тому же принципу, но обычно выполняют обработанную форму на месте, а не сохраняют ее где-то. Perl, PHP и shell скрипты все попадают в эту категорию. PHP, например, будет хранить opcodes в кэше opcode в качестве промежуточной формы (если включено кэширование opcoding), но эта промежуточная форма не хранится, поэтому она все еще безопасна чтобы назвать PHP интерпретатором.
Проблема возникает, когда у вас есть идиомы, которые не переводятся хорошо, ни от, ни до. Вы получаете код, который синтаксически корректен, но выглядит так, как будто он был написан кем-то на кислоте.
Поиск так для "транспилера" для некоторых указателей: https://stackoverflow.com/search?q=transpiler
Это может быть не то, что вы ищете, но есть глоток http://en.wikipedia.org/wiki/SWIG
Мы использовали его в одном из наших проектов для создания Привязок / оболочек python, java и ruby для платформы C++. Смотрите его в действии на http://marsyas.sness.net
Comments