下推自动机的物理模型
M= (Q,∑,Γ,δ,q0,Z0,F)
Q——状态的非空有穷集合。"q∈Q,q称为M的一个状态(state);
∑——输入字母表(input alphabet)。要求M的输入字符串都是∑上的字符串;
Γ——栈符号表(stack alphabet)。"A∈Γ,叫做一个栈符号;
那如何来设计PDA呢,我们来看一个例子:
G1:S®2|0S0|1S1
G2:S®2|0SA|1SB
A®0
B®1
派生 |
M应该完成的动作 |
SÞ0SA |
从q0启动,读入0,将S弹出栈,将SA压入栈,状态不变 |
Þ01SBA |
在状态q0,读入1,将S弹出栈,将SB压入栈,状态不变 |
Þ010SABA |
在状态q0,读入0,将S弹出栈,将SA压入栈,状态不变 |
Þ0102ABA |
在状态q0,读入2,将S弹出栈,将ε压入栈,状态不变 |
Þ01020BA |
在状态q0,读入0,将A弹出栈,将ε压入栈,状态不变 |
Þ010201A |
在状态q0,读入1,将B弹出栈,将ε压入栈,状态不变 |
Þ0102010 |
在状态q0,读入0,将A弹出栈,将ε压入栈,状态不变 |
M1=({q0},{0,1,2},{S,A,B},δ1,q0,S,Φ)。其中:
δ1(q0,0,S)={(q0,SA)}
δ1(q0,1,S)={(q0,SB)}
δ1(q0,2,S)={(q0,ε)}
δ1(q0,0,A)={(q0,ε)}
δ1(q0,1,B)={(q0,ε)}
此时有:N(M1)=L。
M2=({q0,q1},{0,1,2},{S,A,B,Z0},δ2,q0,Z0,{q1})
δ2(q0,0,Z0)={(q0,SAZ0)}
δ2(q0,1,Z0)={(q0,SBZ0)}
δ2(q0,2,Z0)={(q1,ε)}
δ2(q0,0,S)={(q0,SA)}
δ2(q0,1,S)={(q0,SB)}
δ2(q0,2,S)={(q0,ε)}
δ2(q0,0,A)={(q0,ε)}
δ2(q0,1,B)={(q0,ε)}
δ2(q0,ε,Z0)={(q1,ε)}
此时有:N(M2)=L(M2)=L。
M2=({q0,q1},{0,1,2},{S,A,B,Z0},δ2,q0,Z0,{q1})
δ2(q0,0,Z0)={(q0,SAZ0)}
δ2(q0,1,Z0)={(q0,SBZ0)}
δ2(q0,2,Z0)={(q1,ε)}
δ2(q0,0,S)={(q0,SA)}
δ2(q0,1,S)={(q0,SB)}
δ2(q0,2,S)={(q0,ε)}
δ2(q0,0,A)={(q0,ε)}
δ2(q0,1,B)={(q0,ε)}
δ2(q0,ε,Z0)={(q1,ε)}
此时有:N(M2)=L(M2)=L。