编译原理1、3章作业答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章

习题1.6.3:对于图1-14中的块结构代码,假设使用常见的声明的静态作用域规则,给出其中12个声明中的每一个的作用域?

习题1.6.4:下面C代码的打印结果是什么?

答:输出结果是 3 2

调用函数b()时,a=x+1此处x为全局变量值2,故输出为3

调用函数c()时,x局部定义为1,此处a=x+1为2,故输出为2

第三章

习题3.3.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:试写出下列语言的正则定义:

(1)包含5个元音的所有小写字母串,这些串中的元音按顺序出现

:a[bcd]*e[fgh]* i[jklmn]*o[pqrst]*u[vwxyz]*

(2)所有由按字典递增排序的小写字母组成的串

:a*b*c*d*…z*

(3)注释,即/*和*/之间的串,且串中没有不在双引号(")中的*/

:[/*]([a-zA-Z]|("*/"))*[*/]

习题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生成相应的DFA

1)标记集合A,A是ε-closure(1),即A={1,2,3,5,8}

2)标记集合B,B是ε-closure(move(A,a))={1,2,3,4,5,7,8}

3)标记集合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,5}

2)可以得到ε-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,其状态转换图如下

相关文档
最新文档