正规式
正规式与正规集示例
解析:A选项:a的个数不一定是偶数,因为
(a*a)
中的*
为偶数的且(a*a)*
外面的*
为奇数的时候,a的个数就是奇数个;
B选项:B选项中的(ab*a)*
a的个数就是偶数,不管括号外面的*
为多少,都是偶数,答案选B;
C选项:*号
分别为1、2、1、1结果a的个数就是奇数
D选项:*号
分别为1、1结果都是奇数
解析:A选项:因为ab是连着的,所以
*
不管为多少,a后面至少跟一个b;
B选项:当括号里面b后面的*
为0的时候,a后面就没有b了;
C选项:跟b选项一样b后面的*
为0的时候,a后面就没有b了;
D选项:a|b
,当都选a的时候,就没b了,所以这个也是错;
解析:由a、b构成的所有字符串中以b结尾的字符串:bab、aab、…
A选项:这个选项有局限性,a的后面只能是b,不满足条件;
B选项:这个选项也有局限性,b后面不能跟a,也不满足条件;
C选项:这个选项也是跟前面两个选项一样,a后面只能是b,不能满足所有情况;
D选项:很明显答案就是D,因为这个前面的括号里面用了a|b,这个情况就包括了多种,满足题意。
有限自动机
有限自动机是词法分析的一个工具,它能正确的识别正规集。
确定的有限自动机(DFA):对每一个状态来说识别字符后的状态是不唯一的。
不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不唯一的。
例题
解析:选项A:初态也可以是终态,所以a是能够连续出现的;
B选项:对,b后面只能跟a;
C选项:a*(ab)*
确实必须以a结尾;
D选项:可以为空串,一开始识别空串的话就可以是空串;
解析:题干中的有限自动机的正规式为
a*((a|b)a)*
可以为a*
和a*(ab)*
A选项:A选项中的正规式为a*(ab)*
,符合条件,答案为A;
B选项:正规式为ab*a*
,不符合条件;
C选项:终态上不是a*
;
D选项:输入不是在初态或者终态上,不符合条件;
解析:注意是有两个终态;
A选项:0011之后只能跟1,所以是00111是可行的;
B选项:10101到最后是到不了终态的;
C选项:11100是可以的,过程是A->C,C->E,E->E,E->B,B->D;
D选项:1100之后只能跟0,11000是可行的;
解析:题干中的有限自动机可以识别000,也可使识别
01*0
看选项中哪一个不能识别;
A选项:不对,只能识别两个0;
B选项:也不对,B应该是001*0
,是识别两个0之后才能识别若干个1;
C选项:这个是对的,它的正规式就是01*0
,所以C选项是正确的;
D选项:正规式是01*00
,不对;
解析:A选项:可以包含连续的字符0,初态可以是
0*
;
B选项:跟选项A一样,初态可以是1*
;
C选项:可以以000、111、010、110开头;
D选项:确实以101结尾,因为该有限自动机的正规式为:(1*|0*)101
;
解析:看是不是确定的有限自动机,就要看转移状态是有一种还是一种以上;
M1:在A上可以转移0或者是1,所以M1是不确定的有限自动机;
M2:它的所有状态都是只能转移一种,所以M2是确定的有限自动机;
答案选D,M1是不确定的有限自动机,M2是确定的有限自动机;