Рефетека.ру / Информатика и програм-ие

Реферат: Построение функции предшествования по заданной КС-грамматике

САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ имени академика С.П.

КОРОЛЕВА

Кафедра информационных систем и технологий

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту по курсу

"Информационные технологии" на тему

"Построение функции предшествования по заданной КС-грамматике"

Выполнил:

студент группы 634 Абраров А.М.

Руководитель проекта:

Шамашов М.А.

Дата сдачи:

Оценка:

Самара 2001 г.

РЕФЕРАТ

Курсовой проект

Пояснительная записка: 30 с., 5 рис., 3 схем программ и алгоритмов, 3 библиографического источника.

ТЕРМИНАЛ, НЕТЕРМИНАЛ, ГРАММАТИКА, ФУНКЦИЯ ПРЕДШЕСТВОВАНИ, ГРАФ,
ЛИНЕАРИЗАЦИЯ.

В курсовом проекте разработан алгоритм и соответствующая ему программа, позволяющая по введённой пользователем КС-грамматике построить функцию предшествования, используя граф линеаризации и алгоритм пересчета с визуализацией шагов построения графа. Грамматика может быть введена как в самой программе, так и из текстового файла. Также существует возможность сохранения результата. Программа написана на языке Pascal 7.0.

СОДЕРЖАНИЕ

СОДЕРЖАНИЕ 3

1. Постановка задачи 4

2. Описание структуры данных 5

3. Грамматики предшествования 6

3.1 Грамматики простого предшествования 6

3.2 Грамматики операторного предшествования 8

3.3 Пример построения матрицы предшествования 10

3.4 Линеаризация матрицы предшествования 13

4. Руководство пользователя 13

5. Текст программы 15

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

1. Постановка задачи

По заданной КС-грамматике построить отношение простого или операторного предшествования и функцию предшествования, используя граф линеаризации и алгоритм пересчета с визуализацией шагов построения графа.

2. Описание структуры данных

Типы:

Для хранения терминалов и терминалов используется тип: notTerm=^List;
List=Record{список терминалов и нетерминалов}

Name:Str10;{терминал или нетерминал}

Next:notTerm;

End;
Для хранения грамматики (текста) используется: strBuf=array [1..800] of Char;
Матрица предшествования: matrixPr=array [1..20,1..20] of 0..4;
Функция предшествования:
FuncPr=array [1..2,1..20] of Byte;

Процедуры и функции (основные):

Ввод грамматики осуществляется функцией:
Function InputText:Boolean;
Для синтаксического анализа КС-грамматики используется процедура:
Procedure Check;
Для нахождения «левых» и «правых» используется процедура:
Procedure SearchLR;
Построение матрицы предшествования выполняет процедура:
Procedure Matrix;
Построение функции предшествования осуществляется процедурой:
Procedure FuncPrecede;

3. Грамматики предшествования

КС-языки делятся на классы в соответствии со структурой правил их грамматик. В каждом из классов налагаются дополнительные ограничения на допустимые правила грамматики.
Одним из таких классов является класс грамматик предшествования. Они используются для синтаксического разбора цепочек с помощью алгоритма “сдвиг- свертка”. Выделяют следующие типы грамматик предшествования: простого предшествования; расширенного предшествования; слабого предшествования; смешанной стратегии предшествования; операторного предшествования.
Далее будут рассмотрены ограничения на структуру правил и алгоритмы разбора для двух типов - грамматик простого и операторного предшествования.

3.1 Грамматики простого предшествования

Грамматикой простого предшествования называют такую КС-грамматику
G(VN,VT,P,S), V=VT?VN в которой:

1. Для каждой упорядоченной пары терминальных и нетерминальных символов выполняется не более чем одно из трех отношений предшествования:
Si = Sj (? Si,Sj? V), если и только если ? правило U> xSiSjy ? P, где U?
VN, x,y? V*;
Si < Sj (? Si,Sj? V), если и только если ? правило U> xSiDy ? P и вывод D?
*Sjz, где U,D? VN, x,y,z? V*;
Si > Sj (? Si,Sj? V) , если и только если ? правило U> xCSjy ? P и вывод C?
*zSi или ? правило U> xCDy ? P и выводы C? *zSi и D? *Sjw, где U,C,D? VN, x,y,z,w? V*.

2. Различные порождающие правила имеют разные правые части.
Отношения =, < и > называют отношениями предшествования для символов.
Отношение предшествования единственно для каждой упорядоченной пары символов. При этом между какими-либо двумя символами может и не быть отношения предшествования - это значит, что они не могут находиться рядом ни в одном элементе разбора синтаксически правильной цепочки. Отношения предшествования зависят от порядка, в котором стоят символы, и в этом смысле их нельзя путать со знаками математических операций - например, если
Si > Sj, то не обязательно, что Sj < Si (поэтому знаки предшествования иногда помечают специальной точкой: =? ,

Рефетека ру refoteka@gmail.com