- •Теория языков программирования и методы трансляции
- •1. Языки и кризис программирования.
- •2. Математические методы описания языков программирования.
- •3. Основные понятия и определения.
- •1. S→ab→aAb→aaAb→aaaB→aaabB→aaabbB→aaabbbB→aaabbbb.
- •2. S→ab→AbB→AbbB→AbbbB→Abbbb→aAbbbb→aaAbbbb→aaabbbb
- •Load a mult b
- •4. Этапы построения транслятора.
- •5. Основные методы поиска ошибок в исходных текстах программ.
- •Устройство управления
- •6. Современное состояние и перспективы развития программирования трансляторов.
- •7. Лексический анализ. Интуитивный подход.
- •8. Классы лексем и их особенности.
- •9. Формирование таблиц лексем и построение дескрипторного текста исходной программы.
- •На основании составленных таблиц можно записать входной текст через введённые дескрипторы (дескрипторный текст):
- •10. Синтаксический анализ. Метод рекурсивного спуска.
- •11. Пример грамматики упрощенного языка Паскаль.
- •12. Пример программы на упрощенном Паскале.
- •Var sum, sumsq, I, value, mean, variance : integer;
- •13. Алгоритм синтаксического анализа по методу рекурсивного спуска.
- •Void read()
- •Void idlist()
- •Void assign()
- •15. Лексический анализ, регулярные грамматики и конечные автоматы.
- •17. Грамматики типа ll(k). Алгоритмы построения магазинных анализаторов.
- •18. Детерминированный синтаксический анализ сверху вниз.
- •19. Правила определения детерминированного мп-разпознавателя по ll(1) грамматике.
- •20. Заключение.
- •Литература
Load a mult b
ADD c
4. Этапы построения транслятора.
Перевод с одного языка на другой, в общем случае, состоит в изменении алфавита, лексики и синтаксиса языка программы с сохранением её семантики. Процесс трансляции исходной программы в объектную обычно разбивается на несколько независимых подпроцессов (фаз трансляции), которые реализуются в соответствии с блоками транслятора.
Справочник
образов объектов входной и объектной
программ
Лексический
анализ Синтаксический
анализ Семантический
анализ и
синтез объектной программы
Вход
Ошибки
Выход
Рис.4.1. Упрощенная функциональная модель транслятора.
Удобно считать основными фазами трансляции лексический анализ, синтаксический анализ, семантический анализ и синтез объектной программы.
Тем не менее, во многих реальных компиляторах эти фазы разбиваются на несколько подфаз, могут быть и другие фазы (например, оптимизация объектного кода). На рис.5 показана упрощенная функциональная модель транслятора. В соответствии с этой моделью входная программа, прежде всего, подвергается лексической обработке. Цель лексического анализа Цель лексического анализа − перевод исходной программы на внутренний язык компилятора – дескрипторный текст, состоящий из ссылок на построенные таблицы лексем. Одновременно проводится лексический контроль – выявление в программе недопустимых для данного входного языка лексем.
Синтаксический анализатор воспринимает выход лексического анализатора и переводит последовательность лексем в форму промежуточной программы. Промежуточная программа является по существу, представлением синтаксического дерева программы. Последнее отражает структуру исходной программы, т.е. порядок и связи между её операторами. В ходе построения синтаксического дерева выполняется синтаксический контроль – выявление синтаксических ошибок в программе.
Фактическим выходом синтаксического анализатора может быть последовательность команд, необходимых для построения промежуточной программы.
Синтез объектной программы начинается, как правило, с распределения памяти для основных программных объектов. Затем производится исследование каждого предложения исходной программы, и генерируются семантически эквивалентные предложения объектного языка. В качестве входной информации здесь используется синтаксическое дерево программы и выходные таблицы лексического анализатора – таблица идентификаторов, таблица констант, меток и т.д.
Анализ дерева позволяет выявить последовательность генерируемых команд объектной программы, а по таблице идентификаторов определяются типы команд, которые допустимы для операндов в генерируемых командах, например, команды для фиксированной или плавающей точек.
Непосредственно генерации объектной программы часто предшествует семантический анализ, который включает в себя различные виды семантической обработки. Один из видов – проверка семантических соглашений в программе. Например, единственность описания каждого идентификатора, определение переменной производится до её использования и т.д. Семантический анализ может выполняться и на более поздних фазах трансляции, например, на фазе оптимизации программы, которая тоже может включаться в транслятор. Цель оптимизации – сокращение временных ресурсов, ресурсов оперативной памяти.