Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

Компиляция. Теория и практика. (Ищу собеседников)   Найти похожие ветки 

 
Ev_genus   (2004-04-23 17:17) [0]

Здравствуйте уважаемые.

В конце лета прошлого года я начал писать компилятор. Знаний было ноль. Сейчас я уже дописываю третий вариант. Заодно проапдейтил своё знание С++ (не бить :). В общем язык не главное, главное - умение. Зато входной язык компиляции - паскаль (с некоторыми наворотами). Хочу спросить у вас нет ли кого кто писал/шет/будет? Или просто интересующихся людей? В общем помогите чем можете, а то мне совсем скучно стало. Не у кого спросить. Сижу велосипеды строю (А мне летать охота :). В общем отзовитесь.

Для начала прошу написать ссылки по литературе. Меня интересует реальная практика (но в теории: исходники почитать я и сам могу). Например есть (вернее был :( одит извесный академик А.П.Ершов. так у него по этой теме около 80 книг, только вот найти я их не могу.

Также меня интересует представление промежуточного кода программ. Всякие MSIL, JVM code и т.д. Если кто пытался придумать своё, или знает чего где прошу также отозвать.

Потом еще всякие граматики, YACC-подобные программы, в общем все что есть давайте.

Спасибо за внимание, Ev_genus
ICQ : 165044315
mail: ev_genus@univ.kiev.ua


 
Матлабист   (2004-04-23 17:34) [1]

Книгу дракона читал? Могу дать на время ;)


 
Ev_genus ©   (2004-04-23 17:36) [2]

[1]
Конечно. Но она уж сильно теоретическая.

Информации мне хватает. Мне не хватает общения. :)


 
Аноним   (2004-04-23 17:47) [3]

Удалено модератором
Примечание: Offtopic


 
Матлабист   (2004-04-23 17:57) [4]

Я бы сказал, практическая... Начать можно как раз с того, что там написано... А вот более ранняя их книга теоретическая --- там одни теоремы и доказательства ;) Используются только абстрактный математические структуры (что для некоторых достаточно)


 
Тимохов ©   (2004-04-23 18:00) [5]

я бы тоже возразил высказыванию, что КД - теория.
имхо сплошная практика.
согласен с тем, что она создает впечатление теоретической, т.к. не всегда имеет однозначную нить - делай так и так. в ней дается много инфы (замечу весьма практичной), которую нужно обработать и выбрать свой способ решения.


 
Ev_genus ©   (2004-04-24 14:45) [6]

[4][5]

Почитайте в разделе генерации кода генерацию команд и распределение регистров. Там изначально выбрана целевая машина в таком виде что алгоритм правильный %). А как быть когда командам нужны несколько регистров или некоторый конкретный регистр.


 
Sha ©   (2004-04-24 16:10) [7]

Ev_genus ©   (24.04.04 14:45) [6]

Также, как это делает Delphi - посмотри CPU window, например.


 
Ev_genus ©   (2004-04-27 11:35) [8]

Sha ©   (24.04.04 16:10) [7]
мдаааа.

вот вам тест

