Я не бакалавр компьютерных наук и работаю веб-разработчиком (Java, Python, AS3 и т. Д.) Как профессионал. Я беру 1 курс в семестр в моем местном университете. В прошлом семестре я принимал искусственный интеллект (включающий логику, грамматику без контекста, разбор CYK, вводный НЛП, цепочки Маркова, HMM и т. Д.).
В следующем семестре я планирую пройти вводный курс по компиляторам, который охватывает следующие программы:
Лексический анализ, синтаксический анализ, семантический анализ, среда выполнения, промежуточные представления, генерация кода, распределение регистров, выбор инструкций и планирование, введение в локальную и глобальную оптимизацию кода, анализ потока данных
Мой вопрос заключается в том, есть ли какие-либо предметы по информатике, которые я должен знать, прежде чем пройти этот курс? Если да, было бы здорово, если бы вы могли перечислить эти курсы.
источник
Ответы:
Вы, вероятно, должны иметь простое понимание следующих тем:
Необязательно, и, вероятно, очень поможет:
источник
Ну, я немного поработал над написанием своих собственных компиляторов, и я бы сказал, что основным условием является четкое понимание того, что вы получите в классе Data Structures. В частности, если вы не понимаете рекурсию, деревья и карты / хеш-таблицы, вы очень быстро потеряетесь, пытаясь научиться создавать компилятор.
источник
Вам понадобятся некоторые базовые знания об архитектуре компьютера (регистры, память, регистры специального назначения и т. Д.), И вы уже видели некоторый код сборки. Было бы еще лучше, если бы вы ранее написали некоторый ассемблерный код, поэтому у вас есть четкое представление о том, как работает машинный язык.
В зависимости от уровня курса, можно ожидать, что вы немного знаете о суперскалярной обработке и тому подобном.
источник
Если это вообще что-то вроде класса компиляторов, который я взял в конце мелового периода (около 1988 г.), единственными реальными предпосылками были бы структуры данных (особенно деревья и хеш-таблицы), некоторый язык ассемблера (для сгенерированного кода), возможно некоторая компьютерная архитектура, и любой другой класс будет учить таким вещам, как регулярные выражения, конечные автоматы, машины Тьюринга и т. д., хотя они могут быть рассмотрены как часть самого курса по компилятору (FWIW, мой нет). Вы также захотите убедиться, что понимаете рекурсию.
источник
Возможно, вам также понадобится пройти курс формальных моделей и языков. Все, что покрывает основную иерархию Хомпского, было бы хорошо: Обычные языки + Языки без контекста. Это потому, что важно понимать математические основы синтаксического анализа, чтобы ваш синтаксический анализатор был чистым, производительным и правильным. Я думаю, что хороший класс компиляторов будет часто охватывать как Регулярные выражения, так и парсеры LALR / LL (k) и теорию, стоящую за ними.
источник
Поскольку речь идет об оптимизации кода, возможно, там будет некоторое ассемблерное кодирование. Так что, возможно, было бы неплохо хотя бы немного познакомиться с этим. Это будет зависеть от того, как устроен этот конкретный курс. В противном случае, я думаю, для вступления в класс компиляторов достаточно обладать сильным набором навыков программирования. Это будет очень ценный класс.
источник
Зависит от вашего универа, но большинству требуются следующие условия:
источник