Які предмети інформатики повинні пройти вступний курс у компіляторах? [зачинено]


10

Я не є студентом інформатики і працюю веб-розробником (java, python, AS3 тощо) як професіонал. Я приймаю 1 курс на семестр у своєму місцевому університеті. Я взяв Штучний інтелект (що включає логіку, граматику без контексту, розбір CYK, вступний NLP, ланцюги markov, HMM тощо) минулого семестру.

Я планую пройти вступний курс з компіляторів у майбутньому семестрі, який охоплює наступну програму:

Лексичний аналіз, синтаксичний аналіз, семантичний аналіз, середовище виконання часу, проміжні представлення, генерація коду, розподіл регістра, вибір інструкцій та планування, вступ до оптимізації локального та глобального коду, аналіз потоку даних

Моє запитання: чи є якісь предмети інформатики, які я повинен знати, перш ніж пройти цей курс? Якщо так, то було б чудово, якщо ви можете, будь ласка, перерахувати ці курси.


1
Залежить від вашої школи. Моє не було таким жорстким, тому передумовами були основні структури даних та основні алгоритми - ось і все. На жаль, вони зробили компілятори необов’язковими, і я вичавив його і не взяв.
Робота

Відповіді:


8

Напевно, ви маєте просте розуміння наступних тем:

  • Дискретна математика (множини, відношення, дерева, графіки, матриці, теорія чисел)
  • Структури даних (у більш застосованому розумінні, як працюють дерева, списки, стеки, черги та рядки)
  • Основні алгоритми (основні поняття, сортування, пошук, позначення Big-O тощо)
  • Комп'ютерна архітектура (цифрова логіка, бітові операції, мікрокомпоненти, кеш, пам'ять, складання програмування)
  • Різне (регулярні вирази, без контекстних мов, автоматизовані автоматичні автоматичні обмеження стану, машини Тьюрінга та обчислюваність, лексичні та інструменти розбору)

Необов’язково, і, ймовірно, допоможе дуже багато:

  • Дизайн операційної системи (управління процесами, дизайн ядра, синхронізація, планування, події, блокування, потоки та стек проти купи)

4

Ну, я трохи попрацював над написанням власних компіляторів, і я б сказав, що головна умова - чітке розуміння речей, які ви отримаєте в класі Data Structures. Зокрема, якщо ви не розумієте рекурсії, дерева та карти / хеш-таблиці, ви дуже швидко втратитесь, намагаючись навчитися будувати компілятор.


3

Вам знадобиться основна інформація про архітектуру комп’ютера (регістри, пам'ять, регістри спеціального призначення тощо), і раніше ви бачили деякий код складання. Було б навіть краще, якщо ви раніше писали якийсь код складання, щоб ви добре розуміли, як працює машина машини.

Залежно від рівня ходу, можна очікувати, що ви знаєте трохи про надскалярну обробку тощо.


1
Це справедливо лише в тому випадку, якщо ми вважаємо, що компілятор, про який йде мова, генерує машинний код, а не якийсь байт-код.
Мейсон Уілер

3

Якщо це взагалі щось подібне до класу компіляторів, які я взяв ще в кінці Крейди (приблизно, 1988 р.), Єдиними реальними передумовами будуть структури даних (особливо дерева та хеш-таблиці), певна мова складання (для створеного коду), можливо якась архітектура комп’ютера та будь-який клас викладав би такі речі, як регулярні вирази, кінцеві автомати, машини Тьюрінга тощо, хоча вони можуть бути охоплені частиною самого курсу компілятора (FWIW, у мене не було). Ви також хочете переконатися, що ви розумієте рекурсію.


2

Напевно, вам також потрібно буде пройти курс офіційних моделей та мов. Все, що охоплює основну ієрархію Чомпського, було б добре: Регулярні мови + Контекст вільних мов. Це тому, що важливо зрозуміти математичні основи синтаксичного аналізу, щоб ваш аналізатор був чистим, виконавським та правильним. Я думаю, що хороший клас компіляторів часто охоплює як регулярні вирази, так і LALR / LL (k) парсери та теорію за ними.


0

Оскільки вони говорять про оптимізацію коду, можливо, там буде якесь кодування мовного ланцюга. Тож може бути добре познайомитися з цим хоча б. Це залежатиме від структури цього конкретного курсу. Інакше, я маю на увазі, що лише наявність сильного набору навичок програмування має бути достатнім для вступу до класу компіляторів. Це буде дуже цінний клас.


0

Залежить від вашого універсалу, але більшість вимагає таких попередніх реквізитів:

=> Discrete Mathematics
Should include: propositional logic, predicate logic, set theory etc etc 

=> General Concepts of Programming (In any language of choice would be okay)
=> Algorithms and Data Structures
Should include: data structures, abstract data types, recursive algorithms
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.