Конструирование транслятора для модельного языка

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

?овить соответствие типов в операторе присваивания слева и справа от символа :=;

) определить, является ли выражение V2 в операторе цикла целым.

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

Рассмотрим алгоритм решения данной задачи

)Реализуем обработку описаний следующим образом:

Если лексема впервые встречается и не находиться в множестве , тогда в множество S записывается номер данной лексемы.

) Реализуем анализ выражений следующим образом:

Поскольку в исходной грамматике все идентификаторы имеют целый тип, то проверку выражений можно не реализовывать. Реализуем только проверку на описание всех идентификаторов в разделе описаний переменных. В процедурах S1 и M производим проверку на наличие входных лексем в множестве S, если входная лексема не расположена в множестве S, тогда сообщение об неизвестном идентификаторе.

4. Спецификация основных процедур и функций

 

.1 Лексический анализатор

 

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

 

Таблица 2 - Основные процедуры и функции

Наименование модуляГлобальные данныеТипы данныхНазначениеОписание входных данныхОписание выходных данныхUnit 1Button1ClickпроцедураЗаполнение таблиц служебных слов Sender: TObject Отсутствует Button2ClickпроцедураЗаполнение таблиц ограничителей Sender: TObjectОтсутствуетButton4ClickпроцедураВывод примера программыSender: TObjectОтсутствуетButton5ClickпроцедураСинтаксический анализSender: TObject, файл лексемСообщение об ошибке, сообщение о правильности программы Button3Click процедура Лексический анализ Sender: TObject Таблица идентификаторов ,таблица цифр, и файл лексем Form Create процедура Очистка Sender: TObject Отсутствует

.2 Синтаксический анализатор

 

Рассмотрим процедуры и функции, с помощью которых реализован синтаксический анализатор (таблица 3).

Таблица 3 - Основные процедуры и функции

Наименование модуляГлобальные данныеТипы данныхНазначениеОписание входных данныхОписание выходных данныхUnit1NextsymbпроцедураРеализует переход на следующий символФайл лексемотсутствуетButton5ClickпроцедураСинтаксический анализ программыSender: TObject ,файл лексемСообщение об ошибке или об отсутствии синтаксических ошибокP1процедураГлавная процедура рекурсивного спускаСтрока лексем k1,k2, k3 из файла лексемотсутствуетD2 процедураРеализует проверку входных данныхСтрока лексем k1,k2, k3 из файла лексемотсутствуетBпроцедураРеализует проверку тела проверяемой программыСтрока лексем k1,k2, k3 из файла лексемотсутствуетS1процедураРеализует проверку выраженийСтрока лексем k1,k2, k3 из файла лексемотсутствуетV1процедураРеализует проверку на унарн. МинусСтрока лексемОтсутствуетVпроцедураРеализует проверку подвыраженийСтрока лексемОтсутствуетV2процедураРеализует проверку логическогого выраженияСтрока лексемОтсутствуетUпроцедураРеализует проверку циклаСтрока лексемОтсутствуетMпроцедураРеализует проверку множителейСтрока лексемОтсутствуетPпроцедураРеализует проверку произведенийСтрок лексемОтсутствуетD1Процедура Реализует проверку описания входных данных Строка лексемОтсутствует F процедура Реализует проверку списков операторовСтрока лексем Отсутствует Presymb процедура Реализует переход на предыдущую лексемуСтрока лексем отсутствует

4.3 Семантический анализатор

 

Рассмотрим процедуры и функции, с помощью которых реализован семантический анализатор (таблица 4).

 

Таблица 4 - Основные процедуры и функции

Наименование модуляГлобальные данныеТипы данныхНазначениеОписание входных данныхОписание выходных данныхUnit1S1процедураРеализует проверку на описание идентификаторовФайл лексемОтсутствуетD1процедураРеализует проверку на дубликат идентификаторафайл лексем ОтсутствуетMпроцедураРеализует проверку на наличие идентификатора в списке объявленных переменФайл лексем Отсутствует

5. Структурная организация данных

 

.1 Спецификация входных данных

 

.1.1 Этап лексического анализа

Для исходного языка представим несколько примеров программ.

 

Таблица 7 - Спецификации входных данных лексического анализа

Пример 1 Integer i,n; Begin i:=i+1; End Пример 2 Integer i,n; Begin WHILE i<n DO i:=i+1; ENDWHILE EndПример 3 Integer i,n; Begin i:=i+n; WHILE i<n DO i:=(i+1); i:=i+n; ENDWHILE End Пример 4 Integer i,n; Begin i:=i+n; WHILE i<n DO i:=(i+1); WHILE i<n DO i:=(i+1); ENDWHILE i:=i+n; ENDWHILE EndПример 5 Integer I; Begin I:=1 Endпрограммирование синтаксис анализатор семантический

5.1.2 Этап синтаксического анализа

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

Рисунок 1 - файл лексем

 

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

 

5.1.3 Этап семантического анализа

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

 

5.2 Спецификация выходных данных

 

.2.1 Этап лексического анализа

На этом этапе выходными данными являются: файл чисел(рис. 1), файл идентификаторов( рис. 2), сообщение об неправильности идентификатора.

Рисунок 1 - Файл идентификаторв

 

Рисунок 2 - Файл чисел

Таблица 8 - Таблица лексем для исходного примера

111 14172124112121214322314332313312331