1) ведение табличных символов;
2) включение неявной информации (по умолчанию);
3) обнаружение ошибок;
4) макрообработка и операции, выполняемые во время компиляции.
После проведения синтаксического анализа формируется дерево грамматического разбора, представленное в виде таблицы. По этому дереву на этапе семантического анализа производится новый смотр.
Одно из предназначений семантического анализатора – поиск ошибок. Существуют следующие критерии поиска ошибок:
1) не должно быть повторного описания идентификатора;
2) все идентификаторы, используемые в программе, должны быть описаны;
3) запрещается присвоение значению переменной одного типа значение другого типа (возможно только присвоение вещественному типу целого значения);
4) результат деления “ / “ всегда вещественное число;
5) перед использованием переменной (идентификатора) ей должно быть присвоено значение (данная ошибка не относится к критическим).
6) в цикле 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.
Промежуточный код может быть представлен в виде польского кода или тетрад. Так как в данной работе не используется стек, следовательно польская форма записи не подходит. Принимаем за основу метод четверок (тетрады).
Разница между этими методами в том, что результат каждого из этапов в тетрадах представляется отдельной промежуточной переменной, в связи с чем требуется большое количество памяти на хранение этих переменных. Представление промежуточных данных кроме всего имеет большую наглядность по этому за основу был принят метод четверок (тетрад).
При адресации используются следующие команды.
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 | N2L2 | IT1 | 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 | aL2 | bT1 | 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 | aL1 | bT1 | T1 |
В таблице 18 разобрана конструкция IF a>b THEN operator1 ELSE operator2.
Таблица 18 – Конструкция if
Выражения | Тетрады (четверки) | |||
L1 | ||||
IF a-b<0 THEN GOTO L2 | – $BRM | aL2 | bT1 | T1 |
operator1 | operator1 | |||
GOTO L3 | $BR | L1 | ||
L2 | ||||
operator2 | operator2 | |||
L3 |
В данном разделе дипломного проекта рассмотрены следующие вопросы:
1. Определена трудоемкость анализа предметной области создания компилятора.
2. Определены затраты на анализ предметной области создания компилятора.
3. Определена трудоемкость создания учебного комплекса.
4. Определены затраты на создание учебного комплекса.
5. Определена трудоемкость разработки программного обеспечения для учебного комплекса.
6. Определены затраты на разработку программного обеспечения для учебного комплекса.
7. Определены суммарные затраты.
Фактическое время, затраченное на анализ предметной области, включающий в себя анализ документов и связей, необходимых для создания компилятора, составило 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).