Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


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




Отношения предшествования в грамматиках Вирта определяются между любыми символами: как терминальными, так и нетерминальными.

Алгоритм свёртки терминальных цепочек по Вирту:

1. Строится для любого нетерминального символа множество левых и правых символов.

2. Определяется отношение предшествования между символами, и заносятся в матрицу (таблицу предшествования).

3.Выполняя последовательные выделения основ для свёртки, осуществляется собственно свёртка цепочек.

4. Включается семантика в алгоритм свёртки цепочки.

Множество левых и правых символов для каждого нетерминала грамматики определяется следующим образом: L – множество левых символов:

L(u)={S|u®jÚu®AjÙSÎL(A)}, где uÎVN,, SÎ(VTÈVN), jÎ(VTÈVN)*

R – множество правых символов:

Отношения предшествования в грамматике по Вирту определяются следующим образом:

а) S1 S2, если существует правило вида: u®jS1S2h, где u – нетерминал, S1,S2Î(VTÈVN), j,hÎ(VTÈVN)*.

б) S1<·S2, если существует правило вида: u®jS1bh, S2ÎL(B), S1,S2Î(VTÈVN), u,BÎVN, j,hÎ(VTÈVN)*

в) S1·>S2, если существует правило вида: u®jAS2h, S1ÎR(A), S1,S2Î(VTÈVN), u,AÎVN, j,hÎ(VTÈVN)* или u®jABh, S1ÎR(A), S2ÎL(B), A,B,uÎVN

Пример 6.1.

S®^(AB)^, A®[A]|*, B®[B]|*

Строим множество левых и правых символов.

 

U L(u) R(u)
S ^ ^
A [* ]*
B [+ ]+

Рис. 6.1.

Матрица предшествования: S ^ ( A B ) [ ] * +
S                    
^                  
(              
A            
B                
)                  
[          
]         ·> ·> ·> ·>   ·>
*         ·>   ·> ·>   ·>
+           ·>   ·>    

 

S ^ ( A B ) [ ] * +
S                    
^                  
(              
A            
B                
)                  
[          
]         ·> ·> ·> ·>   ·>
*         ·>   ·> ·>   ·>
+           ·>   ·>    

Матрица предшествования:

 

Рис. 6.2.

 

 

Проверим принадлежность цепочки языку, выполнив свертку по Вирту:








-

S

Рис. 6.3.

 

Как видно, удалось свернуть цепочку до начального выделенного символа S, значит, цепочка принадлежит языку. Зато цепочка языку.

При выполнении свертки по Вирту возможны следующие ошибки:
1)между двумя символами не существует отношения предшествования;
2)выделена основа для свертки, а подходящего правила для замены нет.
Следует заметить, что не существует общего алгоритма, позволяющего преобразовать произвольную КС-грамматику к грамматике предшествования, хотя существует правило, позволяющее выполнить это для некоторых КС-грамматик, действие которого показано на следующем примере:

Включение семантики осуществляется следующим образом: в соответствии с любым правилом вывода ставится некоторое семантическое действие, которое выполняется при замене основы для свертки на это правило.

 


Поделиться:

Дата добавления: 2014-11-13; просмотров: 625; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты