Проектирование трансляторов с языков программирования

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

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

Новосибирский государственный технический университет

Кафедра ВТ

Курсовая работа по дисциплине «Системное программное обеспечение»

Раздел: «Теория языков программирования и методы трансляции»

Работа выполнена:                                       Работа проверена:                              Студент:     Баркалов Д.С.                Преподаватель: Малявко А. А.

          Вариант:     412121

Группа:       АМ-210

Факультет: АВТ

Новосибирск 2005г.

Оглавление

Описание заданного варианта языка. 3

1.     Разработка словесного описания лексики, синтаксиса и семантики заданного варианта языка. 4

2.     Разработка системы регулярных выражений, определяющих лексику заданного варианта языка. 6

3.     Разработка совокупности действий и построение лексического анализатора. 8

4.     Разработка формальной грамматики класса LL(1), определяющей синтаксис заданного языка. 9

5.     Разработка расширения нисходящего синтаксического акцептора для преобразования последовательности лексем в постфиксную запись. 12

6.     Разработка преобразователя ПФЗ в последовательность тетрад. 16

7.     Приложение. Тексты разработанных программ. 18

Заключение. 24

Список литературы.. 24


Введение

Цель работы: практическое применение теоретических основ проектирования трансляторов с языков программирования; освоение средств автоматизации построения трансляторов; разработка элементов транслятора для учебного языка.

Язык предназначен для программирования потоковых вычислений. Программа на таком языке состоит из совокупности блоков одного из назначений:

-  описания общей памяти;

-  определения вычислений;

-  описания связей между блоками.

Структура блока:

{<идентификатор блока> [{ <заголовок>}] <тело> [{<концевик> }] }

Блоки не могут быть вложенными. Все то, что находится вне блоков, считается комментариями.

Описание заданного варианта языка

Вариантом задания к настоящей курсовой работе задан следующий учебный язык:

412121,  т.е. в соответствии с таблицами задания на РГР это:

1.  Идентификатор блока: <имя блока>:<тип блока>. Имя блока: буквенно-числовое;

2.  Типы блоков: mem, calc, link.

3.  Идентификация входов/выходов: <имя блока><см. таблицу><имя входа/выхода>  ->  -^.

4.  Связи (выход одного блока -> вход другого блока) определяются: Только в блоках описаний

5.  Оператор присваивания (E - выражение V – имя входа/выхода/локальное): V=E

6.  Условный оператор: ifLEO

                                          [elseO]

Примечание: оператора цикла в языке нет. Все прочие языковые конструкции выбираются студентом самостоятельно.

1.  Разработать словесное описание лексики, синтаксиса и семантики заданного варианта языка. Написать простую тестовую программу (программы), содержащую все заданные элементы языка. Вручную выполнить интерпретацию программы. Эту программу использовать впоследствии для проверки элементов разрабатываемого транслятора.

Учебный язык программирования поточных вычислений, заданный вариантом к данной курсовой работе может быть описан следующим образом:

Имеется три типа блоков, каждый из которых осуществляет свои специфические функции. Это блоки:

  • Описания общей памяти (mem);
  • Определения вычислений (calc);
  • Описания связей между блоками (link);

Блоки описания общей памяти содержат значения, которые всегда присутствуют на выходах этих блоков (в отличие от значений на выходах блоков calc, о которых будет сказано ниже). Эти значения, очевидно, нужны для потоковых вычислений всегда. Внутри блоков данного типа могут располагаться объявления переменных нескольких предусмотренных языком типов данных (int – целое, double – вещественное удвоенной точности, long – длинное целое).

Блоки вычислений (calc) предназначены для осуществления каких-либо вычислений. Внутри блоков этого типа могут производиться различные арифметические и условные операторы, предусмотренные в учебном языке. Значение на выходе блока типа calc вычисляется и немедленно «отправляется» дальше для последующих вычислительных действий.

Блоки описания связей между блоками, как следует из названия, предназначены для установления связей между блоками других типов. В ходе разработки учебного языка было принято решение использовать внутри блока связей одну или несколько конструкций вида:

<идентификатор блока>-^<имя выхода> to <идентификатор блока>-><имя входа>.

Из такого формата определения связей между блоками следует ограничение: один вход/выход данного конкретного блока может быть связан только с одним выходом/входом другого блока.

Т.к. блоки выполняют строго определённые функции, то тела блоков будут различными для разных типов, т.е. тело блока описания общей памяти mem можно легко отличить от тела блока calc. Данный факт используется в дальнейшем при разработке синтаксиса языка.

Похожие материалы

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