Способ использования JFLAP для создания Pushdown Automaton
1 ответ
Я думаю, что этот вопрос лучше подходит для https://cs.stackexchange.com/, но я все равно добавлю свое решение.
Формируем пример
На самом деле это проще, чем кажется, давайте рассмотрим в качестве примера, что у нас есть следующие значения для наших вхождений:
n = 2
m = 3
p = 1
Это должно позволить нам сформировать следующую строку:
a2 b3 c1 a1 + 3 b2 = aabbbcaaaabb
Формирование логического понимания
Исходя из этого, мы должны определить, какие символы нам нужно отслеживать.
- Мы знаем, что встречаются внешние символы
n
раз и чтоn,m ≥ 1
поэтому мы должны следить заn
здесь и мы требуем, чтобы это произошло хотя бы раз. - Мы знаем это
q = p+m
а такжеm
также происходит, по крайней мере, поэтому мы должны отслеживать происшествияm
, - Если
q = p+m
нам также нужно сохранить вхождениеp
но обратите внимание, чтоp
также не может произойти, потому что заявлено, чтоp ≥ 0
,
Формирование формального определения
Мы позволяем нашему КПК P быть следующим КПК:
P = (Q, Σ, Γ, τ, q0, Z, q6)
Куда:
- Q - набор состояний в нашем d-PDA
- Σ - входной символ, содержащий строку
- Γ - символ стека, содержащий множество Γ = {a, b}
- q0 - наше начальное (начальное) состояние
- Z - наш символ стека
#
- q6 - наше конечное (конечное) состояние
Формирование автомата нажатия
Таким образом, из этого мы можем сформировать следующий автомат (в JFLAP):
Итак, здесь мы просто отслеживаем символы, как указано выше, но важно отметить, что здесь q3
где переход для c
0 или более переходов.
Мы также используем символ #
как символ стека.
моделирование
Если мы смоделируем этот КПК с помощью ввода, как указано выше (aabbbcaaaabb
), мы получаем следующие результаты: