2
假設我們有上下文無關語言L = {0^n0^n,n> = 0}。PDA:如何檢查pop是偶數還是奇數
對於PDA:Μ= {A,Q,H,δ,Q0,H0,F}我們:
A = {"0"}
H = {X, I}
Q = {S, T}
q0 = S
h0 = X
F = {T}
Then, the δ function is:
___________________________________________________________________
| X | I | -| |
---+------------------------+--------------------------+-------------|
S | read("0")=> push(I) | read("0")=> push(I) | |
| keep=> move(T) | pop | |
---+------------------------+--------------------------+-------------|
T | | | success |
---------------------------------------------------------------------+
這是我的解決方案,但它有一個問題。自動機必須接受字符串,如 00,ε,0000,而不是0或000.通常情況下,字符串偶數爲0。
讓我們嘗試2個例子:
->for string 00:
MOVE STACK INPUT STATE DESCRIPTION_OF_MOVE
1 X '0'0 S reading_of 0
2 XI '0' S reading_of 0
3 XII ε S pop
4 XI ε S pop
5 X ε S ε-transition
6 X ε T success
->for string 000:
MOVE STACK INPUT STATE DESCRIPTION_OF_MOVE
1 X '0'00 S reading_of 0
2 XI '0'0 S reading_of 0
3 XII '0' S reading_of 0
4 XIII ε S pop
5 XII ε S pop
6 XI ε S pop
7 X ε S ε-transition
8 X ε T success
最後的字符串不應該被接受。我無法弄清楚如何在識別字符串之前檢查彈出的數量以選擇是否接受它。有沒有人有任何想法,任何線索來觸發我?