![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Компьютеры, Программирование
Программирование, Базы данных
Построение функции предшествования по заданной КС-грамматике |
САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ имени академика С.П. КОРОЛЕВАКафедра информационных систем и технологий ПОЯСНИТЕЛЬНАЯ ЗАПИСКАк курсовому проекту по курсу &quo ;Информационные технологии&quo ; на тему&quo ;Построение функции предшествования по заданной КС-грамматике&quo ; Выполнил: студент группы 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. Описание структуры данных Типы: Для хранения терминалов и терминалов используется тип: o erm=^Lis ; Lis =Record{список терминалов и нетерминалов} ame:S r10;{терминал или нетерминал} ex : o erm; E d; Для хранения грамматики (текста) используется: s rBuf=array of Char; Матрица предшествования: ma rixPr=array of 0.4; Функция предшествования: Fu cPr=array of By e; Процедуры и функции (основные): Ввод грамматики осуществляется функцией: Fu c io I pu ex :Boolea ; Для синтаксического анализа КС-грамматики используется процедура: Procedure Check; Для нахождения «левых» и «правых» используется процедура: Procedure SearchLR; Построение матрицы предшествования выполняет процедура: Procedure Ma rix; Построение функции предшествования осуществляется процедурой: Procedure Fu cPrecede; 3. Грамматики предшествования КС-языки делятся на классы в соответствии со структурой правил их грамматик. В каждом из классов налагаются дополнительные ограничения на допустимые правила грамматики. Одним из таких классов является класс грамматик предшествования. Они используются для синтаксического разбора цепочек с помощью алгоритма “сдвиг-свертка”. Выделяют следующие типы грамматик предшествования: простого предшествования; расширенного предшествования; слабого предшествования; смешанной стратегии предшествования; операторного предшествования. Далее будут рассмотрены ограничения на структуру правил и алгоритмы разбора для двух типов - грамматик простого и операторного предшествования.
3.1 Грамматики простого предшествования Грамматикой простого предшествования называют такую КС-грамматику G(V ,V ,P,S), V=V V в которой: Для каждой упорядоченной пары терминальных и нетерминальных символов выполняется не более чем одно из трех отношений предшествования: Si = Sj ( Si,Sj V), если и только если правило U xSiSjy P, где U V , x,y V ; Si < Sj ( Si,Sj V), если и только если правило U xSiDy P и вывод D Sjz, где U,D V , x,y,z V ; Si > Sj ( Si,Sj V) , если и только если правило U xCSjy P и вывод C zSi или правило U xCDy P и выводы C zSi и D Sjw, где U,C,D V , x,y,z,w V . Различные порождающие правила имеют разные правые части. Отношения =, < и > называют отношениями предшествования для символов. Отношение предшествования единственно для каждой упорядоченной пары символов. При этом между какими-либо двумя символами может и не быть отношения предшествования - это значит, что они не могут находиться рядом ни в одном элементе разбора синтаксически правильной цепочки. Отношения предшествования зависят от порядка, в котором стоят символы, и в этом смысле их нельзя путать со знаками математических операций - например, если Si > Sj, то не обязательно, что Sj < Si (поэтому знаки предшествования иногда помечают специальной точкой: = , ) Метод предшествования основан на том факте, что отношения предшествования между двумя соседними символами распознаваемой строки соответствуют трем следующим вариантам: Si < Si 1, если символ Si 1 - крайний левый символ некоторой основы; Si > Si 1 , если символ Si - крайний правый символ некоторой основы; Si = Si 1 , если символы Si и Si 1 принадлежат одной основе. Исходя из этих соотношений выполняется разбор строки для грамматики предшествования. На основании отношений предшествования строят матрицу предшествования грамматики. Строки матрицы предшествования помечаются первыми символами, столбцы - вторыми символами отношений предшествования, а в клетки матрицы на пересечении соответствующих столбца и строки помещаются знаки отношений. При этом пустые клетки матрицы говорят о том, что между данными символами нет ни одного отношения предшествования. Матрицу предшествования грамматики можно построить, опираясь непосредственно на определения отношений предшествования, но удобнее воспользоваться двумя дополнительными множествами - множеством крайних левых и множеством крайних правых символов относительно нетерминалов грамматики. Эти множества определяются следующим образом: L(U) = { U z}, U, V, z V - множество крайних левых символов относительно нетерминального символа U (цепочка z может быть и пустой цепочкой); R(U) = { U z }, U, V, z V - множество крайних правых символов относительно нетерминального символа U. Тогда отношения предшествования можно определить так: Si = Sj ( Si,Sj V), если правило U xSiSjy P, где U V , x,y V ; Si < Sj ( Si,Sj V), если правило U xSiDy P и Sj L(D), где U,D V , x,y V ; Si > Sj ( Si,Sj V) , если правило U xCSjy P и Si R(C) или правило U xCDy P и Si R(C), Sj L(D), где U,C,D V , x,y V .
Такое определение отношений удобнее на практике, так как не требует построения выводов, а множества L(U) и R(U) могут быть построены для каждого нетерминального символа U V по очень простому алгоритму: Шаг 1. Для каждого нетерминального символа U ищем все правила, содержащие U в левой части. Во множество L(U) включаем самый левый символ из правой части правил, а во множество R(U) - самый крайний символ правой части. Переходи к шагу 2. Шаг 2. Для каждого нетерминального символа U: если множество L(U) содержит нетерминальные символы грамматики U’,U”,., то его надо дополнить символами, входящими в соответствующие множества L(U’), L(U”), . и не входящими в L(U). Ту же операцию надо выполнить для R(U). Шаг 3. Если на предыдущем шаге хотя бы одно множество L(U) или R(U) для некоторого символа грамматики изменилось, то надо вернуться к шагу 2, иначе построение закончено. После построения множеств L(U) и R(U) по правилам грамматики создается матрица предшествования. Матрицу предшествования дополняют символами н и к (начало и конец цепочки). Для них определены следующие отношения предшествования: н a V, если S ax, где S V , x V или (с другой стороны) если a L(S); к > a, a V, если S xa, где S V , x V или (с другой стороны) если a R(S). 3.2 Грамматики операторного предшествования Грамматикой операторного предшествования называется приведенная КС-грамматика без -правил (e-правил), в которой правые части продукций не содержат смежных нетерминальных символов. Для грамматики операторного предшествования отношения предшествования можно задать на множестве терминальных символов (включая символы н и к). Отношения предшествования для грамматики операторного предшествования G(V ,V ,P,S) задаются следующим образом: a = b, если и только если существует правило U xaby P или правило U xaCby, где a,b V , U,C V , x,y V ; a < b, если и только если существует правило U xaCy P и вывод C bz или вывод C Dbz, где a,b V , U,C,D V , x,y,z V ; a > b, если и только если существует правило U xCby P и вывод C za или вывод C zaD, где a,b V , U,C,D V , x,y,z V . В грамматике операторного предшествования различные порождающие правила имеют разные правые части. Для грамматики операторного предшествования тоже строится матрица предшествования, но она содержит только терминальные символы грамматики. Для построения этой матрицы удобно ввести множества крайних левых и крайних правых терминальных символов относительно нетерминального символа U - L (U) или R (U): L (U) = { U z или U C z}, где V , U,C V , z V ; R (U) = { U z или U z C }, где V , U,C V , z V . Тогда определения отношений операторного предшествования будут выглядеть так: a = b, если правило U xaby P или правило U xaCby, где a,b V , U,C V , x,y V ; a < b, если правило U xaCy P и b L (C), где a,b V , U,C V , x,y V ; a > b, если правило U xCby P и a R (C), где a,b V , U,C V , x,y V .
Объем фрагмента текста мы обозначает через vol, длительность описанного интервала времени - через d, среднее значение функции объема f=vol/d. ВАЖНОЕ ЗАМЕЧАНИЕ. В конце каждой главы Ф.Грегоровиус помещает довольно большое число комментариев к событиям, описанным в этой главе. Мы рассматривали этот текст как относящийся КО ВСЕМУ ОПИСАННОМУ В ДАННОЙ ГЛАВЕ ИНТЕРВАЛУ ВРЕМЕНИ. То есть, мы не детализировали подробно - какому именно событию посвящен тот или иной комментарий. Мы попросту "усредняли эту информацию", распределив ее по равномерно по всей описанной здесь эпохе. Иными словами, мы подсчитывали средний объем комментариев, разделив их объем на длительность того периода времени, которому они посвящены. ***************************************************************** 1) Ф.Грегоровиус начинает описание истории средневекового Рима с начала IV века. Поэтому при построении функции объема, мы начинаем отсчет времени примерно с 300 года н.э. Первые две главы тома 1 труда [47] носят вводный характер. Здесь Ф.Грегоровиус дает общий обзор сохранившихся сведений по истории Рима IV-V веков н.э
2. Механизм индивидуальных рынков: спрос, предложение, цена
3. Спрос, предложение, эластичность
4. График и его элементы. Классификация видов графиков
5. Спрос, предложение и их эластичность
9. Построение графиков функций
10. Вычисление функций в Еxcel и построение графиков
11. Исследование функций и построение их графиков
12. Построение сетевого графика и определение резервов выполнения работы
13. Виды графики
14. Графика русского языка до и после Кирилла
16. Цифровая обработка графики
17. Обучающая программа "Графика" программированию в графическом режиме на языке turbo-pascal 7.x
18. Панельное представление многоугольников (Компьютерная Графика OpenGL)
19. Проблема эффективности урока графики
21. Рынок. Процесс формирования цен и объемов производства (спрос и предложение)
26. Анализ рынков: спрос и предложение
27. Исторический взгляд на эластичность спроса и эластичность предложения: прошлое и настоящее
29. Теодор Жерико (1791-1824) французский живописец и график
31. Сетевые графики
32. Ионометрия. Метод градуировочного графика
33. Начертательная геометрия и инженерная графика
34. Статистические таблицы и статистические графики - основные способы наглядного изображения данных
35. Спрос и предложение, основные ценообразующие факторы
36. Теория совокупного спроса и совокупного предложения. Эффект храповика
37. Макроэкономические проблемы и показатели. Совокупный спрос и совокупное предложение
41. Спрос и предложение на рынке труда
42. Совокупный спрос и совокупное предложение
46. Web-графика
47. Компьютерная графика VISIO
48. Трехмерная графика. Теория
49. Использование машинной графики
50. Закраска гранично-заданной области с затравкой, Машинная графика, C++ Builder 4.0
51. Компьютерная графика и основные графические редакторы
52. Тенденции развития рынка компьютерной графики и анимации
57. C++: Стандартные библиотечные функции работы с графикой
58. Статистические таблицы и графики
59. Этапы составления графика документооборота и графика учетных работ на предприятии
61. Автоматизированное редактирование частиц в компьютерной графике
62. Векторная и растровая графика
63. Знакомство с фрактальной графикой
64. Использование диаграмм и графиков в табличном процессоре Microsoft Office Excel
65. Общие сведения о Компас-График
66. Основные понятия компьютерной графики
67. Понятие компьютерной графики. Графический редактор Adobe Photoshop
68. Программирование графики и обработка событий
73. Создание компьютерной графики при помощи OpenGL
74. Технологические возможности редактора векторной графики CorelDraw
75. График функции по Assembler’у
77. Шагал Марк живописец и график
78. Механизм действия закона спроса и предложения, рыночное равновесие
79. Законы спроса и предложения
81. Книжная графика в работе с детьми-дошкольниками
82. Расчёт годового графика ремонта и обслуживания электрооборудования участка зубофрезерных станков
84. Разработка календарного графика строительства
85. Разработка графика движения электровоза 2ТЭ10В
89. Методы изучения эластичности спроса и предложения
90. Основные факторы спроса и предложения, степень их влияния и проблема измерения
91. Основы теории спроса и предложения
92. Рынок труда: спрос и предложение. Уровень заработной платы
95. Спрос и предложение в условиях рыночной экономики
97. Построение и анализ функции спроса на товар
98. Гидрогеология. Построение разреза по скважинам
99. Понятие, структура и методики построения страховых тарифов
100. Сложное предложение