Professional Documents
Culture Documents
Л. 2.1
Л. 2.1
Л. 2.1
4 Езици за програмиране
“Компютрите правят това, което им
казваме да правят, а не това което искаме
да правят.”
11
Представители на машинно зависимите езици са асемблерите.
Машинно независимите езици се делят на различни групи в
зависимост от критериите, по които ги оценяваме, и подходите и
методите за програмиране, които “изповядват”. Машинно
независимите езици са известни още и като езици от високо ниво. За
да може с езици от високо ниво да се създават програми, изпълними
от компютър, се разработват т.нар. транслатори.
Транслация е процес на превеждане на програма, написана на
един език, наречен изходен език (source), в еквивалентна програма на
втори език, наречен език-цел (target).
Обикновено, езикът-цел е машинния език за съответния процесор.
Програма преведена на машинен език се нарича машинен код. Друго
предимство на езиците от високо ниво е това, че транслаторите могат
да направят диагностика на програмата по време на нейното
превеждане на машинен език, което помага да се открият допуснати
или вероятни грешки.
Грешките най-общо се разделят на два основни вида, в зависимост от
фазата на откриването им. Те биват: грешки по време на транслиране
и грешки по време на изпълнение. Най-често грешките по време на
транслация са синтактични, т.е. транслаторът е открил, че в текста на
програмата нещо не отговаря на правилата на езика. Когато
съществуват синтактични грешки, транслаторът не генерира машинен
код. Съществуват компилатори, които при откриване на синтактична
грешка продължават с транслирането на програмата от следващата
възможна конструкция, като с това се цели да се открият наведнъж
повече синтактични грешки.
Грешките по време на изпълнение са по-трудни за откриване. Много
често те могат да останат скрити дълго време. Обикновено ги
откриваме, като изпълняваме многократно крайната програма с
различни входни данни. Отговорност на разработчика е да тества
програмата за възможни логически грешки. И тъй както няма
безгрешни хора, се предполага, че няма и безгрешни програми, които
се създават без да се налага да се поправят. Още повече, че и самите
транслатори, а и операционните системи (виж следващата точка) са
също програми, написани от хора.
Накратко можем да кажем, че транслаторите имат следните фази:
Лексичен анализ – извършва се граматичен разбор на програмата
12
Синтактичен анализ – разпознават се основните конструкции на
езика и се създава междинна форма (описание) на програмата
Интерпретация – разпознава се точния смисъл на конструкциите,
открити при синтактичния анализ
Оптимизация – търсят се начини за повишаване бързодействието
на програмата и/или съкращаване на обема й.
Генериране на кода – съставят се машинните команди
Свързване - окончателно се формира програмния код, като към
него се добавят библиотеки или други модули (от вече готови
алгоритми), който впоследствие може да бъде изпълнен.
Транслаторите биват два основни вида:
интерпретатори
компилатори.
Най-характерното различие между тях е, че имат различни фази,
както по време на транслация, така и по време на изпълнение на
програмата. Интерпретаторите превеждат програмите по
конструкции, като всеки път, когато дадена конструкция е преведена,
тя се изпълнява. Компилаторите от своя страна първо превеждат
цялата програма на машинен език и след това програмата е готова за
изпълнение.
Всеки един от различните видове транслатори има свои предимства и
недостатъци:
Предимствата на компилатора са: по-добър за настройка, по-
ефективен краен код, по-бърз при многократно изпълнение на
една програма.
Предимства на интерпретатора: по-лесен за създаване, по-лесен за
настройване (или настройка) на програмата.
Съществуват и хибридни транслатори. Те съдържат както елементи
на компилация, така и елементи на интерпретация. При тях
програмата се превежда до програма на междинен език с компилатор.
След това тази програма бива оптимизирана и чак след това се
предава за изпълнение на интерпретатор.
1.5 Задачи
Задача 1. Да се опишат двата основни вида транслатори. Какви са
принципните разлики между тях?
13