Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЯП_шпоры.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.21 Mб
Скачать

Вопрос 31

31. Соотношение классов КС-языков показано на рисунке 3.9.

Рисунок 3.9 – Соотношение между различными классами КС-языков

Класс детерминированных КС-языков полностью совпадает с классом LR-языков и, более того, с классом LR(1)-языков. То есть, доказано, что для любого детерминированного КС-языка существует задающая его LR(1)-грамматика. Проблема состоит в том, что не всегда возможно найти такую грамматику, и нет формализованного алгоритма, как ее построить в общем случае.

Также LL-языки являются собственным подмножеством LR-языков. Языки простого предшествования, в свою очередь, также являются собственным подмножеством LR-языков. Языки простого предшествования и LL-языки несопоставимы между собой.

Вопрос 32. Определение 4.1. Транслятор – это программа, которая переводит входную программу на исходном (входном) языке в эквивалентную ей выходную программу на результирующем (выходном) языке.

Результатом работы транслятора будет результирующая программа, но только в том случае, если текст исходной программы является правильным, т.е. не содержит ошибок с точки зрения синтаксиса и семантики входного языка. Если исходная программа неправильная, то результатом работы транслятора будет сообщение об ошибке (как правило, с дополнительными пояснениями и указанием места ошибки в исходной программе).

Определение 4.2. Компилятор – это транслятор, который осуществляет перевод исходной программы в эквивалентную ей объектную программу на языке машинных команд или на языке ассемблера.

Компилятор отличается от транслятора тем, что его результирующая программа всегда должна быть написана на языке машинных кодов или на языке ассемблера. Результирующая программа транслятора, в общем случае, может быть написана на любом языке - возможен, например, транслятор программ с языка Pascal на язык С. Примерами компилируемых языков программирования являются Pascal, С.

Определение 4.3. Ассемблер – компилятор, который переводит каждую команду исходной программы в одну машинную команду.

Определение 4.4. Интерпретатор - это программа, которая воспринимает входную программу на исходном языке и выполняет ее.

Интерпретатор, так же как и компилятор, анализирует текст исходной программы, но не порождает результирующей программы, а сразу же выполняет исходную в соответствии с ее смыслом, заданным семантикой входного языка. Таким образом, результатом работы интерпретатора будет результат, заданный смыслом исходной программы, в том случае, если эта программа правильная, или сообщение об ошибке, если исходная программа неверна. Примерами интерпретируемых языков программирования являются Java Script, VB Script.

Вопрос 33 Общая схема работы компилятора

33. Основные функции компилятора:

1) проверка исходной цепочки символов на принадлежность к входному языку;

2) генерация выходной цепочки символов на языке машинных команд или ассемблере.

Процесс компиляции состоит из двух основных этапов: анализа и синтеза. На этапе анализа выполняется распознавание текста исходной программы и заполнение таблиц идентификаторов. Результатом этапа служит некоторое внутреннее представление программы, понятное компилятору.

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

Данные этапы состоят из более мелких стадий, называемых фазами. Состав фаз и их взаимодействие зависит от конкретной реализации компилятора. Но в том или ином виде в каждом компиляторе выделяются следующие фазы:

  1. лексический анализ;

  2. синтаксический анализ;

  3. семантический анализ;

  4. подготовка к генерации кода;

  5. генерация кода.