编译原理-第1-5章习题课答案.ppt
- 文档编号:18942363
- 上传时间:2024-04-02
- 格式:PPT
- 页数:75
- 大小:4.22MB
编译原理-第1-5章习题课答案.ppt
《编译原理-第1-5章习题课答案.ppt》由会员分享,可在线阅读,更多相关《编译原理-第1-5章习题课答案.ppt(75页珍藏版)》请在冰点文库上搜索。
编编译译原原理理chapter15习题习题chapter11、何谓源程序、目标程序、翻译程序、编译程序、何谓源程序、目标程序、翻译程序、编译程序和解释程序?
它们之间可能有何种关系?
和解释程序?
它们之间可能有何种关系?
源程序:
用源语言编写的程序。
源程序:
用源语言编写的程序。
目标程序:
源程序经翻译程序过加工处理后生成的程序。
目标程序:
源程序经翻译程序过加工处理后生成的程序。
翻译程序:
将源程序转换为与其逻辑上等价的目标程序。
翻译程序:
将源程序转换为与其逻辑上等价的目标程序。
编译程序:
编译程序:
源语言为高级语言,目标语言为汇编语言或机源语言为高级语言,目标语言为汇编语言或机器语言的翻译程序。
器语言的翻译程序。
解释程序:
解释程序:
源语言程序作为输入,但不产生目标程序,而源语言程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
是边解释边执行源程序本身。
先翻译后执行先翻译后执行边解释边执行边解释边执行执行速度快执行速度快有利于程序的调试有利于程序的调试多次运算多次运算1次运算次运算编编译译原原理理chapter15习题习题2、一个典型的编译系统通常由有哪些部分组成?
、一个典型的编译系统通常由有哪些部分组成?
各部分的主要功能是什么?
各部分的主要功能是什么?
chapter1编译系统编译系统编译程序编译程序语法分析语法分析语义分析与中间代码生成语义分析与中间代码生成优化优化目标代码生成目标代码生成运行系统运行系统词法分析词法分析编编译译原原理理chapter15习题习题语法分析语法分析(SyntaxAnalysis):
在词法分析的基础上将单词序列分解成各类语法在词法分析的基础上将单词序列分解成各类语法短语,如短语,如“程序程序”,“语句语句”,“表达式表达式”等等。
等等。
语义分析语义分析(SyntacticAnalysis):
语义分析是在语法分析程序确定出语法短语后,审语义分析是在语法分析程序确定出语法短语后,审查有无语义错误,并为代码生成阶段收集类型信息。
查有无语义错误,并为代码生成阶段收集类型信息。
chapter1词法分析词法分析(LexicalAnalysis):
从左到右从左到右一个字符一个字符的读入源程序,对一个字符一个字符的读入源程序,对构成源程序的字符串进行扫描和分解,从而构成源程序的字符串进行扫描和分解,从而识别出识别出一个个单词一个个单词(也称单词符号或简称符号)。
(也称单词符号或简称符号)。
编编译译原原理理chapter15习题习题chapter1代码优化代码优化(Optimizationofcode):
为了使生成的目标代码更为高效,可以对产生的中为了使生成的目标代码更为高效,可以对产生的中间代码进行变换或进行改造,这就是代码的优化。
间代码进行变换或进行改造,这就是代码的优化。
代码生成代码生成(Generationofcode):
目标代码生成是编译器的最后一个阶段。
在生成目目标代码生成是编译器的最后一个阶段。
在生成目标代码时要考虑以下几个问题:
标代码时要考虑以下几个问题:
计算机的系统结构、指计算机的系统结构、指令系统、寄存器的分配以及内存的组织令系统、寄存器的分配以及内存的组织等。
等。
中间代码生成中间代码生成(Generationofintermediatecode):
完成语法分析和语义处理工作后,编译程序将源程完成语法分析和语义处理工作后,编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间序变成一种内部表示形式,这种内部表示形式叫做中间语言或称中间代码,它是一种结构简单、含义明确的记语言或称中间代码,它是一种结构简单、含义明确的记号系统。
号系统。
编编译译原原理理chapter15习题习题chapter21.写出写出C语言和语言和Java语言的输入字母表。
语言的输入字母表。
C语言:
语言:
09数字,大小写英文字母,键盘上可见的字符数字,大小写英文字母,键盘上可见的字符Java语言:
语言:
Unicode可以包括的所有字符。
可以包括的所有字符。
6.文法文法G6为为:
ND|NDD0|1|2|3|4|5|6|7|8|9
(1)G6的语言是什么的语言是什么?
G6的语言是:
的语言是:
09的数字组成的任意的数字组成的任意非空非空串串L(G6)=x|x0,1,2,3,4,5,6,7,8,9+
(2)给出句子)给出句子0127、34和和568的最左和最右推导。
的最左和最右推导。
编编译译原原理理chapter15习题习题7、写一文法,使其语言是写一文法,使其语言是奇数集奇数集。
要求:
不以要求:
不以0打头。
打头。
复杂的情况复杂的情况:
分三部分分三部分末尾:
以末尾:
以1|3|5|7|9结尾结尾(一位一位):
):
D1|3|5|7|9开头:
除了开头:
除了0的任意数字的任意数字中间部分:
空或者任意数字串中间部分:
空或者任意数字串D1|3|5|7|9CCA|A0|B所以题目要求的文法所以题目要求的文法GNGN可以写成:
可以写成:
NBCD|DD1|3|5|7|9B2|4|6|8|DCCA|A0|BB2|4|6|8|D编编译译原原理理chapter15习题习题9、证明文法、证明文法:
SiSeS|iS|i是二义的。
是二义的。
二义性的含义二义性的含义:
如果文法存在如果文法存在某个句子某个句子对应两棵以上对应两棵以上不同的语法树,或者两种以上不同的最不同的语法树,或者两种以上不同的最左左/右推导,则称这个文法是二义的。
右推导,则称这个文法是二义的。
首先:
找到此文法对应的一个首先:
找到此文法对应的一个句子句子iiiei其次:
构造与之对应的其次:
构造与之对应的两棵两棵语法树语法树SiSeSiSiiSiSiSeSii结论:
因为该文法存在句子结论:
因为该文法存在句子iiieiiiiei对应两棵对应两棵不同的语法树,因而该文法是二义的。
不同的语法树,因而该文法是二义的。
编编译译原原理理chapter15习题习题11、给出下面语言的相应文法、给出下面语言的相应文法L1=anbnci|n1,i0G1(S):
SABAaAb|abBcB|从从n,i的不同取值来把的不同取值来把L1分成两部分:
分成两部分:
AaAb|ab前半部分是前半部分是anbn:
后半部分是后半部分是ci:
BBc|所以整个文法所以整个文法G1S可以写为:
可以写为:
编编译译原原理理chapter15习题习题L2=aibncn|n1,i0G2(S):
SABAaA|BbBc|bcL3=anbnambm|m,n0G3(S):
SABAaAb|BaBb|编编译译原原理理chapter15习题习题L4=1n0m1m0n|n,m0可以看成是两部分:
可以看成是两部分:
剩下两边的部分就是:
剩下两边的部分就是:
S1S0中间部分是中间部分是0m1m:
A0A1|所以所以G4S可以写为:
可以写为:
S1S0|AA0A1|A编编译译原原理理chapter15习题习题chapter37.构造下列正规式相应的构造下列正规式相应的DFA。
步骤步骤:
.根据正规式根据正规式画出画出对应的对应的状态转换图状态转换图;.根据状态转换图画出对应的根据状态转换图画出对应的状态转换矩阵状态转换矩阵;.根据状态转换矩阵得到根据状态转换矩阵得到重命名后的状态转换矩阵重命名后的状态转换矩阵;.根据重命名后的状态转换矩阵得出最后的根据重命名后的状态转换矩阵得出最后的DFA.问题:
将状态转换图与问题:
将状态转换图与DFA混淆。
混淆。
编编译译原原理理chapter15习题习题1(0|1)*101.状态转换图状态转换图abadb1(0|1)*101a1(0|1)*101dcef101101ggg编编译译原原理理chapter15习题习题.状态转换矩阵状态转换矩阵II0I1ab,c,db,c,dc,dc,d,ec,dc,dc,d,ec,d,ec,d,fc,d,ec,d,fc,dc,d,e,gc,d,e,gc,d,fc,d,e1abdcef10101g编编译译原原理理chapter15习题习题II0I1ab,c,db,c,dc,dc,d,ec,dc,dc,d,ec,d,ec,d,fc,d,ec,d,fc,dc,d,e,gc,d,e,gc,d,fc,d,e.重命名后的状态转换矩阵重命名后的状态转换矩阵S01A(始态始态)BBCDCCDDEDECF(终态终态)F(终态终态)EDAB10C1D010E10101F.DFA编编译译原原理理chapter15习题习题1(1010*|1(010)*1)*0abdc10e0101fghi01110jklmn.状态转换图状态转换图编编译译原原理理chapter15习题习题.状态转换矩阵状态转换矩阵II0I101,2,31,2,345,9,10,115,9,10,116,122,36,122,3,7,8,132,345,9,10,112,3,7,8,132,3,4,8,10,115,9,10,112,3,4,8,10,112,3,4,8,122,3,5,9,10,112,3,4,8,122,3,4,85,9,10,11,132,3,5,9,10,114,6,122,3,5,9,10,112,3,4,82,3,4,85,9,10,115,9,10,11,136,10,11,122,34,6,122,3,7,8,136,10,11,12122,3,7,8,1312131310,1110,11122,3编编译译原原理理chapter15习题习题.重命名后的状态转换矩阵重命名后的状态转换矩阵II0I112234456576347848910911121013101111412146137141571516161717156.DFA编编译译原原理理chapter15习题习题8、给出下面正规表达式、给出下面正规表达式
(1)以)以01结尾的二进制数串。
结尾的二进制数串。
(0|1)*01
(2)能被)能被5整除的十进制数。
整除的十进制数。
0|5(0|5)|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(4)英文字母组成的所有符号串,要求符号串中的)英文字母组成的所有符号串,要求符号串中的字母按字典序排列。
字母按字典序排列。
(A|a)*(B|b)*(C|c)*(Z|z)*(3)包含奇數個)包含奇數個1或奇數個或奇數個0的二進制串的二進制串0*1(0|10*1)*|1*0(0|10*1)*编编译译原原理理chapter15习题习题(5)沒有重複出現的數字的數字符號串的全體)沒有重複出現的數字的數字符號串的全體令令ri=i|,i=0,1,2.9R0|R1|R2|.|R9記為記為Rii(0,1,2.,9)P(0,1,2.,9)表示表示0,1,2.,9的全排列的全排列ri0ri1.ri9ri0ri1.ri9P(0,1,2.,9)8、给出下面正规表达式、给出下面正规表达式(6)最多有一個重複出現的數字的數字符號串的全體)最多有一個重複出現的數字的數字符號串的全體iri0ri1.ri9i(0,1,2.,9)ri0ri1.ri9P(0,1,2.,9)(7)不包含字串)不包含字串abb的由的由a和和b組成的符號串的全體組成的符號串的全體b*(a*|(ba)*)*编编译译原原理理chapter15习题习题9、对下面情况给出、对下面情况给出DFA及正规表达式:
及正规表达式:
(1)0,1上的含有子串上的含有子串010的所有串。
的所有串。
正规式:
正规式:
(0|1)*010(0|1)*DFA做法同第做法同第7题。
题。
(2)0,1上不含子串上不含子串010的所有串。
的所有串。
正规式:
正规式:
1*(0|11*1)*1*0*1*(0|11)*(0|1)1*(0|11)*1*编编译译原原理理chapter15习题习题12、将图、将图3.18的的(a)和和(b)分别确定化和最少化。
分别确定化和最少化。
(a)aaa,b10.状态转换矩阵状态转换矩阵IIaIb00,1110,10,110.重命名后的状态转换矩阵重命名后的状态转换矩阵IIaIb012211200a2baba.DFA.最小化最小化0=(0,1,2)10,1a=10,1b=2因此,不能再分因此,不能再分02baa编编译译原原理理chapter15习题习题023145aaaabbbbbbaa(b)这道题实质上已经是确定化了的,所以我们只需最小化这道题实质上已经是确定化了的,所以我们只需最小化:
2,3,4,50,12,3,4,5a=0,1,3,5分属两区,所以分为分属两区,所以分为2,43,50,1a=10,1b=2,4所以所以0,1等价等价2,4a=0,12,4b=3,5所以所以2,4等价等价3,5a=3,53,5b=2,4所以所以3,5等价等价所以分为所以分为0,12,43,5023aabbba编编译译原原理理chapter15习题习题14、构造一个、构造一个DFA,它接受,它接受=0,1上所有满足如下上所有满足如下条件的字符串:
每个条件的字符串:
每个1都有都有0直接跟在右边。
直接跟在右边。
思路:
先写出满足条件的正规式,由正规式构造思路:
先写出满足条件的正规式,由正规式构造NFA,再把,再把NFA确定化和最小化。
确定化和最小化。
满足条件的正规式:
满足条件的正规式:
(0|10)*0110yx(0|10)*xy12100编编译译原原理理chapter15习题习题xy12100确定化:
确定化:
0011X,1,YX,1,Y1,Y1,Y221,Y1,Y1,Y1,Y22221,Y1,Y给状态编号:
给状态编号:
00110011221111222211编编译译原原理理chapter15习题习题02101100最小化:
最小化:
0,1,20,10=10,11=220=0,21=2或或0,1所以所以0,1不可分,用狀態不可分,用狀態0代表它們代表它們02100编编译译原原理理chapter15习题习题15、给定右线性文法、给定右线性文法G:
求一个与:
求一个与G等价的左线性文法。
等价的左线性文法。
S0S|1S|1A|0BA1C|1B0C|0C0C|1C|0|1SABCZ001110001101GZ:
ZZ0|Z1|B0|A1BA0|0AB1|1确定化、最小化后的确定化、最小化后的DFA为:
为:
SB0A110Z010,1编编译译原原理理chapter15习题习题补充:
构造一右线性文法,使它与如下文法等价:
补充:
构造一右线性文法,使它与如下文法等价:
SABAUTUa|aUTb|bTBc|cB并根据所得右线性文法,构造出相应的状态转换图。
并根据所得右线性文法,构造出相应的状态转换图。
思路:
思路:
先写出原文法所描述的语言先写出原文法所描述的语言L(G)=ambnck|m,n,k1GS:
SaS|aBBbB|bCCcC|caSaCbcBbcT编编译译原原理理chapter15习题习题chapter44.1、考虑下面文法、考虑下面文法G1:
Sa|(T)TT,S|S
(1)消去)消去G1的左递归;的左递归;Sa|(T)TSTT,ST|
(2)经改写后的文法是否是)经改写后的文法是否是LL
(1)文法,给出预测分析表。
文法,给出预测分析表。
经改写后的文法满足经改写后的文法满足3个条件,所以是个条件,所以是LL
(1)的的编编译译原原理理chapter15习题习题预测分析表构造算法预测分析表构造算法:
1.对文法中的每个产生式对文法中的每个产生式A执行第二步和第三步执行第二步和第三步;FIRST(S)=a,(FIRST(T)=a,(FIRST(T)=,FOLLOW(S)=),#FOLLOW(T)=)FOLLOW(T)=)a(,)#STTSaSS(T)TSTTSTTSTT,STT编编译译原原理理chapter15习题习题预测分析表构造算法预测分析表构造算法:
1.对文法中的每个产生式对文法中的每个产生式A执行第二步和第三步执行第二步和第三步;2.对每个终结符对每个终结符aFIRST(),把把Aa加到加到MA,a中中;Sa;S;S(T);TST;T,STTFTRST(a)=aFIRST()=FIRST(T)=(FIRST(ST)=a,(,(FIRST(,(,ST)=,FIRST()=a(,)#STTSaSS(T)TSTTSTTSTT,ST3.若若FIRST(),则对于任何则对于任何bFOLLOW(A)把把A加至加至MA,b中中FOLLOW(T)=FOLLOW(T)=)T编编译译原原理理chapter15习题习题递归子程序:
递归子程序:
procedureS;beginifsym=aorsym=thenabvanceelseifsym=(thenbeginadvance;T;ifsym=)thenadvance;elseerror;endelseerrorend;编编译译原原理理chapter15习题习题procedureT;procedureT;beginbeginS;TS;TEndEndprocedureT;procedureT;beginbeginifsym=,ifsym=,thenbenginthenbenginadvance;advance;S;TS;TendendEndEndsym:
是输入串指针是输入串指针IP所指的符号所指的符号advance:
是把是把IP调至下一个输入符号调至下一个输入符号error:
是出错诊察程序是出错诊察程序编编译译原原理理chapter15习题习题补充题:
有文法:
补充题:
有文法:
ETEEATE|TFTTMFT|F(E)|iA+|-M*|/
(1)求)求First、Follow集,判断是否是集,判断是否是LL
(1)文法?
)文法?
(2)若是构造)若是构造LL
(1)分析表?
)分析表?
(3)简述)简述LL
(1)分析器的工作原理。
)分析器的工作原理。
编编译译原原理理chapter15习题习题4.2:
有文法:
有文法:
ETEE+E|TFTTT|FPFF*F|P(E)|a|b|
(1)求)求First、Follow集,判断是否是集,判断是否是LL
(1)文法?
)文法?
(2)若是构造)若是构造LL
(1)分析表?
)分析表?
(3)简述)简述LL
(1)分析器的工作原理。
)分析器的工作原理。
编编译译原原理理chapter15习题习题ETEEATE|TFTTMFT|F(E)|iA+|-M*|/FIRST(M)=*,/FIRST(A)=+,-FIRST(F)=(,iFIRST(T)=*,/,FIRST(T)=(,i)FIRST(E)=+,-,FIRST(E)=(,iFOLLOW(E)=#,)FOLLOW(E)=#,)FOLLOW(T)=+,-,#,)FOLLOW(T)=+,-,#,)FOLLOW(F)=*,/,+,-,#,)FOLLOW(A)=(,iFOLLOW(M)=(,iEETEETEEEATEEATEEETTFTTFTTT-TTMFTTMFTTTFFiF(E)AA+A-MM*M/i+-*/()#编编译译原原理理chapter15习题习题P81.2.对文法对文法G:
ETEE+E|TFTTT|FPFF*F|P(E)|a|b|1)FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)=(,a,b,FIRST(E)=+,FIRST(T)=FIRST(T)=(,a,b,FIRST(F)=*,FOLLOW(E)=#,)FOLLOW(E)=FOLLOW(E)=#,)FOLLOW(T)=FIRST(E)FOLLOW(E)=+,#,)FOLLOW(T)=FOLLOW(T)=+,#,)FOLLOW(F)=FIRST(T)FOLLOW(T)=(,a,b,+,#,)FOLLOWF)=FOLLOW(F)=(,a,b,+,#,)FOLLOW(P)=FIRST(F)FOLLOW(F)=*,(,a,b,+,#,)(ab+*)#EETEETEETEETEEE+EEETTFTTFTTFTTFTTTTTTTTTTTTTFFPFFPFFPFFPFFFFFFFFFFFPP(E)PaPbP编编译译原原理理chapter15习题习题2)考虑下列产生式:
FIRST(+E)FIRST()=+=FIRST(+E)FOLLOW(E)=+#,)=FIRST(T)FIRST()=(,a,b,=FIRST(T)FOLLOW(T)=(,a,b,+,),#=FIRST(*F)FIRST()=*=FIRST(*F)FOLLOW(F)=*(,a,b,+,),#=FIRST(E)FIRST(a)FIRST(b)FIRST()=所以,该文法式LL
(1)文法.编编译译原原理理chapter15习题习题(ab+*)#EETEETEETEETEEE+EEETTFTTFTTFTTFTTTTTTTTTTTTTFFPFFPFFPFFPFFFFFFFFFFFPP(E)PaPbP3)預測分析表:
编编译译原原理理chapter15习题习题4)程序程序procedureE;beginifsym=(orsym=aorsym=borsym=thenbeginT;EendelseerrorendprocedureE;beginifsym=+thenbeginadvance;Eendelseifsym)andsym#thenerrorendprocedureT;beginifsym=(orsym=aorsym=borsym=thenbeginF;Tendelseerrorend编编译译原原理理chapter15习题习题procedureT;beginifsym=(orsym=aorsym=borsym=thenTelseifsym=*thenerrorendprocedureF;beginifsym=(orsym=aorsym=borsym=thenbeginP;FendelseerrorendprocedureF;beginifsym=*thenbeginadvance;Fendend编编译译原原理理chapter15习题习题procedureP;beginifsym=aorsym=borsym=thenadvanceelseifsym=(thenbeginadvance;E;ifsym=)thenadvanceelseerrorendelseerrorend;编编译译原原理理chapter15习题习题n4.3下面文法中,那些是下面文法中,那些是LL
(1)文法的,說明理由文法的,說明理由n构造不带回溯的自上而下分析的文法条件构造不带回溯的自上而下分析的文法条件1.文法不含左递归,文法不含左递归,2.对于文法中每一个非终结符对于文法中每一个非终结符A的各个产生式的候选的各个产生式的候选首符集两两不相交。
即,若首符集两两不相交。
即,若A1|2|n则则FIRST(i)FIRST(j)(ij)3.对文法中的每个非终结符对文法中的每个非终结符A,若它存在某个候选首若它存在某个候选首符集包含符集包含,则,则FIRST(A)FOLLOW(A)=如果一个文法如果一个文法G满足以上条件,则称该文法满足以上条件,则称该文法G为为LL
(1)LL
(1)文法文法。
编编译译原原理理chapter15习题习题4.3.1SAbcAa|Bb|是,满足三个条件4.3.2SAbAa|B|Bb|对于A不满足条件34.3.3SABBAAa|Bb|A、B都不满足条件34.3.4SaSe|BBbBe|CcCe|d满足条件3编编译译原原理理chapter15习题习题解題思路:
構造文法的預測分析表,通常應當按下列步驟進行:
1.消除文法的左遞歸(包括所有直接左遞歸和間接左遞歸)2.對消除左遞歸后的文法,提取公因子3.對經過上述改造后的文法,計算它的每個非終結符的FIRST集合和FOLLOW集合;4.根據FIRST集合和FOLLOW集合構造預測分析表:
第1步對文法G的每個產生式A執行第1步和第3步;第2步對每個終結符aFIRST(),把A加至MA,a中;第3步若FIRST(),則對任何bFIRST(A),把A加至MA,b中;第4步把所有無定義的MA,a標上“出錯標誌”4.4對下面的文法:
Expr-ExprExpr(Expr)|VarExprTailExprTail-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 习题 答案