Najwidoczniej percepcyjność ludzi i urządzeń elektronicznych, takich jak komputer, jest inna. Ludzie mogą zrozumieć cokolwiek poprzez naturalne języki, ale komputer nie. Komputer potrzebuje tłumacza do konwersji języków zapisanych w czytelnej formie do postaci czytelnej dla komputera.
Kompilator i interpreter to typy tłumacza języka. Czym jest tłumacz języka? To pytanie może pojawić się w twoim umyśle.
Translator języka to oprogramowanie, które tłumaczy programy z języka źródłowego, które są w czytelnej formie do postaci odpowiadającego programu w języku obiektowym. Język źródłowy jest ogólnie językiem programowania wysokiego poziomu, a język obiektowy jest zwykle językiem maszynowym rzeczywistego komputera.
Wykres porównania
Podstawa do porównania | Kompilator | Interpretator |
---|---|---|
Wkład | Zajmuje cały program na raz. | Zajmuje jedną linię kodu lub instrukcji na raz. |
Wydajność | Generuje pośredni kod obiektowy. | Nie tworzy żadnego pośredniego kodu obiektowego. |
Mechanizm roboczy | Kompilacja jest wykonywana przed wykonaniem. | Kompilacja i wykonanie odbywają się jednocześnie. |
Prędkość | Stosunkowo szybciej | Wolniej |
Pamięć | Wymagania dotyczące pamięci są bardziej związane z tworzeniem kodu obiektowego. | Wymaga mniej pamięci, ponieważ nie tworzy pośredniego kodu obiektowego. |
Błędy | Pokaż wszystkie błędy po kompilacji, wszystkie w tym samym czasie. | Wyświetla błąd każdej linii jeden po drugim. |
Wykrywanie błędów | Trudny | Łatwiej porównywalnie |
Pertaining Programming languages | C, C ++, C #, Scala, maszynopis używa kompilatora. | Java, PHP, Perl, Python, Ruby używa interpretera. |
Definicja kompilatora
Kompilator to program, który czyta program napisany w języku wysokiego poziomu i konwertuje go na język maszyny lub niskiego poziomu i zgłasza błędy występujące w programie. Konwertuje cały kod źródłowy za jednym razem lub może wykonać wiele przejść, ale w końcu użytkownik otrzymuje skompilowany kod, który jest gotowy do wykonania.
Kompilator działa na etapach; różne etapy można podzielić na dwie części, które są:
- Analiza Faza kompilatora jest również określana jako front end, w którym program jest podzielony na podstawowe części składowe i sprawdza gramatykę, semantyczną i składnię kodu, po którym generowany jest kod pośredni. Faza analizy obejmuje analizator leksykalny, analizator semantyczny i analizator składni.
- Faza syntezy kompilatora jest również znana jako back-end, w którym kod pośredni jest zoptymalizowany i generowany jest kod docelowy. Faza syntezy obejmuje optymalizator kodu i generator kodu.
FAZY KOMPILERA
Teraz zrozumiemy szczegółowo działanie każdego etapu.
- Lexical Analyzer : skanuje kod jako strumień znaków, grupuje sekwencję znaków w leksemów i wyprowadza sekwencję znaków w odniesieniu do języka programowania.
- Analyzer składni : W tej fazie tokeny wygenerowane na poprzednim etapie są sprawdzane pod względem gramatyki języka programowania, niezależnie od tego, czy wyrażenia są poprawne pod względem składni, czy nie. Robi to parsować drzewa.
- Analizator semantyczny : Weryfikuje, czy wyrażenia i instrukcje wygenerowane w poprzedniej fazie są zgodne z zasadą programowania języka czy nie, i tworzy anotowane parsowania.
- Generator kodu pośredniego : Generuje równoważny kod pośredni kodu źródłowego. Istnieje wiele reprezentacji kodu pośredniego, ale TAC (Three Address Code) jest najczęściej używany.
- Optymalizator kodu : poprawia wymagania dotyczące czasu i miejsca w programie. W tym celu eliminuje zbędny kod obecny w programie.
- Generator kodu : Jest to ostatnia faza kompilatora, w którym generowany jest kod docelowy dla określonego komputera. Wykonuje operacje takie jak zarządzanie pamięcią, przypisanie rejestru i optymalizacja maszyny.
Tabela symboli jest w pewnym sensie strukturą danych, która zarządza identyfikatorami wraz z odpowiednim typem przechowywanych danych. Program obsługi błędów wykrywa, raportuje i koryguje błędy występujące pomiędzy różnymi fazami kompilatora.
Definicja tłumacza
Interpreter jest alternatywą dla implementacji języka programowania i działa tak samo jak kompilator. Tłumacz wykonuje lxing, parsowanie i sprawdzanie typów podobne do kompilatora. Ale interpreter przetwarza drzewo składniowe bezpośrednio, aby uzyskać dostęp do wyrażeń i instrukcji execute zamiast generowania kodu z drzewa składni.
Interpreter może wymagać przetworzenia tego samego drzewa składni więcej niż jeden raz, dlatego interpretacja jest stosunkowo wolniejsza niż wykonanie skompilowanego programu.
Kompilacja i interpretacja prawdopodobnie zostały połączone w celu implementacji języka programowania. W którym kompilator generuje kod poziomu pośredniego, kod jest interpretowany zamiast kompilowany do kodu maszynowego.
Zatrudnienie tłumacza jest korzystne podczas opracowywania programu, w którym najważniejszą częścią jest szybkie sprawdzenie modyfikacji programu, a nie wydajne działanie programu.
Kluczowe różnice między kompilatorem a tłumaczem
Spójrzmy na główne różnice między kompilatorem a tłumaczem.
- Kompilator bierze program jako całość i tłumaczy go, ale interpreter tłumaczy instrukcję programu według instrukcji.
- Kod pośredni lub kod docelowy jest generowany w przypadku kompilatora. W przeciwieństwie do interpretera nie tworzy kodu pośredniego.
- Kompilator jest porównywalnie szybszy niż interpreter, ponieważ kompilator kompletuje cały program za jednym razem, podczas gdy interpretery kompilują każdy wiersz kodu po drugim.
- Kompilator wymaga więcej pamięci niż interpreter, ponieważ generuje kod obiektowy.
- Kompilator przedstawia jednocześnie wszystkie błędy i trudno jest wykryć błędy w wyświetlaniu błędów interpretera każdego zdania pojedynczo i łatwiej jest wykryć błędy.
- W kompilatorze, gdy wystąpi błąd w programie, zatrzymuje jego tłumaczenie i po usunięciu błędu cały program jest ponownie tłumaczony. Wręcz przeciwnie, gdy błąd występuje w tłumaczu, uniemożliwia to jego tłumaczenie, a po usunięciu błędu wznawia się tłumaczenie.
- W kompilatorze proces wymaga dwóch etapów, w których najpierw kod źródłowy jest tłumaczony na program docelowy, a następnie wykonywany. W tłumaczeniu Jest to proces w jednym kroku, w którym kod źródłowy jest kompilowany i wykonywany w tym samym czasie.
- Kompilator jest używany w językach programowania takich jak C, C ++, C #, Scala itp. Z drugiej strony Interpreter jest używany w językach takich jak Java, PHP, Ruby, Python itp.
Wniosek
Kompilator i interpreter są przeznaczone do wykonywania tej samej pracy, ale różnią się procedurą operacyjną, kompilator przyjmuje kod źródłowy w sposób zagregowany, podczas gdy interpreter przyjmuje składowe części kodu źródłowego, tj. Instrukcję przez instrukcję.
Chociaż zarówno kompilator, jak i interpreter mają pewne zalety i wady, takie jak języki interpretowane, są uważane za wieloplatformowe, tzn. Kod jest przenośny. Nie trzeba też kompilować instrukcji wcześniej niepodobnych do kompilatora, co oszczędza czas. Skompilowane języki są szybsze w odniesieniu do procesu kompilacji.