【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★

2023-03-28 20:19:28 浏览数 (1)

文章目录

  • 一、下推自动机计算过程
  • 二、上下文无关文法 CFG 转为下推自动机 PDA 流程

参考博客 :

  • 【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )
  • 【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )
  • 【计算理论】上下文无关语法 CFG ( CFG 设计示例 | CFG 歧义性 | Chomsky 范式 | 上下文无关语法 转为 Chomsky 范式 )
  • 【计算理论】下推自动机 PDA 及 计算示例
  • 【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )
  • 【计算理论】上下文无关语法 ( CFG ) 转为 下推自动机 ( PDA )
  • 【计算理论】下推自动机 PDA ( 上下文无关语言 CFL 的 泵引理 | 泵引理反证示例 | 自动机扩展 )

一、下推自动机计算过程


1 . 下推自动机 ( PDA ) 提升了自动机计算能力 : 在上述自动机的基础上 , 提升该自动机的计算能力 , 引入一个新的栈结构 ;

栈特点 : ① 后进先出 , ② 存储能力无限 ;

2 . 下推自动机计算有两个部分 , 一个是字符的读取 , 一个是栈内字符的存取 , 栈内只有最上面的字符会被替换 ;

3 . 下推自动机 ( PDA ) 的指令格式 : 该指令包含了 上述讲的两个操作 ;

1 , 0 to varepsilon

① 自动机字符读取 : 左侧的

1

是从带子上读取的字符 ;

② 栈内字符存取操作 :

0 to varepsilon

是需要在栈上进行的操作 , 将栈顶的

0

取出 , 然后将

varepsilon

放入到栈中 , 相当于在栈中 , 使用

varepsilon

将栈顶的

0

替换掉 ;

二、上下文无关文法 CFG 转为下推自动机 PDA 流程


上下文无关文法 CFG 转为下推自动机 PDA 流程 :

① 开始状态 : 开始状态

rm q_{start}

, 跳转到

rm q_{loop}

状态的指令

rm varepsilon , varepsilon to K

, 使用

rm K

替换栈内空字符

varepsilon

, 即将

rm K

放入栈中 ;

② 循环状态 :

rm q_{loop}

状态的指令都是从本状态指向本状态 , 生成两种指令 , 一种是基本指令 , 一种是终端字符指令 ;

基本指令

rm S to aTb|b

,

生成为 "

rm varepsilon , S to aTb

" 和 "

rm varepsilon , S to b

" 两条指令 , 前面都是读取空字符作为栈读取的信息 ;

终端字符指令 , 如果存在终端字符

rm a

rm b

, 那么生成

rm a, a to varepsilon

rm b, b to varepsilon

两条指令 , 含义是读取栈顶

rm a

字符 , 将该字符使用空字符替代 , 即从栈中删除该字符 ;

③ 接受状态 :

rm q_{loop}

状态跳转到

rm q_{accept}

指令是

rm varepsilon , K to varepsilon

, 栈顶读取到

rm K

字符删除 ;

④ 拆分指令 : 在循环状态

rm q_{loop}

中的基本指令中存在多字符指令 , 如

rm varepsilon , S to aTb

,

rm S

读取到空字符

varepsilon

, 使用

rm aTb

字符替换栈顶的

rm S

字符 , 这是

3

个字符 , 肯定不行 , 需要逐个放进去 , 先放

rm b

, 再放

rm T

, 最后放

rm a

;

最终分解为

rm varepsilon , S to b

读取空字符放入

rm b

到栈顶 ,

rm varepsilon , varepsilon to T

读取空字符放入

rm T

到栈顶 ,

rm varepsilon , varepsilon to a

读取空字符放入

rm a

到栈顶 ;

0 人点赞