Языковые переводчики: что угодно для сборки - PullRequest
1 голос
/ 20 мая 2009

Мне просто любопытно, есть ли какая-либо программа / приложение, которое позволит вводить код на одном языке и переводить его на другой язык, такой как asm. Это кажется вполне возможным .... так что-нибудь подобное существует?

Ответы [ 6 ]

13 голосов
/ 20 мая 2009

Да. Они называются компиляторами.

Компиляторы являются лишь одним примером класса программ, называемых языковыми переводчиками.

Компиляторы преобразуют языки более высокого уровня, такие как C ++ и Java, в языки более низкого уровня, включая байт-коды виртуальной машины, ассемблер, C или непосредственно, в управляемый машиной объектный код.

4 голосов
/ 20 мая 2009

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

1 голос
/ 20 мая 2009

Вас может заинтересовать Haxe, см. http://haxe.org/.

1 голос
/ 20 мая 2009

Проблемы возникают, когда вы говорите, что что-то «совершенно возможно». Функция одного языка часто не переводится напрямую или легко на другой язык; Именно поэтому мы выбираем язык для задачи в первую очередь! Например, преобразование числа Фибоначчи из Java в C тривиально, но для Haskell? Конечно, это все еще выполнимо, но попробуйте конвертировать программу, которая открывает потоки posix и прослушивает несколько портов для разных битов сетевого трафика.

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

def method( f ):
    G = {'a':1}
    f(G)

def f( x ):
    print( [ (key, value) for (key,value) in x.items() ] )

method(f)

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

0 голосов
/ 20 мая 2009

Существуют инструменты, которые позволяют переводить один язык на другой. По сути, есть парсер, переводчик и принтер.

Анализатор, очевидно, анализирует источник в AST .

Затем переводчик должен преобразовать AST в структуры, которые имеют смысл на целевом языке.

Наконец, принтер распознает пост-преобразованные структуры и может вывести этот целевой код.

0 голосов
/ 20 мая 2009

Вот программа для преобразования .NET-кода в Java, PHP, JavaScript и ActionScript http://jsc.sourceforge.net/

...