бесплатные рефераты

Программно-методический комплекс для обучения процессу создания компиляторов

Продолжение таблицы 13

Шаги

Таблица кодов лексем

Имя в программе

Элемент грамматики БНФ

Результат сравнения

Формируемая таблица переходов

Выполненное действие

текущая позиция

следующая позиция

позиция

табл

код, специф

тип

имя

текущая конструкция

тип

табл

код

(для ТС)

строка

столбец

вносимое значение

строка

столбец

118

25

1

27

ТС

;

<assign>

9

5

9

1

конец конструкции

119

25

1

27

ТС

;

9

1

8

3

переход

120

25

1

27

ТС

;

<stmt>

8

3

8

1

конец конструкции

121

25

1

27

ТС

;

8

1

7

3

переход

122

25

1

27

ТС

;

;

<stmt-list>

-ТС

1

27

+

7

3

$1,27

7

4

123

26

1

4

ТС

END

<stmt-list>

7

4

7

1

конец конструкции

124

26

1

4

ТС

END

7

1

1

8

переход

125

26

1

4

ТС

END

END

<prog>

ТС

1

4

+

1

8

$1,4

1

9

126

27

1

30

ТС

.

.

<prog>

ТС

1

30

+

1

9

$1,30

1

10

127

1

10

1

1

конец конструкции

128

1

1

Таблица 14 - Формируемая таблица переходов

1

2

3

4

5

6

7

8

9

10

1

PROGRAM

$1,1

<prog-name>

@2,2

VAR

$1,2

<dec-list>

@3,2

BEGIN

$1,3

<stmt-list>

@7,2

END

$1,4

.

$1,30

2

<prog-name>

@1,4

prog1

$2,1

;

$1,27

3

<dec-list>

@1,6

<dec>

@4,2

;

$1,27

4

<dec>

@3,3

<id-list>

@5,2

:

$1,31

<type>

@6,2

5

<id-list>

@4,3

a

$2,2

,

$1,29

b

$2,3

,

$1,29

c

$2,4

6

<type>

@4,5

INTEGER

$1,5

7

<stmt-list>

@1,8

<stmt>

@8,2

;

$1,27

8

<stmt>

@7,3

<assign>

@9,2

9

<assign>

@8,3

a

$2,2

:=

$1,28

<exp>

@10,2

10

<exp>

@9,5

<term>

@11,2

+

$1,32

<term>

@13,2

11

<term>

@10,3

<factor>

@12,2

12

<factor>

@11,3

1

$3,1

13

<term>

@10,5

<factor>

@14,2

*

$1,34

<factor>

@15,2

14

<factor>

@13,3

b

$2,3

15

<factor>

@13,5

(

$1,35

<exp>

@16,2

)

$1,36

16

<exp>

@15,4

<term>

@17,2

-

$1,33

<term>

@19,2

17

<term>

@16,3

<factor>

@18,2

18

<factor>

@17,3

a

$2,2

19

<term>

@16,5

<factor>

@20,2

20

<factor>

@19,3

c

$2,4

105

2.4.6 Построение деревьев

Для наглядного отображения полученных грамматик используют синтаксические деревья, пример показан на рисунке 3.

На основе введенных значений формируемой таблицы переходов в программу SINAN строится (формируется) синтаксическое дерево (дерево грамматического разбора).

Деревья могут быть представлены в вертикально как показано на рисунке 5, а и горизонтально - рисунок 5, б.

Рассмотрим выражение: a := c - (1 + b)

а)

б)

Рисунок 5 - а) вертикальное дерево, б) горизонтальное дерево

Рисунок 6 - Горизонтальное синтаксическое дерево

На рисунке 6 показано горизонтальное синтаксическое дерево, построенное по следующей программе:

PROGRAM prog1;

VAR a,b:INTEGER;

s:STRING;

BEGIN

b:=78;

s:='Дерево';

WRITE(s);

a:=b*(2+a);

END.

2.4.7 Семантический анализ

Функции семантического анализатора:

ведение табличных символов;

включение неявной информации (по умолчанию);

обнаружение ошибок;

