![]() |
У меня чейчас в голове (и частично на диске) крутится идея сделать компилятор Visual Basic Script... В процессе написания сего компилера, у меня возникло всего три проблеммы:
|
ivank
У нас в МФТИ, помнится, были дисциплины по реализации языков программирования. Из всей литературы, что советовалась, навскидку помню только книгу авторов Ахо и Ульман (название забыл) + еще труды наших препов. Если тебя интересует что-то менее академическое, могу поискать, но я так понял, у тебя проблемы с описанием грамматики языка для компилятора? По 3-му. Вообще-то серьезная книга по асму должна писать машинные коды для команд (они там даже ведь по длине внутри одной команды различаются). Вот у меня в Питере Абеле (в красном таком и в толстом) это все есть. |
vasketsov
С грамматикой как раз проблем нет. Я свой клон Spirit написал, он не такой мощный, зато его MSVC компиляет. Проблеммы как раз с тем что во что компиляется. Особенно со stack unwinding -- у меня есть собственная, но очень кривая реализация... Цитата:
|
Для получения кодов по команде могу предложить такое действо. Компилишь бинарник, куда руками пишешь то, что надо. После этого открываешь его HEXEDIT'ом (если правильно помню), он там умеет команды и коды показывать.
|
vasketsov
да, я с помощью hiew смотрю пока... Но это жутко неудобно (много комманд нужно =) |
Всем спасибо... Я нашёл решение проблеммы -- взял исходник другого (очень простого, и даже несоответствующего стандарту C) компилятора, и довольно таки немаленькую часть кодогенератора сейчас передираю к себе. Компилятор русский -- "Странник -- Модула-Си-Паскаль"... Сам компилятор ИМХО очень плох. Хотя он компактен и быстр. Но у него есть огромный недостаток -- стандарту C он не соответвует, а ни паскаля, ни Модулы я не знаю...
Добавлено: Хотелось бы добавить -- нашёл хороший ресурс о построении трансляторов -- "Компиляторы: принципы, методы и средства разработки" |
По поводу пункта 3.
А если сделать файл листинга программы? В TASM-е ключом /l делается и получается как раз в том виде как ты хочешь, правда я не уверен, что точно так-же делает NASM. |
вот гемморой понапридумывали. в MSVC _asm command. потом в debug окне смотришь байтики (надо это в опция вклюцить - Sjow Code Bytes)
а построение комманд- далеко не линейное - зависит от того - используются регистры, память. какие операнды - скачай pdf с АМД на который я тебе давал ссылку - там все команды, в том числе и SSE расписаны - такты, последовательности байт, спариваемость и пр. |
Подскажите пожалуста где можна скачать хорошый учебник по написанию транслятора?
|
Компилятор
Как можно сделать Компилятор
Добавлено: Как можно сделать Компилятор на Visual Basic 6.0:( |
Коды всех команд: http://www.intel.com, http://www.amd.com, скачиваете файлы pdf:
ftp://download.intel.com/design/Pent...s/25366515.pdf ftp://download.intel.com/design/Pent...s/25366615.pdf ftp://download.intel.com/design/Pent...s/25366715.pdf и на AMD (там даже больше, включая 3DNow!, AMD64 и т.д.) еще есть книга Зубкова Assembler для DOS,Windows и Unix, там тоже есть описание форматов команд. Мне интересно, кто нибудь делал большие компиляторы, типа С++, как лучше организовывать структуры данных? Т.е. таблицы типов, функций, классов, наследования и т.д. |
Лично по мне, http://sandpile.org/ - самый полный ресурс по x86 "вообще". Во-всяком случае для тех двух моих компайлеров, которые генерили напрямую машинный код, я брал инфу именно там.
Я делал, только компилятор чистого C (за исключением указателей на ф-ии, которые мне не были нужны, - почти стандартный ANSI89 [[или 92?, не помню]]), но он, в сущности, очень прост. В принципе, компилятор C++ по большей части будет не сложнее Сишного, в плане хранения семантической информации. ИМХО Наибольший гемор - шаблоны. Эффективные алгоритмы инстанцирования оных отнюдь не просты, на сколько я знаю; а у простых алгоритмов требования к памяти растут чуть ли не по экспоненте. |
Время: 06:25. |
Время: 06:25.
© OSzone.net 2001-