Модераторы: Се ля ви

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Принцип компилятора, и алгоритм его работы 
:(
    Опции темы
Cashey
  Дата 1.9.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: нет
Всего: 60



Заинтерисовал меня вопрос: а что есть компилятор? Ну в смысле как его использовать и что получается в результате его работы это всем известно. А вот как он из символов языков высокоуровнего программирования переводит все в понятные машине коды мне не понятно.
Как я понимаю сам по себе принцип работы компилятора не зависит от конкретного языка программирования. Однако, почиму-то некоторые языки его не имеют, но используют так называемый интерпритатор, а по сути используют, по средствам механизмов обмена windows, откомпилированные библиотеки поддержки в режиме real-time. С чем это может быть связано? Или не на каждый язык программирования можно разработать компилятор?


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Mayk
Дата 1.9.2005, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(Cashey @ 1.9.2005, 23:50)
а что есть компилятор?

Транслятор с какого-либо языка на ассемблер.

Цитата(Cashey @ 1.9.2005, 23:50)
А вот как он из символов языков высокоуровнего программирования переводит все в понятные машине коды мне не понятно.

Этого не расскажешь в двух словах. За подробностями беги в книжный. Если в общем - используется построение всяких бинарных деревьев и таблиц(вопрос сродни "как построить машину?"). Лучше скажи, что тебе конкретно не понятно.

Цитата(Cashey @ 1.9.2005, 23:50)
С чем это может быть связано?

С целями языка. Писать компилятор на batники очень не здравая идея.

Цитата(Cashey @ 1.9.2005, 23:50)
Или не на каждый язык программирования можно разработать компилятор?

На каждый. Если язык можно отинтерпретировать, то его можно и откомпилировать. Даже на мой любимый brainfuck компилятор можно сделать, но нафиг?

зы. В частности в книжном можешь поискать Донована "Системное программирование". Глава 8 называется "компиляторы". Только говорю сразу, что навряд ли её найдешь - она в 70ых вышла(PL/1, MULTICS и всё такое).
Другие книги по написанию компиляторов не читал.. Поиск по озону выдал Системное программирование. Основы построения трансляторов и Компиляторы. Принципы, технологии, инструменты.
Но Донована всё-таки следовало бы почитать. В качестве исторической справки так скзать smile

Это сообщение отредактировал(а) Mayk - 1.9.2005, 21:21


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Cashey
Дата 1.9.2005, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: нет
Всего: 60



Если в кратце, решил выяснить можно ли своими силами написать компилятор для ФоксПро


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Mayk
Дата 1.9.2005, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Совет - на компилятор забей.
Пиши транслятор с фокса на с++/пас/ява. Быстрее получится.
Во-всяком случае запустить хелло ворлд можно будет не через полгода.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Fin
Дата 1.9.2005, 22:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть довольно фундаментальная книга: Альфред Ахо, Рави Сети, Джеффри Ульман "Компиляторы. Принципы, технологии, инструменты" . В русском варианте выпустило издательство "Вильямс" в 2003 году. В сети скачивал как то в электронном виде. Но то место шас закрыто.
Компилятор или транслятор можно написать, на написание первой версии Фортрана было потрачено 18 человеко/лет.
Кстати вот определение из книги, что есть компилятор:
Цитата

Компилятор - это программа, которая считывает текст программы, написанной на одном языке - исходном, и транслирует (переводит) его в эквивалентный текст на другом языке - целевом.

  Вверх
Sardar
Дата 1.9.2005, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Цитата(Mayk @ 1.9.2005, 20:52)
Пиши транслятор с фокса на с++/пас/ява. Быстрее получится.

В Java байткод высокоуровневый, твой язык по сути же будет обьектно ориентированным. В принципе это благо, модно и удобно smile К тому же богатая стандартная библиотека и куча софта помогут встать на ноги быстрей.

Транслировать в C++/pascal очень сложно. Разобрать твоё выражение на десяток атомных инструкций(асм) проще чем собрать аналогичное выражение в другом языке.

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


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Akina
Дата 1.9.2005, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Цитата(Mayk @ 1.9.2005, 22:20)
Транслятор с какого-либо языка на ассемблер.

Неверно. Скажем компилятор VB6 или там Java совсем даже и не байт-код генерят...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Mayk
Дата 2.9.2005, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(Akina @ 2.9.2005, 03:10)
Неверно. Скажем компилятор VB6 или там Java совсем даже и не байт-код генерят...

Насчет VB6 не знаю, я его видел только издали, но .exe он вроде делал, а байткод явы(если javac делает не байткод, то что же он вообще делает?) и есть собсно ассемблер(да, да, машинный и байт код это не ассемблер, но разницы большой нет. Говорю "машинный код" подразумеваю "ассемблер", грю "ассемблер", подразумеваю "машинный код"). Набери в гугле java bytecode assembler. Увидишь массу ссылок.


Добавлено @ 06:39
Цитата(Fin @ 2.9.2005, 02:25)

Компилятор - это программа, которая считывает текст программы, написанной на одном языке - исходном, и транслирует (переводит) его в эквивалентный текст на другом языке - целевом.

Это транслятор.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Akina
Дата 2.9.2005, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Цитата(Mayk @ 2.9.2005, 07:38)
Насчет VB6 не знаю, я его видел только издали, но .exe он вроде делал,

Его ЕХЕ вообще-то всего лишь вызывает стандартную либу, которая интерпретирует предкомпилированный код в теле ЕХЕ.

Цитата(Mayk @ 2.9.2005, 07:38)
байткод явы(если javac делает не байткод, то что же он вообще делает?) и есть собсно ассемблер(да, да, машинный и байт код это не ассемблер, но разницы большой нет. Говорю "машинный код" подразумеваю "ассемблер", грю "ассемблер", подразумеваю "машинный код").

Да? а как один и тот же класс работает на разных платформах? когда системные вызовы совершенно по-разному организованы?

Или еще пример - .Net. Intermedialte Language, JIT-compiler - это все для на зачем?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
batigoal
Дата 2.9.2005, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Cashey @ 1.9.2005, 20:50)
Заинтерисовал меня вопрос: а что есть компилятор? Ну в смысле как его использовать и что получается в результате его работы это всем известно. А вот как он из символов языков высокоуровнего программирования переводит все в понятные машине коды мне не понятно.
Как я понимаю сам по себе принцип работы компилятора не зависит от конкретного языка программирования. Однако, почиму-то некоторые языки его не имеют, но используют так называемый интерпритатор, а по сути используют, по средствам механизмов обмена windows, откомпилированные библиотеки поддержки в режиме real-time. С чем это может быть связано? Или не на каждый язык программирования можно разработать компилятор?

