рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Виключення ланцюгових правил

Виключення ланцюгових правил - раздел Программирование, Методические указания к выполнению лабораторных работ по курсу ПСП   Правило Граматики Виду A ® B, Де A,b ...

 

Правило граматики виду A ® B, де A,B ÎVA, називається ланцюговим.Для КВ-граматики Г, що містить ланцюгові правила , можна побудувати еквівалентну їй граматику Г', що не містить ланцюгових правил.

Ідея доказу полягає в наступному. Якщо схема граматики має вид
R = {...,A ® B,...,B ® C, ... , C ® aX },

то така граматика еквівалентна граматиці зі схемою
R' = {...,A ® aX,...},

оскільки вивід у граматиці зі схемою R ланцюжка aX :

A Þ B Þ C Þ ax

може бути отриманий у граматиці зі схемою R' за допомогою правила A ® aX.

6.6. Магазинні автомати

 

КВ-граматика визначає структуру ланцюжків і дозволяє будувати ланцюжки визначеної мови. Магазинні автомати дозволяють вирішувати для контекстно-вільних мов задачу розпізнавання, що полягає в тому, що по заданому ланцюжку необхідно визначити чи належить він заданій мові. У роботах, зв'язаних з формальними мовами і граматиками, використовується модель магазинногоавтомата, що складається з вхідної стрічки, пристрою керування і допоміжної стрічки, названої стеком. Вхідна стрічка розділяється на клітки (позиції), у кожній з який може бути записаний символ вхідного алфавіту. При цьому передбачається, що в вільних клітках вхідної стрічки розташовані порожні символи e. Допоміжна стрічка також розділена на клітки, у яких можуть розташовуватися символи магазинного алфавіту. Початок допоміжної стрічки називається дноммагазина. Зв'язок пристрою керування зі стрічками здійснюється двома голівками, що можуть переміщатися уздовж стрічок.

Голівка вхідної стрічки може переміщатися тільки в одну сторону - вправо чи залишатися на місці. Вона може виконувати тільки операцію читання. Голівка допоміжної стрічки здатна виконувати як читання, так і запис, але ці операції зв'язані з переміщенням голівки певним чином:
- при записі голівка попередньо зрушується на одну позицію вверх, а потім символ заноситься на стрічку;
- при читанні символ, що знаходиться під голівкою зчитується зі стрічки, а потім голівка зрушується на одну позицію вниз, таким чином голівка завжди встановлена проти останнього записаного символу. Позицію, що знаходиться в розглянутий момент часу під голівкою, називаютьвершиною магазину.

Магазинний автомат Мвизначається наступною сукупністю семи об'єктів: M={P , S , sо , f , F , H , hо },


де
P- вхідний алфавіт,
S- алфавіт станів,
sо - початковий стан, sо
Î S ,
F - множина кінцевих станів ,F є підмножиною S,
H - алфавітмагазинних символів, записуваних на допоміжну стрічку,
hо- маркер дна, він завжди записується на дно магазина ,hо
Î H,
f- функція переходів

Робота МА зводиться до зміни конфігурацій. Конфігурацією автомата називають трійку об'єктів (S, a, g), де S – поточний стан автомату, a - вхідний ланцюжок, самий лівий символ a знаходиться під голівкою, g - це магазинний ланцюжок, самий верхній символ якої h.

Якщо a =e , то вважається, що вхідний ланцюжок прочитаний. Якщо g= $ , то магазин порожній.

Робота автомата може бути представлена як зміна конфігурацій. Один такт роботи автомата полягає у визначенні нової конфігурації по заданій. Це записується так:

