Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоргалка / Общие сведения об ЭВМ.doc
Скачиваний:
129
Добавлен:
28.01.2014
Размер:
1.2 Mб
Скачать

17.Программный модуль. Этапы обработки программ на эвм.

Для написания программ на различных языках программирования необходимо иметь средства их перевода в машинный язык. Эти функции выполняют специальные программы-переводчики – трансляторы. Трансляторы для ЭВМ преобразуют исходную программу на одном из языков программирования в некоторую стандартную форму, называемую объектной программой. Существует 3 вида трансляторов: ассемблеры, компиляторы и интерпретаторы. При написании программы на языке Ассемблер программист использует монимонические обозначения машинных команд и адресов (имена и метки). В процессе трансляции Ассемблер заменяет все монимонические обозначения (коды команд и имена) их двоичными кодами. Для сокращения текста при повторении идентичных частей программы в отдельные языки Ассемблера введены средства описания и обработки макрокоманд, или макросы.

Простейший Ассемблер является однопроходным и преобразует исходную программу за один просмотр, но при этом возникают трудности, связанные с вычислениями адресов имен, которые определены позже.

Основная идея двухпроходного Ассемблера проста: на 1 проходе все символы (имена и метки) собираются в таблицу символов с соответствующими значениями адресов. На втором генерируется машинная программа на основании построенной на первом проходе таблицы символов.

Компилятор – системная программа, которая воспринимает на входе текст программы на языке высокого уровня, а генерирует на выходе программу на Ассемблере или машинном языке. На вход компилятора поступает исходная программа, а на выходе получается объектная программа. Объектная программа реализует те же действия, что и исходная, каждый оператор которой заменяется одной или несколькими машинными командами.

В состав любого компилятора входят 3 основных компонента: лексический анализатор (сканер), синтаксический анализатор и генератор машинных команд.

Принцип действия анализатора можно описать формальными моделями, но для генерации не удается создать формальное представление. На фазе лексического анализа читается строка оператора, которая разбивается на единицы, называется лексемами (if, do,and, имена переменных, знаки операций +, -, *, /, специальные символы).

А1:=А1+1 разбивается на следующие лексемы: А1-имя, 1-литерал, := и + - знаки операций.

После разбиения программы на лексемы следует фаза синтаксического анализа, называемая грамматическим разбором, на которой проверяется правильность построения операторов. В процессе синтаксического анализа структура программы преобразуется во внутреннее представление (в виде матрицы списка).

Последним этапом является процесс генерации кодов, который создает программу на машинном языке. При этом возможна вначале генерация Ассемблерной программы, транслируемой ее в машинный код. В этом случае, вместо каждой строки промежуточной формы после грамматической заготовки на Ассемблере.

Взаимодействие трех описанных компонентов компилятора может быть описано различным образом. Наиболее общим случаем является случай многопроходного компилятора.

Сканер на первом проходе читает исходную программу и представляет ее в форме лексем. Этот файл на 2 проходе считывается синтаксическим анализатором, который выдает новое представление программы, например, в виде постфиксной записи, наконец, этот файл читается на 3 проходе, который создает объектный код программы. Хотя такая структура компилятора является относительно низкоскоростной в связи с работой с файлами. Тем не менее она обладает рядом преимуществ: 1.Каждая фаза компиляции относительно независима, т.е. каждый проход реализуется самостоятельно; 2.Данная структура отличается гибкостью. Для увеличения скорости компиляции она в современных компиляторах сокращена до 1 прохода.

Во втором случае, синтаксический анализ играет роль основной программы, обращается к сканеру, получается от него лексему за лексемой, пока не построит постфиксную запись, затем он обращается и ГК, которая формирует ОК для конкретного фрагмента. В этом случае оптимизация кода затруднительна.

Интерпретатор – системная программа, которая транслирует каждый оператор исходной программы в промежуточной код, интерпретируя его посредством 1 или нескольких команд, и выполняя эти команды.

В отличие от компилятора интерпретатор не генерирует объектный код, а выдает результаты работы выполняемых операторов исходной программы.

Структура интерпретатора похожа на структуру компилятора, т.к. она содержит блоки лексического и синтаксического анализа, но вместо генератора кода интерпретатор включает специальную программу интерпретации внутренней формы.

Постфиксная запись. Программист обычно описывает операции, используя инфиксную форму записи, в которой знак операции ставится между операндами. (А+В)*С. Вычисление этой записи является непростой задачей. Операцию нельзя выполнить до вычисления второго операнда, который в свою очередь может быть сложным выражением. Эту трудность можно обойти, если использовать постфиксную запись, в которой знак операции стоит за операндами. А+В соответствует АВ+. Постфиксная запись обладает 2 свойствами: 1.Для любого сложного выражения не нужны скобки. АВ+С*; 2.К моменту считывания очередного оператора, операнды уже прочитаны.