编译原理课后习题答案

上传人:壹****1 文档编号:544261214 上传时间:2022-07-27 格式:DOC 页数:27 大小:311.01KB
返回 下载 相关 举报
编译原理课后习题答案_第1页
第1页 / 共27页
编译原理课后习题答案_第2页
第2页 / 共27页
编译原理课后习题答案_第3页
第3页 / 共27页
编译原理课后习题答案_第4页
第4页 / 共27页
编译原理课后习题答案_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《编译原理课后习题答案》由会员分享,可在线阅读,更多相关《编译原理课后习题答案(27页珍藏版)》请在金锄头文库上搜索。

1、第一章1解答:程序设计语言:程序设计语言是遵守一定规范的、描述“计算”(Computing)过程的形式语言。一般可以划分为低级语言和高级语言两大类。低级语言是面向机器的语言,它是为特定的计算机系统设计的语言,机器指令、汇编语言是低级语言。高级语言是与具体计算机无关的“通用”语言,它更接近于人类的自然语言和数学表示,例如FORTRAN、Pascal、C等等我们熟悉的语言是高级语言。语言处理程序:由于目前的计算机只能理解和执行机器语言,因此必须有一个程序将用程序设计语言书写的程序等价(执行效果完全一致)地转换为计算机能直接执行的形式,完成这一工作的程序称为“语言处理程序”。它一般可分为解释程序和翻

2、译程序两大类。翻译程序:翻译程序(Translator)是一种语言处理程序,它将输入的用程序设计语言书写的程序(称为源程序)转换为等价的用另一种语言书写的程序(称为目标程序)。若源语言是汇编语言,目标程序是机器语言,称这种翻译程序为汇编程序。若源语言是高级语言,目标程序是低级语言,称这种翻译程序为编译程序。解释程序:解释程序(Interpreter)是一种语言处理程序,它对源程序逐个语句地进行分析,根据每个语句的含义执行语句指定的功能。2解答:编译程序的总框图见图1.2。其中词法分析器,又称扫描器,它接受输入的源程序,对源程序进行词法分析,识别出一个个的单词符号,其输出结果是单词符号。 语法分

3、析器,对单词符号串进行语法分析(根据语法规则进行推导或归约),识别出程序中的各类语法单位,最终判断输入串是否构成语法上正确的“程序”。 语义分析及中间代码产生器,按照语义规则对语法分析器归约出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。编译程序可以根据不同的需要选择不同的中间代码形式,有的编译程序甚至没有中间代码形式,而直接生成目标代码。 优化器对中间代码进行优化处理。一般最初生成的中间代码执行效率都比较低,因此要做中间代码的优化,其过程实际上是对中间代码进行等价替换,使程序在执行时能更快,并占用更小的空间。 目标代码生成器把中间代码翻译成目标程序。中间代码一般是一种机

4、器无关的表示形式,只有把它再翻译成与机器硬件直接相关的机器能识别的语言,即目标程序,才能在机器上运行。 表格管理模块保持一系列的表格,登记源程序的各类信息和编译各阶段的进展状况。编译程序各个阶段所产生的中间结果都记录在表格中,所需要的信息也大多从表格中获取,整个编译过程都在不断地和表格打交道。出错处理程序对出现在源程序中的错误进行处理。如果源程序有错误,编译程序应设法发现错误,把有关错误信息报告给用户。编译程序的各个阶段都有可能发现错误,出错处理程序要对发现的错误进行处理、记录,并反映给用户 Chapter 21 试写出VT0,1上下述集合的正则表达式: 所有以1开始和结束的符号串。 恰含有3

5、个1的所有符号所组成的集合。 集合01,1。 所有以111结束的符号串。解答: 1(0|1)*1|1 0*10*10*10* 01|1 (0|1)*1112 试写出非负整数集的正则表达式。 试写出以非5数字为头的所有非负整数集的正则表达式。解答: 0|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 0|(1|2|3|4|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 3试将2.8中所示的有限状态自动机M最小化。分析:只能对确定的有限状态自动机进行最小化,本题的自动机已经是确定的。最小化采用状态分离法,具体做法如下: 进行0等价类的划分:Q划分为

6、Qf与QQf 若已进行了k等价划分,即Q已被划分成(Q1,Q2,Qn),再进行k1划分,对Qi(i1n),若q、qQi,使得对某一个aVT,d(q,a)Qj和d(q,a)Ql,jl或d(q,a)存在而d(q,a)不存在或反之。则将Qi划分为二个子集Qi1,Qi2,使qQi1,q Qi2。 重复直至无法进一步划分为止。对最后划分得到的状态子集中每一个子集,选择该子集中任何一个状态作为该状态子集的代表,然后修改原来的有限状态自动机的状态转换函数d,凡在d作用下转向某状态子集中任何一个状态的一律改成转向该状态子集的代表。若一个状态子集中某一状态是原来的开始状态,则该状态子集的代表就是新的有限状态自动

7、机的开始状态。同理,若一个状态子集中的状态均是最终状态,则该状态子集的代表就是新的有限状态自动机的最终状态。 抹去可能存在的无用状态与不可及状态。解答:此有限状态自动机的状态转换表如表3.1所示:表2.1 M的状态转换表abABCBDCCBEDDFAcceptEGEAcceptFGEAcceptGDFAccept由此看出:此有限状态自动机是确定的。最小化:初始划分由2个子集组成,即:(A,B,C,D,E,F,G)集合D,E,F,G不需要进一步划分,考察子集A,B,C。由于d(B,a)=DD,E,F,G,而d(A,a)d(C,a)BA,BC,因此Q可进一步划分为:(A,C,B,D,E,F,G)。

8、由于d(A,b)CA,C,而d(C,b)ED,E,F,G。因此Q可进一步划分为:(A,C,B,D,E,F,G)。这时不能再划分了,得到的最小化的有限状态自动机如表3.2所示:表2.2 最小化的有限状态自动机abABCCBEBDCDDDAccept4某程序语言的无(正负)符号常数可以用下面正则表达式R来表示:(D+E|D+.D+E|E|.D+E)(+|-)D|D)D*|D+|D*.D+ 试把它转换成确定性有限状态自动机。 把上述有限状态自动机最小化。 在上述有限状态自动机中添加相应动作,取出无(正负)符号常数。分析:从正则表达式构造有限状态自动机可以分两步进行。 画一条从结点X到结点Y的有向弧,

