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

下推自动机的物理模型

  • 下推自动机(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值