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