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