Как определить язык, сгенерированный этой контекстно-свободной грамматикой?

Я имею дело со следующей грамматикой:

G = ( {S, A}, {a, b}, P, S ) 
P = { S -> aAb, S -> bAa, 
A -> aSa, 
A -> S, 
A -> epsilon}

Мне нужно найти L(G). Дело в том, что я выяснил, что слова в грамматике имеют вид: начинается с а и заканчивается на б, или начинается с б и заканчивается на а, а между этими буквами одно из сочетаний: аб, ба, ааба, абаа; затем следующее слово образуется путем вставки одной из этих 4 комбинаций между a и b в середине ... но как я могу выразить это формально? Я имею в виду, насколько я мог судить, L(A) = a^n S a^n, и если w принадлежит L(G), то w в обратном порядке также принадлежит L(G). Я попытался выразить это как регулярное выражение, но не смог... может ли кто-нибудь помочь?

Спасибо.


person user1045747    schedule 14.11.2011    source источник
comment
Контекстно-свободная грамматика уже определяет язык. Что еще вы подразумеваете под определением L(G)?   -  person hugomg    schedule 14.11.2011
comment
он, вероятно, хочет определить язык, используя операции как ^r, \, *, ., ... и т. д., или написать регулярное выражение, я сейчас на работе, поэтому у меня нет времени проверять, но я не думаю, это обычный язык, может быть, его можно выразить с помощью операций, описанных выше, я посмотрю дома   -  person Jan Vorcak    schedule 14.11.2011


Ответы (4)


Вы видите, что L не является правильным, чтобы доказать, что вы можете использовать лемму прокачки или теорема Майхилла-Нероде, поэтому регулярное выражение не может обсуждаться

Вы можете заметить, что, поскольку L состоит только из {a,b}, вы можете использовать его силу. Мы видим, что язык имеет форму aAb или bAa или aAa, за исключением того, что aAa не может быть расположен в начале-конце слова.

Итак, давайте использовать это, единственное, что мы упускаем из виду, это комбинация bAb A может генерировать почти все (слова |w| = 2k и |w|>=2), кроме слов, где позиция b совпадает с позицией b из обратного

Формально введите здесь описание изображения

Извините за мои навыки работы с текстом и мое формальное выражение

должна быть какая-то ошибка, потому что у меня было не так много времени, чтобы подумать об этом, но это может быть как-то, как продолжить, это домашнее задание, так что все в порядке, подумай об этом! :)

person Jan Vorcak    schedule 14.11.2011

Я попытался выразить это как регулярное выражение, но не смог

Этот язык «вероятно» нерегулярен. Контекстно-свободные языки более сложны/мощны, чем регулярные выражения.

Попробуйте сгенерировать несколько слов и посмотрите, сможете ли вы придумать название, свойства для языка. Или попробуйте найти слова, которых нет в языке.

Некоторые подсказки, несколько свойств, которые вы можете легко увидеть:

  1. Самая маленькая строка имеет размер не менее 2.

  2. Размер строки четный.

  3. Количество b равно ‹=, чем a.

Если вы уберете A -> aSa и сравните слово с его перевернутой версией, шаблон должен быть виден. Если вы включите правило опущения, шаблон немного изменится...

person Ishtar    schedule 14.11.2011

Вас просят найти язык, сгенерированный грамматикой G с продукцией

S → aAb | bAa
A → aSa | S | λ

Во-первых, рассмотрим небольшие производные от начального символа S.

S ⇒1 aAb ⇒1 aaSab | aSb | ab

S ⇒1 bAa ⇒1 baSaa | bSa | ba

Сложный шаг связан с рекурсией, сгенерированной правилами AaSa, SaAb и SbAa. Ключ к решению этой проблемы раскрывается при рассмотрении индуктивного определения языка, сгенерированного G:

1. ab ∈ L4
2. ba ∈ L4
3. w ∈ L4 → awb ∈ L4
4. w ∈ L4 → bwa ∈ L4
5. w ∈ L4 → awa ∈ L4

Правила (3)-(5) соответствуют правилам AaAa, SaAb и < em>S → bAa в G. Легко видеть, что индуктивное определение и правила G определяют один и тот же язык. Индуктивное определение показывает, что язык G можно построить поэтапно. Начиная с наименьших строк, сгенерированных в G, мы строим все большие и большие наборы строк, соответствующие проблематичным правилам:

L(1)     = {ab, ba}
L(n + 1) = {awb, bwa, awa : w ∈ L(n)}

Набор L(1) содержит наименьшие строки, которые можно сгенерировать в G. Набор L(n + 1) содержит строки awb, bwa и awa для каждой строки w L(n). То есть строки в L(n + 1) соответствуют строкам, полученным применением правил SaAb, S bAa и AaAa один раз для строк в L(n). Остается только построить объединение L(n), которое представляет собой множество:

L = ⋃ {L(n) : n ∈ ℕ}

Чтобы увидеть, что L эквивалентен языку, порожденному грамматикой G, вы можете рассуждать с помощью индукции по длине производных в G. Начиная с наименьших строк, которые можно сгенерировать в G (т. е. ab и ba), работая в обратном направлении, используя соответствующие гипотезы индукции.

person danportin    schedule 22.11.2011

сгенерированный язык: (a)n(b)m Were n>=m

person mad_max    schedule 02.11.2014
comment
Неправильно. Даже ба есть в языке. - person Peter Leupold; 13.11.2016