编译原理课后习题答案(陈火旺+第三版)
编译课后答案-陈火旺等编著第三版ppt课件
正规式 (0|1)*010(0|1)*
DFA:
4
1
0
01
00 11 20 3
01 1
1
05
最小化DFA:
1
0
0 011
20
3
2021/8/9
1
最新课件
0,1
11 11
CH.3.练习题10(P64.)
10. 用FA写出渡河的方法。
设:人---R;狼---L;羊---Y;菜---C;
左岸---Z;右岸---U;
依照字典序排列; 正规式 (a|A)*(b|B)*(c|C)*(d|D)*…(z|Z)*
2021/8/9
最新课件
99
CH.3.练习题9(P64.)
9.问题:没构造出DFA;没过程;方法没掌握。
(1) {0,1}上的含有子串010的所有串; 至少含一个。 正规式 (0|1)*010(0|1)* 或 (0*1*)*010(0*1*)*
问题:没写全;表达不准确
解:< int,->,
< CInt, “CInt”> ,
< ::,-> ,
< nMulDiv, “nMulDiv”> ,
<(,->,
< int,-> ,
< n1, “n1”> , < , , -> ,
< int,-> ,
< n2, “n2”> ,
< ),-> ,
< {, -> ,
最小化DFA:
a
0b
a
a
2 b3
b
初始: {0,1}, {2,3,4,5}
编译原理第三版课后习题答案
φ
给状态编号:
a
b
0
1
2
1
1
2
2
0
3
3
3
3
a
a
a b b b
b
a
最小化:
a a
b b
a
b
(b)
b b a
a b
a
a b
b a
a a
已经确定化了,进行最小化
最小化:
b b a
a b
a
P64–
(1) 0
1
0
(2):
0
1
0
确定化:
0
1
{X,1,Y}
{1,Y}
{2}
{1,Y}
{1,Y}
{2}
{2}
{1,Y}
FIRST(E')={+,ε}
FIRST(T)={(,a,b,^}
FIRST(T')={(,a,b,^,ε}
FIRST(F)={(,a,b,^}
FIRST(F')={*,ε}
FIRST(P)={(,a,b,^}
FOLLOW(E)={#,)}
FOLLOW(E')={#,)}
FOLLOW(T)={+,),#}
P
(1)
是0~9组成的数字串
(2)
最左推导:
最右推导:
P
G(S)
P36-8
文法:
最左推导:
最右推导:
语法树:/********************************
*****************/
P36-
句子iiiei有两个语法树:
P36-
编译原理第三版答案
编译原理第三版答案第一章答案1.问题:什么是编译器?答案:编译器是一种将源程序转换为目标程序的软件工具。
它负责对源代码进行词法分析、语法分析、语义分析和代码生成等一系列操作,最终生成可执行的目标程序。
2.问题:编译器的主要任务是什么?答案:编译器的主要任务是将高级语言程序转换为能被计算机硬件执行的机器码。
它包括了对源代码进行词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。
3.问题:编译器的工作过程是什么?答案:编译器的工作过程分为多个阶段。
首先是词法分析,将源代码拆分成一个个的词法单元。
然后是语法分析,根据语法规则构建语法树。
接着是语义分析,对语法树进行检查,确保程序的语义正确。
之后是中间代码生成和优化,将语法树转换为更加高效的中间代码。
最后是目标代码生成,将中间代码转换为特定的目标机器代码。
4.问题:编译器的优化技术有哪些?答案:编译器的优化技术包括了常量折叠、公共子表达式消除、循环优化、函数内联和代码重排等。
这些技术可以提高程序的执行效率和优化代码的空间利用率。
5.问题:编译器的应用领域有哪些?答案:编译器广泛应用于软件开发领域。
它们被用于将高级语言转换为目标机器码,用于开发操作系统、编程语言和应用软件等。
第二章答案1.问题:什么是有限自动机(DFA)?答案:有限自动机是一种表示有限状态和状态之间转换关系的模型。
它可以根据输入字符进行状态转换,最终决定是否接受某个字符串。
2.问题:有限自动机的主要组成部分是什么?答案:有限自动机主要由状态集合、输入字符集、转移函数、初始状态和接受状态集合组成。
3.问题:什么是正则表达式?答案:正则表达式是一种用于描述字符串模式的表达式。
它由普通字符和特殊字符组成,可以用于匹配符合条件的字符串。
4.问题:正则表达式的常用操作符有哪些?答案:正则表达式的常用操作符包括了字面量字符、字符类、重复操作符、选择操作符和位置操作符等。
5.问题:正则表达式如何转换为有限自动机?答案:正则表达式可以通过字面化、连接、选择和闭包等操作转换为等价的有限自动机。
编译原理第三版课后习题答案解析
目录P36-62P36-72P36-82P36-92P36-102P36-112P64–72P64–83P64–123 P64–144 P81–15P81–26P81–38P133–18 P133–28 P133–310 P134–511 P164–513 P164–713 P217–114 P217–314 P218–415 P218–515 P218–616 P218–716 P219–1217 P270–918P36-6<1>LG ()1是0~9组成的数字串<2>最左推导: 最右推导:P36-7G<S>P36-8文法: 最左推导: 最右推导:语法树:/******************************** *****************/P36-9句子iiiei 有两个语法树:P36-10/************** ***************/P36-11/*************** L1: L2: L3: L4:***************/第三章习题参考答案P64–7<1>101101(|)*最小化:P64–8<1> <2> <3>P64–12<a>aa,b aaaa b b b最小化:a ab ba b <b>已经确定化了,进行最小化 最小化:aP64–14<1> 01 0 <2>:(|εε0 00 YY给状态编号:最小化: 01 1 1 0 0第四章P81–1<1> 按照T,S 的顺序消除左递归 递归子程序: procedure S; beginif sym='a' or sym='^' then abvance else if sym='<' then begin advance;T;if sym='>' then advance; else error; end else error end;procedure T; begin S;'T end;procedure 'T ; beginif sym=',' then beginadvance;S;'Tendend;其中:sym:是输入串指针IP所指的符号advance:是把IP调至下一个输入符号error:是出错诊察程序<2>FIRST<S>={a,^,<}FIRST<T>={a,^,<}FIRST<'T>={,,ε}FOLLOW<S>={>,,,#}FOLLOW<T>={>}FOLLOW<'T>={>}预测分析表是LL<1>文法P81–2文法:<1>FIRST<E>={<,a,b,^}FIRST<E'>={+,ε}FIRST<T>={<,a,b,^}FIRST<T'>={<,a,b,^,ε}FIRST<F>={<,a,b,^}FIRST<F'>={*,ε}FIRST<P>={<,a,b,^}FOLLOW<E>={#,>}FOLLOW<E'>={#,>}FOLLOW<T>={+,>,#}FOLLOW<T'>={+,>,#}FOLLOW<F>={<,a,b,^,+,>,#}FOLLOW<F'>={<,a,b,^,+,>,#}FOLLOW<P>={*,<,a,b,^,+,>,#}<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>文法.<3><4>procedure E;beginif sym='<' or sym='a' or sym='b' or sym='^' then begin T; E' endelse errorendprocedure E';beginif sym='+'then begin advance; E endelse if sym<>'>' and sym<>'#' then error endprocedure T;beginif sym='<' or sym='a' or sym='b' or sym='^' then begin F; T' endelse errorendprocedure T';beginif sym='<' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='<' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='<' thenbeginadvance; E;if sym='>' then advanceelse errorendelse errorend;P81–3/***************(1)是,满足三个条件。
编译原理_第三版_课后答案
P133–3
(1) FIRSTVT(S)={a,^,(} FIRSTVT(T)={,,a,^,(} LASTVT(S)={a,^,)} LASTVT(T)={,,a,^,)} (2) a ^ ( ) a ^ ( ) < < < > > = >
, > > < >
, < < < > > 是算符文法,并且是算符优先文法 (3)优先函数 a f g 4 5 ^ 4 5 ( 2 5 ) 4 2 , 4 3
^
#
P (4) procedure E; begin if sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error end procedure E'; begin if sym='+' then begin advance; E end else if sym<>')' and sym<>'#' then error end procedure T; begin if sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' end else error end procedure T'; begin if sym='(' or sym='a' or sym='b' or sym='^' then T else if sym='*' then error end procedure F; begin if sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' end else error end procedure F'; begin if sym='*' then begin advance; F' end end
编译原理第三版课后习题解答
第二章习题解答P36-6(1)L G ()1是0~9组成的数字串(2)最左推导:5685653430127012010⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒D DD DDD NDD ND N D DD ND N D DD DDD DDDD NDDD NDD ND N最右推导:N ND N ND N ND N D N ND N D N ND N ND N D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)O N O D N S O AO A AD N→→→→→1357924680|||||||||||P36-8文法:E T E T E T TF T F T F F E i→+-→→|||*|/()| 最左推导:E E T T TF T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+********()*()*()*()*()*()*()最右推导:E E T E TF E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+⇒+**********()*()*()*()*()*()*()*()语法树:/********************************EE FTE +T F F T +iiiEEFTE-T F F T -iiiE EFT+T F FTiii*i+i+ii-i-ii+i*i*****************/P36-9句子iiiei 有两个语法树:S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ⇒⇒⇒⇒⇒⇒⇒⇒P36-10/**************)(|)(|S T TTS S →→***************/P36-11/*************** L1:ε||cC C ab aAb A AC S →→→ L2:bcbBc B aA A AB S ||→→→εL3:εε||aBb B aAb A AB S →→→ L4:AB B A A B A S |01|10|→→→ε ***************/第三章习题参考答案P64–7(1)101101(|)*1 ε ε 1 0 11 确定化:0 1 {X} φ {1,2,3} φ φ φ {1,2,3} {2,3} {2,3,4} {2,3} {2,3} {2,3,4} {2,3,4} {2,3,5} {2,3,4}{2,3,5} {2,3} {2,3,4,Y} {2,3,4,Y}{2,3,5}{2,3,4,}1 00 0 1 1 00 1 0 1 1 1 最小化:X 1 2 3 4 Y5 XY60 12 35 4{,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,012345601234513501234512460123456012341350123456012310100==== 3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}===== 010 0 1 00 1 0 1 1 1P64–8(1)01)0|1(*(2))5|0(|)5|0()9|8|7|6|5|4|3|2|1|0)(9|8|7|6|5|4|3|2|1(*(3)******)110|0(01|)110|0(10P64–12(a)aa,b a确定化:a b {0} {0,1} {1} {0,1} {0,1} {1} {1}{0}φ5 01 2 4 3 01φφ φ给状态编号:a b 0 1 2 1 1 2 2 0 3 333aaa b b bba最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123a ba b ====a ab bab (b)b b aa baa bb aa a已经确定化了,进行最小化0 1 2 3 01 2 0 2 3 14 5最小化:{{,}, {,,,}}012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a bb b aa baP64–14(1) 01 0 (2):(|)*0100 1 ε ε确定化:0 1 {X,1,Y}{1,Y}{2}0 1 2 01YX YX2 1{1,Y} {1,Y} {2} {2} {1,Y} φ φφ φ 给状态编号:0 1 0 1 2 1 1 2 2 1 3 3330 1 01 1 10 最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101====1 1 1 0第四章P81–1(1) 按照T,S 的顺序消除左递归ε|,)(||^)(T S T TS T T a S S G '→''→→' 递归子程序: procedure S; beginif sym='a' or sym='^' then abvance else if sym='('0 2 13 01 3then begin advance;T;if sym=')' then advance; else error; end else error end;procedure T; begin S;'T end;procedure 'T ; beginif sym=',' then begin advance; S;'T end end; 其中:sym:是输入串指针IP 所指的符号 advance:是把IP 调至下一个输入符号 error:是出错诊察程序 (2)FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T )={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T )={)} 预测分析表a^() , # S S a →S →^S T →()TT ST →' T ST →' T ST →''T'→T ε '→'T ST ,是LL(1)文法P81–2文法:|^||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε(1)FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεε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)文法. (3)+ * ( ) a b ^ # EE TE →'E TE →' E TE →' E TE →'E' '→+E E'→E ε'→E εTT F T →'T F T →' T F T →' T F T →'T''→T ε'→T T '→T ε '→T T '→T T '→T T '→T εF F P F →' F P F →' F P F →' F P F →'F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F εPP E →() P a → P b → P →^(4)procedure E; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error endprocedure E'; beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' end else error endprocedure T'; beginif sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then error endprocedure F; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' end else error endprocedure F'; beginif sym='*'then begin advance; F' end endprocedure P; beginif sym='a' or sym='b' or sym='^' then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advance else error endelse errorend;P81–3/***************(1) 是,满足三个条件。
编译原理第三版课后习题与答案
目录P36-6 (2)P36-7 (2)P36-8 (2)P36-9 (3)P36-10 (3)P36-11 (3)P64–7 (4)P64–8 (5)P64–12 (5)P64–14 (7)P81–1 (8)P81–2 (9)P81–3 (12)P133–1 (12)P133–2 (12)P133–3 (14)P134–5 (15)P164–5 (19)P164–7 (19)P217–1 (19)P217–3 (20)P218–4 (20)P218–5 (21)P218–6 (22)P218–7 (22)P219–12 (22)P270–9 (24)P36-6(1)L G ()1是0~9组成的数字串(2)最左推导:N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:N ND N ND N ND N D N ND N D N ND N ND N D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)O N O D N S O AO A AD N→→→→→1357924680|||||||||||P36-8文法:E T E T E T TF T F T F F E i→+-→→|||*|/()| 最左推导:E E T T TF T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+********()*()*()*()*()*()*()最右推导:E E T E TF E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+⇒+**********()*()*()*()*()*()*()*()语法树:/********************************EE FTE +T F F T +iiiEEFTE-T F F T -iiiEEFT+T F FTiii*i+i+ii-i-ii+i*i*****************/P36-9句子iiiei 有两个语法树:S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ⇒⇒⇒⇒⇒⇒⇒⇒P36-10/**************)(|)(|S T TTS S →→***************/P36-11/*************** L1:ε||cC C ab aAb A AC S →→→ L2:bcbBc B aA A AB S ||→→→εL3:εε||aBb B aAb A AB S →→→ L4:AB B A A B A S |01|10|→→→ε ***************/第三章习题参考答案P64–7(1)确定化:最小化:{,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,012345601234513501234512460123456012341350123456012310100==== 3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}=====P64–8(1)01)0|1(*(2))5|0(|)5|0()9|8|7|6|5|4|3|2|1|0)(9|8|7|6|5|4|3|2|1(*(3)******)110|0(01|)110|0(10P64–12(a)确定化:给状态编号:最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123a ba b ====(b)已经确定化了,进行最小化最小化:{{,}, {,,,}}012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a baP64–14(2):给状态编号:最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101====第四章P81–1(1) 按照T,S 的顺序消除左递归ε|,)(||^)(T S T TS T T a S S G '→''→→' 递归子程序: procedure S; beginif sym='a' or sym='^' then abvance else if sym='('then beginadvance;T;if sym=')' then advance;else error;endelse errorend;procedure T;beginS;'Tend;procedure 'T;beginif sym=','then beginadvance;S;'Tendend;其中:sym:是输入串指针IP所指的符号advance:是把IP调至下一个输入符号error:是出错诊察程序(2)FIRST(S)={a,^,(}FIRST(T)={a,^,(}FIRST('T)={,,ε}FOLLOW(S)={),,,#}FOLLOW(T)={)}FOLLOW('T)={)}预测分析表是LL(1)文法P81–2文法:|^||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε(1)FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεε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)文法.(4)procedure E;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' endelse errorendprocedure E';beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' endelse errorendprocedure T';beginif sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advance else error endelse errorend;P81–3/***************(1) 是,满足三个条件。
编译原理第三版课后习题解答
第二章习题解答之羊若含玉创作P36-6(1)()L G1是0~9组成的数字串(2)最左推导:最右推导:P36-7G(S)P36-8文法:最左推导:最右推导:语法树:/*************************************************/P36-9句子iiiei有两个语法树:P36-10/*****************************/P36-11/***************L1: L2: L3: L4:***************/第三章习题参考答案P64–7 (1)101101(|)*确定化:1 1 1 最小化:1 1 1 P64–8 (1) (2) (3) P64–12 (a)aa,ba 确定化:给状态编号:aaab b ba 最小化:a ab ab (b)b a b a ba a a1已经确定化了,进行最小化 最小化:a b aP64–14 (1) 010 (2):(|1εε0 确定化:给状态编号:YY1 1最小化:1 1第四章P81–1(1) 依照T,S的顺序消除左递归递归子程序:procedure S;beginif sym='a' or sym='^'then abvanceelse if sym='('then beginadvance;T;if sym=')' then advance;else error;endelse errorend;procedure T;beginS;'Tend;procedure 'T;beginif sym=','then beginadvance;S;'Tendend;其中:sym:是输入串指针IP所指的符号advance:是把IP调至下一个输入符号error:是出错诊察程序(2)FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T)={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T)={)}预测剖析表是LL(1)文法P81–2文法:(1)FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#}FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#}(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)文法.(3)(4)procedure E;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' endelse errorendprocedure E';beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' endelse errorendprocedure T';beginif sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advanceelse errorendelse errorend;P81–3/***************(1)是,知足三个条件.(2)不是,对于A不知足条件3.(3)不是,A、B均不知足条件3.(4)是,知足三个条件.***************/第五章P133–1短语: E+T*F, T*F,直接短语: T*F句柄: T*FP133–2文法:(1)最左推导:最右推导:(2)(((a,a),^,(a)),a)(((S,a),^,(a)),a)(((T,a),^,(a)),a)(((T,S),^,(a)),a)(((T),^,(a)),a)((S,^,(a)),a)((T,^,(a)),a)((T,S,(a)),a)((T,(a)),a)((T,(S)),a)((T,(T)),a)((T,S),a)((T),a)(S,a)(T,S)(T)S“移进-归约”进程:步调栈输入串动作0 # (((a,a),^,(a)),a)# 预备1 #( ((a,a),^,(a)),a)# 进2 #(( (a,a),^,(a)),a)# 进3 #((( a,a),^,(a)),a)# 进4 #(((a ,a),^,(a)),a)# 进5 #(((S ,a),^,(a)),a)# 归6 #(((T ,a),^,(a)),a)# 归7 #(((T, a),^,(a)),a)# 进8 #(((T,a ),^,(a)),a)# 进9 #(((T,S ),^,(a)),a)# 归10 #(((T ),^,(a)),a)#归11 #(((T) ,^,(a)),a)# 进12 #((S ,^,(a)),a)# 归13 #((T ,^,(a)),a)# 归14 #((T, ^,(a)),a)# 进15 #((T,^ ,(a)),a)# 进16 #((T,S ,(a)),a)# 归17 #((T ,(a)),a)# 归18 #((T, (a)),a)# 进19 #((T,( a)),a)# 进20 #((T,(a )),a)# 进21 #((T,(S )),a)# 归22 #((T,(T )),a)# 归23 #((T,(T) ),a)# 进24 #((T,S ),a)# 归25 #((T ),a)# 归26 #((T) ,a)# 进27 #(S ,a)# 归28 #(T ,a)# 归29 #(T, a)# 进30 #(T,a )# 进31 #(T,S )# 归32 #(T )# 归33 #(T) # 进34 #S # 归P133–3(1)FIRSTVT(S)={a,^,(}FIRSTVT(T)={,,a,^,(}LASTVT(S)={a,^,)}LASTVT(T)={,,a,^,)}(2)G是算符文法,并且是算符优先文法6(3)优先函数(4)栈输入字符串动作# (a,(a,a))# 预备#( a, (a,a))# 进#(a , (a,a))# 进#(t , (a,a))# 归#(t, (a,a))# 进#(t,(a,a))# 进#(t,(a ,a))# 进#(t,(t ,a))# 归#(t,(t, a))# 进#(t,(t,a ))# 进#(t,(t,s ))# 归#(t,(t ))# 归#(t,(t))# 进#(t,s )# 归#(t )# 归#(t )# 进# s # 归successP134–5(1)0.'→⋅S S 1.'→⋅S S 2.S AS →⋅ 3.S A S →⋅4.S AS →⋅5.S b →⋅6.S b →⋅7.A SA →⋅8.A S A →⋅ 9.A SA →⋅ 10.A a →⋅11.A a →⋅(2)Aεε εd确定化:AabS S b S69A ba Abb a结构LR(0)项目集规范族也可以用GO 函数来盘算得到.所得到的项目集规范族与上图中的项目集一样:0I ={'→⋅S S ,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}GO(0I ,a)={ A a →⋅}=1I GO(0I ,b)={ S b →⋅}=2IGO(0I ,S)={ '→⋅S S ,A S A →⋅,A SA →⋅,A a →⋅,S AS →⋅,S b →⋅}=3IGO(0I ,A)={ S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=4I GO(3I ,a)={ A a →⋅}=1I GO(3I ,b)={ S b →⋅}=2IGO(3I ,S)={ A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=5I GO(3I ,A)={ A SA →⋅,S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=6IGO(4I ,a)={ A a →⋅}=1I GO(4I ,b)={ S b →⋅}=2IGO(4I ,S)={ S AS →⋅,A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=7IGO(4I ,A)={ S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=4I GO(5I ,a)={ A a →⋅}=1I GO(5I ,b)={ S b →⋅}=2IGO(5I ,S)={ A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=5I GO(5I ,A)={ A SA →⋅,S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=6IGO(6I ,a)={ A a →⋅}=1I GO(6I ,b)={ S b →⋅}=2IGO(6I ,S)={ S AS →⋅,A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=7IGO(6I ,A)={ S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=4I GO(7I ,a)={ A a →⋅}=1I GO(7I ,b)={ S b →⋅}=2IGO(7I ,S)={ A S A →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=5I GO(7I ,A)={ A SA →⋅,S A S →⋅,S AS →⋅,S b →⋅,A SA →⋅,A a →⋅}=6I项目集规范族为C={1I ,2I ,3I ,4I ,5I ,6I ,7I } (3)不是SLR 文法状态3,6,7有移进归约冲突状态3:FOLLOW(S’)={#}不包含a,b状态6:FOLLOW(S)={#,a,b}包含a,b,;移进归约冲突无法消解状态7:FOLLOW(A)={a,b}包含a,b ;移进归约冲突消解 所以不是SLR 文法.(4)结构例如LR(1)项目集规范族 见下图:对于状态5,因为包含项目[b a AS A / ⋅→],所以遇到搜索符号a 或b 时,应该用ASA →归约.又因为状态5包含项目[b a a A / ⋅→],所以遇到搜索符号a 时,应该移进.因此存在“移进-归约”抵触,所以这个文法不是LR(1)文法.b b bAa a Sb b第六章/********************第六章会有点难P164–5(1)E→E1+T {if (E1.type = int) and (T.type = int ) then E.type := intelse E.type := real}E→T {E.type := T.type}T→num.num {T.type := real}T→num {T.type := int}(2)P164–7S→L1|L2lengthL.2)}S→L {S.val:=L.val}L→L1B {L.val:=2*L1.val + B.val;L.length:=L1.length+1}L→B {L.val:=B.c;L.length :=1}B→0 {B.c:=0}B→1 {B.c:=1}***********************/第七章P217–1a*(-b+c) ab@c+*a+b*(c+d/e) abcde/+*+-a+b*(-c+d) a@bc@d+*+if (x+y)*z =0 then (a+b)↑c else a↑b↑c xy+z*0= ab+c↑abc↑↑¥或xy+z*0= P1 jez ab+c↑ P2 jump abc↑↑P1 P2P217–3-(a+b)*(c+d)-(a+b+c)的三元式序列:(1)+, a, b(2)@, (1), -(3)+, c, d(4)*, (2), (3)(5)+, a, b(6)+, (5), c(7)-, (4), (6)间接三元式序列:三元式表:(1)+, a, b(2)@, (1), -(3)+, c, d(4)*, (2), (3)(5)+, (1), c(6)-, (4), (5)间接码表:(1)(2)(3)(4)(1)(5)(6)四元式序列:(1)+, a, b, 1T(2)@, 1T, -, 2T(3)+, c, d, 3T(4)*, 2T, 3T, 4T(5)+, a, b, 5T(6)+, 5T, c, 6T(7)-, 4T, 6T, 7TP218–4自下而上剖析进程中把赋值句翻译成四元式的步调:A:=B*(-C+D)步调输入串栈PLACE 四元式(1) A:=B*(-C+D)(2) :=B*(-C+D) i A(3) B*(-C+D)i:= A- (4) *(-C+D)i:=i A-B (5) *(-C+D)i:=E A-B (6) *(-C+D)i:=E A-B (7) (-C+D)i:=E* A-B- (8) -C+D)i:=E*( A-B-- (9)C+D) i:=E*(- A-B--- (10) +D) i:=E*(-i A-B---C (11) +D) i:=E*(-E A-B---C (@,C,-, T 1) (12) +D) i:=E*(E A-B--T 1 (13) D) i:=E*(E+ A-B--T 1- (14) ) i:=E*(E+i A -B--T 1-D (15) ) i:=E*(E+E A-B--T 1-D (+,T 1,D,T 2) (16) ) i:=E(E A-B--T 2 (17) i:=E*(E) A-B--T 2- (18) i:=E+E A-B-T 2 (*,B,T 2,T 3) (19) i:=E A-T 3 (:=,T 3,-,A) (20) A产生的四元式:(@,C,-, T 1) (+,T 1,D,T 2) (*,B,T 2,T 3) (:=,T 3,-,A)P218–5/****************设A :10*20,B 、C 、D :20,宽度为w =4 则T1:= i * 20T1:=T1+jT2:=A –84T3:=4*T1Tn:=T2[T3] //这一步是过剩的T4:= i + jT5:=B–4T6:=4*T4T7:=T5[T6]T8:= i * 20T8:=T8+jT9:=A–84T10:=4*T8T11:=T9[T10]T12:= i + jT13:=D–4T14:=4*T12T15:= T13[T14]T16:=T11+T15T17:=C–4T18:=4*T16T19:=T17[T18]T20:=T7+T19Tn:=T20******************/P218–6100.(jnz, A, -, 0)101.(j, -, -, 102)102.(jnz, B, -, 104)103.(j, -, -, 0)104.(jnz, C, -, 103)105.(j, -, -, 106)106.(jnz, D, -, 104) --假链链首107.(j, -, -, 100) --真链链首假链:{106,104,103}真链:{107,100}P218–7100.(j<, A, C, 102)101.(j, -, -, 0)102.(j<, B, D, 104)103.(j, -, -, 101)104.(j=, A, ‘1’, 106)105.(j, -, -, 109)106.(+, C, ‘1’, T1)107.(:=, T1, -, C)108.(j, -, -,100)109.(j≤, A, D, 111)110. (j, -, -, 100)111. (+, A, ‘2’, T2)112. (:=, T2, -, A)113. (j, -, -, 109)114. (j, -, - 100)P219–12/********************(1)MAXINT – 5MAXINT – 4MAXINT – 3MAXINT – 2MAXINT – 1MAXINT(2)翻译模式办法1:for E1 := E2 to E3 do S1 do MS F S → {backpatch(S1.nextlist,nextquad);backpatch(F.truelist,M.quad);emit(F.place ‘:=’F.place ‘+’1);emit(‘j ≤,’F.place ‘,’F.end ‘,’M.quad); S.nextlist := F.falselist;}21 to :For E E I F =→{F.falselist:= makelist(nextquad); emit(‘j>,’E1.place ‘,’E2.place ‘,0’);emit(I.Place ‘:=’E1.place);F.truelist := makelist(nextquad);emit(‘j,-,-,-’);F.place := I.place;F.end := E2.place;} id I →{p:=lookup(); if p <> nil thenI.place := pelse error}ε→M {M.quad := nextquad}****************/办法2:S→ for id:=E1 to E2 do S1S→ F S1F→ for id:=E1 to E2 do21:toE E forid F =→do{INITIAL=NEWTEMP;emit(‘:=,’E1.PLACE’,-,’ INITIAL); FINAL=NEWTEMP;emit(‘:=,’E2.PLACE’,-,’ FINAL);p:= nextquad+2;emit(‘j,’ INITIAL ‘,’ FINAL ’,’ p);F.nextlist:=makelist(nextquad);emit(‘j,-,-,-’);F.place:=lookup();if F.place nil thenemit(F.place ‘:=’ INITIAL)F.quad:=nextquad;F.final:=FINAL;}{backpatch(S1.nextlist, nextquad)p:=nextquad+2;emit(‘j,’ F.place‘,’ F.final ’,’ p );S.nextlist := merge(F.nextlist, makelist(nextquad)); emit(‘j,-,-,-’);emit(‘su cc,’ F.place ’,-,’ F.place);emit(‘j,-,-,’ F.quad);}第九章P270–9(1) 传名即当进程挪用时,其作用相当于把被挪用段的进程体抄到挪用出现处,但必须将其中出现的任一形式参数都代之以相应的实在参数.A:=2;B:=3;A:=A+1;A:=A+(A+B);print A;∴A=9(2) 传地址即当程序掌握转入被挪用段后,被挪用段首先把实在参数抄进相应的形式参数的形式单元中,进程体对形参的任何引用或赋值都被处理成对形式单元的间接拜访.当被挪用段工作完毕返回时,形式单元(都是指示器)所指的实参单元就持有所希望的值.①A:=2;B:=3;T:=A+B②把T,A,A的地址抄进已知单元J1,J2,J3③x:=J1;y:=J2;z:=J3 //把实参地址抄进形式单元,且J2=J3④Y↑:=y↑+1Z↑:=z↑+x↑ // Y↑:对y的间接拜访Z↑:对z的间接拜访⑤print AA=8(3) 得成果每个形参均对应两个单元,第一个存放实参地址,第二个存放实参值,在进程体中对形参的任何引用或赋值都算作是对它的第二个单元的直接拜访,但在进程工作完毕返回前必须把第二个单元的内容放到第一个单元所指的谁人实参单元中①A:=2;B:=3;T:=A+B②把T,A,A的地址抄进已知单元J1,J2,J3③x1:=J1;x2:=T;y1:=J2;y2:=A;z1:=J3;z2:=A; //将实参的地址和值分离放进两个形式单元中④y2:=y2+1; z2:=z2+x2; //对形参第二个单元的直接拜访⑤x1↑:=x2; y1↑:=y2; z1↑:=z2 //返回前把第二个单元的内容存放到第一个单元所指的实参地址中⑥print AA=7(4) 传值即被挪用段开端工作时,首先把实参的值写进相应的形参单元中,然后就似乎使用局部变量一样使用这些形式单元 A:=2;B:=3;x:=A+By:=Az:=Ay:=y+1z:=z+xprint AA=2进程挪用不转变A 的值第十章P306-1P306-2read A,BF:=1C:=A*A 1BD:=B*Bif C<D goto 1L---------------------------E:=A*AF:=F+1E:=E+F 2B write Ehalt---------------------------1L : E:=B*BF:=F+2E:=E+F3B write Eif E>100 goto 2L ---------------------------halt4B ---------------------------2L : F:=F-1goto 1L 5B---------------------------根本块为1B 、2B 、3B 、4B 、5B P307-4B2有回路,所以{B2}是循环,B2既是入口节点,又是出口节点(1)代码外提:不存在不变运算,故无代码外提 (2)强度削弱:A:=K*I B:=J*I *→+ (3) 删除根本归纳变量:I<100 可以用A<100*K 或B<100*J代替P307-5{B2,B3}(1) (2)。
编译原理_第三版_课后答案
编译原理课后题答案第二章P36-6(1)L G ()1是0~9组成的数字串(2)最左推导:N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:N ND N ND N ND N D N ND N D N ND N ND N D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)O N O D N S O AO A AD N→→→→→1357924680|||||||||||P36-8文法:E T E T E T TF T F T F F E i→+-→→|||*|/()| 最左推导:E E T T TF T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+********()*()*()*()*()*()*()最右推导:E E T E TF E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+⇒+**********()*()*()*()*()*()*()*()语法树:/********************************EE FTE +T F F T +iiiEEFTE-T F F T -iiiEEFT+T F FTiii*i+i+ii-i-ii+i*i*****************/P36-9句子iiiei 有两个语法树:S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ⇒⇒⇒⇒⇒⇒⇒⇒P36-10/**************)(|)(|S T TTS S →→***************/P36-11/*************** L1:ε||cC C ab aAb A ACS →→→ L2:bcbBc B aA A ABS ||→→→ε L3:εε||aBb B aAb A ABS →→→ L4:AB B A A B A S |01|10|→→→ε ***************/第三章习题参考答案P64–7(1)101101(|)*确定化:0 1 最小化:{,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,012345601234513501234512460123456012341350123456012310100==== 3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}=====P64–8(1)01)0|1(*(2))5|0(|)5|0()9|8|7|6|5|4|3|2|1|0)(9|8|7|6|5|4|3|2|1(*(3)******)110|0(01|)110|0(10P64–12(a)确定化:最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123a ba b ====a(b)a b已经确定化了,进行最小化 最小化:{{,}, {,,,}}012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a baP64–14(2):(|εε最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101====第四章P81–1(1) 按照T,S 的顺序消除左递归ε|,)(||^)(T S T T S T T a S S G '→''→→'递归子程序:procedure S;beginif sym='a' or sym='^'then abvanceelse if sym='('then beginadvance;T;if sym=')' then advance;else error;endelse errorend;procedure T;beginS;'Tend;procedure 'T;beginif sym=','then beginadvance;S;'Tendend;其中:sym:是输入串指针IP所指的符号advance:是把IP调至下一个输入符号error:是出错诊察程序(2)FIRST(S)={a,^,(}FIRST(T)={a,^,(}FIRST('T)={,,ε}FOLLOW(S)={),,,#}FOLLOW(T)={)}FOLLOW('T)={)}预测分析表是LL(1)文法P81–2文法:|^||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε(1)FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεε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)文法.(4)procedure E;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' endelse errorendprocedure E';beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' endelse errorendprocedure T';beginif sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advance else error endelse errorend;P81–3/***************(1) 是,满足三个条件。
完整word版编译原理第三版课后答案
P36-6L (G 1)是0~9组成的数字串 编译 原理课后题答案第二章01DD 012D 0127N ND DD 3D34N ND NDDDDD5DD56D568最右推导:N ND N7 ND 7 N27ND 27N127N ND N4 D4 34N ND N8ND 8N68 D68 568N ND NDD NDDD D127 ⑵ 最左推导: DDDD 0DDD0127P36-7G(S) O1|3|5|7|9 2|4|6|8|O 0|N O|AOAD|N P36-8文法: T E T|E F T* F|T/ F (E)|i 最左推导: T T*i*(iT)i*(i F)i *( iT i i*( E)i) T* F i F* F i i *( E T) i*( T i* FT)i i * i i*( F T)最右推导:E E T E T*F E T*i E F*i E i*i T i *i F i*i i i*i*****************/P36-9P36-10/**************S TS|T(S)|()***************/P36-11/***************L1:ACaAb | abcC |L2:F*( E T) F*( E F) F*( E i)T F iE T F*TF * F F*(E)i+i+i i-i-ii+i*i句子iiiei 有两个语法树:•巳ABaA| bBc|bcL3:ABaAb| aBb|L4:A| B0A1|1B0| A***************/第二章习题参考答案P64 — 71(01) 101确定化:1最小化:{0,1,2,3,4,5},{6}{0,1,2,3,4耳0 {1,3待{0,1,2,3,4},{ 0},{6}{0,1,2,34} 0{1,3,5}{0,1,23,{4},{ 5U6}{0,1,23。
{1,3} {0,1,2,3}1{1,2,4}{0,1},{23{4},{ 5UQ{0,1} 0 {1}{0,1,2,3,4,f}1{1,2,4©0,1}1 {1,2}{2,3}0{3 {231{4}{0},{1},{2,3},{ 4},{ 5},{ 6}11P64 —8(1)(1|0)*01(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(0|5)|(0|5) 0 1(0|10 1) |1 0(0 |10 1)P64 - 12a b{0} {0,1} {1}{0,1} {0,1} {1}{1} {0}1 ©a b0 1 21 1 22 033 3 3最小化:{0,1},{ 2,3}{0,1} a{1}{2,3}a{0,3}{0,1},{ 2},{ 3}{0,叽{2}{2,3}b{3}(b)a b八baa a已经确定化了最小化:,进行最小化{0,1}a {1} {0,1}b {2,4}{2,3,4,5}a {1,3,0,5} {2,345}{2,4}a {1,0} {2,4}b {3,5}{3,5}a {3,5} {3,5}b {2,4}{{0,1},{ 2,4},{ 3,5}}{0,1}a {1} {0,1}b {2,4}{2,4}a {1,0} {2,4}b {3,5}{3,5}a {3,5} {3,5}b {2,4}b b a{{0,1}, {2,3,4,5}}bb {2,345}a(0|10)* ◎10 1{X,1,Y} {1,Y} {2}{1,Y} {1,Y} {2}{2} {1,Y}0 10 1 21 1 22 133 3 3最小化:{0,1},{2,3}{O,1}o {1}{2,3}0 {1,3}{0,1},{2},{3}P81 — 1(1)按照T,S的顺序消除左递归(S) aF |仃)ST,ST |递归子程序:{0,1}i {2}{2,3}i {3}GSTTp roeedure S;beginif sym='a' or sym='^'the n abva nee else if sym='(' the n begi nadvance;T;if sym=')' the n adva nee; else error;endelse erroren d;p roeedure T;beginS;Ten d;proeedure T ;beginif sym=','the n begi n advanee;S;Tenden d;其中:sym:是输入串指针IP所指的符号advanee:是把IP调至下一个输入符号error:是出错诊察程序⑵FIRST(S)={a,A,(}FIRST(T)={a,A,(}FIRST(T )={,, }FOLLOW(S)={),,,#}FOLLOW(T)={)}FOLLOW T )={)}预测分析表LL(1)P 81 - 2文法:TE E | FT T | PF *F | (E)|a|bF(1)FIRST(E)={(,a,b,A} FIRST(E')={+, £ }FIRST(T)={(,a,b,A} FIRST(T')={(,a,b,A,£ } FIRST(F)={(,a,b,A} FIRST(F')={*,£ }FIRST( P)={(,a,b,A} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#} FOLLOW(F)={(,a,b,A,+,),#} FOLLOW(F')={(,a,b,A,+,),#} FOLLOW( P)={*,(,a,b,A,+,),#} ⑵考虑下列产生式:E| T| *F | (E)F|a|bFIRST(+E) n FIRST( £ )={+} n { £ }= $ FIRST(+E) n FOLLOW(E')={+} n {#,)}=$FIRST(T) n FIRST( £ )={(,a,b,^} n { £ }= $ FIRST(T) n FOLLOW(T')={(,a,b,A} n {+,),#}= $n FIRST( £ )={*} n { £ }= $ n FOLLOW(F')={*} n {(,a,b,A,+,),#}= $n FIRST(a) n FIRST(b) n FIRST(^)= $所以,该文法式LL(1)文法.⑷p rocedure E; beginif sym='(' or sym='a' or sym='b' or sym='^' the n beg in T; E' end else errorendp rocedure E'; beginif sym='+'FIRST(*F') FIRST(*F') FIRST((E))the n beg in adva nee; E endelse if sym<>')' and sym<>'#' the n error endp rocedure T;beginif sym='(' or sym='a' or sym='b' or sym='^' the n beg in F; T' end else error end p rocedure T';beginif sym='(' or sym='a' or sym='b' or sym='^' the n Telse if sym='*' the n errorendp rocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^' the n beg in P; F' end else error end p rocedure F';beginif sym='*'the n beg in adva nee; F' end end p rocedure P;beginif sym='a' or sym='b' or sym='^' the n adva neeelse if sym='(' the nbeginadvanee; E;if sym=')' the n adva neeelse errorend else errorend;P 81 - 3/*************** 是,满足三个条件。
编译原理第三版课后答案
编译 原理 课后题答案第二章P36-6(1)L ( G 1 )是0~9 构成的数字串(2)最左推导 :N ND NDD NDDD DDDD0DDD01DD012D 0127N ND DD 3D34NNDNDDDDD5DD56D568最右推导 :N ND N 7 ND 7 N 27 ND 27N 127D1270127NND N 4 D 4 34N NDN 8ND 8N 68D68 568P36-7G(S)O 1|3|5|7|9N 2|4|6|8|O D0|NS O| AO A AD | NP36-8文法:E T| E T|E TT F |T * F |T / F F ( E)|i最左推导 :E E T T TF Ti Ti T * Fi F * F i i * F i i * i ETT * F F * F i * F i *( E ) i *( ET)i *( T T )i *( FT )i *( i T )i *( i F )i *( ii )最右推导 :E E T E T *F E T * i E F * i E i * i T i * i F i * i i i * iE TF * T F * F F *( E) F *( E T) F *( E F ) F *( E i )F *( T i ) F *( F i ) F *( i i ) i *( i i )语法树: /********************************EE+TE+T FT F iF iii+i+i*****************/P36-9句子 iiiei有两个语法树:S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiieiE EE+T E-T T T*FE-T F F F iT F i i iF iii-i-i i+i*iP36-10/**************S TS | T T( S) | ( )***************/P36-11/*************** L1:S ACA aAb | ab C cC |L2:S ABA aA |B bBc | bcL3:S ABA aAb | BaBb |L4:S A | BA0 A1|B 1B0 | A***************/第三章习题参照答案P64–7(1)1(01|) * 101X Y1101X12345Y1确立化:01 {X}φ{1,2,3}φφφ{1,2,3}{2,3}{2,3,4}{2,3}{2,3}{2,3,4}{2,3,4}{2,3,5}{2,3,4}{2,3,5}{2,3}{2,3,4,Y}{2,3,4,Y}{2,3,5}{2,3,4,}10230011010145111最小化:{ 0,1,2,3,4,5},{ 6}{ 0,1,2,3,4,5} 0{1,3,5}{ 0,1,2,3,4,5} 1{1,2,4,6} { 0,1,2,3,4},{ 5},{ 6}{ 0,1,2,3,4} 0{1,3,5}{ 0,1,2,3},{ 4},{ 5},{ 6}{ 0,1,2,3} 0{1,3}{0,1,2,3} 1{12,,4}{ 0,1},{2,3}{ 4},{ 5},{6}{ 0,1} 0{1}{ 0,1} 1{1,2}{ 2,3} 0{ 3}{ 2,3} 1{4}{ 0},{ 1},{ 2,3},{ 4},{ 5},{ 6}1020010011341116 5P64–8(1)(1 | 0)* 01(2)(1 | 2 | 3| 4 | 5 | 6 | 7 | 8 | 9)(0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)* (0 | 5) | (0 | 5) (3)0*1( 0 | 10* 1) * |1* 0( 0 |10* 1) *P64–12(a)aa,b01a确立化:a b{0}{0,1}{1}{0,1}{0,1}{1}{1}{0}φφφφ给状态编号:a b012112203333 aa01a b b bb23a最小化:{ 0,1},{2,3}{ 0,1} a{1}{0,1} b{ 2}{ 2,3} a{ 0,3}{ 2,3} b{ 3}{ 0,1},{2},{3}a ab b012ab(b)b b a023a baa bb1a5a a4已经确立化了 ,进行最小化最小化:{{ , }, {,,,}}0 1 2 3 4 5{ 0,1} a{1}{ 0,1} b{ 2,4}{ 2, 3,4,5} a{ 1, 3, 0, 5}{ 2,3,4,5} b{ 2,3,4,5} { 2, 4} a{ 1, 0}{2,4} b{ 3,5}{ 3, 5} a{ 3,5}{ 3,5} b{ 2, 4}{{ 0,1},{ 2, 4},{ 3,5}}{ 0,1} a{1}{ 0,1} b{ 2,4}{ 2, 4} a{ 1, 0}{2,4} b{ 3,5}{ 3, 5} a{ 3,5}{ 3,5} b{ 2, 4}b b a012a baP64–14(1)0101(2):X( 010|)*Y21X1Y确立化:01 {X,1,Y}{1,Y}{2}{1,Y}{1,Y}{2}{2}{1,Y}φφφφ给状态编号:01 01211221333311011123最小化:{ 0,1},{ 2, 3}{ 0,1} 0{1}{ 0,1} 1{2}{ 2,3} 0{1,3}{ 2,3} 1{3}{ 0,1},{ 2},{ 3}111013第四章P81–1(1)依据 T,S 的次序除去左递归G (S)S a |^| (T )T STT, ST |递归子程序:procedure S;beginif sym='a' or sym='^'then abvanceelse if sym='('then beginadvance;T;if sym=')' then advance;else error;endelse errorend;procedure T;beginS; Tend;procedure T ;beginif sym=','then beginadvance;S; Tendend;此中 :sym: 是输入串指针IP 所指的符号advance: 是把 IP 调至下一个输入符号error:是犯错诊察程序(2)FIRST(S)={a,^,(}FIRST(T)={a,^,(}FIRST( T )={,,}FOLLOW(S)={),,,#}FOLLOW(T)={)}FOLLOW(T )={)}展望剖析表a^(),# S S a S ^S (T)T T ST T ST T STT T T, ST是LL(1) 文法P81–2文法:E TEE E |T FTT T |FPFF* F |P( E) | a | b |^(1)FIRST(E)={(,a,b,^}FIRST(E')={+,ε }FIRST(T)={(,a,b,^}FIRST(T')={(,a,b,^,ε }FIRST(F)={(,a,b,^}FIRST(F')={*,ε }FIRST(P)={(,a,b,^}FOLLOW(E)={#,)}FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#}FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#}(2)考虑以下产生式:E E|T T|F* F |P( E )|^| a|bFIRST(+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) 文法 .φφ(3)+*()a b^#E E TE 'E TE ' E TE ' E TE 'E'E E E E T T FT T FT T FT T FTT' FF' P T T T T T T T T T T TF PF F PF F PF F PFF F* F F F F F F FP( E )P a P b P^(4)procedure E;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' endelse errorendprocedure E';beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' endelse errorendprocedure T';beginif sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advanceelse errorendelse errorend;P81–3/***************(1)是,知足三个条件。
编译原理第三版课后习题答案
目录P36-6 .................................................. 错误!未定义书签。
P36-7 .................................................. 错误!未定义书签。
P36-8 .................................................. 错误!未定义书签。
P36-9 .................................................. 错误!未定义书签。
P36-10 ................................................. 错误!未定义书签。
P36-11 ................................................. 错误!未定义书签。
P64–7 ................................................. 错误!未定义书签。
P64–8 ................................................. 错误!未定义书签。
P64–12 ................................................ 错误!未定义书签。
P64–14 ................................................ 错误!未定义书签。
P81–1 ................................................. 错误!未定义书签。
P81–2 ................................................. 错误!未定义书签。
P81–3 ................................................. 错误!未定义书签。
编译原理课后答案(陈火旺)
第二章P36-6(1)L G ()1是0~9组成的数字串(2)最左推导:N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:N ND N ND N ND N D N ND N D N ND N ND N D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)O N O D N S O AO A AD N→→→→→1357924680|||||||||||P36-8文法:E T E T E T TF T F T F F E i→+-→→|||*|/()| 最左推导:E E T T TF T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+********()*()*()*()*()*()*()最右推导:E E T E TF E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+⇒+**********()*()*()*()*()*()*()*()语法树:/********************************EE FTE +T F F T +iiiEEFTE-T F F T -iiiE EFT+T F FTiii*i+i+ii-i-ii+i*i*****************/P36-9句子iiiei 有两个语法树:S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ⇒⇒⇒⇒⇒⇒⇒⇒P36-10/**************)(|)(|S T TTS S →→***************/P36-11/*************** L1:ε||cC C ab aAb A ACS →→→ L2:bcbBc B aA A ABS ||→→→ε L3:εε||aBb B aAb A ABS →→→ L4:AB B A A B A S |01|10|→→→ε ***************/第三章习题参考答案P64–7(1)101101(|)*1 ε ε 1 0 1 1确定化:0 1 {X} φ {1,2,3} φ φ φ {1,2,3} {2,3} {2,3,4} {2,3} {2,3} {2,3,4} {2,3,4} {2,3,5} {2,3,4}{2,3,5} {2,3} {2,3,4,Y} {2,3,4,Y}{2,3,5}{2,3,4,}1 00 0 1 1 00 1 0 1 1 1 最小化:X 1 2 3 4 Y5 XY60 12 35 4{,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,01234560123451350123451246012345601234135012345601231010==== 3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}===== 0 10 0 1 00 1 0 1 1 1P64–8(1)01)0|1(*(2))5|0(|)5|0()9|8|7|6|5|4|3|2|1|0)(9|8|7|6|5|4|3|2|1(*(3)******)110|0(01|)110|0(10P64–12(a)aa,b a 确定化:a b {0} {0,1} {1} {0,1} {0,1} {1} {1} {0} φ φφφ给状态编号:a b 0125 01 2 4 3 011 12 2 03 333aaa b b bba 最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123a ba b ====a ab bab (b)b b aa baa bb aa a 已经确定化了,进行最小化 最小化:{{,}, {,,,}}012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a b0 1 2 3 01 2 0 2 3 14 5b b aa b aP64–14(1) 01 0 (2):(|)*0100 1 ε ε0 确定化:0 1 {X,1,Y} {1,Y} {2} {1,Y} {1,Y} {2} {2} {1,Y} φ φφφ 给状态编号:0 1 0 1 2 1 1 2 2 1 3 33 30 1 01 1 10 最小化:0 1 2 01YX YX2 1 0 2 13{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101====1 1 1 0第四章P81–1(1) 按照T,S 的顺序消除左递归ε|,)(||^)(T S T T S T T a S S G '→''→→'递归子程序: procedure S; beginif sym='a' or sym='^' then abvance else if sym='(' then begin advance;T;if sym=')' then advance; else error; end else error end;procedure T; begin S;'T end;procedure 'T ; beginif sym=',' then begin advance; S;'T end1 3其中:sym:是输入串指针IP 所指的符号 advance:是把IP 调至下一个输入符号 error:是出错诊察程序 (2)FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T )={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T )={)} 预测分析表a^() , # S S a →S →^S T →()TT ST →' T ST →' T ST →''T'→T ε '→'T ST ,是LL(1)文法P81–2文法:|^||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε(1)FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#}考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεε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)文法. (3)+ * ( ) a b ^ # EE TE →'E TE →' E TE →' E TE →'E' '→+E E'→E ε'→E εTT F T →' T F T →' T F T →' T F T →'T' '→T ε '→T T '→T ε '→T T '→T T '→T T '→T εF F P F →' F P F →' F P F →' F P F →'F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F εPP E →() P a → P b → P →^(4)procedure E; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error endprocedure E'; beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' end else error endprocedure T';if sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then errorendprocedure F;beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' endelse errorendprocedure F';beginif sym='*'then begin advance; F' endendprocedure P;beginif sym='a' or sym='b' or sym='^'then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advanceelse errorendelse errorend;P81–3/***************(1)是,满足三个条件。
《编译原理》(陈火旺版)课后作业参考问题详解ch6-10
第6章 属性文法和语法制导翻译7. 下列文法由开始符号S 产生一个二进制数,令综合属性v al 给出该数的值:试设计求S.val 的属性文法,其中,已知B 的综合属性c, 给出由B 产生的二进位的结果值。
例如,输入101.101时,S.val=5.625,其中第一个二进位的值是4,最后一个二进位的值是0.125。
【答案】11. 设下列文法生成变量的类型说明:(1)构造一下翻译模式,把每个标识符的类型存入符号表;参考例6.2。
【答案】第7章 语义分析和中间代码产生1. 给出下面表达式的逆波兰表示(后缀式):3. 请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。
【答案】间接码表:(1)→(2)→(3)→(4)→(1)→(5)→(6)4. 按7.3节所说的办法,写出下面赋值句A:=B*(-C+D ) 的自下而上语法制导翻译过程。
给出所产生的三地址代码。
【答案】5. 按照7.3.2节所给的翻译模式,把下列赋值句翻译为三地址代码: A[i, j]:=B [i, j] + C[A [k, l]] + d [ i+j] 【答案】6. 按7.4.1和7.4.2节的翻译办法,分别写出布尔式A or ( B and not (C or D) )的四元式序列。
【答案】用作数值计算时产生的四元式: 用作条件控制时产生的四元式:其中:右图中(1)和(8)为真出口,(4)(5)(7)为假出口。
7. 用7.5.1节的办法,把下面的语句翻译成四元式序列: While A<C and B<D do if A=1 then C:=C+1else while A ≦D do A:=A+2; 【答案】第9章 运行时存储空间组织4. 下面是一个Pascal 程序:当第二次( 递归地) 进入F 后,DISPLAY 的容是什么?当时整个运行栈的容是什么? 【答案】第1次进入F 后,运行栈的容: 第2次进入F 后,运行栈的容:第2次进入F 后,Display 容为:5. 对如下的Pascal 程序,画出程序执行到(1)和(2)点时的运行栈。
编译原理(陈火旺第三版)练习答案
P-36-9 句子:iiiei 有两个语法树: S⇒iSeS⇒iSei⇒iiSei⇒iiiei S⇒iS⇒iiSeS⇒iiSei⇒iiiei 因此 iiiei 是二义性句子,因此 该文法是二义性的。 i i S
S e S i i S i i
S S S i e S i
P-36-10 S→TS|T T→(S)|() P-36-11 L1: G(S): S→AC A→aAb|ab C→cC|ε L2: G(S): S→AB A→aA|ε B→bBc|bc L3: G(S): S→AB A→aAb|ε B→aAb|ε L4: G(S): S→1S0|A A→0A1|ε 或者:S→A|B A→0A1|ε B→1B0|A
a {0} {0,1} {1} Φ
给状态编号:
b {1} {1} Φ Φ
{0,1} {0,1} {0} Φ
a 0 1 2 3 1 1 0 3
B 2 2 3 3
4
本文档由计算机吧【www.jsj8.com】搜集,版权归原作者,不得用于商业活动! 更多计算机考研资料请大家到:www.jsj8.com下载!
1
本文档由计算机吧【www.jsj8.com】搜集,版权归原作者,不得用于商业活动! 更多计算机考研资料请大家到:www.jsj8.com下载!
语法树: E E T E E
E
+
E
+
T
-
T
E
+
T
F i
T F i
T
*
F
E
-
T
F i
T F i i+i+i
F i
F i
i
T F i
F i
i+i*i
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章P36-6(1)L G ()1是0~9组成的数字串(2)最左推导:N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:N ND N ND N ND N D N ND N D N ND N ND N D ⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)O N O D N S O AO A AD N→→→→→1357924680|||||||||||P36-8文法:E T E T E T TF T F T F F E i→+-→→|||*|/()| 最左推导:E E T T TF T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+********()*()*()*()*()*()*()最右推导:E E T E TF E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒+⇒⇒⇒⇒⇒+⇒+⇒+⇒+⇒+⇒+⇒+**********()*()*()*()*()*()*()*()语法树:/********************************EE FTE +T F F T +iiiEEFTE-T F F T -iiiE EFT+T F FTiii*i+i+ii-i-ii+i*i*****************/P36-9句子iiiei 有两个语法树:S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ⇒⇒⇒⇒⇒⇒⇒⇒P36-10/**************)(|)(|S T TTS S →→***************/P36-11/*************** L1:ε||cC C ab aAb A ACS →→→ L2:bcbBc B aA A AB S ||→→→εL3:εε||aBb B aAb A ABS →→→ L4:AB B A A B A S |01|10|→→→ε ***************/第三章习题参考答案P64–7(1)101101(|)*1 ε ε 1 0 11 确定化:0 1 {X} φ {1,2,3} φ φ φ {1,2,3} {2,3} {2,3,4} {2,3} {2,3} {2,3,4} {2,3,4} {2,3,5} {2,3,4}{2,3,5} {2,3} {2,3,4,Y} {2,3,4,Y}{2,3,5}{2,3,4,}1 00 0 1 1 00 1 0 1 1 1 最小化:X 1 2 3 4 Y5 XY60 12 35 4{,,,,,},{}{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}{,,,},{},{},{}{,,,}{,012345601234513501234512460123456012341350123456012310100==== 3012312401234560110112233234012345610101}{,,,}{,,}{,},{,}{},{},{}{,}{}{,}{,}{,}{}{,}{}{},{},{,},{},{},{}===== 010 0 1 00 1 0 1 1 1P64–8(1)01)0|1(*(2))5|0(|)5|0()9|8|7|6|5|4|3|2|1|0)(9|8|7|6|5|4|3|2|1(*(3)******)110|0(01|)110|0(10P64–12(a)aa,b a确定化:a b {0} {0,1} {1} {0,1} {0,1} {1} {1}{0}φ5 01 2 4 3 01φφφ给状态编号:a b 0 1 2 1 1 2 2 0 3 333aaa b b bba最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}012301101223032330123a ba b ====a ab bab (b)b b aa baa bb aa a已经确定化了,进行最小化0 1 2 3 01 2 0 2 3 14 5最小化:{{,}, {,,,}}012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a bb b aa baP64–14(1) 01 0 (2):(|)*0100 1 ε ε确定化:0 1 {X,1,Y}{1,Y}{2}0 1 2 01YX YX2 1{1,Y} {1,Y} {2} {2} {1,Y} φ φφφ给状态编号:0 1 0 1 2 1 1 2 2 1 3 3330 1 01 1 10 最小化:{,},{,}{,}{}{,}{}{,}{,}{,}{}{,},{},{}0123011012231323301230101====1 1 1 0第四章P81–1(1) 按照T,S 的顺序消除左递归ε|,)(||^)(T S T T S T T a S S G '→''→→' 递归子程序:procedure S; beginif sym='a' or sym='^' then abvance else if sym='('0 2 13 01 3then begin advance;T;if sym=')' then advance; else error; end else error end;procedure T; begin S;'T end;procedure 'T ; beginif sym=',' then begin advance; S;'T end end; 其中:sym:是输入串指针IP 所指的符号 advance:是把IP 调至下一个输入符号 error:是出错诊察程序 (2)FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T )={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T )={)} 预测分析表a^() , # S S a → S →^S T →() TT ST →' T ST →' T ST →''T'→T ε '→'T ST ,是LL(1)文法P81–2文法:|^||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε(1)FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεε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)文法. (3)+ * () a b ^ # EE TE →'E TE →' E TE →' E TE →'E' '→+E E'→E ε'→E εTT FT →'T FT →' T FT →' T FT →'T''→T ε'→T T '→T ε '→T T '→T T '→T T '→T εFF PF →' F PF →' F PF →' F PF →'F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F εPP E →() P a → P b → P →^(4)procedure E; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error endprocedure E'; beginif sym='+'then begin advance; E endelse if sym<>')' and sym<>'#' then error endprocedure T; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' end else error endprocedure T'; beginif sym='(' or sym='a' or sym='b' or sym='^' then Telse if sym='*' then error endprocedure F; beginif sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' end else error endprocedure F'; beginif sym='*'then begin advance; F' end endprocedure P; beginif sym='a' or sym='b' or sym='^' then advanceelse if sym='(' thenbeginadvance; E;if sym=')' then advance else error endelse errorend;P81–3/***************(1) 是,满足三个条件。