( s, aa , g h ) |-- ( s', a , gb )

При цьому передбачається, що автомат читає символ a, що знаходиться під голівкою, і символ h, що знаходиться у вершині магазина, визначає новий стан s' і записує ланцюжок b у магазин замість символу h. Якщо b =$ , то верхній символ виявляється вилученим з магазину. Така зміна конфігурацій можлива, якщо функція f( s, a, h ) визначена і їй належить значення ( s', b ). Описаний такт роботи виконується з переміщенням голівки. Для опису роботи автомата також буде потрібно інший вид такту, що припускає зміну станів і магазина без переміщення вхідної голівки. Якщо f0(s, e, h) визначена і їй належить значення (s', b ) , то він визначає зміну конфігурацій так:
( s, aa , g h ) |-- ( s', aa , gb )

У загальному виді дії, що задаються функцією переходів і виконуються автоматом, демонструє наступна форма запису:
f(s, <вхідний символ>, <магазинний символ>)=(s1, < ланцюжок, що заноситься>)

При цьому варто мати на увазі, що при виконанні такту спочатку читається символ у вершині, а потім на його місце заноситься новий символ чи ланцюжок.

Початковою конфігурацією називається конфігурація (sо, a , hо) , де sо - початковий стан і hо - маркер дна магазина, а заключною - конфігурація (s, $ , $) , де s належить до множини кінцевих станів F.
Для позначення послідовності змінючи друг друга конфігурацій умовимося
використовувати знак |--*. У такий спосіб послідовність
( s1, a 1, g 1) |-- ( s2, a 2, g 2) |-- ...|-- ( sn, a n,g n )

записується в скороченому виді так:
(s1,a 1, g 1) |--* ( sn, a n,g n ).

7. СПАДНІ РОЗПІЗНАВАЧИ

 

Моделювання роботи недетермінованих магазинних розпізнавачей зв'язано з пошуком послідовності переходів з початкового в одне, з кінцевих станів. Пошук складається з окремих кроків, кожний з яких може закінчитися невдало і привести до повернення у вихідний стан для виконання наступного кроку. Такий пошук з поверненням зв'язаний зі значними витратами часу, тому на практиці використовують більш економічні детерміновані розпізнавачі, що працюють без повернень. Ці розпізнавачі допускають тільки обмежені класи КВ-мов, що відображають усі синтаксичні риси мов програмування.

Розпізнавачі можна розділити на дві категорій: спадні і висхідні. Кожна категорія характеризується порядком, у якому розташовуються правила в дереві висновку. Спадні розпізнавачіобробляють правила зверху вниз, верхні правила раніш нижніх, у той час як висхідні аналізатори використовують нижні правила раніш тих, що розташовано вище.

У загальному випадку граматика відноситься до класу LL(K) граматик, якщо для неї можна побудувати спадний детермінований розпізнавач, що враховує K вхідних символів, розташованих праворуч від поточної вхідної позиції.

Назва LL відбулося від слова Left, оскільки аналізатор переглядає вхідний ланцюжок ліворуч - праворуч , і слова Leftmost, оскільки він виявляє появу правила по одному чи групі символів, що утворять лівий край ланцюжка. На практиці найбільше застосування має клас LL(1) граматик, для яких детермінований розпізнавач працює по одному вхідному символу, розташованому в поточній позиції. До класу LL(1) граматик відносяться розділені та слабо-розділені граматики.

7.1. Розділені граматики

 

Контекстно-вільна граматика, що не містить анулюючих правил називається розділеною чи простою, якщо виконуються наступні дві умови:

1. Права частина кожного правила починається терміналом.
2. Якщо два правила мають однакові ліві частини, то праві частини цих правил повинні починатися різними термінальними символами.

Важливою властивістю розділених граматик є те, що для кожної з них можна побудувати детермінований спадний розпізнавач.

7.2. Побудова детермінованого спадного розпізнавача

Побудова розпізнавача передбачає зіставлення кожному правилу граматики команди розпізнавача. Відповідно до загального способу побудови розпізнавача кожному правилу розділеної граматики, що мають вид:

A ®a a ,

де a - ланцюжок символів повного словника і a належить термінальному словнику, потрібно поставити у відповідність команду

 

f ( s0 , a , A) = ( s0 , a ') ,

яка визначає такт роботи розпізнавача зі зрушенням вхідної голівки і у якійa ' являє собою дзеркальне відображення ланцюжка a.

Крім того, варто врахувати, що термінальні символи можуть бути розташовані в правих частинах правил не тільки на самій лівій позиції. Для таких терміналів необхідно побудувати команди виду :

f ( s0 , b , b ) = ( s0 , $ )

 

Для переходу в заключний стан додамо правило:

f ( s0 , $ ,h0 ) = ( s1 , $ ) ,

а як початкову конфігурацію розпізнавача приймемо, як
звичайно вираз:

( s0 , a , h0 I ) ,

де I - початковий символ граматики, аa- заданий вхідний ланцюжок.

Застосовуючи приведені вище правила, побудуємо розпізнавач для розділеної граматики:

R = {I ® abB,

I ® bBbI,
B ®a,
B ®bB},

 

P = { a , b }, H = { a , b ,I , B , h0 }, S = {s0}, F= {s0},

Побудуємо команди розпізнавача:

f ( s0 , a , I) = ( s0 , Bb )
f ( s0 , a , B) = ( s0 , $ )
f ( s0 , b , I ) = ( s0 , I b B )
f ( s0 , b ,B ) = ( s0 , B )
f ( s0 , b , b ) = ( s0 , $ )
f ( s0 , e , h0 ) = ( s0 , $ )

 

Роботу побудованого автомата покажемо на прикладі аналізу ланцюжка bbabab.

( s0 , bbababa , h0I ) |--- ( s0 , bababa , h0IbB ) |---

( s0 , ababa , h0IbB ) |--- ( s0 , baba , h0Ib ) |---

( s0 , aba , h0I ) |--- ( s0 , ba , h0Bb ) |--- ( s0 , a , h0B )

|--- ( s0 , $ , h0 ) |--- ( s0 , $ , $ ) .

 

Приведена послідовність конфігурацій показує, що в кожній конфігурації може бути застосована єдина команда розпізнавача, тому такий розпізнавач називається детермінованим.

 

7.2.1. Множина ВИБІР

Інший клас граматик, що породжують детерміновані мови, називається слаборозділеними граматиками. Цей клас відрізняється від класу розділених граматик тим, що він допускає використання анулюючих правил у схемі граматики. Однак, не всяка розділена граматика з анулюючими правилами відноситься до класу слаборозділених граматик. Щоб сформулювати визначення, що дозволяє пізнавати слаборозделені і LL(1) граматики, нам будуть потрібні нові поняття: множина ВИБІР, функції ПЕРВ і СЛІД.

Множина ВИБІР будується для кожного правила і включає ті термінальні символи, з появою яких під читаючою голівкою розпізнавач повинний застосовувати це правило.
Для визначення множини ВИБІР використовуються функції ПЕРВ і СЛІД. Аргументом функції ПЕРВ може бути будь-як ланцюжок повного словника µ, а значенням функції ПЕРВ(µ) є множина термінальних символів, що можуть стояти на першому місці в ланцюжках, виведених з ланцюжка µ.

 

7.2.2.Побудова функції ПЕРВ(µ).

Значення функції ПЕРВ(m) можна визначити користаючись наступними правилами: 1) Якщо ланцюжок µ починається термінальним символом і має вид m®bm’

ПЕРВ(m®bm’) = {b},


2) Якщо ланцюжок µ є порожнім ланцюжком,µ ® $, то функція

ПЕРВ(µ ® $) = $,

3) Якщо ланцюжокµ починається нетермінальним символом B і має вид m®Bµ', а в схемі граматики є n правил, у будь-якій частині яких знаходиться символ B:

