Написание грамматики GNF для CFL

Здравствуйте, я хотел бы задать вам этот вопрос.

Я должен был вычислить (вручную) грамматику в нормальной форме Грейбаха, которая генерирует язык

L = {ai bj ck | i + j = 2k and k >= 1}

Я действительно понятия не имею,. Кто-нибудь может мне помочь?

Заранее спасибо
Крисс


person user2799534    schedule 20.09.2013    source источник
comment
В чем именно заключается ваш вопрос?   -  person Richard Tingle    schedule 20.09.2013
comment
Это должно быть осуществимо. Сначала создайте грамматику, а затем преобразуйте ее в GNF. Или объясните, почему это не работает для вас.   -  person Gunther    schedule 20.09.2013


Ответы (2)


Context Free Grammar CFG для вашего языка La = {ai bj ck | i + j = 2k and k >= 1}.

Ниже ответ на языке L = {ai bj ck | i + j = k and k >= 1}.

Конфигурация:

S --> aAc | bBc |
A --> aAc | B   |  ^
B --> bBc | ^ 

Что такое GNF?

Одной из важных форм CFG является нормальная форма Greibach GNF:

   A --> aα   
   Where α ∈ V* (any number of variables including zero)

Примечание: nul ^ не может быть символом в правой части любой продукции. Примите начальный символ S с условием, что если S --> ^ является постановкой в ​​грамматике, то S не может появляться в правой части любой другой продукции в грамматика.

Любая CFG может быть записана в форме GNF.

Как конвертировать CFG в GNF?

Обратите внимание, что в CFG, который я написал выше, есть нулевые производства A --> ^ и B --> ^ и единичное производство A --> B. Единичные и нулевые производства не допускаются в форме GNF. Хотя другие продукты могут быть легко записаны в форме GNF путем введения в продукты GNF в грамматике, например. S --> aAc можно переписать как S --> aAC and C --> c.

Итак, ниже я переписываю эквивалентную CFG для языка и удаляю nul и единицы продукции, называемые упрощенной CFG.

Упрощенная конфигурация конфигурации:

S --> aAc | bBc | ac | bc
A --> aAc | bBc 
B --> bBc | bc

Теперь эту грамматику можно легко преобразовать в форму GNF, введя новую продукцию GNF C --> c и заменив c на C в других правилах продукции.

GFN для языка L:

S --> aAC | bBC | aC | bC
A --> aAC | bBC 
B --> bBC | bC
C --> c

По ошибке я написал неправильную грамматику, я обновлю ответ для языка La

Изменить

La = {ai bj ck | i + j = 2k and k >= 1}.

CFG для La:

S --> aaAc | bbBc | abBc
A --> aaAc | B    | abBc |  ^
B --> bbBc | ^ 

Упрощенная конфигурация конфигурации:

S --> aaAc | bbBc | abBc | aac | bbc | abc 
A --> aaAc | bbBc | abBc | aac | abc
B --> bbBc | bbc 

GFN для языка La:

Добавьте три новых производственных правила: X --> a, Y --> b и Z --> c.

Сменить программатор и заменить терминал на переменные:

S --> aXAZ | bYBZ | aYBZ | aAZ | bYZ | aYZ  
A --> aXAZ | bYBZ | aYBZ | aXZ | aYZ
B --> bYBZ | bYZ
X --> a
Y --> b
Z --> c
person Grijesh Chauhan    schedule 21.09.2013
comment
Большое спасибо, но на самом деле полученная грамматика не производит язык. т. е. S-›bC-›bc не содержится в данном языке. И есть слова, которые принадлежат языку, который я не могу произнести, например, abc. - person user2799534; 21.09.2013
comment
@user2799534 user2799534 хорошо, проверьте обновленный ответ, дайте мне знать, если есть ошибка. - person Grijesh Chauhan; 22.09.2013

О приведенном ниже ответе CFG La = {ai bj ck | i + j = k and k >= 1} неверен

Ваш упрощенный CFG:

S --> aAc | bBc | ac | bc . A --> aAc | bBc . B --> bBc | bc .

Поскольку приведенный выше язык L = {ai bj ck | i + j = k and k >= 1} создает язык aabccc, но ваш упрощенный CFG не создает его.

Правый CFG

Упрощенная CFG

S --> aAc | bBc | ac | bc A --> aAc | bBc | bc | ac B --> bBc | bc

Исправьте это, второй язык имеет ту же проблему.

Спасибо!

person Sohaib Aslam    schedule 27.10.2017