Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа. / РЯП_Ксю / Other / tyap / Приложение С Спецификация программы.doc
Скачиваний:
14
Добавлен:
01.05.2014
Размер:
71.17 Кб
Скачать

4.3 Приложение с: Спецификации программы.

Спецификация лексического анализатора и алгоритм работы.

Программа использует модули: 'uMain.pas', 'uTable.pas', 'uRules.pas'

Определение структур данных 'uMain.pas'

В модуле 'uMain.pas' формируется интерфейс программы лексического анализа и проводится сам лексический анализ компилируемой программы.

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

В программе заданы типы:

TSect=(sBegin, sLabel, sType, sVar, sConst, sBody, sComment, sUnknown);

Элементы этого типа – это названия соответствующих секций программы на языке Паскаль

TLexType=(ltResWord, ltOper, ltArifm, ltRel, ltConst, ltVar, ltType, ltLabel, ltError, ltNone);

Элементы этого типа – это типы лексем

Глобальные переменные

CurDir:string; // Каталог запуска

PredCurSect: TSect; // Тип предыдущей секции

CurSect: TSect; // Тип текущей секции

ErrorStr: string; // Строка сообщения об ошибке

Error : boolean; // Признак ошибки

Comment: boolean; // Признак коментария

MarkLabel: boolean; // Признак проверки меток

LWGoto: boolean; // Последняя встреченная лексема - зарезервированное слово goto

В программе лексемы заносятся в списки, которые реализованы с помощью стандартного класса TstringList, в соответствии со своим типом.

ResWord, // Зарезервированные слова

Arifm, // Арифметические операции

Oper, // Операторы

Rel, // Операции отношения

_Const, // Константы

_var, // Переменные

_label, // Метки

_labelBody, // Метки в теле программы

_labelBodyG, // Метки после оператора goto

_type:TstringList; // Типы

separ:array[1..255] of char; // Разделители

Есть 9 таблиц: 4 статических и 5 динамических таблиц.

Статические таблицы создаются и заполняются во время создания формы.

//Добавление элемента в таблицу

procedure AddToGrid(var sg:TStringGrid; Val:string);

// Вывод из списка в таблицу

procedure FillGrid(var sg:TstringGrid; var sl:TstringList);

// загрузка из файла в список

procedure LoadToList(var sl:TStringList; FN:string);

// Инициализация программы, подготовка списков и таблиц к работе.

procedure TfmMain.FormCreate(Sender: TObject);

И после открытия формы таблицы (списки) имеют вид:

Зарезервированные слова

Операторы

Операции выражения

Операции отношения

Код

Имя

Код

Имя

Код

Имя

Код

Имя

1

then

1

write

1

and

1

>

2

begin

2

read

2

mod

2

<

3

goto

3

writeln

3

shr

3

>=

4

label

4

readln

4

not

4

<=

5

type

5

:=

5

or

5

<>

6

const

6

div

6

=

7

if

7

xor

7

..

8

until

8

shl

9

program

9

+

10

var

10

-

11

repeat

11

*

12

else

13

end

Динамические таблицы.