2010-03-26 3 views
8

Меня попросили написать переводчик кода, который возьмет программу Python и произведет программу на C. Есть ли у вас идеи, как я могу подойти к этой проблеме или это возможно?Написание кода переводчика с Python на C?

+19

Я не решаются предугадывать ваши потребности, не слышать больше, но если вас «попросили написать переводчика кода» (кем-то вроде одного из моих худших боссов), это предполагает недоразумение на определенном уровне. Моя первоначальная реакция заключается в том, что (а) кто-то считает, что «Python = slow, C = fast» всегда, и (б) переводчик кода для Python будет легко писать. Я вернусь и спрошу, почему они этого хотят. – Ken

+0

Возможный дубликат [Преобразование программы Python в код C/C++?] (Http://stackoverflow.com/questions/4650243/convert-python-program-to-c-c-code) –

ответ

2

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

+0

Спасибо, Кристофер. Сейчас я изучу исходный код Шедскина. – bodacydo

23
6

Там фундаментальный вопрос здесь: это намерение в основном создать компилятор Python, который использует C в качестве бэк-энда, или конвертировать программу в C и поддерживать C потом?

Написание компилятора, который производит (действительно уродливый) C, поскольку его вывод, вероятно, не является тривиальным - компилятор редко существует, а генерация кода для Python будет сложнее, чем для многих других языков (динамическая типизация, в особенно трудно компилировать, по крайней мере, до очень эффективного выхода). OTOH, по крайней мере, парсер будет намного проще, чем для некоторых языков.

Если «translating», вы имеете в виду преобразование Python в C, которое является удобочитаемым и поддерживаемым, это совершенно другой вопрос - это довольно сложно, мягко говоря, существенно. Реально, я сомневаюсь, что любой машинный перевод будет стоить много - слишком большие различия в том, как вы обычно подходите к задачам в Python и C, чтобы надеяться на достойный машинный перевод.

+7

+1: Python не является C с другим синтаксисом. Это принципиально другой язык с уникальной семантикой. Если бы это был «C с другим синтаксисом», кто-то уже написал бы это преобразование. –

2

Это трудно поверить, что никто не упомянул Cython - в значительной степени стандартом де-факто для данного вида работы, на мой взгляд: http://www.cython.org/