2010-04-12 3 views
8

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

Но я могу «Я не нашел ничего подходящего для меня, и огромные компиляторы, такие как GCC, очень меня смутили, поскольку у них так много функций, что я не знаю, с чего начать.

  • Есть ли микрокомпилятор OpenSource Win32 для некоторых языков программирования там, где я мог бы взглянуть?
+3

Задать вопрос: http://stackoverflow.com/ вопросы/1669/learning-to-write-a-compiler –

+0

Это список книг. – saf

+0

На самом деле я разрабатываю компилятор для моего языка для платформы Win32. Я рекомендую вам прочитать в файле заголовка PE и захватить копию справочного руководства x86 Intel для реализации опкодов. Затем вы должны создать некоторый слой «абстрагирования» выполнения и использовать эту модель для создания прогнозов состояния процессора для создания достоверной сборки. – Pindatjuh

ответ

4

http://en.wikipedia.org/wiki/List_of_compilers выбрал те, с типом лицензии «с открытым исходным кодом»

+0

Это те компиляторы, которые мне не помогают. Как вы ожидаете, что я выкопаю десять тысяч строк кода, чтобы узнать основы? – saf

+0

Как вы думаете, есть ли компиляторы с количеством кодов, которые меньше 10 тысяч? У меня такое чувство, что их нет. – Andrey

+0

Существует множество таких компиляторов. Если вы уберете сложный синтаксис и оптимизацию, компилятор действительно не так уж и сложный. Разумеется, такой компилятор не так полезен для реальной работы по кодированию, но идеально подходит для изучения основ работы компиляторов. –

0

gas может превратить язык ассемблера в объектный код, который ld может затем связать с соответствующими автономной работы для создания программы.

+3

Ни один из них не является компилятором. – WhirlWind

+0

Сокращенный в согласии с WhirlWind. – Kawa

+0

Ассемблер - это компилятор по определению. Поддерживается в несогласии с downvoters. И да, если вы внедряете компилятор, вам не следует беспокоиться о формате файлов PE - это не работа компиляторов, это работа компоновщиков. –

2

Я бы предложил собрать учебник по компиляторам. Они объясняют все необходимые компоненты компилятора и обычно разрабатывают компилятор от начала до конца.

У меня есть копия Modern Compiler Implementation in Java из моего курса по компиляторам, и я очень доволен ею.

0

Если ваша цель - узнать, как работают компиляторы и/или код, тогда вы должны действительно должны прочитать книгу по этой теме. Однако при поиске образцов исходного кода попробуйте образцы компиляторов Pascal, например this one.

Паскаль имеет несколько простую грамматику и реализуется во многих книгах.

0

Самый простой язык программирования - сборка, x86-сборка, чтобы быть точным. Самый известный ассемблер, NASM, является открытым исходным кодом; Вы можете проверить это источник по адресу:

http://repo.or.cz/w/nasm.git

NASM имеет макросы, которые действительно «составлена» в операторы ассемблера. Хотя это не полноценный язык, его основное внимание уделяется основам.

0

Я бы предложил искать источник компилятора Pascal, C или SmallC для MS-DOS (16 бит). В частности, если они ограничиваются 16-разрядным плоским реальным режимом (< = 64 КБ памяти), они должны быть довольно простыми.

Поддержка сегментированного реального режима добавляет большую сложность, которую лучше всего избегать, и это не имеет значения для 32-разрядной программы с защитой в режиме плоского режима (32-битное программирование, отличное от ОС).

Для процессора, отличного от x86, пример программы для серии статей Джека Креншоу «Let's Build a Compiler», которая представляет собой компилятор синтаксиса, подобный Pascal, предназначенный для 16/32-разрядного процессора Motorola MC68000. Существует также Марсель Хендрикс, написанный в Форте на win32 version of the series.

Существует также TCC - Tiny C Compiler, которые поддерживают выход PE-i386 (то есть Win32).

Хотя если бы вы не могли прочитать всю ссылку SO, которую дал Firas Assaad в комментариях, содержащий все, кроме одной из этих ссылок, я считаю, что вы найдете исходный код компилятора ужасно длинным ,

2

Вы пытаетесь понять, как построить компилятор, или вы пытаетесь узнать, как выглядит исполняемый файл Win32 внутри?

Если бывший, а затем прочитавший книгу о том, как создать компилятор, будет более эффективным, чем попытка перепроектировать исходный код. Компиляторы в отличие от всего, что вы когда-либо видели, и это действительно помогает автору пройти вас по принципам и общим методам и инструментам. Также стоит отметить, что компиляторы построены поэтапно, и только к концу реализации вам нужно знать какие-либо знания о CPU и операционной системе, на которые вы нацеливаетесь. Если вы новичок в создании компилятора, вам нужно много узнать, прежде чем вы попадете на этот этап.

Однако, если вы хотите понять формат исполняемых файлов Win32, вам необходимо понять ассемблерный код x86 (или x64) и формат файла Portable Execution (PE) (который используется Windows для исполняемых файлов). Для ознакомления с ассемблером x86 я бы рекомендовал отличный «Пол для ПК» для ПК Paul Carter, бесплатную электронную книгу http://www.drpaulcarter.com/pcasm/ и для PE. Я начал здесь http://msdn.microsoft.com/en-us/magazine/cc301805.aspx и http://msdn.microsoft.com/en-us/magazine/cc301808.aspx