编译原理 习题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,当栈为空时,串得到识别。