Какие знания требуются / рекомендуются перед началом разработки компилятора? - PullRequest
2 голосов
/ 06 октября 2011

Возникает вопрос о стекопереработке о Обучение написанию компилятора .Я посмотрел на это, и я думаю, что это обязательство, которое я хочу решить.Я думаю (как и многие другие) знания будут иметь неоценимое значение для программиста.Тем не менее, мои навыки в основном в C ++, и я бы сказал, что я очень доволен синтаксисом языка и некоторыми базовыми алгоритмами и концепциями проектирования, но я ни в коем случае не опытный программист.Мой единственный опыт программирования приходит из академических учебников на уровне колледжа и прохождения вводных / промежуточных курсов (классы 300 уровней).Отсюда и возникновение моего вопроса.

Имея только общие знания языка C ++ и отсутствие знаний по ассемблеру, вышла бы книга, нацеленная на теории и работу компилятора и реализацию этих теорий, таких каккнига Компиляторы: принципы, методы и инструменты (2-е издание) , мне трудно понять?

Ответы [ 3 ]

3 голосов
/ 06 октября 2011

Я бы порекомендовал вам начать с переводчика, так как вам не нужны проприетарные знания аппаратного обеспечения для его реализации.Ключевыми понятиями обычно являются то, как определяется язык, что делает утверждение, строит деревья разбора и т. Д. ... Знания об аппаратном обеспечении для меня второстепенны, чем собственно понимание того, как читать и оценивать утверждения.

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

1 голос
/ 06 октября 2011

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

0 голосов
/ 06 октября 2011

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

В частности, для C (++) вам также понадобится копия стандарта (ов) C (++).

Вы можете сделать несколько коротких путей, таких как интерпретация вместо полной компиляции или перевода на другой язык и компиляции с другим компилятором.

Кроме того, вы должны сначала создать компилятор для небольшого или тупого языка, такого как Forth, Basic или так называемый small C (не поддерживающего все типы, конструкции и ключевые слова и не имеющего большей части стандартной библиотеки).
Я могу оценить, что мне, довольно сведущему программисту C, который хорошо знает x86, понадобится несколько месяцев (~ 3), чтобы создать работающий небольшой компилятор C-ish. Только минимальная стандартная библиотека, никаких оптимизаций, минимальная проверка ошибок (то есть не генерация всех полезных предупреждений). Это должно дать вам представление о том, как много времени может занять даже в не очень сложных случаях. Быстрое изготовление чего-то маленького может быть более полезным.

...