1、第一章习题 1.6.3:对于图 1-14 中的块结构代码,假设使用常见的声明的静态作用域规则,给出其中 12 个声明中的每一个的作用域?答: W X Y ZB1 B1-B3-B4 B1-B2-B4 B1-B5 B1-B2-B5B2 / B2-B3 / B2B3 B3 B3 / /B4 B4 B4 / /B5 / / B5 B5习题 1.6.4:下面 C 代码的打印结果是什么?答:输出结果是 3 2调用函数 b()时,a=x+1 此处 x 为全局变量值 2,故输出为 3调用函数 c()时,x 局部定义为 1,此处 a=x+1 为 2,故输出为 2第三章习题 3.3.2:试描述下列正则表达式定义的
2、语言:(1)a(a|b)*a:以 a 开头和以 a 结束的中间由任意个 a 或 b 组成的串的集合(2)( |a)b*)*:由 0 个和多个 b 组成的串以及由 0 个或多个以 a 开头由任意个 b 组成的实例所组成的串的集合 (3)(a|b)*a(a|b)(a|b):由 a 或 b 构成的长度至少为 3 的且倒数第三个字符为 a 的串的集合(4)a*ba*ba*ba*:由 a、b 构成的 b 的个数为 3 的串的集合习题 3.3.5:试写出下列语言的正则定义: int w, x ,y ,z; /*块 B1 */ int x, z; /*块 B2 */ int w, x; /*块 B3 */
3、int w, x; /*块 B4 */ int y, z; /*块 B5 */ 变 量作用域声 明块#define a (x+1)Int x=2;Void b() x=a;printf(“%dn”,x);Void b() x=1;printf(“%dn”,a);Void main()b();c();(1)包含 5 个元音的所有小写字母串,这些串中的元音按顺序出现:abcd efgh ijklmn opqrst uvwxyz(2)所有由按字典递增排序的小写字母组成的串:a*b*c*d*z*(3)注释,即/*和*/之间的串,且串中没有不在双引号()中的*/:/*(a-zA-Z|(*/) */习题
4、3.4.1:给出识别练习 3.3.2 中各个正则表达式所描述的语言的状态转换图(1)a(a|b) a(3)(a|b) a(a|b)(a|b) 习题 3.7.3 使用算法 3.23 和 3.20 将下列正则表达式转换成 DFA(1)(a|b) 由(a|b) 生成相应的 NFA,如下图所示由上面的 NFA 生成相应的 DFA1) 标记集合 A,A 是 -closure(1),即 A=1,2,3,5,82) 标记集合 B,B 是 -closure(move(A,a))=1,2,3,4,5,7,83) 标记集合 C,C 是 -closure(move(A,b))=1,2,3,5,6,7,8得到一个只含有三个状态的 DFA,其中 A 是接受状态,其状态转换图如下(2)(a |b )由 (a |b ) 得到相应的 NFA 如下图所示由上述 NFA 得到相应的 DFA 如下1)标记集合 A,A 是 -closure(0),即 A=0,1,2,3,4,52)可以得到 -closure(move(A,a))=0,1,2,3,4,5=A, -closure(move(A,b))=0,1,2,3,4,5=A,故该 DFA 中应只有一个状态 A,得到一个一状态的 DFA,其状态转换图如下