编译原理 习题1
- 格式:doc
- 大小:29.50 KB
- 文档页数:2
习题
a. 以a开头和结尾的所有小写字母串。
a(a|b|c|…|z)*a
表达的语言:{aa,aaa,aba,aca,…}
串a也符合要求
故最后的正则表达式为:a| a(a|b|c|…|z)*a
c.第1个不为0的所有数字串。
正则表达式为:(1|2|3|…|9)(0| 1|2|3|…|9)*
e.每个2均在每个9之前的所有数字串。(有二义性)
理解1:形如 29, 1298 , 3329442955
(0|1|3|4|5|6|7|8)*29(0|1|3|4|5|6|7|8)*
((0|1|3|4|5|6|7|8)*29(0|1|3|4|5|6|7|8)* )*
最后写成:(0|1|3|4|5|6|7|8)*29(0|1|3|4|5|6|7|8)*((0|1|3|4|5|6|7|8)*29(0|1|3|4|5|6|7|8)* )*
理解2:形如29, 1298 , 3329442955, 523495, 523495523495
(0|1|3|4|5|6|7|8)*2(0|1|3|4|5|6|7|8)*9(0|1|3|4|5|6|7|8)*
((0|1|3|4|5|6|7|8)*2(0|1|3|4|5|6|7|8)*9(0|1|3|4|5|6|7|8)* )*
最后写成:
(0|1|3|4|5|6|7|8)*2(0|1|3|4|5|6|7|8)*9(0|1|3|4|5|6|7|8)*((0|1|3|4|5|6|7|8)*2(0|1|3|4|5|6|7|8)*9(0|1|3|4|5|6|7|8)* )*
g.包含单数个a或/和单数个b的所有a串和b串。
所有a串和b串,形如:ab , aab, abb, aabb, abb, aabb, aaabb,…..
正则表达式: aa*bb*
包含单数个a的所有a串和b串。
正则表达式: a(aa)*bb*
包含单数个b的所有a串和b串。 正则表达式: aa*b(bb)*
包含单数个a或单数个b的所有a串和b串。
正则表达式: a(aa)*bb*| aa*b(bb)*
包含单数个a和单数个b的所有a串和b串。
正则表达式: a(aa)* b(bb)*
包含单数个a或/和单数个b的所有a串和b串。
正则表达式: a(aa)*bb*| aa*b(bb)*| a(aa)* b(bb)*
i. a和b数目相等的所有a串和b串。
形如:ab, aabb, aaabbb, aaaabbbb
正则表达式可写成 aa*bb* 但不能保证a与b的数目相等。
在程序设计时可以加以限定,如设置一个栈,每获得1个a压栈每获得1个b从栈中弹出1个a,当栈为空时,串得到识别。