HIT-2022spr-形式语言自动机期末复习
DFA/NFA/RegularExpression
正则表达式是一种表示正则语言的方法,ε若为正则表达式,则表示{ε}这个语言,而不是空语言。
注意+是并运算,而不是两个串的连接。
正则语言的运算↑
1. FA->RegExp
2. RegExp->FA
3. 封闭性()
正则语言在所有运算下都是封闭的
4. DFA最小化
关于终态是否等价的解释以及对于算法的规定的强调:
5. NFA转化成DFA(子集构造法)
6. ε-NFA转化为DFA
注意左侧的都是计算的ε-闭包,也就是说下面左面一列手写的{q0}实际上是q0的一个ε-闭包,手写的第一行第二个{q0}也是q0的闭包,也就是要求两次闭包。
PDA
1. PDA的定义
PDA通过 ε-NFA 加上 栈 的方式定义
ε-NFA:就是具有空转移以及不确定的能力
不确定性的例子:
(注意转移函数的因变量是状态的集合)
例如这个读了0可以跳转到不同位置:
2. DPDA的定义
将PDA的ε转移能力保留,但是去掉它的非确定性能力(对于最后的ε,只能说有路就要走),就变成了DPDA。
这种语言无法接受 w w r ww^r wwr类型的串串儿,因为DPDA不具有不确定性,无法判定到哪是 w w w和 w r w^r wr的交界处,但是DPDA可以接受 w c w r wcw^r wcwr的语言。
3. PDA的栈
这里面的栈,push可以是一个字符串,但是pop的必须是一个字符。
每次输入带的读头读入一个字符,并向后移入一个单元格。此时会进行状态的修改,对于符号栈的读写头先pop栈顶的**一个字符**,然后push一个**字符串**.
4. 关于PDA题目的思路
一般来说就是硬干,但是加上空转移考虑就简单些,空转移的妙用可以使画的PDA看起来更清晰易懂。
两种PDA: (需要注意: 两种PDA都需要读完串儿才能结束)
注意:这两种PDA是等价的!!!,而DPDA才会出现终态比空栈多接受前缀语言的情况!!!
- 接受空栈
这种PDA无法接受前缀语言(可是终态可以)
接受空栈的PDA最终栈是需要 Z 0 ∣ ϵ Z_0|\epsilon Z0∣ϵ 进行清空栈的操作的,在读完串儿之前是不能将 Z 0 Z_0 Z0进行弹出的。- 终止状态
终止状态的PDA不需要考虑栈的情况,最终即使是栈没有清空(不管栈怎么样)只要到了终止状态就会结束。