- •Проектирование трансляторов
- •Проектирование трансляторов
- •1 Лабораторная работа «Построение лексического анализатора» 8
- •2 Лабораторная работа «Перевод исходной программы в обратную польскую запись» 21
- •3 Лабораторная работа № 3 «Перевод опз исходного выражения в текст на выходном языке. Генерация машинного кода» 47
- •4 Лабораторная работа № 4 «Построение синтаксического анализатора» 55
- •Введение
- •1Лабораторная работа «Построение лексического анализатора»
- •1.1Основные понятия лексического анализа
- •1.2Лексемы простого pl-подобного языка программирования
- •1.3Функции и таблицы лексического анализа
- •1.4Диаграмма состояний лексического процессора
- •2Лабораторная работа «Перевод исходной программы в обратную польскую запись»
- •2.1Понятие обратной польской записи
- •2.2Алгоритм Дейкстры
- •2.3Перевод выражений, содержащих переменные с индексами, в опз
- •2.4 Перевод в опз выражений, содержащих указатели функций
- •2.5Перевод условных выражений в опз
- •2.6Перевод оператора присваивания в опз
- •2.7Перевод оператора безусловного перехода и меток в опз
- •2.8Перевод условного оператора в опз
- •2.9Перевод описаний переменных и процедурных блоков в опз
- •2.10Комплексный пример перевода исходной программы в опз
- •3Лабораторная работа № 3 «Перевод опз исходного выражения в текст на выходном языке. Генерация машинного кода»
- •3.1Базовые понятия
- •3.2Правила генерации машинного кода
- •3.3Комплексный пример перевода опз исходной программы в машинный код
- •4Лабораторная работа № 4 «Построение синтаксического анализатора»
- •Варианты заданий
- •Порядок выполнения лабораторных работ и требования к их оформлению
- •Операторы описания процедур и функций
- •Оператор безусловного перехода и метки
- •Операторы описания процедур и функций
- •Оператор условного перехода
- •Операторы описания данных (идентификаторов и массивов)
- •Проектирование трансляторов
Варианты заданий
Каждый вариант задания представляет собой пару: входной язык и машинный, или выходной, язык (см. табл. 5.1). В качестве входного языка предлагается один из языков программирования высокого уровня, в который должно быть обязательно включено следующее подмножество языковых конструкций и операторов:
идентификаторы;
числовые константы целого типа и вещественного типа, представленные с фиксированной и плавающей точкой;
символьные (строковые) константы;
переменные с индексами (массивы и элементы массивов);
комментарии (строчные и блочные);
имена функций пользователя;
арифметические операции;
операции сравнения (меньше, больше, равно, не равно, меньше или равно, больше или равно);
операторы описания данных (идентификаторов и массивов);
операторы описания процедур и функций (если предусмотрены в языке);
операторы условного и безусловного перехода;
метки (если предусмотрены в языке).
В качестве машинного языка предлагаются различные языки высокого уровня и язык Ассемблера (см. таблицу 5.1).
Таблица 5.1
№ варианта |
Входной язык |
Выходной язык |
|
Паскаль |
Си |
|
Бейсик |
Си |
|
Perl |
Си |
|
Фортран |
Си |
|
JavaScript |
Си |
|
Паскаль |
Perl |
|
Бейсик |
Perl |
|
Си |
Perl |
|
Фортран |
Perl |
|
JavaScript |
Perl |
|
Паскаль |
Фортран |
|
Бейсик |
Фортран |
|
Perl |
Фортран |
|
Си |
Фортран |
|
JavaScript |
Фортран |
|
Паскаль |
Бейсик |
|
Си |
Бейсик |
|
Perl |
Бейсик |
|
Фортран |
Бейсик |
|
JavaScript |
Бейсик |
|
Паскаль |
JavaScript |
|
Бейсик |
JavaScript |
|
Perl |
JavaScript |
|
Фортран |
JavaScript |
|
Си |
JavaScript |
|
Паскаль |
Ассемблер |
|
Си |
Ассемблер |
|
Бейсик |
Ассемблер |
|
Perl |
Ассемблер |
|
Фортран |
Ассемблер |
|
JavaScript |
Ассемблер |
|
Си |
Паскаль |
|
Бейсик |
Паскаль |
|
Perl |
Паскаль |
|
Фортран |
Паскаль |
|
JavaScript |
Паскаль |
Приступая к выполнению лабораторных работ, студент должен внимательно ознакомиться со своим вариантом задания, сформировать согласованное с преподавателем подмножество конструкций выбранной версии входного языка и используемые инструментальные средства разработки.