Kompilator jest translatorem, który przekształca język źródłowy (język wysokiego poziomu) w język obiektowy (język maszynowy). W przeciwieństwie do kompilatora, interpreter jest programem, który imituje wykonanie programów napisanych w języku źródłowym. Inną różnicą między kompilatorem a interpreterem jest to, że kompilator konwertuje cały program za jednym zamachem, z drugiej strony interpreter konwertuje program, biorąc pojedynczą linię na raz.
Oczywiście, postrzeganie ludzi i urządzeń elektronicznych, takich jak komputer, jest różne. Ludzie mogą zrozumieć wszystko poprzez języki naturalne, ale komputer nie. Komputer potrzebuje tłumacza do konwersji języków zapisanych w formie czytelnej dla człowieka na formę czytelną dla komputera.
Kompilator i interpreter są typami tłumacza języka. Co to jest tłumacz języka? To pytanie może pojawić się w twoim umyśle.
Tłumacz języka jest oprogramowaniem, które tłumaczy programy z języka źródłowego, które są w formie czytelnej dla człowieka, na równoważny program w języku obiektowym. Język źródłowy jest zazwyczaj językiem programowania wysokiego poziomu, a język obiektowy jest zazwyczaj językiem maszynowym rzeczywistego komputera.
Zawartość: Compiler Vs Interpreter
- Comparison Chart
- Definition
- Key Differences
- Conclusion
Comparison Chart
.
Podstawa porównania | Kompilator | Interpreter |
---|---|---|
Wejście | Przyjmuje cały program na raz. | Przyjmuje pojedynczy wiersz kodu lub instrukcji na raz. |
Wyjście | Generuje pośredni kod obiektowy. | Nie wytwarza żadnego pośredniego kodu obiektowego. |
Mechanizm działania | Kompilacja jest wykonywana przed wykonaniem. | Kompilacja i wykonanie odbywają się jednocześnie. |
Szybkość | Porównywalnie szybszy | Słabszy |
Pamięć | Wymaganie pamięci jest większe ze względu na tworzenie kodu obiektowego. | Wymaga mniej pamięci, ponieważ nie tworzy pośredniego kodu obiektowego. |
Błędy | Wyświetla wszystkie błędy po kompilacji, wszystkie w tym samym czasie. | Wyświetla błąd każdej linii po kolei. |
Wykrywanie błędów | Trudne | Łatwiejsze porównywalnie |
Dotyczące języków programowania | C, C++, C#, Scala, typescript używa kompilatora. | 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 maszynowy lub język niskiego poziomu oraz zgłasza błędy występujące w programie. Przekształca cały kod źródłowy za jednym razem lub może zająć wiele przejść, aby to zrobić, ale w końcu, użytkownik dostaje skompilowany kod, który jest gotowy do wykonania.
Kompilator działa na fazach, różne etapy mogą być pogrupowane w dwóch częściach, które są:
- Faza analizy kompilatora jest również określane jako front-end, w którym program jest podzielony na podstawowe części składowe i sprawdza gramatyki, semantyki i składni kodu, po którym kod pośredni jest generowany. 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 optymalizowany, a kod docelowy jest generowany. Faza syntezy obejmuje optymalizator kodu i generator kodu.
Fazy kompilatora
Teraz zrozummy działanie każdego etapu w szczegółach.
- Analizator leksykalny: Skanuje kod jako strumień znaków, grupuje sekwencję znaków w leksemy i wyprowadza sekwencję tokenów w odniesieniu do języka programowania.
- Analizator składni: W tej fazie tokeny, które są generowane w poprzednim etapie, są sprawdzane względem gramatyki języka programowania, czy wyrażenia są poprawne składniowo, czy nie. W tym celu tworzy drzewa parsujące.
- Analizator semantyczny: Weryfikuje, czy wyrażenia i stwierdzenia wygenerowane w poprzedniej fazie są zgodne z regułą języka programowania, czy nie, i tworzy adnotowane drzewa parseków.
- 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 używany najczęściej.
- Optymalizator kodu: Poprawia wymagania czasowe i przestrzenne programu. Aby to zrobić, eliminuje zbędny kod obecny w programie.
- Generator kodu: Jest to końcowa faza kompilatora, w której generowany jest kod docelowy dla konkretnej maszyny. Wykonuje on operacje takie jak zarządzanie pamięcią, przypisywanie rejestrów i optymalizację specyficzną dla danej maszyny.
Tablica symboli jest w pewnym sensie strukturą danych, która zarządza identyfikatorami wraz z odpowiednim typem danych, które przechowuje. Error Handler wykrywa, raportuje, poprawia błędy napotkane pomiędzy różnymi fazami kompilatora.
Definicja interpretera
Interpreter jest alternatywą dla implementacji języka programowania i wykonuje tę samą pracę co kompilator. Interpreter wykonuje leksykację, parsowanie i sprawdzanie typów podobnie do kompilatora. Ale interpreter przetwarza drzewo składni bezpośrednio w celu uzyskania dostępu do wyrażeń i wykonania instrukcji, a nie generowania kodu z drzewa składni.
Interpreter może wymagać przetwarzania tego samego drzewa składni więcej niż raz, co jest powodem, dla którego interpretacja jest stosunkowo wolniejsza niż wykonanie skompilowanego programu.
Kompilacja i interpretacja prawdopodobnie połączone w celu wdrożenia języka programowania. W którym kompilator generuje kod pośredniego poziomu, a następnie kod ten jest interpretowany, a nie kompilowany do kodu maszynowego.
Zastosowanie interpretera jest korzystne podczas tworzenia programu, gdzie najważniejszą częścią jest możliwość szybkiego przetestowania modyfikacji programu, a nie wydajne uruchomienie programu.
Kluczowe różnice między kompilatorem a interpreterem
Przyjrzyjrzyjmy się głównym różnicom między kompilatorem a interpreterem.
- Kompilator bierze program jako całość i tłumaczy go, ale interpreter tłumaczy program zdanie po zdaniu.
- Kod pośredni lub kod docelowy jest generowany w przypadku kompilatora. As against interpreter doesn’t create intermediate code.
- A compiler is comparatively faster than Interpreter as the compiler take the whole program at one go whereas interpreter compile each line of code after the other.
- The compiler requires more memory than interpreter because of the generation of object code.
- Kompilator przedstawia wszystkie błędy jednocześnie, i trudno jest wykryć błędy, w przeciwieństwie do interpretera, który wyświetla błędy każdej instrukcji po kolei, i łatwiej jest wykryć błędy.
- W kompilatorze, gdy błąd występuje w programie, zatrzymuje jego tłumaczenie i po usunięciu błędu cały program jest tłumaczony ponownie. Przeciwnie, gdy błąd ma miejsce w tłumaczu, zapobiega jego tłumaczenie i po usunięciu błędu, tłumaczenie wznawia.
- W kompilatorze, proces wymaga dwóch kroków, w którym po pierwsze kod źródłowy jest tłumaczony na program docelowy, a następnie wykonywane. Podczas gdy w Interpreter Jest to proces jednoetapowy, 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 stosowany w językach takich jak PHP, Ruby, Python, itp.
Konkluzja
Kompilator i interpreter mają na celu wykonanie tej samej pracy, ale różnią się procedurą działania, Kompilator pobiera kod źródłowy w sposób zagregowany, podczas gdy Interpreter pobiera części składowe kodu źródłowego, tj, oświadczenie po oświadczeniu.
Ale zarówno kompilator, jak i interpreter mają pewne zalety i wady, takie jak języki interpretowane są uważane za wieloplatformowe, tj. kod jest przenośny. To również nie wymaga kompilacji instrukcji wcześniej w przeciwieństwie do kompilatora, który jest oszczędność czasu. Skompilowane języki są szybsze w odniesieniu do procesu kompilacji.
.