Фаза срещу пропуск в компилатора
По принцип компилаторът е компютърна програма, която чете програма, написана на един език, който се нарича изходен език, и я превежда на друг език, който се нарича целеви език. Традиционно изходният език е език от високо ниво като C++, а целевият език е език от ниско ниво като асемблерния език. Така че като цяло компилаторите могат да се разглеждат като транслатори, които превеждат от един език на друг. Pass и Phase са два термина, често използвани с компилаторите. Броят преминавания на компилатор е броят пъти, в които той преминава през източника (или някаква форма на негово представяне). Компилаторът е разделен на части за удобство на конструкцията. Phase често се използва за извикване на такава отделна независима част от компилатор.
Какво е пропуск в компилатор?
Стандартен начин за класифициране на компилаторите е по броя на „преминаванията“. Обикновено компилирането е сравнително ресурсоемък процес и първоначално компютрите не са имали достатъчно памет, за да поддържат такава програма, която да върши цялата работа. Поради това ограничение на хардуерните ресурси в ранните компютри компилаторите бяха разбити на по-малки подпрограми, които вършеха своята частична работа, като преминаваха през изходния код (направиха „преминаване“през изходния код или някаква друга негова форма) и извършиха анализ, трансформации и задачи за превод отделно. Така че, в зависимост от тази класификация, компилаторите се идентифицират като еднопроходни или многопроходни компилатори.
Както подсказва името, компилаторите с едно преминаване компилират с едно преминаване. По-лесно е да се напише компилатор с едно преминаване и също така те работят по-бързо от компилаторите с много проходи. Следователно, дори по времето, когато сте имали ограничения на ресурсите, езиците са проектирани така, че да могат да бъдат компилирани с едно преминаване (напр. Pascal). От друга страна, типичният многопроходен компилатор се състои от няколко основни етапа. Първият етап е скенерът (известен още като лексикален анализатор). Скенерът чете програмата и я преобразува в низ от токени. Вторият етап е анализаторът. Той преобразува низа от токени в дърво за анализ (или абстрактно синтактично дърво), което улавя синтактичната структура на програмата. Следващият етап е интерпретирането на семантиката на синтактичната структура. Етапите на оптимизиране на кода и етапът на окончателното генериране на код следват това.
Какво е фаза в компилатор?
Терминът фаза често се появява, когато говорите за изграждане на компилатор. Първоначално компилаторите бяха всички прости части от единичен, монолитен софтуер, написан от един човек за компилиране на прост език. Но когато изходният код на езика, който трябва да се преведе, стане сложен и голям, компилаторът е разделен на множество (сравнително независими) фази. Предимството на наличието на различни фази е, че разработката на компилатора може да бъде разпределена между екип от разработчици. Освен това подобрява модулността и повторното използване, като позволява фазите да бъдат заменени с подобрени или допълнителни фази (като допълнителни оптимизации), които да бъдат добавени към компилатора. Процесът на разделяне на компилацията на фази беше въведен от PQCC (Production Quality Compiler-Compiler Project) в Carnegie Melon University. Те въведоха термините преден край, среден край и заден край. Повечето компилатори имат поне две фази. Но обикновено задният и предният край капсулират тези фази.
Каква е разликата между Phase и Pass в компилатора?
Phase и Pass са два термина, използвани в областта на компилаторите. Преминаването е един път, когато компилаторът преминава през (минава през) изходния код или някакво друго негово представяне. Обикновено повечето компилатори имат поне две фази, наречени преден край и заден край, докато те могат да бъдат или еднопроходни, или многопроходни. Phase се използва за класифициране на компилаторите според конструкцията, докато pass се използва за класифициране на компилаторите според начина, по който работят.