макрообработка и операции, выполняемые во время компиляции.

После проведения синтаксического анализа формируется дерево грамматического разбора, представленное в виде таблицы. По этому дереву на этапе семантического анализа производится новый смотр.

Одно из предназначений семантического анализатора - поиск ошибок. Существуют следующие критерии поиска ошибок:

не должно быть повторного описания идентификатора;

все идентификаторы, используемые в программе, должны быть описаны;

запрещается присвоение значению переменной одного типа значение другого типа (возможно только присвоение вещественному типу целого значения);

результат деления “ / “ всегда вещественное число;

перед использованием переменной (идентификатора) ей должно быть присвоено значение (данная ошибка не относится к критическим).

в цикле FOR, структуре <index-exp>, идентификатор должен быть целого типа, как и оба значения возвращаемые структурой <exp>.

Пример неправильно написанных элементов программы.

VAR

A,B,C:INTEGER;

C,D:REAL - повторное описание переменной C

BEGIN

A:=3.5; - присвоение переменной целого типа вещественного значения

B:=A/2; - присвоение переменной целого типа вещественного значения, образующегося при делении

D:=F*5; - не описана переменная F

FOR A:=1 TO D DO C:=C+A - переменная D вещественного типа

END.

2.5 Формирование промежуточного кода

Промежуточный код может быть представлен в виде польского кода или тетрад. Так как в данной работе не используется стек, следовательно польская форма записи не подходит. Принимаем за основу метод четверок (тетрады).

Разница между этими методами в том, что результат каждого из этапов в тетрадах представляется отдельной промежуточной переменной, в связи с чем требуется большое количество памяти на хранение этих переменных. Представление промежуточных данных кроме всего имеет большую наглядность по этому за основу был принят метод четверок (тетрад).

Циклы

При адресации используются следующие команды.

C $BR - безусловный переход на позицию (индекс) в массиве, содержащем тетрады.

L $BRL - безусловный переход на метку

L - имя в таблице символов. Значение его - адрес перехода. Основная проблема при реализации этого оператора - определение адреса перехода.

<операнд1> <операнд2> BRZ|$BRM|$BRP|$BRMZ|$BRPZ

<операнд1> - значение арифметического выражения,

<операнд2> - номер или место позиции (адрес).

$BRZ - переход по значению 0,

$BRM - переход по значению <0,

$BRP - переход по значению >0,

$BRMZ - переход по значению <=0,

$BRPZ - переход по значению >=0.

Реализация циклов не вызывает сложностей. Имея оператор безусловного перехода и условный оператор, можно сконструировать цикл "вручную". Например, цикл вида

FOR I=N1 TO N2 DO operator

может быть сконструирован на исходном языке:

I := N1;

L1: IF I>N2 THEN GOTO L2;

operator;

I:=I+1;

GOTO L1;

L2:

Представление конструкции FOR I=N1 TO N2 DO operator в виде тетрад показано в таблице 15.

Таблица 15 - конструкция for в виде тетрад

Выражения

Тетрады (четверки)

I:=N1

:=

N1

I

L1

IF I>N2 THEN GOTO L2

(IF N2-I<0 THEN GOTO L2)

-

$BRM

N2

L2

I

T1

T1

operator

operator

I:=I+1

+

I

1

I

GOTO L1

$BR

L1

L2

Далее рассмотрены циклы WHILE, REPEAT, а также конструкция IF…THEN…ELSE.

В таблице 16 разобрана конструкция WHILE a<b DO operator.

Таблица 16 - Конструкция while

Выражения

Тетрады (четверки)

L1

IF a-b>0 THEN

GOTO L2

-

$BRP

a

L2

b

T1

T1

operator

operator

GOTO L1

$BR

L1

L2

В таблице 17 разобрана конструкция REPEAT operator UNTIL a<b

Таблица 17 - Конструкция repeat

Выражения

Тетрады (четверки)

L1

operator

operator

IF a-b<0 THEN

GOTO L1

-

$BRM

a

L1

b

T1

T1

В таблице 18 разобрана конструкция IF a>b THEN operator1 ELSE operator2.

Таблица 18 - Конструкция if

