(自动机总结)PDA与CFG的转化
来源:互联网 发布:python冒泡排序详解 编辑:程序博客网 时间:2024/06/03 17:41
好了,既然如此,那么所构造的CFG应该有什么样的生成式呢?
很显然:S -> [qZq] | [qZp] 即每个生成式都是由PDA中的初始状态q通过一系列变换之后
pop(Z)的结果,至于终态是什么,我们不知道,因为它是以空栈方式接受的,因此PDA中存在多少个状态,
q将栈底元素pop之后就能到达多少个状态。
接下来,我们将为每个转移过程构造相应的生成式:
1:δ(q, 1, Z) = {(q, XZ)}
由于我们所构造的CFG中的变元形式为[qxp], 它的涵义在上面已经讲过。而针对这个转移并不是执行pop操作,而是执行push操作。那我们应该怎么办呢?这是整个转换过程中最抽象的地方,也是最难理解的地方。 回想一下我们对start symbol的构造,我们最终是要将栈底元素Z弹出,而这个过程我们可以将它划分为n个子过程,即我们现在所看到的生成式。每个生成式都是一个pop的过程,最终所有的pop过程迭加起来便得到最终的空栈状态。这是为什么针对push操作(包括其他任何操作)我们都构造
pop形式变元的原因。
对于该转移,我们得到的生成式是:
1. [qZq] -> 1[qXq][qZq] 2. [qZq] -> 1[qXp][pZq] 3. [qZp] -> 1[qXq][qZp] 4. [qZp] -> 1[qXp][pZp]
为什么是这样?
首先看->左边的变元,显然根据转移δ(q, 1, Z) = {(q, XZ)}我们知道这是一个push操作,因此q在pop栈底元素Z后我们不知道它会发生什么,同样的,它会转移到什么状态对于我们而言也是完全透明的,
因此我们必须考虑进所有情况。
而它因何会生成->右边这种形式的生成式呢,我们来考虑一个例子:
比如说郭先生想从哈尔滨去广州看望故人,当然他可以选择直接从哈尔滨飞往广州,这也是最快的方法。而郭先生喜爱享受旅途的过程,于是他先从哈尔滨飞往大连,再由大连坐船至杭州,再由杭州乘火
车至广州。从逻辑上讲(或者从形式上说)这两种方法显然是等价的。
好的,我们现在来考虑这个过程与我们所构造文法的内在关联。
第一个过程是郭先生直接从哈尔滨飞往广州。对,这就是->左边的变元涵义。由此说来右边生成式的涵义也容易理解了,郭先生身上原有Z元钱,从哈尔滨(状态q)乘飞机(读入1)至大连(状态q),这个过程中他往银行取了X元钱。再由大连坐船至杭州,花费X元钱([qXq]),接着由杭州坐火车至广州,花费Z
元钱([qZq]),同时他的目的地也到达了。
想通了么?是不是忽然发现这个过程有点简单的匪夷所思?呵,everything is easy.
2:δ(q, 1, X) = {(q, XX)} 它的生成式如下:
1. [qXq] -> 1[qXq][qXq] S->1SS 2. [qXq] -> 1[qXp][pXq] S 3. [qXp] -> 1[qXq][qXp] 4. [qXp] -> 1[qXp][pXp] 3:δ(q, 0, X) = {(p, X)} 1. [qXq] -> 0[pXq] 2.
[qXp] -> 0[pXp]
这里会有疑惑?想想郭先生为什么一定要途中经过两个城市再到广州呢?
明白了吧,我们继续。 4:δ(q,ε,X) = {(q,ε)}
当然了,中间站是可以选择的,因此从大连出发,我可以去杭州,也可以去天津,南京等其他城市。
有了这个描述过程,我想接下来的转换可以不必再详细解释了。
[qXq] -> e
这是一个pop操作,因此不需要任何中介。
5:δ(p, 1, X) = {(p,ε)}
[pXp] -> 1
6:δ(p, 0, Z) = {(q, Z)} 1. [pZq] -> 0[qZq] 2. [pZp] -> 0[qZp]
0 0
- (自动机总结)PDA与CFG的转化
- PDA与CFG之间的转换
- PDA到CFG的转换
- 关于AC自动机与DP的总结
- 关于开发pda的总结 windows CE
- 形式语言与自动机理论总结
- 形式语言与自动机理论总结
- 形式语言与自动机理论总结
- 形式语言与自动机理论总结
- PDA二次开发介绍总结
- VS2008中开发智能设备程序(PDA手机软件)的总结
- PDA与Vista同步
- libgdx 与 android 的 proguard.cfg
- c与c++中一些类型的转化总结(持续更新)
- AC自动机总结 与模板题
- VC++中数值与字符串相互转化(总结)
- cast(转化)总结
- PDA项目总结,准备阶段
- Material-ish Progress 源码阅读
- 【Codeforces 746D Green and Black Tea】+ 构造
- slam资料整理
- mac mysql error You must reset your password using ALTER USER statement before executing this statem
- ubuntu CQ45安装WIFI BCM4312
- (自动机总结)PDA与CFG的转化
- java设计模式学习笔记之代理模式
- Java_面向对象(1)
- Linux的cron程序
- g++ -o -c -g 功能
- 如何搭建个人网站(三)域名解析和租赁
- javascript-3-20161218
- ToolBar代替actionBar的用法
- 关于支持向量机的一个简单实例