Задание: Проектирование транслятора с языка L1={Паскаль, Си} на язык L2={Ассемблер}.
Этапы проектирования транслятора:
1) проектирование блока лексического анализа (сканер) – лабораторная работа №1;
2) проектирование блока систаксического анализа – лабораторная работа №2;
3) проектирование генератора кода - лабораторная работа №3.
Требования к лабораторным работам:
1. Язык проектирования - Паскаль, Си++.
2. Транслятор может быть реализован в виде одно-, двух- или трехпроходной схемы.
3. В ЛР1 необходимо разработать и реализовать:
- постоянные таблицы, содержащие алфавит языка, зарезервированные слова, знаки операций, разделители и пр.
- таблицы переменных и констант в виде таблиц с вычисляемым входом ( с использованием объектов class). Вид хеш-функции и метод рехеширования задает разработчик.
- результатом работы сканера должен быть файл лексем.
4. В ЛР2 необходимо реализовать синтаксический анализатор с использованием одного из табличных методов (LL-, LR-метод , метод предшествования). Результатом работы синтаксического анализатора является дерево разбора или постфиксная запись.
5. Результатом работы генератора кода должна быть программа на Ассемблере, которая может быть выполнена в отладочном режиме.
6. По окончании каждого этапа проектирования ( каждой лабораторной работы) необходимо оформить промежуточный отчет. Для защиты всего проекта необходимо подготовить итоговый отчет, оформленный по общепринятым требованиям.
Варианты заданий:
Исходный язык задается схемой: N={S, S1, S2} - нетерминальный словарь ; P – язык логических выражений,
A - язык арифметических выражений, S3 - язык идентификаторов.
Остальные символы терминальные.
П1) Подмножество языка включает: ► условные конструкции типа if then else и if then;
► логические выражения;
► арифметические выражения;
► инструкции присваивания.
Определяемое множество задается схемой: S → S1 S | S1
S1 → if P then S1 else S1 | if P then S1 | S2
S2 → S3:=A
П2) Подмножество языка включает: ► оператор цикла while do;
► логические выражения;
► арифметические выражения;
► инструкции присваивания.
Определяемое множество задается схемой: S → S1 S | S1
S1 → while P do S1 | S2S1 | S2
S2 → S3:=A
П3) Подмножество языка включает: ► оператор цикла repeat until;
► логические выражения;
► арифметические выражения;
► инструкции присваивания.
Определяемое множество задается схемой: S → S1 S | S1
S1 → repeat S1 until P | S2S1 | S2
S2 → S3:=A
П4) Подмножество языка включает: ► оператор цикла for to do;
► арифметические выражения;
► инструкции присваивания.
Определяемое множество задается схемой: S → S1 S | S1
S1 → for S2 to A do S1 | S2S1 | S2
S2 → S3:=A
П5) Подмножество языка включает: ►оператор выбора case of;
►арифметические выражения;
►инструкции присваивания.
N={S, S1, S2, S3, S4} - нетерминальный словарь ; B – язык констант; A - язык арифметических выражений; S5 - язык идентификаторов. Остальные символы терминальные.
Определяемое множество задается схемой: S → S1 S | S1
S1 → case A of S2 end;
S2 → B: S3 ; S2 | B: S3
S3→ S4 S3 | S4
S4 → S5:=A | S1
С1) Подмножество языка включает: ►условные конструкции типа if else и if ;
►логические выражения;
►арифметические выражения;
►инструкции присваивания.
Определяемое множество задается схемой: S → S1 S | S1
S1 → if (A) S1 else S1 | if (A) S1
S1 → if (P) S1 else S1 | if (P) S1 | S2
S2 → S3=A;
C2) Подмножество языка включает: ► оператор цикла while ;
►логические выражения;
►арифметические выражения;
►инструкции присваивания.
Определяемое множество задается схемой: S → S1 S | S1
S1 → while (P) S1 | while (A) S1 | S2S1 | S2
S2 → S3 =A;
C3) Подмножество языка включает: ► оператор цикла do while;
►логические выражения; арифметические выражения;
►инструкции присваивания.
Определяемое множество задается схемой: S → S1 S | S1
S1 → do S1 while (P) | do S1 while (A) | S2S1 | S2
S2 → S3 =A;
C4) Подмножество языка включает: ►оператор цикла for ;
►логические выражения; арифметические выражения;
►инструкции присваивания.
Определяемое множество задается схемой: S → S1 S | S1
S1 → for (S2 ; P ; S2) S1 | S2S1 | S2
S2 → S3 =A
C5) Подмножество языка включает: ► оператор выбора switch;
► арифметические выражения;
► инструкции присваивания.
N={S, S1, S2, S3, S4} - нетерминальный словарь ; B – язык констант; A - язык арифметических выражений; S5 - язык идентификаторов. Остальные символы терминальные.
Определяемое множество задается схемой: S → S1 S | S1
S1 → switch (A) S2 defoult S4; | switch (A) S2
S2 → case B: S3 ; break; S2 | case B: S3 ; break;
S2 → case B: S3 ; | case B: S3 ; S2
S3→ S4 S3 | S4
S4 → S5=A | S1
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.