Выражения

Тетрады (четверки)

L1

IF a-b<0 THEN

GOTO L2

-

$BRM

a

L2

b

T1

T1

operator1

operator1

GOTO L3

$BR

L1

L2

operator2

operator2

L3

ЭКОНОМИЧЕСКАЯ ЧАСТЬ
В данном разделе дипломного проекта рассмотрены следующие вопросы:
Определена трудоемкость анализа предметной области создания компилятора.
Определены затраты на анализ предметной области создания компилятора.
Определена трудоемкость создания учебного комплекса.
Определены затраты на создание учебного комплекса.
Определена трудоемкость разработки программного обеспечения для учебного комплекса.
Определены затраты на разработку программного обеспечения для учебного комплекса.
Определены суммарные затраты.

3 Определение трудоемкости по стадиям разработки

3.1 Методика расчета

Фактическое время, затраченное на анализ предметной области, включающий в себя анализ документов и связей, необходимых для создания компилятора, составило 105 человеко-часов.

Затраты времени, связанные с разработкой учебного комплекса составили 152 человеко-часа.

Для расчета затрат времени на разработку программной части использованы типовые нормы времени [10]. Нормы времени охватывают следующие стадии разработки:

техническое задание;

эскизный проект;

технический проект;

внедрение.

Нормы времени рассчитываются в человеко-часах при продолжительности рабочего дня - 8 ч.

Время, отведенное на выполнение дипломного проекта, составляет 4 месяца.

Для расчетов приняты:

степень новизны разрабатываемого комплекса - Б. Так как нет аналогичных решений;

сложность алгоритма - 2, так как включает создание отчетности, анализа и учета данных;

трудоемкость разработки - ПИ, так как информация постоянно видоизменяется;

принимая во внимание то, что существует перекрестная связь между входными данными, сложность организации контроля входной информации представлена группой 11;

сложность организации контроля выходной информации представлена группой 22, так как выводятся данные простой формы;

количество разновидностей форм входной информации - 1;

количество разновидностей форм выходной информации - 4.

Объем входной информации не превышает 50 тысяч документострок.

Нормы времени определены для комплекса задач подсистемы управления научно-технической информации.

По табл. 1.1 [10] получен поправочный коэффициент для определения трудоемкости работ на стадии «Технический проект». Принимаем К=1,2.

По табл. 1.2 [10] получен поправочный коэффициент для определения трудоемкости работ на стадии «Рабочий проект». Принимаем К=1,44.

В табл. 1.4 [10] выбран коэффициент, учитывающий сложность контроля входной и выходной информации. Получаемый коэффициент К=1,07.

По таблице 1.7 определен поправочный коэффициент для определения времени работы ЭВМ при отладке и внедрении программ комплексов задач, принят равным 1,19, с учетом того, что программа пишется на языке высокого уровня в программной среде Delphi5.

Общий поправочный коэффициент Коб выражен через произведение всех коэффициентов.

Коб=1,2·1,44·1,07·1,19= 2,20

Норма времени (Нвр) с учетом общего поправочного коэффициента определяется по следующей формуле

, (1.1)

где Нврi - базисная норма времени, определенная по нормативной таблице, Коб - общий поправочный коэффициент.

Основной расчет трудоемкости программной части:

Разработка технического задания. По табл. 4.1 [10] значение человеко-дней - 36 (норма б8), при значении поправочного коэффициента 0,35 затраты времени равны 36·0,35 = 12,6 человеко-дней.

Разработка эскизного проекта. По табл. 4.2 [10] значение человеко-дней - 101 (норма б8), при значении поправочного коэффициента 0,3 затраты времени равны 101·0,3 = 30,3 человеко-дней.

Разработка технического проекта. По табл. 4.18 [10] значение человеко-дней - 8 (норма в1), при значении поправочного коэффициента Коб=2,20 затраты времени равны 8·2,20 = 17,6 человеко-дней.

Разработка рабочего проекта. По табл. 4.44 [10] значение человеко-дней - 59 (норма в1), при значении поправочного коэффициента 2,20 затраты времени равны 59·2,20 = 129,8 человеко-дней.

