• 下推自动机(PDA)在程序设计中的应用


    (一)下推自动机简介(Pushdown Automation)

        下推自动机﹙PDA﹚是自动机理论中定义的一种抽象的计算模型。下推自动机比有限状态自动机复杂:除了有限状态组成部分外,还包括一个长度不受限制的栈;下推自动机的状态迁移不但要参考有限状态部分,也要参照栈当前的状态;状态迁移不但包括有限状态的变迁,还包括一个栈的出栈或入栈过程。

    物理模型如下:

    image

    PDA 应该含有三个基本结构:①存放输入符号串的输入带   ②存放文法符号的栈   ③有穷状态控制器。

    PDA的动作:在有穷状态控制器的控制下根据它的当前状态、栈顶符号、以及输入符号作出相应的动作,在有的时候,不需要考虑输入符号。

    (二)PDA的形式语言定义

    下推自动机 (pushdown automaton,PDA) M = (Q, ∑, Γ, δ, q0 , Z0 , F)
    Q——状态的非空有穷集合。q∈Q,q 称为M 的一个状态(state);
    ∑——输入字母表 (input alphabet)。要求 M 的输入字符串都是∑上的字符串;
    Γ——栈符号表 (stack alphabet)。∀A∈Γ,叫做一个栈符号;
    Z0——Z0∈Γ叫做开始符号(start symbol),是 M 启动时候栈内惟一的一个符号。所以,习惯地称其为栈底符号;
    q0——q0∈Q,是 M 的开始状态(initial state),也可叫做初始状态或者启动状态;
    F——FQ,是 M 的终止状态(final state) 集合,简称为终态集。∀q∈F,q 称为 M 的终止状态,也可称为接受状态 (accept state),简称为终态。
    δ——状态转移函数(transition function),有时候又叫做状态转换函数或者移动函数。 描述如下:
    ①:δ(q, a, Z )={ (p1, γ1) , (p2, γ2) , … , (pm, γm) }  表示 M 在状态 q,栈顶符号为 Z 时,读入字符 a,对于i = 1, 2, …, m,可以选择地将状态变成 pi并将栈顶符号 Z 弹出,将 γi 中的符号从右到左依次压入栈,然后将读头向右移动一个带方格而指向输入字符串的下一个字符。
    ②:δ(q,ε, Z)={(p1, γ1), (p2, γ2),…,(pm, γm)}  表示 M 进行一次ε-移动 (空移动),即 M 在状态 q,栈顶符号为 Z 时,无论输入符号是什么,对于 i = 1, 2, …, m,可以选择地将状态变成 pi,并将栈顶符号 Z 弹出,将 γi 中的符号从右到左依次压入栈,读头不移动。

  • 相关阅读:
    Java基础之在窗口中绘图——移动曲线的控制点(CurveApplet 3 moving the control points)
    【javascript】BOM介绍
    【javascript】Web Storage机制
    【javascript】50. Pow(x, n)
    【java】6. ZigZag Conversion
    【java】最长回文字符串(源码)
    【javascript】js实现单例模式
    【js注入】js注入
    【bootstrap】bootstrap可关闭警告框
    【h5】h5数据跨域交换postMessage用法
  • 原文地址:https://www.cnblogs.com/lihuali/p/8399462.html
Copyright © 2020-2023  润新知