B ® a1 | a2 | ... | an ,

і, якщо не існує виводу B ® $, то функція ПЕРВ(m®Bµ') являє собою об'єднання множин:

ПЕРВ(m®Bµ') = ПЕРВ(a1) È ПЕРВ (a2) È...ÈПЕРВ(an),

4) Якщо ланцюжок µ починається нетермінальним символом і має вид m® Bµ', в схему граматики входять n правил виду

B ® a1 | a2 | ... | an ,

і B є нетерміналом, що анулює, тобто існує B ® $, то функція

 

ПЕРВ(m®Bµ')=ПЕРВ(µ') È ПЕРВ(a 1)È ПЕРВ(a 2) È...È ПЕРВ(a n).

Як приклад виконаємо обчислення функції ПЕРВ для правил наступної граматики:

 

Г1:

R = { (1) A ® BCc,

(2) A ® gDB,
(3) B
® $,
(4) B
® bCDE,
(5) C
® DaB,
(6) C
® ca,
(7) D
® $,
(8) D
® dD,
(9) E
® gAf,
(10) E
® c }.

 

Спочатку знайдемо значення функції для правих частин правил (2), (4), (6), (8), (9) , (10) , що починаються термінальними символами:

ПЕРВ(gDB) = {g}
ПЕРВ(bCDE) = {b}
ПЕРВ(ca) = {c}
ПЕРВ(dD) = {d}
ПЕРВ(gAf) {g}
ПЕРВ(c) = {c}

Потім обчислимо функцію для правил (5) і (6) :

ПЕРВ (C) = ПЕРВ (DaB) È ПЕРВ (ca).

З огляду на те, що D є нетерміналом, що анулює, одержуємо:

ПЕРВ(C) = ПЕРВ(aB) ÈПЕРВ(D) È{c} = {a}È{d}È{c}={a, d, c}.

При обчисленні функції для правил (1) і (2) також необхідно врахувати те, що B є терміналом, що анулює, тому маємо:

ПЕРВ(A) = ПЕРВ(BCc) È ПЕРВ(gDB) =
ПЕРВ(Cc) È ПЕРВ(B) È ПЕРВ(gDB) =

{a,d,c} È {b} È{g} = {a,b,c,d,g}.

 

7.2.3. Побудова функції СЛІД(µ).

Аргументом функції СЛІД є нетермінальний символ, наприклад B, а значення функції СЛІД(B) являє собою множина терміналів, що можуть випливати безпосередньо за нетерміналом B у ланцюжках, виведених з початкового символу граматики.
Обчислення значення функції СЛІД(B) повинне виконуватися за наступними правилами:
1) Якщо в схемі граматики маються правила виду

