Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТФЯГ методичка.doc
Скачиваний:
220
Добавлен:
16.03.2015
Размер:
2.68 Mб
Скачать

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

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

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

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

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

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

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

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

L(u)={S|uuASL(A)}, где uVN,, S(VTVN), (VTVN)*

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

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

а) S1S2, если существует правило вида: uS1S2, где u – нетерминал, S1,S2(VTVN), ,(VTVN)*.

б) S1<·S2, если существует правило вида: uS1, S2L(B), S1,S2(VTVN), u,BVN, ,(VTVN)*

в) S1·>S2, если существует правило вида: uAS2, S1R(A), S1,S2(VTVN), u,AVN, ,(VTVN)* или uAB, S1R(A), S2L(B), A,B,uVN

Пример 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)выделена основа для свертки, а подходящего правила для замены нет. Следует заметить, что не существует общего алгоритма, позволяющего преобразовать произвольную КС-грамматику к грамматике предшествования, хотя существует правило, позволяющее выполнить это для некоторых КС-грамматик, действие которого показано на следующем примере:

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