как выяснить, какой язык распознает КПК - PullRequest
1 голос
/ 19 октября 2011

Я пытаюсь понять, как определить, какой язык распознает КПК, и чувствую, что я близок, но все еще пропускаю.Возьмите следующий КПК, например.Я могу составить диаграмму переходов, чтобы выяснить, какие у меня дельты (переходы), но оттуда я потерялся.Это не домашнее задание, просто пример из книги.Вот проблема и таблица переходов:

enter image description here

enter image description here

1 Ответ

0 голосов
/ 19 октября 2011

Если я правильно читаю запись, похоже, что это L *, где L - это язык, который вы получаете, выполняя цикл только один раз.Чтобы обойти цикл, вы видите «c», некоторое число «a», то же число «b», затем еще одну «c».Итак, L = ca ^ nb ^ nc, и язык этого КПК (ca ^ nb ^ nc) *.

Естественно, проверьте это и, пожалуйста, скажите мне, если я ошибаюсь.Я также могу лучше объяснить процесс, который я использовал, чтобы попытаться выяснить это.

РЕДАКТИРОВАТЬ: Объясняя, откуда я получаю ^ nb ^ n.

Таким образом, стек начинается толькосимвол нижней части стека Z .Итак, изначально мы находимся в состоянии 1 со стеком Z - (1, Z ).Затем мы видим ac и переходим в состояние 2, помещая $ в стек;так что мы в (2, $ Z ).Тогда, скажем, мы видим n экземпляров строки подряд;каждый раз мы добавляем новый c в стек и возвращаемся в состояние 2. Поэтому мы сейчас находимся в конфигурации (2, c ^ n $ Z ).Допустим, мы увидим экземпляр б.Мы переходим в состояние 3 и удаляем ac из стека;наша конфигурация теперь (3, c ^ (n-1) $ Z ).Теперь нам нужно видеть экземпляры b, пока мы не вернемся к вершине стека;поэтому в состоянии 3 мы можем видеть (n-1) экземпляров b, каждый из которых будет вызывать выталкивание одного экземпляра c из стека.После просмотра этих экземпляров b мы будем в конфигурации (3, $ Z ).Наконец, мы увидим еще один экземпляр c и, находясь на вершине стека $, мы можем вытолкнуть его и вернуться в состояние 1 в нашей начальной конфигурации (1, Z ).

(a ^ n) (b ^ n) проистекает из того факта, что мы помещаем в стек столько экземпляров c, сколько мы видим в состоянии 2 «a», и удаляем из стека в состояниях 2 и 3столько экземпляров c из стека, сколько мы видим экземпляров b.Выбор n для представления длины абсолютно произвольный ... он используется только для указания того, что количество экземпляров a и b должно быть одинаковым, если мы можем увидеть $ на вершине стека и перейти обратно кпринимающее государство.

...