program test;
{$APPTYPE CONSOLE}
var
a:integer;
begin
a:=5;
a:=((((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)* (a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))*(((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a *a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))+(((a*a+a*a)*(a*a +a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a )*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))*(((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+( (a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))))*((((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a *a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a *a)*(a*a+a*a)))*(((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a )+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))+(((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)* (a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))*(((a *a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a ))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))))+((((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a )*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))*(((a*a+a*a)*(a*a+a*a)+ (a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a +a*a)+(a*a+a*a)*(a*a+a*a)))+(((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a *a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))*(((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)) *((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a +a*a))))*((((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a +a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))*(((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a *a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))+(((a*a+a*a )*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a *a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a)))*(((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a *a))+((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))*((a*a+a*a)*(a*a+a*a)+(a*a+a*a)*(a*a+a*a))));
writeln(a); //для испрользуемости результата операции
end.

я пробовал его в делфи загрузить. мне выдало около 5 кб бинарника. и что я там могу понять о алгоритме распределения(хоть чего то, не гоборя уже о регистрах)?


 
Матлабист   (2004-04-27 12:36) [9]

Все проще:

In general, the rules of register use in an asm statement are the same as those of an external procedure or function. An asm statement must preserve the EDI, ESI, ESP, EBP, and EBX registers, but can freely modify the EAX, ECX, and EDX registers.

Откуда делаем вывод, что EBX, EDI, ESI могут используются для хранения локальных переменных, а EAX, ECX и EDX для временных значений.


 
Матлабист   (2004-04-27 12:37) [10]

И начинать надо с разбора простых примеров.

К тому же Delphi на ставит своей приоритетной задачей генерацию оптимального кода --- это больше забота программиста. Там, по мелочам помогает.


 
Darts ©   (2004-04-27 13:30) [11]

www.home.perm.ru/~strannik
Компилятор Модулы-2/Паскаля/Си
Есть исходные тексты, можно покопаться.
Сам компилятор написан на Модуле-2.

Модуль ASM (встроенный ассемблер)
Файл SMASM.M

Модуль DAT (структуры данных)
Файл SMDAT.M

Модуль GEN (генерация кода)
Файл SMGEN.M

Модуль LEX (лексический анализ)
Файл SMLEX.M

Модуль SYS (вспомогательные функции)
Файл SMSYS.M

Модуль TAB (таблица идентификаторов)
Файл SMTAB.M

Модуль TRA (трансляция модуля, язык Модула-2)
Файл SMTRA.M


 
Calm ©   (2004-04-27 13:34) [12]


> Книгу дракона читал? Могу дать на время ;)

Я слышал есть в электронном виде. Если располагаете, мыльните мне, плз, на a40 сабака list. ru


 
Ev_genus ©   (2004-04-27 14:51) [13]

Какие есть соображения по поводу теорий промежуточного представления программы? Меня интересует конкретный пример реализации триадных деревьев(вернее дагов) на каком-нибуть языке. Желательно хоть как-то приближенном к общераспространенным.

-----------------------------------------------------------

Матлабист   (27.04.04 12:37) [10]

--И начинать надо с разбора простых примеров.
этот этам уже пройден

--К тому же Delphi на ставит своей приоритетной задачей
--генерацию оптимального кода
Я тоже.

-- это больше забота программиста. Там, по мелочам помогает.
ну вот я и программист

Darts ©   (27.04.04 13:30) [11]

Спасибо. Посмотрю.

Calm ©   (27.04.04 13:34) [12]

Пишу не из дома. Могу завтра намылить. Но даже не знаю как. Там около 16 метров.


 
Ev_genus ©   (2004-04-28 14:03) [14]

http://www.cbel.com/Compilers_Programming/


 
Igorek ©   (2004-04-28 15:04) [15]

2 Ev_genus ©   (27.04.04 14:51) [13]
Меня конечно могут обвинить в ламерстве, и очень возможно небеспочвенно. Но выскажу свое личное мнение-совет. Прошу учесть, что это сугубо мое личное мнение, так что оценивать критически.

Так вот: если ты действ. фанат сей темы и действ
> Сижу велосипеды строю (А мне летать охота :)
, то:
метка 1)
забей на все что сделано/написано и т.д. на время. Выбрось все что знаешь из головы - все что не тобой придумано. Притворись ламером - "все что есть - ацтой и маздай". Побездельничай с месяц с такой мыслью. Не о чем не думай, кроме: "Все ацтой и маздай - вот я сделаю намного круче". Потом найди такого же "ламера". Пообщайтесь на тему "ацтой и маздай" еще немного :-). Желательно покройте матом и реальными примерами (почему ацтой и маздай) то что уже сделано.
А потом начинайте высказывать друг другу свои мысли. Не спешите. Нету красивой мысли - нефиг код писать. Нету в голове нифига - идите на речку, в кино, на дискарь - куда потянет.
Когда вам такой образ жизни надоест и поднакопится парочка идей - вспоминайте, что уже знали, берите книги - ищите - нету ли уже такого.
Если есть:
 то переход на метку 1)
иначе
 попробуйте еще немного побездельничатьи и когда надоест - садитесь реализовывать свое "ноу-хау".

---
Хорошенько сами подумайте, прежде чем следовать моему совету.


 
Паниковский ©   (2004-04-28 15:12) [16]

Igorek
IMHO
"че думать прыгать надо ..."

бездельничать можно до бесконечности


 
Матлабист   (2004-04-28 16:32) [17]

А какие проблемы с дагами? На практике даг имеет редко когда больше двух (макс. трех) выходящих веток. Посему простая запись с тремя указателями на такую же запись ;) Самое простое.


 
Bless ©   (2004-04-28 18:06) [18]

>Книгу дракона читал?
Дракон - это фамилия такая? Или прозвище в знак признания заслуг?
В общем, если не трудно, намыльте и мне.
bless@zeos.net
Или, если с намыливанием не получается, то скажи пожалуйста фамилию автора и название книги


 
Ev_genus ©   (2004-04-29 13:47) [19]

Матлабист   (28.04.04 16:32) [17]

Я их и использую. Но опять же не хочу придумывать велосипед. Мне еще регалий не хватает для изобретения чего-то нового(в теории). Я ищу конкретный пример дагов для некоторого языка. Что б было написано какие узлы что означают, и какие где могут быть потомки.


 
Матлабист   (2004-04-29 14:07) [20]

Как я понимаю, речь идет о полях отдельной структуры. Такие детали относятся к определенному исходнику. Что тебе мешает придумать свое решение? Конкретный набор полей во многом зависит от решаемой задачи, языка программирования, реализации предшествующих структур (таблица символов, и т. д.)


 
Ev_genus ©   (2004-05-01 19:55) [21]

Матлабист   (29.04.04 14:07) [20]
Я так и сделал, но тут есть вопросы: для какого множества языков подходит такое представление, соотведствует ли это здравому смыслу и т.д. Мне не структура нужна, а конкретное описание узлов дерева.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.035 c
1-1084129036
kas-t
2004-05-09 22:57
2004.05.23
Экономия ресурсов системы...


14-1083503615
Piter
2004-05-02 17:13
2004.05.23
Что такое GPF?


14-1083217242
han_malign
2004-04-29 09:40
2004.05.23
WebFile.ru - открылся прикольный сервис...


3-1083241816
kaif
2004-04-29 16:30
2004.05.23
Шмрокое использование вложенного запроса в IN


3-1083179959
sasa
2004-04-28 23:19
2004.05.23
Тормоза IBSERVER под Win2KServer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский