编译原理第4章答案
北方工业大学编译原理第4章习题

(4)构造它的递归下降分析程序。
procedure T ; begin
if sym= ˊ(ˊ or sym= ˊaˊ or sym= ˊbˊ or sym= ˊ∧ˊ then T else if sym= ˊ*ˊ then error end;
(3)该文法不含左递归,而且每一个 非终结符的各个产生式的候选首符集两 两不相交。
FIRST(A)= {a}
FOLLOW(A)={d, #}
FIRST (A) = { ε, a} FOLLOW(A)={d, #}
FIRST(B) = {d} FOLLOW(B )={e}
FIRST(B) = {ε ,b} 法G ’
(S): S → a∣∧∣(T) T → ST ’ T’ → ,ST’ | ε
其中:过程advance把输入串指示器IP调至指向下一个输入 符号;sym是指IP当前所指的那个输入符号;error为出错诊 断处理程序。
(2)经改写后的文法是否是LL(1)的?给出它的预测分析表。
else error end else error end;
4.2 试消除下面文法G[A] 中的左递归,并提取公共左因子, 判断改写后的文法是否为LL(1)文法?
A→aABe∣a
B→Bb∣d
解: (1)首先消除左递归
A→aABe∣a B →dB B →bB | ε (2)提取公共左因子 A → aA A → ABe | ε B → dB B →bB | ε
证明:对于具有形如A|的产生式有: A → ABe | ε B →bB | ε
编译原理三、四章答案(清华版)

第三章习题解答6.每个表达式的推导及语法树分别如下:(1) <表达式>=> <项>=> <因子>=> i(2) <表达式>=> <项>=><因子>=>(<表达式>)=>(<项>)=>(<因子>)=>(i)(3) <表达式>=> <项>=><项>*<因子>=><因子>*<因子>=>i*<因子>=>i*i(4) <表达式>=> <表达式>+<项>=> <项>+<项>=> <项>*<因子>+<项>=> <因子>*<因子>+<项>=> i*<因子>+<项>=> i*i+<项>=> i*i+<因子>=> i*i+i(5) <表达式>=> <表达式>+<项>=> <项>+<项>=> <因子>+<项>=> i+<项>=> i+<因子>=>i+<表达式>=>i+(<表达式>+<项>)=> i+(<项>+<项>)=> i+(<因子>+<项>)=> i+(i+<项>)=> i+(i+<因子>)=>i+(i+i)(6) <表达式>=> <表达式>+<项>=> <项>+<项>=> <因子>+<项>=> i+<项>=> i+<项>*<因子>=> i+<因子>*<因子>=> i+i*<因子>=> i+i*i<表达式> <项> <因子>i<表达式><项><因子>()<表达式><项><因子>i<表达式><项>*<项><因子><因子>ii图(1)图(2)图(3)()<表达式><表达式><表达式><项>+<项>*<项><因子><因子>i<因子>ii <表达式><表达式><项>+<项><因子><因子>i<表达式><项>+<项><因子>i <因子>i图(4)图(5)<表达式><表达式><项>+<项><因子>i图(6)*<项><因子><因子>i i11.根据文法G 给定的规则,从文法的开始符E 出发可推导出E+T*F ,推导过程如下:E => E+T => E+T*F ,所以E+T*F 是该文法的一个句型。
蒋立源编译原理第三版第四章习题与答案.docx

第五章习题5-1设有文法G[S] :S→A/A→aA∣ AS∣/(1)找出部分符号序偶间的简单优先关系。
(2)验证 G[S] 不是简单优先文法。
5-2对于算符文法G[S] :S→E E→ E-T∣ T T→T*F∣F F→ -P∣P P→ (E)∣i(1)找出部分终结符号序偶间的算符优先关系。
(2)验证 G[S] 不是算符优先文法。
5-3 设有文法G′[E] :E→E E→E+T |T1T →T T→T*F|F F→(E)|i11111其相应的简单优先矩阵如题图5-3所示,试给出对符号串(i+i )进行简单优先分析的过程。
题图 5-3 文法 G′ [E] 的简单优先矩阵5-4设有文法G[E]:E→E+T|TT→T*F|FF→(E)|i其相应的算符优先矩阵如题图5-4 所示。
试给出对符号串(i+i )进行算符优先分析的过程。
(i*+)#(○○○○○<<<<=i○○○○>>>>○○○○○○*<<>>>>○○○○○○+<<<>>>○○○○)>>>>○○○○#<<<<题图 5-4文法 G[E] 的算符优先矩阵5-5对于下列的文法,试分别构造识别其全部可归前缀的DFA和 LR(0) 分析表,并判断哪些是LR(0) 文法。
(1)S →aSb∣ aSc∣ ab(2)S →aSSb∣ aSSS∣c(3)S →AA→Ab∣ a5-6下列文法是否是SLR(1)文法?若是,构造相应的SLR(1) 分析表,若不是,则阐明其理由。
(1) S →Sab∣ bR R→S∣a(2) S →aSAB∣ BA A→aA∣ B B→ b(3) S →aA∣bB A→cAd∣εB→cBdd∣ε5-7对如下的文法分别构造LR(0) 及 SLR(1) 分析表,并比较两者的异同。
S→cAd∣ b A→ASc∣a5-8对于文法G[S]:S→A A→BA∣εB→ aB∣ b(1)构造 LR(1) 分析表;(2)给出用LR(1)分析表对输入符号串abab 的分析过程。
编译原理课后习题答案ch4

注意:本题应该理解为对图(a)进行确定化和对图(b)进行最小化。提供的答案没有对图(a)确 定化。
盛威网()专业的计算机学习网站 14
《编译原理》课后习题答案第四章
第5题 构造一个 DFA,它接收 Σ={0,1}上所有满足如下条件的字符串:每个 1 都有 0 直接跟在 右边。并给出该语言的正规式。 答案: 按题意相应的正规表达式是(0*10)*0*, 或 0*(0 | 10)*0* 构造相应的 DFA, 首先构造 NFA 为
7
《编译原理》课后习题答案第四章
注意:这个题,也可以这样构造 NFA(用最少的ε,但注意不能出错) :
a,b 0 a a 2 a,b 1 a b 3
盛威网()专业的计算机学习网站
8
《编译原理》课后习题答 ε X b A ε F B a C b ε b G b H ε ε D ε E a I b Y
除 X,A 外,重新命名其他状态,令 AB 为 B、AC 为 C、ABY 为 D,因为 D 含有 Y(NFA 的终态),所以 D 为终态。 . X A B C D DFA 的状态图:: 0 . A C A C 1 A B B D B
(2)先构造 NFA: 0 ε X 1 A ε ε F B 1 C 1 0 ε 0 D 1 E 1 0 ε 用子集法将 NFA 确定化 ε X T0=X A T1= ABFL Y CG T2= Y T3= CGJ DH K T4= DH EI T5= ABFKL T6= ABEFIL EJY T7= ABEFGJLY EHY CGK T8= ABEFHLY EY CGI T9= ABCFGJKL DHY T10= ABEFLY T11= CGJI DHJ T12= DHY T13= DHJ EIK T14= ABEFIKL ABEFIKL EJY CG DHJ ?正确 DHJG EI EIK DHY EY DHJ CG K ABEFLY CGJI DHY CGK ABEFHLY ABCFGJKL EY CGI ABEFGJLY EHY CGK ABEFIL Y EJY CG CG DH ABFKL EI DH K Y CGJ ABFL Y CG X A 0 1 1 ε L ε K ε J 0 Y
编译原理第四章参考答案

编译原理第四章参考答案1.1考虑下⾯⽂法G1S->a|^|(T)T->T,S|S消去G1的左递归。
然后对每个⾮终结符,写出不带回溯的递归⼦程序。
答::(1)消除左递归:S->a|^|(T)T-> ST’T’->,S T’|ε(2)first(S)={ a , ^ , ( } first(T)= { a , ^ , ( } first(T’)={ , ε}First(a)={a},First(^)={^},First( (T) )={ ( }S的所有候选的⾸符集不相交First(,ST’)={,} ,First(ε)={ε},T’的所有候选的⾸符集不相交Follow(T’)=Follow(T)={ )}first(T’)∩Follow(T’)={}所以改造后的⽂法为LL(1)⽂法。
不带回溯的递归⼦程序如下:S( ){if (lookahead=’a’) advance;Else if(lookahead=’^’) advance;Else if(lookahead=’(’){advance;T();if(lookahead=’)’) advance;else error();}Else error();}T( ){S( );T’( ):}T’->,S T’|εT’( ){if (lookahead=’,’){advance;T’();}Else if(lookahead=Follow(T’)) advance;Else error;}有⽂法G(S):S→S+aF|aF|+aFF→*aF|*a(1)改写⽂法为等价⽂法G[S’],消除⽂法的左递归和回溯(2)构造G[S’]相应的FIRST和FOLLOW集合;(3)构造G[S’]的预测分析表,以此说明它是否为LL(1)⽂法。
(4)如果是LL(1)⽂法,请给出句⼦a*a+a*a*a的预测分析过程该⽂法为LL(1)⽂法,因为它的预测分析表中⽆冲突项。
清华大学编译原理第二版课后习答案

Lw.《编译原理》课后习题答案第一章第1章引论第1题解释下列术语:(1)编译程序(2)源程序(3)目标程序(4)编译程序的前端(5)后端(6)遍答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。
(2)源程序:源语言编写的程序称为源程序。
(3)目标程序:目标语言书写的程序称为目标程序。
(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。
通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。
(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。
第2题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
答案:一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。
中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。
盛威网()专业的计算机学习网站1《编译原理》课后习题答案第一章目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。
表格管理程序:负责建立、填写和查找等一系列表格工作。
编译原理课后习题答案+清华大学出版社第二版

用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放
数据空间时,恢复调用该过程前运行栈的状态。 RA: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地
编译程序大致有哪几种开发技术?
答案:
(1)自编译:用某一高级语言书写其本身的编译程序。 (2)交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。 (3)自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的编
译程序 T0,再把语言 L0 扩充到 L1,此时 L0⊂ L1 ,并用 L0 编写 L1 的编译程序 T1,再把语 言 L1 扩充为 L2,有 L1 ⊂ L2 ,并用 L1 编写 L2 的编译程序 T2,……,如此逐步扩展下 去, 好似滚雪球一样,直到我们所要求的编译程序。 (4)移植:将 A 机器上的某高级语言的编译程序搬到 B 机器上运行。
(main).
答案: 程序执行到赋值语句 b∶=10 时运行栈的布局示意图为:
1
《编译原理》课后习题答案第二章
第 3题 写出题 2 中当程序编译到 r 的过程体时的名字表 table 的内 容。
name
kind
level/val
adr
size
答案:
题 2 中当程序编译到 r 的过程体时的名字表 table 的内容为:
盛威网()专业的计算机学习网站
2
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。
编译原理第4章答案

第四章 词法分析1.构造下列正规式相应的DFA :(1) 1(0|1)*101(2) 1(1010*| 1(010)*1)*0 (3) a((a|b)*|ab *a)*b (4) b((ab)*| bb)*ab 解:(1)1(0|1)*101对应的NFA 为下表由子集法将NFA 转换为DFA :(2)1(1010*| 1(010)*1)*0对应的NFA 为 10,1下表由子集法将NFA转换为DFA:(3)a((a|b)*|ab *a)*b (略) (4)b((ab)*| bb)*ab (略)2.已知NFA=({x,y,z},{0,1},M,{x},{z})其中:M(x,0)={z},M(y,0)={x,y},M(z,0)={x,z},M(x,1)={x}, M(y,1)=φ,M(z,1)={y},构造相应的DFA 。
解:根据题意有NFA 图如下下表由子集法将NFA 转换为DFA :0,1下面将该DFA最小化:(1)首先将它的状态集分成两个子集:P1={A,D,E},P2={B,C,F}(2)区分P2:由于F(F,1)=F(C,1)=E,F(F,0)=F并且F(C,0)=C,所以F,C等价。
由于F(B,0)=F(C,0)=C,F(B,1)=D,F(C,1)=E,而D,E不等价(见下步),从而B与C,F可以区分。
有P21={C,F},P22={B}。
(3)区分P1:由于A,E输入0到终态,而D输入0不到终态,所以D与A,E可以区分,有P11={A,E},P12={D}。
(4)由于F(A,0)=B,F(E,0)=F,而B,F不等价,所以A,E可以区分。
(5)综上所述,DFA可以区分为P={{A},{B},{D},{E},{C,F}}。
所以最小化的DFA如下:3.将图确定化:1101111解:下表由子集法将NFA 转换为DFA :4.把图的(a)和(b)分别确定化和最小化:(a) (b)解: (a):下表由子集法将NFA 转换为DFA :0,1a可得图(a1),由于F(A,b)=F(B,b)=C,并且F(A,a)=F(B,a)=B,所以A,B 等价,可将DFA 最小化,即:删除B ,将原来引向B 的引线引向与其等价的状态A ,有图(a2)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章 词法分析
1.构造下列正规式相应的DFA :
(1) 1(0|1)*
101
(2) 1(1010* | 1(010)* 1)*
(3) a((a|b)*|ab *a)*
b
(4) b((ab)* | bb)*
ab 解:
(1)1(0|1)*
101对应的NFA 为
下表由子集法将NFA 转换为DFA :
(2)1(1010* | 1(010)* 1)*
0对应的NFA 为
下表由子集法将
NFA 转换为DFA :
(3)a((a|b)*|ab*a)* b (略)
(4)b((ab)* | bb)* ab (略)
2.已知NFA=({x,y,z},{0,1},M,{x},{z})其中:M(x,0)={z},M(y,0)={x,y},M(z,0)={x,z},M(x,1)={x}, M(y,1)=φ,M(z,1)={y},构造相应的DFA。
解:根据题意有NFA图如下
0,1 下表由子集法将NFA转换为DFA:
下面将该DFA最小化:
(1)首先将它的状态集分成两个子集:P1={A,D,E},P2={B,C,F}
(2)区分P2:由于F(F,1)=F(C,1)=E,F(F,0)=F并且F(C,0)=C,所以F,C等价。
由于F(B,0)=F(C,0)=C,
F(B,1)=D,F(C,1)=E,而D,E不等价(见下步),从而B与C,F可以区分。
有P21={C,F},P22={B}。
(3)区分P1:由于A,E输入0到终态,而D输入0不到终态,所以D与A,E可以区分,有P11={A,E},P12={D}。
(4)由于F(A,0)=B,F(E,0)=F,而B,F不等价,所以A,E可以区分。
(5)综上所述,DFA可以区分为P={{A},{B},{D},{E},{C,F}}。
所以最小化的DFA如下:
3.将图
4.16确定化:
图4.16
解:下表由子集法将NFA转换为DFA:
1
4.把图4.17的(a)和(b)分别确定化和最小化:
(a) (b)
解: (a):
可得图(a1),由于F(A,b)=F(B,b)=C,并且F(A,a)=F(B,a)=B,所以A,B 等价,可将DFA 最小化,即:删除
B ,将原来引向B 的引线引向与其等价的状态A ,有图(a2)。
(DFA 的最小化,也可看作将上表中的B 全部替换为A ,然后删除B 所在的行。
)
(a1)确定化的DFA (a2)最小化的DFA
(b ):该图已经是DFA 。
下面将该DFA 最小化:
(6) 首先将它的状态集分成两个子集:P 1={0},P 2={1,2,3,4,5}
(7) 区分P 2:由于F(4,a)=0属于终态集,而其他状态输入a 后都是非终态集,所以区分P 2如下:
P 21={4},P 22={1,2,3,5}。
(8) 区分P 22:由于
F(1,b)=F(5,b)=4属于P 21,而F(2,b)与F(3,b)不等于4,即不属于P
21,所以区分P
22如下:
P 221={1,5},P 222={2,3}。
(9) 区分P 221:由于F(1,b)=F(5,b)=4,即F(1,a)=1,F(5,a)=5,所以1,5等价。
0,
1
a a
a
(10) 区分P 222:由于F(2,a)=1属于P 221,而F(3,a)=3属于P 222,所以2,3可区分。
P 222区分为P 2221{2},P 2222{3}。
(11) 结论:该DFA 的状态集可分为:P={ {0},{1,5},{2},{3},{4} },其中1,5等价。
删去状态5,将原来
引向5的引线引向与其等价的状态1,有图(b1)。
(b1)最小化的DFA
5.构造一个DFA ,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。
然后再构造该语言的正则文法。
解:根据题意,DFA 所对应的正规式应为:(0|(10))*。
所以,接收该串的NFA 如下:
显然,A ,B 等价,所以将上述DFA 最小化后有:
对应的正规文法为: G[A]:
A →1C|0A|ε C →0A
6.设无符号数的正规式为θ:
θ=dd *|dd *.dd *|.dd *|dd *e(s|ε)dd *|e(s|ε)dd *|.dd *e(s|ε)dd *|dd *.dd *e(s|ε)dd *
化简θ,画出θ的DFA ,其中d={0,1,2,…9},s={+,-}
解:把原正规式的每2,3项,4,5项,6,7项分别合并后化简有:
θ=dd *
|d *
.dd *
|d *
e(s|
ε)dd *
|d *
.dd *
e(s|ε)dd *
=dd
*
|d *
.dd *
|(d *
|d *
.dd *
)e(s|ε)dd *
=(ε|d *
.|(d *
|d *
.dd *
)e(s|ε))dd
*
=(ε|d *.|d *(ε|.dd *)e(s|ε))dd
*
下面构造化简后的θ对应的NFA :
7.给文法G[S]: S →aA|bQ A →aA|bB|b B →bD|aQ Q →aQ|bD|b D →bB|aA E →aB|bF
F →bD|aE|b
构造相应的最小的DFA 。
解:由于从S 出发任何输入串都不能到达状态E 和F ,所以,状态E ,F 为多余的状态,不予考虑。
这样,可以写出文法G[S]对应的NFA :
a
下表由子集法将NFA转换为DFA:
由上表可知:
(1)因为4,5是DFA的终态,其他是非终态,可将状态集分成两个子集:
P1={1,2,3,6,7},P2={4,5}
(2)在P1中因为2,3输入b后是终态,而1,6,7输入b后是非终态,所以P1可区分为:
P11={1,6,7},P12={2,3}
(3)在P11中由于1输入b后为3,6输入b后为7,而3,7分属P11和P12,所以1与6不等价,同理,1与7不等价。
所以P11可区分为:
P111={1},P112={6,7}
(4)查看P112={6,7},由于输入a后为2,3,所以6,7是否等价由2,3是否等价决定。
(5)查看P12={2,3},由于输入b后为4,5,所以2,3是否等价由4,5是否等价决定。
(6)查看P2={4,5} ,显然4,5是否等价由2,3与6,7是否同时等价决定。
由于有(4)即6,7是否等价由2,3是否等价决定,所以,4,5是否等价由2,3是否等价决定。
由于有(5)即2,3是否等价由4,5是否等价决定,所以有4,5等价,2,3等价,进而6,7也等价。
(7)删除上表中的第3,5,7行,并将剩余行中的3,5,7分别改为对应的等价状态为2,
4,6有下表:
这样可得最小化的DFA如下:
8.给出下述文法所对应的正规式: S →0A|1B A →1S|1 B →0S|0 解:把后两个产生式代入第一个产生式有:
S=01|01S S=10|10S
有:S=01S|10S|01|10=(01|10)S|(01|10)=(01|10)*
(01|10) 即:(01|10)*
(01|10)为所求的正规式。
9.将图4.18的DFA 最小化,并用正规式描述它所识别的语言:
图 4.18
解:
(1) 因为6,7是DFA 的终态,其他是非终态,可将状态集分成两个子集:P1={1,2,3,4,5},P2={6,
7}。
(2) 由于F(6,b)=F(7,b)=6,而6,7又没有其他输入,所以6,7等价。
(3) 由于F(3,c)=F(4,c)=3,F(3,d)=F(4,d)=5,F(3,b)=6,F(4,b)=7,而6,7
等价,所以3,4等价。
(1) 由于F(1,b)=F(2,b)=2,F(1,a)=3,F(2,a)=4,而3,4等价,所以1,2等价。
(2) 由于状态5没有输入字符b,所以与1,2,3,4都不等价。
(3) 综上所述,上图DFA 的状态可最细分解为:P={{1,2},{3,4},{5},{6,7}}。
该DFA b *a(c|da)*bb *
10.构造下述文法G[S]的自动机: S →A0 A →A0|S1|0
该自动机是确定的吗?若不确定,则对它确定化。
该自动机相应的语言是什么?
解:
由于该文法的产生式S →A0,A →A0|S1中没有字符集V T 的输入,所以不是确定的自动机。
要将其他确定化,必须先用代入法得到它对应的正规式。
把S →A0代入产生式A →S1有:A=A0|A01|0=A(0|01)|0=0(0|01)*。
代入S →A0有该文法的正规式:0(0|01)*
0,所以,改写该文法为确定的自动机为:
b
b
由于状态A有3次输入0的重复输入,所以上图只是NFA,下面将它确定化:
由上表可知DFA为:。