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