Разработка на внедрение. По табл. 4.70 [10] значение человеко-дней - 13 (норма в1), при значении поправочного коэффициента 2,20 затраты времени будут равны 13·2,20 = 28,6 человеко-дней.

Общая норма времени на создание программной части составляет

12,6+30,3+17,6+129,8+28,6 = 218,9 человеко-дней.

При продолжительности рабочего дня 8 ч, затраты на выполнение программной части составили

218,9·8 =1751 ч.

В связи с тем, что разрабатываемый комплекс программ для учебных целей, программа, реализованная на данном этапе незначительна по объему и сложности, является некоммерческой, для определения трудоемкости принимаем коэффициент пересчета Кпер = 0,1.

Тогда: трудоемкость разработки программной части составит

1751·0,1 = 175 ч.

Расчет общей трудоемкости разработки проекта (Тоб) производится по формуле

, (1.2)

где t - трудоемкость работ по стадиям проектирования (от 1 до n).

Суммируем затраты, связанные с разработкой проекта.

105 + 152 + 175 = 432 ч.

3.2 Определение затрат на выполнение проекта по стадиям разработки

С учетом отчислений общие затраты вычисляют по формуле 1.3

Фзп = Зобщ + Отч, (1.3)

где: Зобщ - общая заработная плата, Отч - социальные отчисления в социальные фонды:

в пенсионный фонд 28%

медицинское страхование 3,6%

социальное образование 4%

Итого отчисления составляют 35,6% от общей заработной платы.

Зобщ = Зо + Здоп, (1.4)

где: Зо - основная заработная плата, Здоп - дополнительная заработная плата;

Здоп = З·(К зон·К доп -1), (1.5)

