Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_tyap (1).doc
Скачиваний:
44
Добавлен:
17.04.2019
Размер:
1.05 Mб
Скачать

7. Однозначные и неоднозначные грамматики.

Неоднозначные грамматики

Существуют грамматики, в которых одна и та же цепочка может быть получена с помощью различных выводов. Например, в грамматике G1.11 цепочка abc может быть получена с помощью двух различных выводов, и ей соответствуют два различных синтаксических дерева.

G1.11:

T = {a, b, c, d}, N= {S, A, B},

P = {SAB,

Aa,

Aa c,

Bb,

Bc b}.

Первый вывод этой цепочки имеет вид :

1) SA BA ba c b,

а второй можно получить так :

2) SA BA c ba c b.

Следующая грамматика также допускает построение одной и той же цепочки с помощью двух выводов, имеющих разные синтаксические деревья.

G1.12:

T = {0, +}, N = {S},

P = {S0,

S S + 0,

S0 + S}.a

Два вывода этой грамматики, порождающие одинаковые цепочки, имеют вид:

1) SS + 0S + 0 + 00 + 0 + 0,

2) S0 + S0 + 0 + S0 + 0 + 0,

Рассмотренное свойство грамматик называется неоднозначностью. Оно может быть определено следующим образом.

Определение: Цепочка языка L(G) называется неоднозначной, если для её вывода существует более чем одно синтаксическое дерево. Если грамматика Г порождает неоднозначную цепочку, то она называется неоднозначной.

Неоднозначность может существовать не только в искусственных языках. Хорошо известно, что в естественных языках могут быть предложения, допускающие неоднозначное написание. Например, "Пальто испачкало окно". В этой фразе не ясно, что является подлежащим, а что дополнением. Другим примером служит английская фраза: "They are flying planes", которая может быть понята двояко: "Они пилотируют самолет" или: Это летящие самолеты". Свойство неоднозначности является крайне нежелательным для искусственных языков, поскольку неоднозначная цепочка имеет неединственный смысл и не позволяет однозначным образом восстановить дерево вывода. Естественно, что на практике следует использовать однозначные грамматики. Для того, чтобы убедиться в том, что рассматриваемая грамматика является неоднозначной, достаточно найти хотя бы одну порождаемую этой грамматикой цепочку, которая могла бы быть построена с помощью разных выводов. Трудность заключается в том, что не существует алгоритма, позволяющего обнаружить неоднозначную цепочку. Это положение доказано в теории формальных языков. Поиск неоднозначной цепочки путем перебора различных цепочек является бесперспективным, поскольку число таких цепочек, как правило, является бесконечным. Если же удается найти неоднозначную цепочку, то исходную грамматику следует преобразовать таким образом, чтобы она стала однозначной. При этом полученная грамматика должна быть эквивалентной исходной грамматике.

Определение: Две грамматики G1 и G2 называются эквивалентными, ecли они порождают один и тот же язык, L(G1) = L(G2). В общем случае доказано, что не существует алгоритма, который позволял бы проверить, являются ли эквивалентными две заданные грамматики.

Хотя проблема неоднозначности в общем виде не решается, в некоторых случаях, например, для КС – грамматик, определен вид правил, присутствие которых в схеме грамматики делает грамматику неоднозначной. Примерами таких правил могут служить правила вида:

A ® A A | a,

A ® A a A | b,

A ® a A | A b | g

Наличие в схеме грамматики одного из таких правил говорит о том, что грамматика неоднозначна. Если же подобные правила в схеме грамматики отсутствуют, то это еще не гарантирует неоднозначности грамматики.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]