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

Поиск:

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


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


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

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



Цитата(dvamaster @ 2.9.2005, 23:30)
КАКОЙ ДОЛЖЕНА БЫТЬ ЦЕЛЬ В ДАННОМ СЛУЧАЕ?

Оттранслировать в машинный код (или другой формат, пригодный для исполнения процессором).


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


Unregistered











Цитата

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

Эта фраза взята из первой главы вышеупомянутой книги. Мне лично нет разници, как это будет называться. Лиш бы работало. В конечном счете все команды преврашаются в коды процессора в том или ином виде. Просто уже вопрос будет стоять, насколько эффективно.


  Вверх
allex
Дата 5.9.2005, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Часто транслятором называют инструмент, который один язык высокого уровня переводит в другой. А компилятором - инструмент, который переводит язык высокого уровня в машинный - ассемблер, байт-код.
Транслятор написать легче, чем компилятор. Простой компилятор написать легче, чем оптимизирующий.
Конкретные вопросы будут или вообще непонятно с чего начать?
По минимуму: Распознавание входного текста и построение внутреннего представления (дерева абстрактного синтаксиса) -> проверка семантических ограничений языка (можно не полностью) и сбор информации о типах и т.п. -> генерация кода.
PM MAIL   Вверх
Гость_The Master
Дата 6.9.2005, 06:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Простым языком компилятор это такое существо которое переводит код программы в машинный код. smile
Не путайте пожалуйста с рабочей средой!
  Вверх
Fin
Дата 10.9.2005, 00:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот пример транслятора http://www.softcraft.ru/ppp/download.shtml#src . Авторы сделали язык O2M.
  Вверх
Janus
Дата 31.12.2005, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Кошмар... Все в одно смешали...

Транслятор - это программа или устройство, которое преобразует правильный текст, написанный на одном языке в правильный текст с той же семантикой, но написанный на другом языке.

Проще говоря, транслятор переводит текст с одного языка на другой. Если всмотреться в слово, то это и будет "переводчик" (англ).

Компилятор - это транслятор, в котором языком назначения является язык машинных кодов.

Каждый компилятор - есть транслятор, но не каждый транслятор является компилятором. Например, транслятор с языка ассемблер fasm - компилятор, а транслятор заголовочных файлов С++ (.h) в модули Pascal (.pas) не является компилятором.

На самом деле, компилятор написать довольно сложно, проще написать транслятор в .asm и использовать внешний компилятор с ассемблера. Еще сложнее написать транслятор с одного языка высокого уровня на другой. Ну например, как преобразовать класс-шаблон из С++ в конструкцию на Pascal'е?

Что касается интерпретаторов, то тут все проще и сложнее. К слову, не для каждого языка можно написать интерпретатор. Кроме того, тут появляется очень много проблем с выделением памяти, размещением и исполнением кода и т.п.

Это сообщение отредактировал(а) Janus - 31.12.2005, 21:02
--------------------
Проект "Репликатор" 
PM MAIL   Вверх
Void
Дата 1.1.2006, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


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

Репутация: 9
Всего: 173



Цитата(Janus @ 31.12.2005, 23:00)
На самом деле, компилятор написать довольно сложно, проще написать транслятор в .asm и использовать внешний компилятор с ассемблера.

Суть одно и то же, разница чисто терминологическая.

Цитата(Janus @ 31.12.2005, 23:00)
Еще сложнее написать транслятор с одного языка высокого уровня на другой. Ну например, как преобразовать класс-шаблон из С++ в конструкцию на Pascal'е?

По собственному опыту говорю: проще. И то, что первые компиляторы C++ работали именно как препроцессоры в Си, подтверждает это.
Оптимизирующий компилятор в нативный код - это очень, очень сложно.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Cashey
Дата 2.1.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Mayk @ 2.9.2005, 06:38)
да, да, машинный и байт код это не ассемблер, но разницы большой нет.