9、有向弧上标以正则表达式R。结点X为标以“”的初始状态,结点Y为标以“”的最终状态。从这一有向图出发反复应用图3.2所示的替代规则,直至所有有向弧都以VT中的符号或标记e为止。 图2.2 3条替代规则 消除应用所得到的传递图中的弧,可以分为两步:首先消除环路,其次消除其他弧。a) 环路的消除方法:i将环路的诸项合并为一个顶点。ii修改各个相关的有向弧。iii若环路中某一状态是最终(或初始)状态,则新顶点是最终(或初始)状态。b)其它弧的消除有两种方法:1)子集法:即计算-Closure(T),其表示从状态集T中任何一状态沿弧可以到达的状态全体。其要点是:从初始状态q0的X=-Closure(q0

10、)开始,按如下方法构造状态集:i令SetX;ii若Set中还有未考察过的状态子集Xi,则对于每一输入符号aVT,求T=-Closure(move(Xi,a),Set=SetT(其中move(Xi,a)=q|q(p,a),pXi)。重复执行(2),直至不存在这样的Xi。这样得到的Set即为消除弧后的确定的有限状态机(DFA)。DFA的初始状态就是-Closure(q0),最终状态由那些至少含有一个最终状态的状态子集组成。2)逐步消除法:其要点是找到类似于图2.3所示,但从B再无弧引出的弧。图2.3 逐步消除法删除状态A到状态B的弧,对每一条从状态B到状态C标记为ai的弧,增加1条从状态A到状态C

11、标记为ai的弧。若B是最终状态,则让A为最终状态。重复上述过程直至消除全部的弧,这样得到的一般是不确定的有限状态自动机(NFA)。解答: 图3.4给出了从正则表达式R构造有限状态自动机M的过程。图2.4替代规则的应用过程应用子集法消除?弧:-Closure(x)=x,2,令A1x,2,计算:-Closure(move(A1,D)-Closure(7,10,2,1)=7,10,2,1,y-Closure(move(A1,)=-Closure(5,3)=5,3-Closure(move(A1,E)-Closure(4)=4令A27,10,2,1,y,A35,3,A44,计算:-Closure(mo

12、ve(A2,D)7,10,2,1,y-Closure(move(A2,)8,3-Closure(move(A2,E)4-Closure(move(A3,D)5,6,3,y-Closure(move(A4,D)12,y-Closure(move(A4,)11-Closure(move(A4,)11令A58,3,A65,6,3,y,A7=12,y,A811,计算:-Closure(move(A5,D)8,9,3,y-Closure(move(A6,D)5,6,3,y-Closure(move(A6,E)4-Closure(move(A7,D)12,y-Closure(move(A8,D)12,y令

13、A98,9,3,y,计算:-Closure(move(A9,D)8,9,3,y-Closure(move(A9,E)4得到的DFA M的初始状态是A1,最终状态集由A2,A6,A7,A9组成。图2.5是M的状态转换图,M的状态转换表如表2.3所示。表2.3 M的状态转换表DE+-A1A2A4A3A2A2A4A5AcceptA3A6A4A7A8A8A5A9A6A6A4AcceptA7A7AcceptA8A7A9A9A4Accept图2.5 M的状态转换图采用状态分离法:初始时分成2个子集,即:(A1,A3,A4,A5,A8,A2,A6,A7,A9)考察子集 A2,A6,A7,A9,它进一步可分成:(A6,A9,A2,A7)考察子集 A1,A3,A4,A5,A8,它进一步分成:(A4,A1,A8,A3,A5)不能再进一步划分了,得到的最小化的有限状态自动机如图2.6所示:图2.6 最小化的有限状态自动机由于数的表示和具体的机器有着内在联系,这里仅将此无(正负)符号常数的十进制数部分和指数部分分别存入2个工作单元。设立下述工作单元:此常数的十进制数部分 number此常数的指数部分 exp小数点位数 n此常数指数部分正负号 expsign这4个工作单元进入有限状态自动机的模拟程序时被初始化为0。函数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号