形式语言与自动机 11 CFG与PDA的转换
上下文无关文法与PDA的等价性
PDA我们之前讲了有两种形式:一种叫做以终结状态 为结束标记的PDA;
还有一种叫做以空栈 为结束标记的PDA。并且前面也已经讲过这两种PDA是等价的。
这个化简之后,b在栈的最下面。
CFG转化成PDA |PDA转化成CFG
首先要知道 CFG是4元组,而PDA是7(6)元组。CFG的四元组是\(<V_N,V_T,P,S>\),PDA(在NFA的基础上构成)的七元组表示是:\(<Q,\Sigma,\delta,\Gamma(栈符号表),q_0,Z_0(栈开始符号),F>\) 其中要是以栈空 判别的PDA,则是六元组,没有(F:状态结束)
难点就是上面的七元组与四元组 的元素的对应关系
A选择产生式还是有可能产生回溯。。上面这幅图是避免回溯的理想情况。
如果栈顶是终结符,我们就是用产生式 逆向替换,直到栈顶是终结符;如果栈顶是终结符,我们就可以考虑和输入符号进行匹配了。
如果读入 \(\epsilon\) ,换产生式即可;如果读入 终结符,匹配,弹出。
栈顶是变量的话,就压栈(替换);栈顶是常量的话,就弹栈(匹配)
CFG转换成PDA的套路如下:
所有的CFG都可以如下形成PDA。3个状态即可搞定
栈符号表是原来文法字母表和状态集合 的并集
一个状态上处理两种情况,一种是栈顶元素是变量,一种栈顶元素是常量
以空栈为结束,写六元式;
以终止状态为结束,写七元式
利用下推自动机进行自顶向下的分析,检查一个句子的最左推导过程
以栈为空为结束的下推自动机对文法的分析过程就是自顶向下语法分析过程。
瞬态移动角度对句子分析
PDA转CFG?
先来回顾一下,DFA转RG中的右线性文法。
基本思想:RG的推导对应DFA的移动
DFA五元组
RG四元组(文法都是四元组,处理装置\自动机不同的类型,元数不一样)
在这里,我们会认为 \(V_N ~ = ~ Q\) ,只有这样我们才能由自动机得到文法
上面ppt最后一行就是 由自动机的转移函数 得到 文法的规则
注意到:我们正规文发的右线性文法是 \(A->aB~,A->a\) 这两种类型。区别在于到达的状态 \(p\) 是否是终止状态。
由上面的过程得到启发,可以得到CFG
栈的升降都是对称,这也可以理解成为什么可以解决对称句子
\(A_{13}\) 才是一个变量,不能像DFA转RG那样得到变量
这种\(A_{ij}\) 就是新的CFG的变量,但是状态往往非常多,如上面,就达到 \(8 * 8=64\) 个\(A_{ij}\) 状态(简化后的PDA的状态数形成)
对于第一种: 找对称的,不用管中间的