ничего себе нет нет разницы, нолики и единички читать гораздо сложнее чем комманды ассемблера

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


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


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


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

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



Цитата(Cashey @ 2.1.2006, 19:53)
ничего себе нет нет разницы, нолики и динички читать гораздо сложнее чем комманды ассемблера

На самом деле, привыкаешь довольно быстро. В институте приходилось немного делать подобное на стендах. Сначала писалась программа на ассемблере, компилировалась в машинные коды и вводилась руками в память стенда. так через пару занятий мы небольшие изменения уже сразу писали в память, компилируя их в уме smile


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


λcat.lolcat
****


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

Репутация: 9
Всего: 173



Lamer George
Это справедливо для простой системы команд. Что-то вроде 8080 запомнить можно. С x86 будут большие проблемы. Декодировать в уме маш. код IA-64 (как и любой VLIW) вообще вряд ли кто-то сможет.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Fin
Дата 3.1.2006, 18:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как не крути, самое полезное, что производит компьютер, это тепло. smile Все остальное вторично.
  Вверх
Larrr
Дата 13.7.2006, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Для написания компилятора нужен лексический, синтаксический и семантический анализатор, которые в итогде генерируют intermidiate code а потом и final code. Реально написать можно компилятор ко всему, из тулов понадобится генератор сканнеров(Bison,ANTLR) и парсеров(я пользовала flex), возможно генератор генераторов кода(Mono JIT).
За всем этим довольно сложная теория - правые, левые грамматики, регулярные выражения, автоматы... Если интересно, можно погуглить на тему LL, LR, LL(1), LARL - должно выкинуть на страничку теории компиляторов...
  

Это сообщение отредактировал(а) Larrr - 13.7.2006, 00:21
PM MAIL WWW ICQ   Вверх
Void
Дата 13.7.2006, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


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

Репутация: 9
Всего: 173



Цитата(Larrr @  13.7.2006,  02:20 Найти цитируемый пост)
з тулов понадобится генератор сканнеров(Bison,ANTLR) и парсеров(я пользовала flex)

Немного перепутала: flex — это сканер (aka лексер), bison и ANTLR — синтаксические анализаторы (aka парсеры), правда последний может генерировать и лексеры.
Цитата(Larrr @  13.7.2006,  02:20 Найти цитируемый пост)
генерируют intermidiate code

Порой даже не одного вида на разных стадиях smile 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Sardar
Дата 13.7.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Цитата(Larrr @  12.7.2006,  23:20 Найти цитируемый пост)
енерируют intermidiate code а потом и final code

По моему наиболее популярно генерить код через GCC. Back-end'ов у него много, постояннор развиваеться. Обычно можно генерить со своего языка AST и все его развёртки вплоть до SSA (single assigment satements) или на прямую RTL для back-end'ов. Плюсы подхода в готовой многоплатформенности,  не надо заморачиваться с чипами (есессно если язык компилируем). Чем более высокоуровневое представление, тем больше трансформаций оно пройдёт, тем больше оптимизаций (по по моему самые аггресивные в SSA и RTL формах) будет применено.

Конечно генерть байткод под Java/.Net лучше если делаешь что то "реальное на жизнь", а не исследовательскую работу smile

Популярно писать трансляторы язык -> C, ибо C это высокуровневый ассемблер smile
C-- также разрабатываеться специально как целевая форма для более высокоуровневых компилеров, его сравнение с C, а также масса инфы + ссылки на интересное чтиво здесь:  http://www4.in.tum.de/~pizka/mp00a.pdf
На странице чела не пропустите MoDi-OS и INSEL + идеи за ними, торкает не хуже травки smile 


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


Шустрый
*


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

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



Цитата(Void @ 13.7.2006,  01:31)
Немного перепутала: flex — это сканер (aka лексер), bison и ANTLR — синтаксические анализаторы (aka парсеры), правда последний может генерировать и лексеры.

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

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

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

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


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

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


 




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


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

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