X1 ® µ1Ba1, X2 ® µ2Ba2, ... , Xn ® µnBan,

і не існує правил a i ® $ , то

СЛІД(B) = ПЕРВ(a 1) È ПЕРВ(a 2) È ... È ПЕРВ(a n).

2) Якщо ж серед приведених вище правил існує хоча б один ланцюжок ai ® $, наприклад нехай a1 ® $, то функція обчислюється так:

СЛІД(B) = СЛІД(X1) È ПЕРВ(a 2) È ... È ПЕРВ(a n).

Виконаємо обчислення функції СЛІД для нетерміналів граматики Г1. Спочатку визначимо функцію для нетермінала <A>, що зустрічається в правій частині правила (9).

СЛІД(A) = ПЕРВ(f) = {f}.
Нетермінал C входить у праві частини правил (1) і (4), з огляду на те, що нетермінал D є анулюючим, одержуємо:

СЛІД(C) = ПЕРВ(D) È ПЕРВ(E) ÈПЕРВ(c) = {c,d,g}.

Нетермінал <B> входить у праві частини правил (1), (2), (5), тому маємо:

СЛІД(B) =ПЕРВ(Cc) È СЛІД(A) È СЛІД(C),

підставляючи в отримане вираження значення функцій, що входять у праву частину, одержуємо:

СЛІД(B) = { a, c, d, }È { f } È { c, d, g, } = { a, c, d, g, f }.

Для нетермінала D , що входить у правила (2), (4) , (5) і (8), врахувати те, що нетермінал B є анулюючим, одержуємо:

СЛІД(D) =ПЕРВ(B) È СЛІД(A) È ПЕРВ(E) È ПЕРВ(aB),

з огляду на те, що, для нетермінала E, який входить у правило (4)
СЛІД(E) = СЛІД(B) = {a,d,c,g,f},
остаточно маємо:
СЛІД(D) = ПЕРВ(B)È СЛІД(A) ÈПЕРВ(E) È {a} =

= {b}È {f} È {c,g} È {a} = {a,b,c,g,f}.

7.2.4. Побудова функції ВИБІР(m).

Множину ВИБІР, яка буде потрібна нам для побудови переходів магазинних автоматів, можна визначити за допомогою функцій ПЕРВ і СЛІД у такий спосіб:

1) Якщо правило граматики має вид B®aіaне є анулюючим ланцюжком, іншими словами не існує виводу a ®$, то

 

ВИБІР(B ® a ) = ПЕРВ( a ).


2) Для правил граматики, що анулюють, виду B ®$, множина вибору визначається так

ВИБІР(B ® $) = СЛІД(B).


3) Якщо правило граматики має вид B ® µі µ є анулюючим ланцюжком то

ВИБІР(B ® µ) = ПЕРВ(µ) È СЛІД(B).

 

