2010-06-23 2 views
2

Как вы начинаете генерировать собственный код для целевой платформы? У меня есть (некоторый) опыт и (некоторые) навыки на C++, и я заинтересован в том, чтобы переходить и писать собственный компилятор (для C++). Но я понятия не имею, как я собираюсь превратить конечный результат в собственный код для выполнения на моей целевой платформе, на данный момент это просто Windows, x86.Испускающий собственный код (для определенной платформы)

Я взглянул на LLVM, но не мог понять их документацию для shiz.

Редактировать: Кроме того, LLVM не будет строить VS2010. Я прошел и очистил все места, где они, по-видимому, добавили. В конце имени файла для удовольствия и исправил typedefs, и теперь у них есть некоторые странные файлы .def, которые кажутся совершенно ненужными, которые не будут компилироваться , и я понятия не имею, в каких триллионах заголовков они вызваны.

Другие изменения: Я уже строил/строил собственный АСТ/парсер/лексер. Мне просто нужно знать, как превратить результаты в родные.

+4

C++ - чрезвычайно сложный язык, и скомпилировать его еще сложнее, а что начать с чего-то более простого? –

+1

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

+3

На самом деле, у llvm есть отличный учебник (http://llvm.org/docs/tutorial/); если вы не можете этого понять, я серьезно сомневаюсь в успехе ваших усилий. –

ответ

3

Посмотрите на другие вопросы по написанию компиляторов, например learning-to-write-a-compiler, и проработав что-то вроде книги драконов или Programming Language Pragmatics, вы поймете достаточно LLVM или gnu lightning, чтобы использовать их в качестве заднего конца.

Не пытайтесь написать компилятор C++, если у вас есть несколько лет, чтобы посвятить упражнение; с другой стороны, создание чего-то, основанного на существующих back-end и шаблонах выражений, может занимать всего пару месяцев.

Смежные вопросы