Самарського державного аерокосмічного університету імені академіка С.П. p>
КОРОЛЬОВА p>
Кафедра інформаційних систем і технологій p>
ПОЯСНЮВАЛЬНА ЗАПИСКА p>
до курсового проекту по курсу p>
"Інформаційні технології" на тему p>
"Побудова функції передування по заданій КС-граматики" p>
Виконав: p>
студент групи 634 Абрар А.М. p>
Керівник проекту: p>
Шамаша М.А. p>
Дата здачі: p>
Оцінка:
Самара 2001 p>
РЕФЕРАТ p>
Курсовий проект p>
Пояснювальна записка: 30 с., 5 рис., 3 схем програм та алгоритмів , 3бібліографічного джерела. p>
ТЕРМІНАЛ, НЕТЕРМІНАЛ, ГРАМАТИКА, ФУНКЦІЯ передування, ГРАФ,
Лінеаризація. P>
У курсовому проекті розроблено алгоритм і відповідна йому програма,що дозволяє за введеної користувачем КС-граматики побудувати функціюпередування, використовуючи граф лінеаризації і алгоритм перерахунку звізуалізацією кроків побудови графа. Граматика може бути введена як усамій програмі, так і з текстового файлу. Також існує можливістьзбереження результату. Програма написана на мові Pascal 7.0. P>
ЗМІСТ p>
ЗМІСТ 3 p>
1. Постановка задачі 4 p>
2. Опис структури даних 5 p>
3. Граматики передування 6 p>
3.1 Граматики простого передування 6 p>
3.2 Граматики операторного передування 8 p>
3.3 Приклад побудови матриці передування 10 p>
3.4 Лінеаризація матриці передування 13 p>
4. Керівництво користувача 13 p>
5. Текст програми 15 p>
6. Список використаних джерел 30 p>
1. Постановка завдання p>
За заданою КС-граматики побудувати відношення простого або операторногопередування і функцію передування, використовуючи граф лінеаризації іалгоритм перерахунку з візуалізацією кроків побудови графа. p>
2. Опис структури даних p>
Типи: p>
Для зберігання терміналів і терміналів використовується тип:notTerm = ^ List;
List = Record (список терміналів і нетерміналов) p>
Name: Str10; (термінал або нетермінал) p>
Next: notTerm; p>
End;
Для зберігання граматики (тексту) використовується: strBuf = array [1 .. 800] of Char;
Матриця передування: matrixPr = array [1 .. 20,1 .. 20] of 0 .. 4;
Функція передування:
FuncPr = array [1 .. 2,1 .. 20] of Byte; p>
Процедури і функції (основні): p>
Введення граматики здійснюється функцією: < br>Function InputText: Boolean;
Для синтаксичного аналізу КС-граматики використовується процедура:
Procedure Check;
Для знаходження «лівих» і «правих» використовується процедура:
Procedure SearchLR;
Побудова матриці передування виконує процедура:
Procedure Matrix;
Побудова функції передування здійснюється процедурою:
Procedure FuncPrecede; p>
3. Граматики передування p>
КС-мови поділяються на класи відповідно до структури правил їхграматик. У кожному з класів накладаються додаткові обмеження надопустимі правила граматики.
Одним з таких класів є клас граматик передування. Вонивикористовуються для синтаксичного розбору ланцюжків за допомогою алгоритму "зсув -згортка ". Виділяють такі типи граматик передування:простого передування;розширеного передування;слабкого передування;змішаної стратегії передування;операторного передування.
Далі будуть розглянуті обмеження на структуру правил і алгоритмирозбору для двох типів - граматик простого і операторного передування. p>
3.1 Граматики простого передування p>
граматикою простого передування називають таку КС-граматику
G (VN, VT, P, S), V = VT? VN в якій: p>
1. Для кожної впорядкованої пари термінальних і нетермінальних символів виконується не більше ніж одне з трьох відносин передування:
Si = Sj (? Si, Sj? V), якщо і тільки якщо? правило U> xSiSjy? P, де U?
VN, x, y? V *;
Si 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 *. p> 2. Різні породжують правила мають різні праві частини.
Відносини =, <і> називають відносинами передування для символів.
Відношення передування єдино для кожної впорядкованої парисимволів. При цьому між будь-якими двома символами може і не бутивідносини передування - це означає, що вони не можуть стояти порядні в одному елементі розбору синтаксично правильної ланцюжка. Відносинипередування залежать від порядку, в якому стоять символи, і в цьомусенсі їх не можна плутати із знаками математичних операцій - наприклад, якщо
Si> Sj, то не обов'язково, що Sj