2009-04-01 5 views
0

Я пытаюсь написать CFG по алфавиту Σ = {a,b} для всех слов, начинающихся и заканчивающихся таким же числом a, с по крайней мере одним b посередине.Как я могу написать свою контекстно-свободную грамматику?

Теперь я понимаю основную концепцию CFG, переменные, правила производства и т. Д. К сожалению, у меня закончились идеи для написания вышеупомянутого CFG. Все, что я получил до сих пор

S → aYXYa 
X → XbX | b | λ 
Y → ??? 

Я думаю что правила производства S и X даст мне строку с двумя ** a ** с обеих сторон, как многие ** b ** в середине, как мне хотелось бы. Тем не менее, я не уверен, как я могу также положить столько ** ** a ** с обеих сторон ** b ** с, убедившись, что точно такое же количество ** a ** s с каждой стороны ,

Любые предложения, решения были бы высоко оценены. Благодарю.

+0

Чтобы убедиться, что на каждой стороне есть одинаковое количество, просто убедитесь, что ваши производственные правила всегда совпадают. – Albert

+1

Привет, Альберт, не могли бы вы привести пример? Спасибо – 2009-04-01 21:47:34

+0

Правило «X → XbX | b | λ» сложнее, чем необходимо, но да, оно создает любое количество букв. – Albert

ответ

3
 
S → aSa | B 
B → b | bB 

Это должен быть CFG, который вы ищите. Всякий раз, когда вы имеете дело с одним и тем же в начале и в конце, помните, что вы не можете гарантировать, что тот же var будет заполнен таким же образом. Таким образом, вы должны сделать это явным.

+0

Большое спасибо! Теперь я могу, наконец, двигаться дальше. :) – 2009-04-01 23:23:00

+0

Не упоминайте об этом. Я получаю удовольствие от Intro до теоретической информатики (как мой uni любит называть ее) – DBendit

+0

Ха-ха. Желаю вам всего наилучшего! :) – 2009-04-01 23:54:42

7

Как бывший профессор, который раньше преподавал этот класс, я не дам вам ответа. Я, однако, дам вам подсказку:

У вас есть правильная идея разбить ее на две части: a и остальные. Однако вы не делаете ни одного из них правильно.

Сначала попробуйте написать: a n ba n затем оттуда оттуда.

Надеюсь, что это поможет.

+0

Вы имеете в виду, что мои правила должны в первую очередь разместить столько сбалансированных игроков с обеих сторон, прежде чем устанавливать какие-либо буквы в середине? – 2009-04-01 21:57:23

+0

Ну, я имел в виду, что вы должны написать S = aSa | b сначала ... затем выясните вторую строчку ... но да ... –

1

Это было время, так как мой старшекурсник дней CS, но это выглядит разумно:

S -> Asa | bX

X -> bX | E

В принципе, вы начинаете с S и добавляете столько пар, сколько хотите, а затем переключаетесь на X и добавляете столько же, сколько хотите.

+0

DBendit избил меня на 6 секунд :) –

+0

Не беспокойтесь, спасибо за ваш ответ.Я немного изменил оба решения, так что стартовая переменная принимает только обе стороны с дополнительной переменной (немного повторения), чтобы добавить дополнительные а и b. :) – 2009-04-01 23:31:12

 Смежные вопросы

  • Нет связанных вопросов^_^