Проектирование транслятора с языка L1={Паскаль, Си} на язык L2={Ассемблер}

Страницы работы

Содержание работы

ЗАДАНИЕ НА ЛАБОРАТОРНЫЕ РАБОТЫ  ПО «МЕТОДАМ ТРАНСЛЯЦИИ»

Задание: Проектирование транслятора с языка 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 - язык арифметических выражений,    S- язык идентификаторов.

Остальные символы терминальные.

П1)  Подмножество языка включает:               ► условные конструкции типа if   then   else   и  if    then;

► логические выражения;

► арифметические выражения;

► инструкции присваивания.

Определяемое множество задается схемой:                             S → S1 S | S1

S1 → if P then S1 else S| if P then S| S2

S2 → S3:=A

П2) Подмножество языка включает:                ► оператор цикла   while   do;

► логические выражения;

► арифметические выражения;

► инструкции присваивания.

Определяемое множество задается схемой:                          S → S1 S | S1

S1 → while P do S| 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 - язык арифметических выражений; S- язык идентификаторов. Остальные символы терминальные.

Определяемое множество задается схемой:                          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 S| if (A) S1

S1 → if (P)  S1  else S| 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 - язык арифметических выражений; S- язык идентификаторов. Остальные символы терминальные.

Определяемое множество задается схемой:                          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

Информация о работе