Могу из дома выложить фрагмент институтского конспекта. По-моему, я его даже уже где-то здесь выкладывал. Там рассказывается о двухпроходной схеме работы компилятора, таблицах машинных команд и псевдокоманд и т.п.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Mayk
Дата 2.9.2005, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(Akina @ 2.9.2005, 12:21)
го ЕХЕ вообще-то всего лишь вызывает стандартную либу, которая интерпретирует предкомпилированный код в теле ЕХЕ.

smile Либа - это та vbXXX.dll, которая постоянно требуются?

Цитата(Akina @ 2.9.2005, 12:21)
и еще пример - .Net. Intermedialte Language, JIT-compiler - это все для на зачем?

Цитата(Akina @ 2.9.2005, 12:21)
Да? а как один и тот же класс работает на разных платформах?

Как, как. Берется и перегоняется житом в местный асм с портируемого байткода.
Не понимаю чем тебя смущает перегон с байткода на асм.
Не понимаю как наличие VB.DLL/JIT превращает асм в не асм. Проге написанной на си требуется libc, так что же - гнус не является компилятором? Является. В таком случае и бэсик является компилером - "Как ваш тор может быть более вывернут, чем мой?" (с) Барр.



Добавлено @ 13:52
Lamer George
Выкладывай smile


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Sardar
Дата 2.9.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Цитата(Mayk @ 2.9.2005, 12:52)
Не понимаю чем тебя смущает перегон с байткода на асм.

Это не всегда просто и не всегда возможно(в смсыле что сложно smile). Байт код зачастую высокоуровневый, ты сам для себя дефинируешь опкоды 'создать обьект', 'инициализировать список из пула констант' и т.п. За памятью не следишь ибо все уже поняли, что сборщик мусора это благо. Окружение(виртуальная машина) не тупо компилирует байт код в нативные инструкции, оно предлагает основные механизмы ввода/вывода, работа с памятью и т.п. Получаемый временный нативный код во много раз больше, чем байткод.

Цитата(Mayk @ 2.9.2005, 12:52)
Проге написанной на си требуется libc, так что же - гнус не является компилятором?

Это стандартная библиотека, "репозиторий кода". В идеале C прогу можно написать с нуля, не используя никаких внешних библиотек, компилятор вложит только базовые функции работы с числами и массивами.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Mayk
Дата 2.9.2005, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(Sardar @ 2.9.2005, 18:47)
Байт код зачастую высокоуровневый

Ну и что? P IV по сравнению с Z80 гораздо высокоуровнее. В последнем float'ов не было.
Цитата(Sardar @ 2.9.2005, 18:47)
'создать обьект'

Ну подумаешь, на локальном асме пришлось бы делать
Код

call createObject
call initFromPoolOfConstants


Цитата(Sardar @ 2.9.2005, 18:47)
За памятью не следишь ибо все уже поняли, что сборщик мусора это благо.

Тот же сборщик можно и на плюсах накатать, везде используя шибко умные указатели с подсчетом ссылок.

Цитата(Sardar @ 2.9.2005, 18:47)
Окружение(виртуальная машина) не тупо компилирует байт код в нативные инструкции, оно предлагает основные механизмы ввода/вывода, работа с памятью и т.п.

Короче то же самое, что и стандартные либы. По мне так без разницы как создаётся объект -
call createObject
int 0x73
new #2
То что часть этого выполняется программно... Ну на то машина явы и названа виртуальной.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
batigoal
Дата 2.9.2005, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Мда. Посмотрел записи. Наверное, не стоит выкладывать - там без поллитры не разберешься.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
dvamaster
Дата 2.9.2005, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: нет
Всего: 10



Разрешите тоже поспрорить, мне тут понравилось.

Цитата
Компилятор - это программа, которая считывает текст программы, написанной на одном языке - исходном, и транслирует (переводит) его в эквивалентный текст на другом языке - целевом.


Цитата
Это транслятор.


Начну сначала, текст ASM в текст битовый, байтовый..., т.е. машинный код. Блин, опять транслятор получается! КАКОЙ ДОЛЖЕНА БЫТЬ ЦЕЛЬ В ДАННОМ СЛУЧАЕ? Голову сейчас сломаю, но что-нидь придумаю.

Проц есть транслятор машинных кодов, во что?

Тоже вопрос!


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила раздела "Философия программирования":
Се ля ви

Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО:

• вопросы перспективного развития методов написания ПО;

• изменяющиеся языки и методологии программирования;


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Философия программирования | Следующая тема »


 




[ Время генерации скрипта: 0.0855 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.