Фаза против прохода в компиляторе
В общем, компилятор - это компьютерная программа, которая читает программу, написанную на одном языке, который называется исходным языком, и переводит ее на другой язык, который называется целевым языком. Традиционно исходный язык был языком высокого уровня, таким как C ++, а целевой язык был языком низкого уровня, таким как язык ассемблера. Таким образом, в целом компиляторы можно рассматривать как переводчики, которые переводят с одного языка на другой. Pass и Phase - два термина, часто используемые с компиляторами. Количество проходов компилятора - это количество раз, которое он проходит по источнику (или какой-либо форме его представления). Компилятор разбит на части для удобства построения. Фаза часто используется для вызова такой отдельной независимой части компилятора..
Что такое проход в компиляторе?
Стандартный способ классификации компиляторов по количеству «проходов». Обычно компиляция является относительно ресурсоемким процессом, и изначально компьютерам не хватало памяти для размещения такой программы, которая выполнила всю работу. Из-за этого ограничения аппаратных ресурсов в ранних компьютерах компиляторы были разбиты на более мелкие подпрограммы, которые выполняли свою частичную работу, просматривая исходный код («пропуская» исходный код или какую-либо другую его форму), и выполняли анализ , трансформации и задачи перевода отдельно. Таким образом, в зависимости от этой классификации, компиляторы идентифицируются как однопроходные или многопроходные компиляторы..
Как следует из названия, однопроходные компиляторы компилируются за один проход. Проще написать однопроходный компилятор, а также они работают быстрее, чем многопроходные компиляторы. Поэтому даже в то время, когда у вас были ограничения по ресурсам, языки разрабатывались таким образом, чтобы их можно было компилировать за один проход (например, Паскаль). С другой стороны, типичный многопроходный компилятор состоит из нескольких основных этапов. Первым этапом является сканер (также известный как лексический анализатор). Сканер читает программу и преобразует ее в строку токенов. Второй этап - парсер. Он преобразует строку токенов в дерево разбора (или абстрактное синтаксическое дерево), которое фиксирует синтаксическую структуру программы. Следующим этапом является интерпретация семантики синтаксической структуры. Этапы оптимизации кода и финальная стадия генерации кода следуют этому.
Что такое фаза в компиляторе?
Термин фаза часто возникает, когда вы говорите о построении компилятора. Первоначально компиляторы представляли собой простые части монолитного программного обеспечения, написанные одним человеком для составления простого языка. Но когда исходный код переводимого языка становится сложным и большим, компилятор разбивается на несколько (относительно независимых) фаз. Преимущество наличия разных этапов состоит в том, что разработка компилятора может быть распределена среди команды разработчиков. Кроме того, это улучшает модульность и повторное использование, позволяя заменять фазы на улучшенные или добавлять дополнительные фазы (такие как дальнейшая оптимизация) в компилятор. Процесс разделения компиляции на фазы был введен PQCC (Проект компилятора компилятора качества продукции) в Университете Карнеги-Мелона. Они ввели термины передний конец, средний конец и задний конец. Большинство компиляторов имеют как минимум две фазы. Но обычно задняя часть и передняя часть заключают в себе эти фазы.
В чем разница между фазой и проходом в компиляторе?
Phase и Pass - два термина, используемые в области компиляторов. Передача - это один раз, когда компилятор пропускает (проходит) исходный код или какое-либо другое его представление. Как правило, большинство компиляторов имеют как минимум две фазы, называемые передним и задним, в то время как они могут быть однопроходными или многопроходными. Фаза используется для классификации компиляторов в соответствии с конструкцией, в то время как проход используется для классификации компиляторов в соответствии с тем, как они работают..