Для розглянутої граматики множина ВИБІР для кожного з правил, побудовані описаним вище способом, мають вид:

ВИБІР(A ® BCc) = ПЕРВ(BCc) = {a,b,c,d},
ВИБІР(A
® gDB) = ПЕРВ(gDB) = {g},
ВИБІР(B
® $) = ПЕРВ($) È СЛІД(B) = {a,c,d,g,f},
ВИБІР(B
® bCDE) = ПЕРВ(bCDE) = {b},
ВИБІР(C
® DaB) = ПЕРВ(DaB) = {a,d},
ВИБІР(C
® ca) = ПЕРВ(ca) = {с},
ВИБІР(D
® $) = ПЕРВ($) È СЛІД(D) = {a,b,c,g,f},
ВИБІР(D
® dD) = ПЕРВ(dD) = {d},
ВИБІР(E
® gAf) = ПЕРВ(gAf) = {g},
ВИБІР(E
® c) = ПЕРВ(c) = {c}.

 

7.3. Слаборозділені граматики

 

Використовуючи введені поняття, можна дати визначення слаборозділеної граматики.

КВ-граматика називається слаборозділеною, якщо виконуються наступні три умови:

· права частина кожного правила являє собою або порожній ланцюжок $, або починається з термінального символу;

· якщо два правила мають однакові ліві частини, то праві частини правил повинні починатися різними символами;

· множина ВИБІР, побудована для правил з однаковою лівою частиною, не містять однакових елементів.

– Конец работы –

Эта тема принадлежит разделу:

Методические указания к выполнению лабораторных работ по курсу ПСП

Національний технічний університет... Харківський політехнічний інститут... Кафедра Обчислювальна техніка та програмування...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Виключення ланцюгових правил

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Умови задач.
1. Змінні цілого типу. Оператор вводу. 2. Змінні символьного типу. Оператор виводу. 3. Масиви чисел . 4. Оператор циклу з параметром. 5. Оператор циклу с передум

Граматика типу 1
Граматики типу 1, яка називають також контекстно-залежними граматиками, не допускають використання будь-яких правил. Правила висновку в таких граматиках повинні ма

Граматика типу 2
Граматики типу 2 називають контекстно-вільними або безконтекстними граматиками ( КВ-граматики чи Б-граматики). Правила висновку таких грамати

ПОБУДОВА ПРАВИЛ ГРАМАТИКИ
Основою створення правил граматики є спосіб виділення структури заданої множини ланцюжка . Цей спосіб передбачає ділення ланцюжка на частини таким чином, щоб виявити частини, які повторюються , і я

Алгоритм побудови правил граматики
1. Виписати кілька прикладів із заданої множині ланцюжків. 2. Проаналізувати структуру ланцюжків, виділяючи початок і кінець, де повторюються символи чи групи символів. 3. Ввести

Приклад.
Маємо граматику: R = {I®aIa, I®bAd, I®c, A®cBd, A®aAd, B®dAf }, знаходимо, що тут непродуктивними є символи А і B.Після виключення правил

Приклад.
Маємо граматику: R = { I ®aIb, I ®c, A ®bI, A ®a }, знаходимо, що A є недосяжним символом. КВ-граматика називається приведено

Приклад
Маємо граматику: R={ E ® E + T | T , T ® T *F | F, F ® (E ) | a}. Правило E ® E + T | T перетворимо в пр

LL(1) - граматики
Розділені і слаборозделені граматики являються підкласом граматик більш загального виду, що називаються LL(1) граматиками. Граматика називається LL(1) граматикою · права частина кожного пр

Побудова магазинного автомата
Для граматик, що задовольняють умовам LL(1) граматик, справедливо наступне твердження: Для кожної LL(1) граматики можна побудувати детермінований магазинний автомат М, що допускає мова, по

Приклад 1.
1. Побудувати спадний розпізнавач для оператору присвоювання арифметичного виразу. Арифметичний вираз містить: ідентифікатори і, :=, (, ), ; . Кількість вкладених дужок не обмежена. 1. Буд

Приклад 2.
Побудувати спадний розпізнавач для оператору виводу write або writeln. Оператор може містити в дужках список операторів і і коментарів ‘t ‘. 1. Будуємо правила граматики &n

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги