2010-08-06 2 views
6

Я занимаюсь несколькими классами этой осенью для своих мастеров, и один из них - это проект и конструкция компилятора. Я довольно хорошо разбираюсь в большинстве вещей, связанных с компьютерными технологиями, но у меня не было большого опыта в том, как компиляторы делают грязные, я просто использую их, когда мне нужно. Я обычно не нервничаю по поводу занятий, но мне кажется, что я иду в этого голого. Если кто-то может порекомендовать какое-то хорошее чтение или предоставить краткий список основных принципов, которые я могу исследовать, чтобы быстро довести меня до скорости Буду очень признателен.Конструкторский и строительный класс компилятора

UPDATE:

Ну я большой в классе, и the text book we used был на самом деле очень хорошо. This site также помог мне визуализировать и проверить мои регулярные выражения (которые, как я считаю, лучше всего освоить при изучении компиляторов). Я очень быстро подобрал основы LEX, но YACC (по какой-то причине) был немного сложнее для меня. Простые поисковые примеры в Интернете помогли им обоим.

+1

Любые ресурсы, перечисленные в [Учимся писать компилятор] (http: // stackoverflow.com/questions/1669/learning-to-write-a-compiler) может оказаться полезным. Поскольку вы не говорите, какая часть написания компилятора касается вас, трудно рекомендовать определенный ресурс. –

+0

Спасибо за ссылку. Хотелось бы, чтобы я был более конкретным, но это покажет вам, как мало я знаю о компиляторах, а учебная программа довольно неопределенная :) – ubiquibacon

+0

+1 для «typoknig». –

ответ

3

Проверьте Dragon Book

+0

Я глубоко вдавлен в первую главу, и я думаю, что это именно то, что я искал. Из моего чтения я уже вижу, что мне также нужно освежить мои навыки сборки, но я уже чувствую себя лучше в этом классе. Благодаря! – ubiquibacon

2

dragon book обычно рекомендуется.

+1

Я не думаю, что это базовый фон, который ему нужен. Если он может понять книгу Дракона, ему не нужно брать класс: -} –

+0

Скачайте его сейчас. Я быстро участвую, поэтому я все равно посмотрю. – ubiquibacon

+0

@ Ира, есть много способов обучения. Те, кто действительно интересуется предметами, могут учиться на промежуточных материалах. Быть возбужденным или заинтересованным в чем-то обычно означает, что вы хотите узнать об этом. Если вы придумаете то, что не знаете, и не хорошо объяснены в вашем документе, вы обычно ищете ответы. Тем не менее, в этой книге не так много, что должно быть незнакомо всем, кто «хорошо разбирается в большинстве вещей, связанных с компьютерной технологией», если это подразумевает знание и понимание в информатике. – jer

5

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

Я бы удостоверился, что у вас был неплохой код кода сборки. Большинство процедурных кодеров не используются для обработки инструкций, регистров, режимов адреса и указателей. Если вы их получите, инструктор, скорее всего, объяснит остальное очень хорошо.

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

Для некоторого фона на то, что составители не, см Writing compilers ... what's right and what's wrong?

Если вы хотите действительно интересное упражнение, вы можете узнать о MetaII, который, как построить компилятор, который строит компилятор с безумно маленький сумма усилий. Существует 10-страничный документ о том, как сделать , который имеет умопомрачительный момент в середине, где вы вдруг видите, как компилятор может скомпилировать себя. Там в учебник MetaII (с бумагой) по адресу:

http://www.bayfronttechnologies.com/mc_tutorial.html

+0

Хотя все, что вы говорите, имеет ценность, некоторые из них серьезно ограничены наличием определенного класса языков. Компиляторы существуют для разных языков разных типов, в том числе знания об ассамблее, и многие другие, которые этого не делают. Я верю, что вы пытаетесь сказать, что вы должны знать, что именно вы хотите сделать, и что вы хотите в конечном итоге. – jer

+0

@ Jer: Да, это так, но я сомневаюсь, что он собирается скомпилировать цель Prolog в качестве стартового места. Большинство традиционных классов компилятора нацелены на какой-то упрощенный ассемблер, поэтому его хорошая ставка заключается в том, что знание того, что будет полезно. –

+0

Не то, что я имел в виду. Посмотрите на все существующие сегодня системы, даже на языках программирования, у вас гораздо больше интерпретаторов, которые сами содержат компилятор в сочетании с циклом read-eval. Кроме того, существуют другие системы, такие как механизмы подсветки синтаксиса, вплоть до файлов конфигурации. – jer

0

Первый раз кто-то объяснил мне сборник, я был удивлен, как корни в конвенции все это было. В компиляции всегда были одни и те же стадии высокого уровня, с теми же подразделениями в подзадачах.

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

Смежные вопросы