《编译原理练习题及答案高艳霞.docx》由会员分享,可在线阅读,更多相关《编译原理练习题及答案高艳霞.docx(5页珍藏版)》请在三一办公上搜索。
1、编译原理练习题及答案高艳霞一、 简答题 1、 什么是编译程序? 答:编译程序是指能把一种高级语言程序转换成一种低级语言程序的程序,而两者在逻辑上是等价的。 2、 编译前端由哪些部分组成? 答:词法分析、语法分析、语义分析与中间代码产生、优化 3、 编译过程各阶段分别完成什么任务? 答: 第一阶段,词法分析的任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。 第二阶段,语法分析的任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位。 第三阶段,语义分析与中间代码产生的任务是:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译。 第四阶
2、段,优化的任务是:对前段产生的中间代码进行加工变换,以期在最后阶段能产出更为高效的目标代码。 第五阶段,目标代码生成的任务是:把中间代码变换成特定机器上的低级语言代码。 4、 请回答句子、句型和语言的定义。 答:假定G是一个文法,S是它的开始符号。如果S=,则称是一个句型。仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为L(G)。 5、给出下面状态转换图的(S,d,s0,F)的具体组成 答: 状态集 S:1,2,3,4 输入字符集 :0,1 转换关系集 d: d(1,0)=2, d(1,1)=3, d(2,0)=2, d(2,1)=4, d(3,0)=2, d(3,1
3、)=3, d(4,0)=2, d(4,1)=3 初态集 S0:1 终态集 F:4 6、已知文法GZ: ZaA AbA|ab 写出文法对应的语言 答: ab(b)*ab 7、请回答自上而下语法分析和自下而上语法分析有什么区别。 答: 自上而下的分析,是从文法的开始符号出发,试图推导出句子。它要解决的关键问题是在对某一个非终结符进行推导时,选择以它为左部的多个产生式中的哪一个。 自下面上的分析,是从输入符号串出发,试图归约到文法的开始符号。分析过程中,每次选择与某个产生式右部符号串相同的一个子串进行归约。它要解决的关键问题是如何确定一个可归约的子串。 二、已知文法G: Ta|e|(F)P FT+F
4、|T P*P|T 试给出式子(a+e)*a的最左推导及语法树 答: 最左推导: T=(F)P =(T+F)P =(a+F)P =(a+T)P =(a+e)P =(a+e)*P =(a+e)*T =(a+e)*a 语法树: 试给出式子(a)*e的最右推导及语法树 答: 最右推导: T=(F)P =(F)*P =(F)*T =(F)*e =(T)*e =(a)*e 语法树: 指出句型(a+T)*P的所有短语、直接短语和句柄。 答: 先画出语法树 短语: 1,(a+T)*P相对于T的短语 2,(a+T)相对于F的短语 3,*P相对于P的短语 4,a相对于T的短语 5,T相对于F的短语 直接短语:3,
5、4,5 句柄:4 三、文法 SAB|bBa AAab|c BdB| 对文法G消除左递归 答: 公式: P P| P P PP| 过程: =ab =c A c A A abA| 对文法G消除左递归后得: SAB|bBa A c A A abA| BdB| 对改写后的文法判断是否LL(1)文法,求相应FIRST和FOLLOW集合 答: 求FIRST: 对S: FIRST(AB)=c FIRST(bBa)=b FIRST(S)=b,c FIRST(A)=c FIRST(A)=a, FIRST(B)=d, 每个非终结符 的各个产生式候选首符集两两不相交 求FOLLOW: FOLLOW(S)=(#) F
6、OLLOW(A)=(d,#) FOLLOW(A)=(d,#) FOLLOW(B)=(a,#) FIRST首符集合含的有FIRST(A)和FIRST(B) FIRST(A) FOLLOW(A) = FIRST(B) FOLLOW(B)= 由以上步骤得文法G满足LL(1)文法的3个条件,所以文法G是LL(1)文法。 给出预测分析表 答: 如果FIRST包含的话,要看FOLLOW,若FOLLOW能推出该终结符,则填,否则不填 S A A B a abA b bBa c AB cA d dB # 四、假设字母表是a,b,若要求所有以字母a开始,b结尾的符号串,写出相应正规式,并构造与之相对应的最小DFA.(10分) 答: 1. 正规式:a(a|b)*b 2. 求NFA DFA的转换矩阵表 0 2,3,4 3,4 3,4,1 对以上矩阵元素重命名 0 1 2 3 求DFA a 1 2 2 2 b 3 3 3 a 2,3,4 3,4 3,4 3,4 b 3,4,1 3,4,1 3,4,1