形式语言与自动机之语言识别机器——下推自动机

 

下推自动机的物理模型

 

 形式语言与自动机之语言识别机器——下推自动机_第1张图片

  • 下推自动机(pushdown automatonPDA)

M= (Q,∑,Γδq0Z0F)

Q——状态的非空有穷集合。"qQq称为M的一个状态(state)

——输入字母表(input alphabet)。要求M的输入字符串都是∑上的字符串;

Γ——栈符号表(stack alphabet)"AΓ,叫做一个栈符号;

  • Z0——Z0Γ叫做开始符号(start symbol),是M启动时候栈内惟一的一个符号。所以,习惯地称其为栈底符号;
  • q0——q0Q,是M开始状态(initial state),也可叫做初始状态或者启动状态
  • F——FÍQ,是M终止状态(final state)集合,简称为终态集。"qFq称为M的终止状态,也可称为接受状态(accept state),简称为终态。
  • δ——状态转移函数(transition function),有时候又叫做状态转换函数或者移动函数。

那如何来设计PDA呢,我们来看一个例子:

  • 1接受语言L={w2wT| w{0,1}*}PDA的设计。
  • 先设计产生LCFG G1

G1S®2|0S0|1S1

  • 再将此文法转化成GNF

G2S®2|0SA|1SB

A®0

B®1

  • 句子0102010的最左派生和我们希望相应的PDA M的动作。
  • 派生

    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}{012}{SAB}δ1q0SΦ)。其中:

δ1(q00S)={(q0SA)}

δ1(q01S)={(q0SB)}

δ1(q02S)={(q0ε)}

δ1(q00A)={(q0ε)}

δ1(q01B)={(q0ε)}

此时有:N(M1)=L

M2=({q0,q1},{0,1,2},{S,A,B,Z0},δ2,q0,Z0,{q1})

δ2(q00Z0)={(q0SAZ0)}

δ2(q01Z0)={(q0SBZ0)}

δ2(q02Z0)={(q1ε)}

δ2(q00S)={(q0SA)}

δ2(q01S)={(q0SB)}

δ2(q02S)={(q0ε)}

δ2(q00A)={(q0ε)}

δ2(q01B)={(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(q00Z0)={(q0SAZ0)}

δ2(q01Z0)={(q0SBZ0)}

δ2(q02Z0)={(q1ε)}

δ2(q00S)={(q0SA)}

δ2(q01S)={(q0SB)}

δ2(q02S)={(q0ε)}

δ2(q00A)={(q0ε)}

δ2(q01B)={(q0ε)}

δ2(q0εZ0)={(q1ε)}

此时有:N(M2)=L(M2)=L

 

 

你可能感兴趣的:(形式语言与自动机之语言识别机器——下推自动机)