系列文章目录
词法分析
正规式与正规集
相关说明
- 正规式与相应的正规集都是等价的,正规集给出了相应正规式所描述的全部单词;
- 正规式的运算结果是正规集
- 正规式不是集合,其运算结果——正规集是集合,空集是特例
简单示例
【例】令 S={ A,B,0,1}
- (A|B)(A|B|0|1)* => { 标识符 }
- (0|1)(0|1)* => { 二进制数字串 }
- 1(01)* = (10)*1
正规式r所表示的正规集R是字母表∑上的语言,称为正则语言,用L(r)表示,即R=L(r)。L(r)中的元素为字符串,称为L(r)的句子。 若两个正规式r和s所表示的语言L(r)=L(s),则称r, s等价,记为r=s。
DFA——有限状态自动机
特点
DFA是具有离散输入、输出系统的纯数学模型;
DFA的技巧在于状态的设置
DFA映射的唯一性和初态的唯一性
表示方式
- 形式定义
- 状态转换图
- 状态矩阵
【例】C语言中的注释DFA
识别机制
对于S上的任何字a,如果存在一条从初态到某一终态结点的路径,且该路径上所有弧的标记符连接成的字等于a ,则称a为DFAM所识别(接受)。
若DFA仅一个状态结点,该状态结既是初态又是终态,则空字集合{e}为DFAM所接受。
一个DFA M所能接受的字的全体记为L(M)。
语言和等价关系
设有FA M 和 FA M’ ,若L(M) = L(M’) , 则称 M 和 M’ 等价。
也就是说存在一个语言,有不同的状态机可以识别该语言
NFA——非确定的有限自动机
定义
M =(S, ∑, f, S0, Z)
S, ∑, Z ,S0 同DFA
F :状态转换函数
如下图:转换函数可以是空集;同一个转换函数作用后也可以转换成不同状态
识别机制
- NFA中用枚举的方式进行识别
- 假设要判断aaa是否能被识别,则要先验证一条路径,复杂度会提升
NFA和DFA等价性
对任何一个NFA M,都存在一个DFA M’ , 使 L(M’)=L(M)。
NFA确定化——(子集法)
消去ε弧:ε-closure(I),如图
- ε-closure({5}) ={5, 6, 2}
- ε-closure({1,5})={1,2,5,6}
解决映射不唯一问题:求Ia
Ia={2,5}a ={3,8}
Ia={1}a ={2, 3, 4, 5, 6,7,8 }
【解释】以Ia = {1}a为例解释一下,先求ε-closure{1} = {1,2} 通过a能转移到状态{3,4,5} , 再对{3,4,5}求闭包得到{2,3,4,,6,7,8}
DFA最小化
无关状态:如果从DFA M的初态开始,任何输入序列都不能到达的那些状态称为无关状态。
等价状态:设DFA M的两个不同状态 q1,q2,如果对任意输入字符串ω,从q1,q2状态出发,总是同时到达接收状态或拒绝状态之中,称q1,q2是等价的。
如果DFA M既没有无关状态,且没有彼此等价的状态,则称DFAM是规约的(即最小的DFA )
划分法:
正规式与FA等价性
FA转RE
-
(规则)
-
拓广(拓展首尾节点)
-
替换
拓展X的目的就是通过正规式将0节点替换掉
同理将2,4节点替换掉
还能更猛地替换,两个正规式直接连接
RE转FA
(说白了就是FA转RE的逆向)
-
规则
-
拓广
-
确定化
当左边已出现所有状态时,迭代结束
-
最小化
找出冗余的状态
测验
-
(多选)下列关于正规式和正规集的叙述中,正确的是
选择一项或多项:
A. 正规式与状态自动机可以相互转换
B. 正规式可用于描述词法规则
C. 正规式的运算结果是正规集
D. 正规式与相应的正规集是等价的 -
(多选)有程序段如下
int main( )
{ printf(“hello world.\n”);
}
下列选项中,词法分析器能够识别出来的单词是
选择一项或多项:
A. ”hello world.\n”
B. printf
C. ()
D. \n
E. main
F. } -
(多选)下列关于DFA、NFA和正规式的叙述中,正确的是
选择一项或多项:
A. 任何一个正规式都存在一个对应的NFA
B. 任何一个NFA M都存在一个等价的DFA M’
C. DFA与NFA的区别之一是NFA的终态可以有多个
D. 任何一个正规式都可以转换为一个DFA -
词法分析器的输出是
选择一项:
A. 按语法规则识别出的具有独立意义的各类字符
B. 按词法规则识别出的具有独立意义的各类字符
C. 按语法规则识别出的具有独立意义的各类单词
D. 按词法规则识别出的具有独立意义的各类单词 -
正规式中的“或”运算法是
选择一项:
A. *
B. |
C. •
D. + -
下列关于C语言程序预处理过程的叙述中,正确的是
选择一项:
A. 在语法分析过程中完成
B. 在语法分析之前完成
C. 在词法分析过程中完成
D. 在词法分析之前完成 -
下列关于DFA的基本概念中,错误的是
选择一项:
A. 存在唯一一个终态
B. 状态集合为有限集
C. 存在唯一一个初态
D. 映射函数有唯一性 -
(多选)下列关于正规式和正规集的叙述中,正确的是
选择一项或多项:
A. 一个正规式可以生成唯一一个正规集
B. 多个不同的正规式可以对应一个正规集
C. 多个不同的正规集可以对应一个正规式
D. 一个正规集可以对应唯一一个正规式 -
下列关于算法功能的叙述中,正确的是
选择一项:
A. 子集法用于将NFA确定化,划分法用于将DFA最小化
B. 子集法用于消除NFA中的无关状态,划分法用于消除DFA等价状态
C. 子集法用于消除NFA中的等价状态,划分法用于消除DFA无关状态
D. 子集法用于将NFA最小化,划分法用于将DFA确定化 -
ε-closure(I) 的含义是
选择一项:
A. 从状态 I 出发,经过一条或多条 ε 弧所能够达到的状态集
B. 从状态集 I 出发,经过一条或多条 ε 弧所能够达到的状态集
C. 从状态集 I 出发,经过一条 ε 弧所能够达到的状态集
D. 从状态 I 出发,经过一条 ε 弧所能够达到的状态集
【答案】
- ABCD
- ABEF
- ABD
- D
- B
- D
- A
- AB
- A
- B