где: З - заработная плата инженера, Кзон - коэффициент районных доплат (для зоны Урала Кзон = 1,15), где: Кдоп - коэффициент дополнительной заработной платы (Кдоп принимается в пределах от 1 до 1,1.

Принимаем К доп = 1;

З = Зч·Т, (1.6)

где: Зч - часовая заработная плата, Т - затраты времени инженера (значения рассчитаны в предыдущем пункте).

Зч = Окл /Рэф, (1.8)

Окл - сумма окладов инженера, Р эф - эффективный фонд рабочего времени.

Рэф = Ч·Д, (1.7)

где: Ч - количество часов в рабочей смене (8 часов), Д - количество рабочих дней в месяце (22 дня);

Рэф = 8·22 = 176 ч.

3.3 Расчет затрат на выполнение проекта по этапам

При учете, что оклад инженера равен 1700 рублей и Рэф=176 часов получаем часовую заработную плату

Зч = 1700 / 176 = 9,6 руб/ч

Затраты на анализ предметной области составляют:

Зан = 9,6 · 105= 1008 руб

Здоп.ан = 1008 · (1,15·1-1)= 151,2 руб

Зобщ.ан = 1008 + 151,2 = 1159,2 руб

Отчан = 1159,2 · 0,356 = 412,68 руб

Фзп.ан = 1159,2 + 412,68 ? 1600 руб

Затраты связанные с разработкой учебного комплекса составляют:

Зан = 9,6 · 152= 1459,2 руб

Здоп.ан = 1459,2 · (1,15·1-1)= 218,88 руб

Зобщ.ан = 1459,2 + 218,88 = 1678,08 руб

Отчан = 1678,08 · 0,356 = 597,4 руб

Фзп.ан = 1678,08 + 597,4 ? 2300 руб

Затраты на выполнение программной части составляют:

Зпрог = 9,6 · 175= 1680 руб

Здоп.прог = 1680 · (1,15·1-1)= 252 руб

Зобщ.прог = 1680 + 252 = 1932 руб

Отчпрог = 1932 · 0,356 = 687,8 руб

Фзп.прог = 1932 + 687,8 ? 2700 руб

Общие затраты составляют:

1600 + 2300 + 2700 ? 7000 руб

4 Рекомендации по охране труда при работе с учебным комплексом

Учебный комплекс представляет собой несколько лабораторных работ, объединяющих практическую (программную) и методическую (описательную) части.

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

Необходим достаточный уровень освещенности для чтения с монитора и бумажного носителя. Чтобы не уставали глаза от различной яркости монитора и остального освещения, а также достаточной освещенности для удовлетворительной работы с бумажным носителем требуется наличие общего и местного освещения. Общая освещенность должна составлять 500лк (светильники потолочные люминесцентные типа ПУ-66-4х40), местного - 300 лк (настенный светильник типа БЛ-19-1х20Б) [11].

При работе с программой приходится работать с текстовой информацией, при этом, чтобы текст был читабельным следует установить разрешение экрана при 14” мониторе не выше 800х600, при15” не выше 960х720.

Необходимо соблюдать следующие параметры монитора:

частота кадров монитора не должна быть ниже 75 Гц;

должна быть достаточная яркость и контрастность монитора, чтобы была возможность получения информации с монитора без напряжения для глаз;

С эргономичной точки зрения необходимо следующее:

удобный доступ к дисководу, CD-ROM;

удобство работы с методической литературой;

удобное положение (по высоте) клавиатуры, либо стул, регулируемый по высоте.

Практические работы должны проводиться за компьютером на вычислительном центре, например аудитории 205. Общее освещение данной аудитории достаточно для проведения лекций, но не для работы за компьютером и чтением литературы. Поэтому требуется использование дополнительного местного освещения.

Для работы с литературой, например, методического пособия, требуется дополнительное пространство на рабочем столе. Его можно освободить, убрав со стола системный блок в стол и применив специальную конструкцию стола, показанную на рисунке 7. Стул должен быть вращающимся для удобства маневрирования, а также с регулировкой по высоте, чтобы обеспечить оптимальные условия при работе с клавиатурой и монитором.

Примерное рабочее место студента показано на рисунке 7.

Рисунок 7 - Рабочее место студента

1 - монитор, 2 - системный блок, 3 - клавиатура, 4 - стул, 5 - методический материал, 6 - стол.

Заключение

Результатом проделанной работы явилось создание учебного комплекса состоящего из двух программ LEXAN и SINAN, соответственно программа лексического и грамматического разбора. При этом была разработана общая схема компилятора с описанием структур и их взаимодействия.

При работе над проектом были созданы алгоритмы, позволяющие производить синтаксический разбор с помощью таблиц, что позволяет наглядно понять один из способов формирования деревьев грамматического разбора.

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

Данный проект позволит разобраться студентам с методами анализа программы и на практике проверить знания, полученные при изучении предмета «Системное программное обеспечение». Также является основой для дальнейшей разработки учебного комплекса.

Был выполнен экономический расчет, в результате которого были подсчитаны общие затраты на выполнение дипломного проекта, они составили 7000 рублей.

Список использованных источников

Бек Л. Введение в системное программирование.: Пер. с англ. - М.: Мир, 1998.

Грис Д. Конструирование компиляторов для цифровых вычислительных машин. - М.: Мир, 1975.

Карпов В.Э. Классическая теория компиляторов. - http://itlab.net.ru/ materials/compiler/compiler.html

Конспект лекций по теме "Трансляторы". - http://www.kulichki.net/ kit/library/transl.zip

Креншоу Д. Давайте создадим компилятор! - http://kit.kulichki.net/ crenshaw/crenshaw.html

Лабораторные работы по курсу Системное ПО. - http://www.fi.ru/~mill/ LabFl-97.htm

Основы компиляции. http://structur.h1.ru/compil.htm

Романов Е.Л. Основы построения трансляторов. - http://www.kulichki. net/kit/library/nstu_trans.zip.

Пратт Т. Языки программирования. Разработка и реализация.: Пер. с англ. - М.: Мир, 1979.

Типовые нормы времени на программирование задач для ЭВМ. - М.: Экономика, 1989.

Типовые нормы времени на разработку конструкторской документации. - М.: Экономика, 1991.

Фаронов В.В. Турбо Паскаль. Книга1. Основы Турбо Паскаля. - М.: Учебно-инженерный центр «МВТУ-ФЕСТО ДИДАКТИК», 1992.

Шаньгин В. Ф., Илюшечкин В. М., Тимофеев П. А. Программирование микропроцессорных систем. / Под ред. В. Ф. Шаньгина. - М.: Высш. шк., 1990.

Приложение А

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

Дана следующая грамматика языка:

<prog> ::= PROGRAM <prog-name> VAR <dec-list> BEGIN <stmt-list> END.

<prog-name> ::= id

<dec-list> ::= <dec> | <dec-list> ; <dec>

<dec> ::= <id-list> : <type>

<type> ::= INTEGER

<id-list> ::= id | <id-list> , id

<stmt-list> ::= <stmt> | <stmt-list> ; <stmt>

<stmt> ::= <assign> | <for>

<assign> ::= id := <exp>

<exp> ::= <term> | <exp> + <term> | <exp> - <term>

<term> ::= id | int | ( <exp> )

<for> ::= FOR <index-exp> DO <body>

<index-exp> ::= id := <exp> TO <exp>

<body> ::= <stmt> | BEGIN <begin-list> END

Используя программу LEXAN произвести следующие действия:

Выбрать элементы из таблицы терминальных символов, при желании можно изменить названия ключевых слов (таблица 1);

Написать исходный текст на учебном языке с использованием заданной грамматики;

Заполнить таблицы: - символьных имен (таблица 2);

- литералов (таблица 3);

- лексического анализа (выходных символов);

Проверить правильность заполнения таблиц встроенным анализатором;

При наличии ошибок, исправить имеющиеся, и повторно обработать программой LEXAN;

Получить листинг полученных результатов.

Сохранить результат в файл.

Сначала производится анализ, какие терминальные символы входят в грамматику: ”PROGRAM”, ”VAR”, ”BEGIN”, ”END”, ”.”, ”INTEGER”, ”;”, ”:=”, ”+”, ”-”, ”FOR”, ”DO”, ”TO”.

Исходная программа, написанная с использованием терминов исходной грамматики:

program prog1;

var

i, x:integer;

begin

x:=0;

for i:=1 to 10 do

x:=x+i;

end.

Далее выбираются терминальные символы, использованные в программе, заполняется таблица выбранных терминальных символов. Примерное представление таблицы выбранных терминальных символов показано в таблице 19.

Таблица 19

№ стр.

Терминальный символ

Комментарий (обозначение)

Код

1

PROGRAM

1

2

;

27

3

VAR

2

4

,

29

Продолжение таблицы 19

№ стр.

Терминальный символ

Комментарий (обозначение)

Код

5

:

31

6

INTEGER

5

7

BEGIN

3

8

:=

28

9

FOR

8

10

TO

9

11

DO

10

12

+

32

13

END

4

14

.

30

Определяются символические имена, встречающиеся в программе, и заполняется таблица 20 в порядке их появления в тексте

Таблица 20

Специф

Идентификатор

Тип

Размер, занимаемый в памяти, байт

Относительный адрес в памяти

1

prog1

2

i

3

x

В тексте определяются литералы и заносятся в таблицу 21 в порядке их появления.

Таблица 21

Специф

Литерал

Тип

Размер, занимаемый в памяти, байт

1

0

Integer

2

2

1

Integer

2

3

10

Integer

2

Во время заполнения этих трех таблиц заполняется четвертая - таблица 22 (таблица выходных кодов лексем): в поле «Таблица» подставляются номера таблиц (таблица терминальных символов - №1, таблица символических имен - №2, таблица литералов - №3), в поле строка - код элемента (из таблицы 1), спецификаторы (из таблицы 2 и 3). Поле «№п.п.» заполняется автоматически.

Таблица 22

№ п.п.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Таблица

1

2

1

1

2

1

2

1

1

1

1

2

1

3

1

Строка

1

1

27

2

2

29

3

31

5

27

3

3

28

1

27

№ п.п.

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Таблица

1

2

1

3

1

3

1

2

1

2

1

2

1

1

1

Строка

8

2

28

2

9

3

10

3

28

3

32

2

27

4

30

Array

Страницы: 1, 2, 3, 4, 5


© 2010 РЕФЕРАТЫ