第一部分 --- 正规集和正规表达式
1.程序语言定义的所有合法字的集合就是正规集,正规集由正规式来表示,二者之间的关系是:
1.B和C都是正确答案,一波塞洛的定义是一个长度为0的字( “” --- 字是由字符组成的)
同时一波塞洛也是正规式,它所对应的正规集是只有一个空字(一波塞洛,长度为0的字)的集合
1.在这一题中A和C都是正确的,首先从数学的定义上讲这个符号表示的是空集(没有元素的集合),当它作为正规式的时候,它所表示的正规集为空集
2.一波塞洛作为正规式时表示的是具有一个空字元素的正规集,而另一个符号作为正规式时表示的是没有元素存在的正规集
1.这道题中的A,B,C都是正确的。首先这个a是字符表中的一个字符,其次这个a也可以是只有a这个字符的字(字符串),同时还是表示只有一个元素,且这个元素是只有一个字符a的字的正规集的正规式
1.第一条中的 | 表示的意思是 “ 或 ” ,然后两个正规集的并集依然是正规集,两个正规式的并集依然是正规式
2.第二条中的 . 号的意思是 “字集合的连接运算”,然后两个正规集做连接运算后依然是正规集,两个正规式做连接运算后依然是正规式(一般我们都会直接省略掉这个点和括号,将两个正规式的连接运算写作 e1e2)
3.第三条中的 * 号的意思是 “ 字集合的闭包运算 ” ,然后一个正规集在进行闭包运算依然是正规集,一个正规式在进行闭包运算后依然是正规式
1.当两个正规式表示的正规集相等的时候,我们称这两个正规式之间等价
1.最后一条的性质是 e1e2 不等于 e2e1 --- 两个正规式的连接顺序不同得到的结果不同 --- 对应的正规集为 ab 和 ba 的区别
1.将每一个合法字符视作一个正规集,然后找到这个正规集对应的正规式,接着我们将得到的所有的正规式取并集(正规集同理),这样我们就能够得到程序中所有合法字的正规集以及这个正规集对应的正规式了
第二部分 --- 确定有限自动机(DFA)
单值部分映射要求我们的转换函数在给定的状态和输入字符只能够得到唯一确定的一个状态
1.如果一个状态结点处有多余n条的箭弧射出的话,那么这数量大于n条的箭弧中一定会有字符重复的箭弧,此时就会出现输入一个状态和一个字符到状态转换函数后得到了多个状态,违背了单值部分映射的规定。
第三部分 --- 非确定有限自动机(NFA)
1.非确定有限自动机和确定有限自动机的区别在于转换函数和初态
2.对于非确定有限自动机而言,其转换函数是在输入一个当前状态和一个字(字由字符组成,对于确定有限自动机而言输入的是字符)后,得到一个状态集合(这里就体现了非确定有限自动机的非确定性,对于确定有限自动机而言得到的是一个新的状态)
3.对于非确定有限自动机而言,其初态是一个初态集合而不是一个初态(这里也体现了非确定有限自动机的非确定性,对于有限自动机而言则是只有一个初态)
4.确定有限自动机之所以是确定的,因为:
一.它的初态唯一
二.它的状态转移函数是单值的部分映射,一个状态的后继状态唯一
对于非确定有限自动机而言就是反过来
在非确定有限自动机的状态图中,除了传字作为判断条件的弧上的标记,我们还可以传正规式,此时的意思是当我们传给状态函数的字是正规式对应的正规集中的一个字的话,就发生状态转换
1.通过任意两个有限自动机得到的字的集合相等的话,则称这两个有限自动机等价
2.任意一个非确定有限自动机都存在一个确定有限自动机与其等价,所以说这两个自动机的识别能力是相同的
1.DFA更有利于程序实现,NFA更有利于人工设计