描述单词的模式:(1)3型文法(2)正规式 (3)有穷自动机
3.1 词法分析程序的设计
词法分析就是从左至右逐个字符扫描源程序,把字符变成单词,把字符串变成单词符号串。
3.1.1 词法分析器
状体转换图
- 0是初态,带双圈的2是终态
- 从0开始
-
- 若在状态0下输入的字符是一个字母,则读入,转入状态1
-
- 在状态1下若下一个输入的字符时字母或数字,则读进它,并重新进入状态1
- 重复这个过程,直到状态1发现输入字符不再是字母或数字时就进入状态2,当然这个输入的字符也被读进了。
3.3 单词的形式化表述工具
3.3.1 正规文法
- 正规集: 相同特征的字放在一起
- 正规式:使用一种形式化的方式+辅助符号(连接符号,空集,)表示集合
3.3.2 正规式
3.3.3 正规文法和正规式的等价性
3.4 有穷自动机
3.4.1 确定的有穷自动机DFA
(1)开始状态S only one
(2)终止状态(可接受状态)则可能不唯一,都在集合Z中。
(3)状态转换函数f:是单值函数,即在一个状态上给出一个输入符号只能到达唯一的下一状态。
总结这个自动机:每一个状态只能发出一条具有某个符号的边。也就是说不能出现同一个符号出现在同一状态发出的两条边上
(1)五项定义
(2)状态转化图
- 初始状态:根从外边来的箭头指向的状态表示
- 接受状态:有个黑圈(两个圈)的状态是
- 一条边一个字符
(3)矩阵
行标:状态
列标:状态
中间状态的新子集不需要加入推出来的集合,然后分析集合的每一个到达的地方,一步!自己有自圈也要算。
最后确定终态,含有老终态的就是新的终态
例子
3.4.2 不确定的有穷自动机NFA
(1)五元组:
M = ( K , Σ , f , S , Z ) 即 ( 状 态 集 , 字 母 表 , 映 射 , 开 始 状 态 集 , 终 止 集 合 )
(2)相比DFA
映射f不再是一个单值函数(即在一个状态上给出一个输入符号可以达到多种下一状态,即"下一状态"也是一个集合)
因此只要把上面那张图加一条状态转移线,它就不再是DFA而是NFA了
(3)NFA的开始状态也可以有多个,所以五元组中的S现在表示了一个非空的开始状态集。
3.4.3 NFA转化为等价的DFA
(1)判断是否确定
- 先看有没有空
- 一个状态有没有不确定性
(2)子集法(默认结果写状态转化图)
-
DFA(每个状态的下一步都是确定的,没有空。只有一个开始状态,只有一个结束状态)
-
NFA(有可能转到多个状态,可能有空)
-
求初始状态的集合,也就是求空的闭包
原理:有些状态是在做同样的工作,他们的工作完全可以用一个状态来做,把这些相同功能的状态组合成一个集合,并把它重新命名为一个状态。 简称:没有识别符号就划到一个状态集合里
具体步骤:
例子:
画图就是讲他的初始状态全部重新编号,然后将其的过程的一个一个的重新赋值
3.4确定的有穷自动机化简
- 最简化的DFA:这个DFA没有多余状态(从初始状态到不了的点)、也没有两个相互等价的状态(识别相同的串,结果都同为正确或错误,这两个状态就是等价的)
- 一致性条件:两个圈圈一个集合,一个圈圈一个集合
- 蔓延性条件 某个集合里的元素 对于每个输入符是否每次都是指向同一个集合
分割法
(1)按照一致性条件,将状态一分为二,分为初态和终态。
(2)按照蔓延性条件,看(1)分后的集合,出现了新的集合,就重新看蔓延性继续分割。
例题
3.5 正规式和有穷自动机等价转换
3.6 正规文法和有穷自动机的等价性
步骤:从起始符开始,然后S-》aA这种的两个,就是S-》A通过a,如果是单个的符号,建立新的终态,每次单独的箭弧都指向他。