一·单词的形式化描述工具
▶ 正规文法
即3型文法,是一个四元式:G = (VN, VT, S, P)
▶ 正规式
也称为正则表达式,形式诸如:(a|b)*(aa|bb)(a|b)*
▶ 正规文法与正规式的等价性
一个正规语言可以由正规文法定义,也可以由正规式定义——它们当然就可能是等价的
可以使用的转化规则(理解🌟)
正规文法的产生式 | 正规式 |
---|---|
A→xB B→y | A = xy |
A→xA|y | A = x*y |
A→x A→y | A = x|y |
二·有穷自动机(有限自动机)
▶ 确定的有穷自动机(DFA)
是一个五元组 M = (K, ∑, f, S, Z)
其中:K是状态集,∑是输入符号集,f是转化映像,S是唯一初态,Z是终态集
给定当前状态和输入符号,f就可以唯一确定下一个状态
▶ 不确定的有穷自动机(NFA)
是一个五元组 M = (K, ∑, f, S, Z)
其中:K是状态集,∑是输入符号集,f是转化映像,S是初态集,Z是终态集
不确定是说下一个状态可以有多个
▶ NFA转化为等价的DFA——NFA的确定化(🌟)
DFA是NFA的一种特例。和刚刚说的“正规文法和正规式的等价”一样,如果两个自动机所定义的语言相同,则它们等价
算法:子集法
通俗的说:既然“不确定”的原因是因为同时有多个状态,那么我们就把这些状态的集合看作一种状态,然后再BFS。最终这些子集的转化关系就称为了一个DFA。
典型例题:《编译原理(清华大学第三版)》P64 3
▶ 确定的有穷状态机的化简——DFA的最小化(🌟)
DFA的最小化,其实就是消除无用状态和合并等价状态。其实关键在于合并等价状态。那么,怎样的两个状态是等价的呢?
状态的等价需要满足两个条件:
- 一致性条件:它们都是可接受状态或不可接受状态(即都是终态或非终态)
- 蔓延性条件:我们用所有的输入符号进行转化,它们都可以转化到等价的状态里
算法:分割法
通俗的说:先根据是否为终态分为两组,然后对同一组中的状态,用所有输入符号去试着转化,如果转化不到一组,则再分。不断进行上述操作。
典型例题:《编译原理(清华大学第三版)》P65 8
三· 正规式和有穷自动机的等价性
四· 正规文法和有穷自动机的等价性
E N D END END