Какво е дизайн на компилатор? Видове, строителни инструменти, пример
Какво е компилатор?
Компилаторът е компютърна програма, която ви помага да трансформирате изходния код, написан на език от високо ниво, в машинен език от ниско ниво. Той превежда кода, написан на един език за програмиране, на друг език, без да променя значението на кода. Компилаторът също така прави крайния код ефективен, който е оптимизиран за време за изпълнение и пространство в паметта.
Процесът на компилиране включва основни механизми за превод и откриване на грешки. Процесът на компилиране преминава през лексикален, синтактичен и семантичен анализ в предния край и генериране на код и оптимизация в задния край.
Характеристики на компилаторите
- правилност
- Скорост на компилация
- Запазете правилното значение на кода
- Скоростта на целевия код
- Разпознаване на законни и незаконни програмни конструкции
- Добро отчитане/обработване на грешки
- Помощ за отстраняване на грешки в кода
Видове компилатори
Следват различните типове компилатор:
- Компилатори с едно преминаване
- Компилатори с два прохода
- Многопроходни компилатори
Компилатор с едно преминаване
При едно преминаване изходният код на компилатора директно се трансформира в машинен код. Например езикът Pascal.
Компилатор с две преминавания
Двупроходният компилатор е разделен на две секции, т.е.
- Преден край: Той преобразува правния код в междинно представителство (IR).
- Заден край: Той нанася IR на целевата машина
Методът на двупроходния компилатор също опростява процеса на пренасочване. Той също така позволява множество предни части.
Многопроходни компилатори
Многопроходният компилатор обработва изходния код или синтактичното дърво на програма няколко пъти. Той разделя голяма програма на множество малки програми и ги обработва. Разработва множество междинни кодове. Всички тези мултипроходи приемат изхода от предишната фаза като вход. Така че изисква по-малко памет. Известен е още като „широк компилатор“.
Задачи на компилатора
Основните задачи, изпълнявани от компилатора са:
- Разбива изходната програма на парчета и им налага граматична структура
- Позволява ви да конструирате желаната целева програма от междинното представяне и също така да създадете таблицата със символи
- Компилира изходния код и открива грешки в него
- Управлявайте съхранението на всички променливи и кодове.
- Поддръжка за отделна компилация
- Прочетете, анализирайте цялата програма и преведете до семантично еквивалент
- Превеждане на изходния код в обектен код в зависимост от типа машина
История на компилатора
Важна забележителност в историята на компилатора е следната:
- Думата „компилатор“ е използвана за първи път в началото на 1950-те години от Грейс Мъри Хопър.
- Първият компилатор е създаден от John Backum и неговата група между 1954 и 1957 г IBM.
- COBOL беше първият програмен език който е компилиран на множество платформи през 1960 г
- Проучването на проблемите със сканирането и парсирането е продължило през 1960-те и 1970-те години на миналия век, за да се осигури пълно решение.
Стъпки за системи за езикова обработка
Преди да научите за концепцията за компилатори, първо трябва да разберете няколко други инструмента, които работят с компилатори.
- Препроцесор: Препроцесорът се счита за част от компилатора. Това е инструмент, който създава входни данни за компилатора. Занимава се с обработка на макроси, разширяване, разширяване на езика и т.н.
- преводач: Интерпретаторът е като компилатор, който превежда език от високо ниво в машинен език от ниско ниво. Основната разлика между двете е, че интерпретаторът чете и трансформира кода ред по ред. Компилаторът чете целия код наведнъж и създава машинния код.
- Assembler: Превежда кода на асемблерния език в машинно разбираем език. Изходният резултат от асемблера е известен като обектен файл, който е комбинация от машинни инструкции, както и данните, необходими за съхраняване на тези инструкции в паметта.
- Звена: Линкерът ви помага да свържете и обедините различни обектни файлове, за да създадете изпълним файл. Всички тези файлове може да са били компилирани с отделни асемблери. Основната задача на линкера е да търси извикани модули в програма и да открие мястото в паметта, където се съхраняват всички модули.
- Товарач: Товарачът е част от операционната система, която изпълнява задачите за зареждане на изпълними файлове в паметта и тяхното стартиране. Той също така изчислява размера на програма, която създава допълнително пространство в паметта.
- Кръстосан компилатор: Крос компилаторът в дизайна на компилатора е платформа, която ви помага да генерирате изпълним код.
- Компилатор от източник към източник: Компилатор от източник към източник е термин, използван, когато изходният код на един език за програмиране се превежда в изходния код на друг език.
Инструменти за конструиране на компилатор
Инструментите за конструиране на компилатор бяха въведени, когато свързаните с компютъра технологии се разпространиха по целия свят. Те са известни също като компилатор-компилатори, компилатор-генератори или преводач.
Тези инструменти използват специфичен език или алгоритъм за определяне и имплементиране на компонента на компилатора. Следват примери за инструменти за конструиране на компилатор.
- Генератори на скенери: Този инструмент приема регулярни изрази като вход. Например LEX за Unix Operating система.
- Машини за превод, насочени към синтаксиса: Тези софтуерни инструменти предложете междинен код, като използвате дървото за анализ. Той има за цел да асоциира един или повече преводи с всеки възел на дървото за анализ.
- Генератори на парсери: Генераторът на анализатор приема граматика като вход и автоматично генерира изходен код, който може да анализира потоци от знаци с помощта на граматика.
- Автоматични генератори на кодове: Взема междинен код и го преобразува в машинен език.
- Двигатели за поток от данни: Този инструмент е полезен за оптимизиране на код. Тук информацията се предоставя от потребителя и междинният код се сравнява, за да се анализира всяка връзка. Известен е още като анализ на потока от данни. Помага ви да разберете как стойностите се предават от една част на програмата към друга част.
Защо да използвате компилатор?
- Компилаторът проверява цялата програма, така че няма синтактични или семантични грешки.
- Изпълнимият файл е оптимизиран от компилатора, така че се изпълнява по-бързо.
- Позволява ви да създадете вътрешна структура в паметта.
- Не е необходимо програмата да се изпълнява на същата машина, на която е създадена.
- Преведете цялата програма на друг език.
- Генериране на файлове на диск.
- Свържете файловете в изпълним формат.
- Проверете за синтактични грешки и типове данни.
- Помага ви да подобрите разбирането си за езиковата семантика.
- Помага за справяне с проблеми с езиковата производителност.
- Възможност за нетривиален програмен проект.
- Техниките, използвани за конструиране на компилатор, могат да бъдат полезни и за други цели.
Приложение на компилатори
- Дизайнът на компилатора помага за пълното внедряване на езици за програмиране от високо ниво.
- Поддръжка на оптимизация за компютър ArchiПаралелизъм на структурата.
- Проектиране на нови йерархии на паметта на машини.
- Широко използван за превод на програми.
- Използва се с други инструменти за продуктивност на софтуера.
Oбобщение
- Компилаторът е компютърна програма, която ви помага да трансформирате изходния код, написан на език от високо ниво, в машинен език от ниско ниво.
- Коректността, скоростта на компилиране, запазването на правилното значение на кода са някои важни характеристики на дизайна на компилатора.
- Компилаторите са разделени на три части: 1) еднопроходни компилатори, 2) двупроходни компилатори и 3) многопроходни компилатори.
- „Компилатор“ е думата, използвана за първи път в началото на 1950-те години от Грейс Мъри Хопър.
- Стъпките за системата за езикова обработка са: препроцесор, интерпретатор, асемблер, линкер/зареждащ механизъм.
- Важни инструменти за изграждане на компилатор са 1) Генератори на скенери, 2) Синтаксис-3) машини за насочен превод, 4) Генератори на парсери, 5) Автоматични генератори на код.
- Основната задача на компилатора е да провери цялата програма, така че да няма синтактични или семантични грешки.