Очевидно е, че възприемчивостта на хората и електронното устройство като компютър е различна. Хората могат да разберат всичко чрез естествените езици, но компютърът не го прави. Компютърът се нуждае от преводач, за да преобразува езиците, написани в четлива за човека форма, в компютърно четима форма.
Компилаторът и интерпретаторът са типове преводач на езици. Какво е Език преводач? Този въпрос може да възникне в ума ви.
Езиковият преводач е софтуер, който превежда програмите от изходния език, които са в четлива за човека форма, в еквивалентна програма в езика на обекта. Изходният език обикновено е език за програмиране на високо ниво, а езикът на обекта е обикновено машинен език на действителен компютър.
Сравнителна таблица
Основа за сравнение | съставител | преводач |
---|---|---|
Вход | Отнема цяла програма в даден момент. | Отнема един ред код или инструкция в даден момент. |
продукция | Той генерира междинен обектен код. | Той не произвежда никакъв междинен обектен код. |
Работен механизъм | Компилацията се извършва преди изпълнение. | Компилирането и изпълнението се извършват едновременно. |
скорост | Сравнително по-бързо | По-бавно |
памет | Изискването за памет се дължи повече на създаването на обектен код. | Тя изисква по-малко памет, тъй като не създава междинен обектен код. |
грешки | Покажете всички грешки след компилация, всички по едно и също време. | Показва грешка на всеки ред един по един. |
Откриване на грешка | Трудно | По-лесно сравнително |
Определяне на езици за програмиране | C, C ++, C #, Scala, машинопис използва компилатор. | Java, PHP, Perl, Python, Ruby използва преводач. |
Определение на компилатор
Компилаторът е програма, която чете програма, написана на езика на високо ниво, и я преобразува в машината или езика на ниско ниво и съобщава за грешките в програмата. Той конвертира целия изходен код наведнъж или може да отнеме няколко прохода, но накрая потребителят получава компилирания код, който е готов за изпълнение.
Компилаторът работи на фази; различните етапи могат да бъдат групирани в две части, които са:
- Фаза на анализ на компилатора се нарича и предния край, в който програмата се разделя на основни съставни части и проверява граматиката, семантиката и синтаксиса на кода, след което се генерира междинен код. Фазата на анализ включва лексикален анализатор, семантичен анализатор и синтактичен анализатор.
- Фаза на синтез на компилатора също е известна като задния край, в който е оптимизиран междинен код и се генерира целевият код. Фазата на синтез включва оптимизатор на кодове и генератор на кодове.
ФАЗИ НА СЪСТАВЧИКА
Сега да разберем подробно работата на всеки етап.
- Лексикален анализатор : Сканира кода като поток от символи, групира последователността от символи в лексеми и извежда поредица от символи по отношение на езика за програмиране.
- Анализатор на синтаксис : В тази фаза токените, генерирани в предишния етап, се проверяват спрямо граматиката на програмния език, независимо дали изразите са синтактично правилни или не. Това прави разбирането на дърветата за това.
- Семантичен анализатор : Той проверява дали изразите и отчетите, генерирани в предишната фаза, следват правилото на езика за програмиране или не, и създава дърветата с анотиран анализ.
- Генератор на среден код : Той генерира еквивалентен междинен код на изходния код. Има много представяния на междинния код, но TAC (Three Address Code) е най-широко използваният.
- Оптимизатор на код : Той подобрява изискванията за време и пространство на програмата. За тази цел той елиминира наличния в програмата излишен код.
- Генератор на кодове : Това е последната фаза на компилатора, в която се генерира целеви код за определена машина. Той изпълнява операции като управление на паметта, присвояване на регистър и специфична за машината оптимизация.
Таблицата със символи е донякъде структура на данни, която управлява идентификаторите заедно със съответния тип данни, които съхранява. Error Handler открива, докладва, коригира грешките, които срещат между различните фази на компилатора.
Определение за преводач
Интерпретаторът е алтернатива за прилагане на език за програмиране и извършва същата работа като компилатора. Интерпретаторът извършва лексиране, парсиране и проверка на типа, подобно на компилатора. Но интерпретаторът обработва синтаксичното дърво директно за достъп до изрази и изпълнява оператор, вместо да генерира код от синтактичното дърво.
Интерпретаторът може да изисква повече от веднъж обработка на същото синтактично дърво, поради което интерпретацията е сравнително по-бавна от изпълнението на компилираната програма.
Компилирането и интерпретацията вероятно са комбинирани за прилагане на език за програмиране. Когато компилаторът генерира код на междинно ниво, тогава кодът се интерпретира, а не се компилира с машинен код.
Използването на преводач е изгодно по време на разработването на програми, където най-важната част е да може да се тества бързо промяна на програмата, вместо да се изпълнява ефективно програмата.
Ключови разлики между компилатора и интерпретатора
Нека разгледаме основните разлики между компилатора и интерпретатора.
- Компилаторът приема програма като цяло и я превежда, но интерпретаторът превежда програмно изявление по изявление.
- В случай на компилатор се генерира междинен код или целеви код. В сравнение с интерпретатора не създава междинен код.
- Компилаторът е сравнително по-бърз от интерпретатора, тъй като компилаторът приема цялата програма наведнъж, докато интерпретаторите съставят всеки ред код след друг.
- Компилаторът изисква повече памет от интерпретатора заради генерирането на обектен код.
- Компилаторът представя всички грешки едновременно, и е трудно да се открият грешките в интерпретатора на контрастните грешки при всяко изявление един по един и е по-лесно да се открият грешки.
- В компилатор, когато възникне грешка в програмата, той спира превода и след премахване на грешка цялата програма се превежда отново. Напротив, когато в интерпретатора се случи грешка, тя предотвратява нейния превод и след отстраняване на грешката преводът се подновява.
- В компилатор процесът изисква две стъпки, при които първоначално изходният код се превежда в целевата програма, след което се изпълнява. Докато сте в интерпретатора Това е процес от един етап, при който изходният код се компилира и изпълнява едновременно.
- Компилаторът се използва в езици за програмиране като C, C ++, C #, Scala и др. От друга страна интерпретаторът се използва на езици като Java, PHP, Ruby, Python и др.
заключение
Компилаторът и интерпретаторът са предназначени да изпълняват една и съща работа, но се различават по оперативна процедура, компилаторът взема изходния код по агрегиран начин, докато интерпретаторът приема съставни части на изходния код, т.е.
Въпреки че и компилаторът, и интерпретаторът имат някои предимства и недостатъци, като интерпретираните езици се считат за междуплатформен, т.е. кодът е преносим. Също така не е необходимо да компилирате инструкция за разлика от компилатора, който спестява време. Компилираните езици са по-бързи по отношение на процеса на компилиране.