Faza kontra przepustka w kompilatorze
Ogólnie rzecz biorąc, kompilator to program komputerowy, który odczytuje program napisany w jednym języku, zwanym językiem źródłowym, i tłumaczy go na inny język, zwany językiem docelowym. Tradycyjnie język źródłowy był językiem wysokiego poziomu, takim jak C++, a język docelowy był językiem niskiego poziomu, takim jak Asembler. Tak więc ogólnie kompilatory mogą być postrzegane jako tłumacze, którzy tłumaczą z jednego języka na inny. Pass i Phase to dwa terminy często używane w kompilatorach. Liczba przebiegów kompilatora to liczba przejść przez źródło (lub jakąś formę jego reprezentacji). Kompilator jest podzielony na części dla wygody konstrukcji. Faza jest często używana do wywołania takiej pojedynczej niezależnej części kompilatora.
Co to jest przepustka w kompilatorze?
Standardowym sposobem klasyfikacji kompilatorów jest liczba „przejść”. Zwykle kompilacja jest procesem wymagającym stosunkowo dużych zasobów i początkowo komputery nie miały wystarczającej ilości pamięci, aby pomieścić taki program, który wykonał całą pracę. Ze względu na to ograniczenie zasobów sprzętowych we wczesnych komputerach, kompilatory zostały podzielone na mniejsze podprogramy, które wykonały swoje częściowe zadanie, przeglądając kod źródłowy (przepuszczając źródło lub inną jego formę) i przeprowadzając analizę, przekształcenia i zadania tłumaczeniowe osobno. Tak więc, w zależności od tej klasyfikacji, kompilatory są identyfikowane jako kompilatory jednoprzebiegowe lub wieloprzebiegowe.
Jak sugeruje nazwa, kompilatory jednoprzebiegowe kompilują się w jednym przebiegu. Łatwiej jest napisać kompilator jednoprzebiegowy, a także działają szybciej niż kompilatory wieloprzebiegowe. Dlatego nawet w czasach, gdy mieliśmy ograniczenia zasobów, języki były projektowane tak, aby można je było skompilować w jednym przebiegu (np. Pascal). Z drugiej strony typowy kompilator wieloprzebiegowy składa się z kilku głównych etapów. Pierwszym etapem jest skaner (znany również jako analizator leksykalny). Scanner odczytuje program i konwertuje go na ciąg tokenów. Drugim etapem jest parser. Konwertuje ciąg tokenów do drzewa parsowania (lub abstrakcyjnego drzewa składni), które przechwytuje strukturę składniową programu. Kolejny etap to interpretacja semantyki struktury składniowej. Etapy optymalizacji kodu i etap końcowego generowania kodu następują po tym.
Co to jest faza w kompilatorze?
Faza terminów często pojawia się, gdy mówimy o budowie kompilatora. Początkowo kompilatory były prostymi kawałkami pojedynczego, monolitycznego oprogramowania napisanego przez jedną osobę w celu kompilacji prostego języka. Ale kiedy kod źródłowy języka, który ma zostać przetłumaczony, staje się złożony i duży, kompilator został podzielony na wiele (względnie niezależnych) faz. Zaletą posiadania różnych faz jest to, że rozwój kompilatora można rozdzielić między zespół programistów. Ponadto poprawia modułowość i ponowne użycie, umożliwiając zastąpienie faz ulepszonymi lub dodanie dodatkowych faz (takich jak dalsze optymalizacje) do kompilatora. Proces podziału kompilacji na fazy został wprowadzony przez PQCC (Production Quality Compiler-Compiler Project) na Uniwersytecie Carnegie Melon. Wprowadzili terminy przód, środek i tył. Większość kompilatorów ma co najmniej dwie fazy. Ale zazwyczaj backend i front end zawierają te fazy.
Jaka jest różnica między fazą a przejściem w kompilatorze?
Phase i Pass to dwa terminy używane w obszarze kompilatorów. Przejście to jednorazowy moment, w którym kompilator przechodzi (przechodzi) przez kod źródłowy lub inną jego reprezentację. Zazwyczaj większość kompilatorów ma co najmniej dwie fazy zwane frontend i backend, podczas gdy mogą być one jednoprzebiegowe lub wieloprzebiegowe. Faza służy do klasyfikowania kompilatorów według konstrukcji, natomiast pass służy do klasyfikowania kompilatorów według sposobu ich działania.