Войти

Показать полную графическую версию : Разработка компиляторов.


ivank
31-01-2002, 09:10
У меня чейчас в голове (и частично на диске) крутится идея сделать компилятор Visual Basic Script... В процессе написания сего компилера, у меня возникло всего три проблеммы:
VBS язык безтиповый. Я это поборол просто -- ввёл новый оператор 'As тип. Пока помогает. Потом введу полноценную дедукцию типа, это не есть проблемма.
А проблемма, в том что у меня, по причине малого опыта построения компиляторов, нет практичесски никакой документации... Т.е. все, даже базовые конструкции, я вывожу сам.
Ну и наконец, кто-нибудь знает где можно найти набор комант защщённого режим в подобном виде:
mov eax, ebx * *01 23 45 67
mov ebx, eax * *FE DC BA 98
итд
? А то сейчас я это делаю через жо.... заднее место (reverse engineering) Т.е. я сначало пишу нужный код на асме, затем компилю насмом, и смотрю на результат в Отладчике / декомпилере / hex редакторе :(

vasketsov
31-01-2002, 09:22
ivank
У нас в МФТИ, помнится, были дисциплины по реализации языков программирования. Из всей литературы, что советовалась, навскидку помню только книгу авторов Ахо и Ульман (название забыл) + еще труды наших препов. Если тебя интересует что-то менее академическое, могу поискать, но я так понял, у тебя проблемы с описанием грамматики языка для компилятора?

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

ivank
31-01-2002, 10:41
vasketsov
С грамматикой как раз проблем нет. Я свой клон Spirit (spirit.sf.net) написал, он не такой мощный, зато его MSVC компиляет.

Проблеммы как раз с тем что во что компиляется. Особенно со stack unwinding -- у меня есть собственная, но очень кривая реализация...

Вообще-то серьезная книга по асму должна писать машинные коды для команд
У меня серьёзнах книг по асму нет -- я на нём ничего серьёзного в жизни не писал...

vasketsov
31-01-2002, 11:13
Для получения кодов по команде могу предложить такое действо. Компилишь бинарник, куда руками пишешь то, что надо. После этого открываешь его HEXEDIT'ом (если правильно помню), он там умеет команды и коды показывать.

ivank
31-01-2002, 11:39
vasketsov
да, я с помощью hiew смотрю пока... Но это жутко неудобно (много комманд нужно =)

ivank
01-02-2002, 19:16
Всем спасибо... Я нашёл решение проблеммы -- взял исходник другого (очень простого, и даже несоответствующего стандарту C) компилятора, и довольно таки немаленькую часть кодогенератора сейчас передираю к себе. Компилятор русский -- "Странник -- Модула-Си-Паскаль (http://home.perm.ru/~strannik)"... Сам компилятор ИМХО очень плох. Хотя он компактен и быстр. Но у него есть огромный недостаток -- стандарту C он не соответвует, а ни паскаля, ни Модулы я не знаю...

Добавлено:

Хотелось бы добавить -- нашёл хороший ресурс о построении трансляторов -- "Компиляторы: принципы, методы и средства разработки (http://kit.kulichki.net)"

Guess Who
04-03-2002, 01:30
По поводу пункта 3.
А если сделать файл листинга программы? В TASM-е ключом /l делается и получается как раз в том виде как ты хочешь, правда я не уверен, что точно так-же делает NASM.

VuDZ
04-03-2002, 14:43
вот гемморой понапридумывали. в MSVC _asm command. потом в debug окне смотришь байтики (надо это в опция вклюцить - Sjow Code Bytes)
а построение комманд- далеко не линейное - зависит от того - используются регистры, память. какие операнды - скачай pdf с АМД на который я тебе давал ссылку - там все команды, в том числе и SSE расписаны - такты, последовательности байт, спариваемость и пр.

Guest
08-10-2003, 06:07
Подскажите пожалуста где можна скачать хорошый учебник по написанию транслятора?

MikHaker
30-01-2004, 19:54
Как можно сделать Компилятор

Добавлено:

Как можно сделать Компилятор на Visual Basic 6.0:(

Guest
09-10-2004, 11:03
Коды всех команд: http://www.intel.com, http://www.amd.com, скачиваете файлы pdf:
ftp://download.intel.com/design/Pentium4/manuals/25366515.pdf
ftp://download.intel.com/design/Pentium4/manuals/25366615.pdf
ftp://download.intel.com/design/Pentium4/manuals/25366715.pdf
и на AMD (там даже больше, включая 3DNow!, AMD64 и т.д.)
еще есть книга Зубкова Assembler для DOS,Windows и Unix, там тоже есть описание форматов команд.
Мне интересно, кто нибудь делал большие компиляторы, типа С++, как лучше организовывать структуры данных? Т.е. таблицы типов, функций, классов, наследования и т.д.

ivank
10-10-2004, 02:02
Лично по мне, http://sandpile.org/ - самый полный ресурс по x86 "вообще". Во-всяком случае для тех двух моих компайлеров, которые генерили напрямую машинный код, я брал инфу именно там.

Я делал, только компилятор чистого C (за исключением указателей на ф-ии, которые мне не были нужны, - почти стандартный ANSI89 [[или 92?, не помню]]), но он, в сущности, очень прост.

В принципе, компилятор C++ по большей части будет не сложнее Сишного, в плане хранения семантической информации. ИМХО Наибольший гемор - шаблоны. Эффективные алгоритмы инстанцирования оных отнюдь не просты, на сколько я знаю; а у простых алгоритмов требования к памяти растут чуть ли не по экспоненте.




© OSzone.net 2001-2012