Разница между Phase и Pass в компиляторе

Разница между Phase и Pass в компиляторе
Разница между Phase и Pass в компиляторе

Видео: Разница между Phase и Pass в компиляторе

Видео: Разница между Phase и Pass в компиляторе
Видео: 🤯Дилара призналась в отношениях с Бустером 2024, Ноябрь
Anonim

Phase vs Pass в компиляторе

В общем, компилятор - это компьютерная программа, которая читает программу, написанную на одном языке, который называется исходным языком, и переводит ее на другой язык, который называется целевым языком. Традиционно исходным языком был язык высокого уровня, такой как C++, а целевым языком был язык низкого уровня, такой как язык ассемблера. Таким образом, в целом компиляторы можно рассматривать как переводчики, которые переводят с одного языка на другой. Pass и Phase - два термина, которые часто используются в компиляторах. Количество проходов компилятора - это количество раз, которое он проходит по исходному коду (или какой-либо форме его представления). Компилятор разбит на части для удобства построения. Фаза часто используется для вызова такой отдельной независимой части компилятора.

Что такое проход в компиляторе?

Стандартный способ классификации компиляторов - по количеству «проходов». Обычно компиляция является относительно ресурсоемким процессом, и первоначально у компьютеров не было достаточно памяти для хранения такой программы, которая выполняла бы всю работу. Из-за этого ограничения аппаратных ресурсов на ранних компьютерах компиляторы были разбиты на более мелкие подпрограммы, которые частично выполняли свою работу, просматривая исходный код (выполняя «проход» по исходному коду или какой-либо другой его форме) и выполняя анализ., преобразования и задачи перевода отдельно. Таким образом, в зависимости от этой классификации, компиляторы идентифицируются как однопроходные или многопроходные компиляторы.

Как следует из названия, однопроходные компиляторы компилируются за один проход. Однопроходный компилятор написать проще, и он работает быстрее, чем многопроходный компилятор. Поэтому даже во времена, когда у вас были ограничения по ресурсам, языки разрабатывались таким образом, чтобы их можно было скомпилировать за один проход (например, Паскаль). С другой стороны, типичный многопроходный компилятор состоит из нескольких основных этапов. Первый этап - сканер (также известный как лексический анализатор). Сканер читает программу и преобразует ее в строку токенов. Второй этап - парсер. Он преобразует строку токенов в дерево синтаксического анализа (или абстрактное синтаксическое дерево), которое фиксирует синтаксическую структуру программы. Следующим этапом является интерпретация семантики синтаксической структуры. Далее следуют этапы оптимизации кода и финальный этап генерации кода.

Что такое фаза в компиляторе?

Термин фаза часто появляется, когда вы говорите о построении компилятора. Первоначально компиляторы представляли собой любые простые фрагменты единого монолитного программного обеспечения, написанного одним человеком для компиляции простого языка. Но когда исходный код переводимого языка становится сложным и большим, компилятор разбивается на несколько (относительно независимых) этапов. Преимущество наличия разных фаз состоит в том, что разработку компилятора можно распределить между командой разработчиков. Кроме того, он улучшает модульность и повторное использование, позволяя заменять фазы улучшенными или добавлять в компилятор дополнительные фазы (например, дальнейшую оптимизацию). Процесс разделения компиляции на этапы был введен PQCC (Production Quality Compiler-Compiler Project) в Университете Карнеги-Мелон. Они ввели термины передний конец, средний конец и задний конец. Большинство компиляторов имеют как минимум две фазы. Но обычно эти этапы инкапсулируются между серверной частью и интерфейсом.

В чем разница между Phase и Pass в компиляторе?

Phase и Pass - два термина, используемые в области компиляторов. Проход - это единственный раз, когда компилятор проходит (просматривает) исходный код или какое-либо другое его представление. Как правило, большинство компиляторов имеют как минимум две фазы, называемые интерфейсной частью и серверной частью, при этом они могут быть либо однопроходными, либо многопроходными. Phase используется для классификации компиляторов в соответствии с конструкцией, а pass используется для классификации компиляторов в зависимости от того, как они работают.

Рекомендуемые: