编译原理 语法树,如图为什么这个语法树中,a为句柄?

&>&&>&编译原理及实践教程(黄贤英王柯柯编著)习题***
编译原理及实践教程(黄贤英王柯柯编著)习题*** 投稿:段怃怄
第2章参考***:1,2,3:解答:略! 4. 解答:A:① B:③ C:① D:② 5. 解答: 用E表示,T表示,F表示,上述文法可以写为:E → T | E+T T → F | T*F F → (E) | i 最左推导:E…
第二章P36-6(1)L(G1)是0~9组成的数字串(2)最左推导:N=>ND=>NDD=>NDDD=>DDDD=>0DDD=>01DD=>012D=>0127N=>ND=>DD=>3D=>34N=>ND=>NDD=>DDD=>5DD=>56D=>568最右推导:N=>ND=>N7=>ND7…
0p习题11-1 说明解释程序和编译程序的区别。答:通常,翻译程序可分为解释程序、汇编程序和编译程序。所谓解释程序是一种将源程序按动态顺序逐句进行分析解释编译,边解释边执行、不产生目标程序的一种翻译程序。这种翻译程序结构简单、占用内存较少,易于在执行…
第2章参考***:
1,2,3:解答:略! 4. 解答:
用E表示,T表示,F表示,上述文法可以写为:
E → T | E+T
T → F | T*F
F → (E) | i 最左推导:
E=>E+T=>E+T+T=>T+T+T=>F+T+T=>i+T+T=>i+F+T=>i+i+T =>i+i+F=>i+i+i
E=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>i+i*i 最右推导:
E=>E+T=>E+F=>E+i=>E+T+i=>E+F+i=>E+i+i=>T+i+i =>F+i+i=>i+i+i
E=>E+T=>E+T*F=>E+T*i=>E+F*i=>E+i*i=>T+i*i=>F+i*i =>i+i*i i+i+i和i+i*i的语法树如下图所示。
i+i+i、i+i*i的语法树
(1) 终结符号为:{or,and,not,(,),true,false}
非终结符号为:{bexpr,bterm,bfactor} 开始符号为:bexpr
(2) 句子not(true or false)的语法树为:
(1) 把anbnci分成anbn和ci两部分,分别由两个非终结符号生成,因此,生成此文法的产生式为:
S → AB A → aAb|ab B → cB|?
(2) 令S为开始符号,产生的w中a的个数恰好比b多一个,令E为一个非终结符号,产生含相同个数的a和b的所有串,则产生式如下:
S → aE|Ea|bSS|SbS|SSb E → aEbE|bEaE|?
(3) 设文法开始符号为S,产生的w中满足|a|≤|b|≤2|a|。因此,可想到S有如下的产生式 (其中B产生1到2个b):
S → aSBS|BSaS B → b|bb (4) 解法一:
S →〈奇数头〉〈整数〉〈奇数尾〉
|〈奇数头〉〈奇数尾〉
|〈奇数尾〉
〈奇数尾〉→ 1|3|5|7|9
〈奇数头〉→ 2|4|6|8|〈奇数尾〉
〈整数〉→ 〈整数〉〈数字〉|〈数字〉
〈数字〉→ 0|〈奇数头〉
解法二:文法G=({S,A,B,C,D},{0,1,2,3,4,5,6,7,8,9},P,S)
S→AB | B A→AC | D B→1|3|5|7|9 D→2|4|6|8|B C→0|D
(5) 文法G=({N,S,N,M,D},{0,1,2,3,4,5,6,7,8,9 },S,P)
S→N0 | N5
M→1|2|3|4|5|6|7|8|9
D→D0 | DM |?
(6) G[S]:S→aSa | bSb | cSc | a | b | c |? 8. 解答:
(1) 句子abab有如下两个不同的最左推导:
S => aSbS => abS =>abaSbS => ababS => abab
S => aSbS => abSaSbS => abaSbS => ababS => abab
所以此文法是二义性的。
(2) 句子abab的两个相应的最右推导:
S => aSbS => aSbaSbS => aSbaSb => aSbab => abab
S => aSbS => aSb => abSaSb => abSab => abab (3) 句子abab的两棵分析树:
(4) 此文法产生的语言是:在{a,b}上由相同个数的a和b组成的字符串。 9,10:解答:略!
第3章习题解答:
(6) √ 2. [分析]
有限自动机分为确定有限自动机和非确定有限自动机。确定有限自动机的确定性表现在映射?:Q×VT -->q是单值函数,也就是说,对任何状态 q∈Q和输入字符串a∈VT,? (q,a)唯一确定下一个状态。显然,本题给出的是一个确定的有限自动机,它的状态转换图是C中的②。
它所接受的语言可以用正则表达式表示为00(0|1),表示的含义为由两个0开始的后跟任意个(包含0个)0或1组成的符号串的集合。
2. 解答:A:④
E: ④ 3,4.解答:略! 5.解答:
(1) (0|1)*01
(2) ((1|2|…|9)(0|1|2|…|9)*| ?)(0|5) (3) (0|1)*(011)(0|1)*
(4) 1*|1*0(0|10)*(1|?)
(5) a*b*c*…z* (6) (0|10*1)*1
(7) (00|11)*((01|10)(00|11)*(01|10)(00|11)*)* (8) [分析]
设S是符合要求的串,|S|=2k+1 (k≥0)。 则 S→S10|S21,|S1|=2k (k>0),|S2|=2k (k≥0)。 且S1是{0,1}上的串,含有奇数个0和奇数个1。
S2是{0,1}上的串,含有偶数个0和偶数个1。 考虑有一个自动机M1接受S1,那么自动机M1如下:
和L(M1)等价的正规式,即S1为:
((00|11)|(01|10)(00|11)*(01|10))(01|10)(00|11)
类似的考虑有一个自动机M2接受S2,那么自动机M2如下:
和L(M2)等价的正规式,即S2为:
((00|11)|(01|10)(00|11)(01|10))因此,S为:
((00|11)|(01|10)(00|11)(01|10))(01|10)(00|11)0|
((00|11)|(01|10)(00|11)(01|10))1
(1) 以0开头并且以0结尾的,由0和1组成的符号串。 (2) {?|?∈{0,1}*}
(3) 由0和1组成的符号串,且从右边开始数第3位为0。
(4) 含3个1的由0和1组成的符号串。{?|?∈{0,1}+,且?中含有3个1 } (5) 包含偶数个0和1的二进制串,即{?|?∈{0,1}*,且?中有偶数个0和1}
(1) DFA M=({0,1},{q0,q1,q2},q0,{q2},?)
其中?定义如下:
? (q0,0)=q1
? (q0,1)=q0 ? (q1,0)=q2
? (q1,1)=q0 ? (q2,0)=q2
? (q2,1)=q0
状态转换图为:
(2) 正规式: 1010101
DFA M=({0,1},{q0,q1,q2,q3},q0,{q3},?),其中?定义如下:
? (q0,0)=q1
? (q0,1)=q0 ? (q1,0)=q2
? (q1,1)=q1 ? (q2,0)=q3
? (q2,1)=q2 ? (q3,1)=q3
状态转换图为:
10. 解答:
DFA M=({0,1},{q0,q1,q2,q3},q0,{q3},?),其中?定义如下:
? (q0,0)=q1
? (q0,1)=q2 ? (q1,0)=q1
? (q1,1)=q3 ? (q2,0)=q3
? (q2,1)=q1
状态转换图为:
(2) DFA M=({0,1},{q0},q0,{q0},?),其中?定义如下:
? (q0,0)=q0
? (q0,1)=q0
状态转换图为:
11 解答: (1) (a|b)*a(a|b)
②确定化,得到
③化简: 在第②步中求出的DFA M中没有等价状态,因此它就是最小化的DFA M。 (2) (a)b)*a(a|b)(a|b) ① 求NFA M:
② 确定化,得到DFA M:
③化简,在第②步中求出的DFA M中没有等价状态,因此它已经是最小化的DFA M了。 12.解答:
对应的NFA为:
增加状态X、Y,再确定化:
最小化:该自动机已经是最小化的DFA了。 13.解答:
其中a代表1元硬币,b代表5角硬币
14.解答:
正规式为:(0|1)*(00|01) 化简:(0|1)*0(0|1) 不确定的有穷自动机为:
确定化,并最小化得到:
正规文法为:
S→1S | 0A
A→0B | 0 | 1C | 1 B→0B | 0 | 1C | 1 C→1S | 0A
15.解答: ① 正规式:(dd*:| ?)dd*(.dd*| ?),d代表a~z的字母
② NFA为:
③ DFA为:
词法分析器对源程序采取非常局部的观点,因此象C语言的语句
fi (a == f (x) ) …
中,词法分析器把fi当作一个普通的标识符交给编译的后续阶段,而不会把它看成是关键字if的拼写错。
PASCAL语言要求作为实型常量的小数点后面必须有数字,如果程序中出现小数点后面没有数字情况,它由词法分析器报错。 17. 解答:
此时编译器认为
/* then part
/* else part */
是程序的注释,因此它不可能再发现else 前面的语法错误。
分析 这是注释用配对括号表示时的一个问题。注释是在词法分析时忽略的,而词法分析器对程序采取非常局部的观点。当进入第一个注释后,词法分析器忽略输入符号,一直到出现注释的右括号为止,由于第一个注释缺少右括号,所以词法分析器在读到第二个注释的右括号时,才认为第一个注释处理结束。
为克服这个问题,后来的语言一般都不用配对括号来表示注释。例如Ada语言的注释
始于双连字符(--),随行的结束而终止。如果用Ada语言的注释格式,那么上面函数应写成
long gcd(p,q) long p,q; {
if (p%q == 0)
-- else part
return gcd(q, p%q);
18. 解答:略!
第4章习题解答:
1,2,3,4 解答
略! 5. 解答:
(5)√ (6)√ (7)× (8)× 6. 解答:
E:② (2)A:④
E:② 7.解答:
(1) 消除给定文法中的左递归,并提取公因子:
bexpr→bterm {or bterm } bterm→bfactor {and bfactor}
bfactor→not bfactor | (bexpr) | true |false
(2) 用类C语言写出其递归分析程序:
void bexpr(); {
WHILE(lookahead =='or') {
match ('or');
void bterm(); {
bfactor();
WHILE(lookahead =='and'){
match ('and');
bfactor();
void bfactor(); {
if (llokahead=='not') then {
match ('not');
bfactor();
else if(lookahead=='(') then {
match (‘(');
match(')');
else if(lookahead =='true')
match ('true)
else if (lookahead=='false')
then match ('false'); }
消除所给文法的左递归,得G':
L'→ ,SL' |?
实现预测分析器的不含递归调用的一种有效方法是使用一张分析表和一个栈进行联合控制,下面构造预测分析表:
根据文法G'有:
First(S) = { ( , a ) Follow(S) = { ) , , , #} First(L) = { ( , a ) Follow(L) = { ) } First(L') = { ,} Follow(L') = { ) } 按以上结果,构造预测分析表M如下:
文法G'是LL(1)的,因为它的LL(1)分析表不含多重定义入口。
各非终结符的First集:
First(S)={First(A)\{?}}∪{First(B)\{?}}∪{?}∪{b}={a,b, ?} First(A)={b}∪{?}={b,?} First(B)={?}∪{a}={a,?}
First(C)={First(A) \{?}}∪First(D)∪First(b) ={a,b,c} First(D)={a}∪{c}={a,c} 各个候选式的First集为:
First(AB)={a,b, ?}
First(bC)={b} First(?)={?}
First(b)={b} First(aD)={a}
First(AD)={a,b,c} First(b)={b}
First(aS)={a} First(c)={c}
各非终结符的Follow集的计算:
Follow(S)={#}∪Follow(D) ={#}
Follow(A)=(First(B)\{?})∪Follow(S)∪First(D) ={a,#,c} Follow(B)=Follow(S) ={#} Follow(C)=Follow(S) ={#}
Follow(D)=Follow(B)∪Follow(C) ={#}
10.解答:
(1) 求First和Follow集
First(E)=First(T)={(,a,b,∧}
First(E')={+, ?}
⑥ First(T)=First(F)={(,a,b, ∧}
④ First(T')={(,a,b, ∧, ?}
First(F)=First(P)={(,a,b, ∧}
③ First(F')={*,?}
② First(P)={(,a,b, ∧}
①(计算顺序)
Follow(E)= {#, ) }
Follow(E')= Follow(E)={#,)}
(1)(使用的产生式) Follow(T) = First(E')\{?}∪Follow(T')
= {+}∪{),#}={+,),#}
Follow(T')= Follow(T)={+,},#}
(3) Follow(F)= First(T')\{?}∪Follow(T)
= {(,a,b,∧,+ ,),#}
Follow(F')= Follow(F)
= {(,a,b,∧,+ ,),#} Follow(P)= First(F')\{?}∪Follow(F)
={*,(,a,b,∧,+ ,),#}
∵a. 文法不含左递归;
b. 每个非终结符的各个侯选式的First集不相交; c. First(E')∩Follow(E')={+, ?}∩{#,),}=? First(T')∩Follow(T')={(,a,b,∧, ?}∩{+,)}=? First(F')∩Follow(F')={*, ?}∩{,a,( ∧,+,},#}= ?
∴改造后的文法满足LL(1)文法的三个条件,是LL(1)文法。 (3)
11. 解答:
a. 文法不含左递归;
b. S,A,B各候选式的First集不相交;
c. First(A)∩Follow(A)={a,?}∩{b}=?
First(B)∩Follow(B)={b,?}∩?=?
∴该文法为LL(1)文法。
a. 文法不含左递归;
b. S,A,B各候选式的First集不相交;
c. First(A)∩Follow(A)={a,b, ?}∩{b}={b }≠?
∴ 该文法不是LL(1)文法。
12. 解答:
① 最右推导:
E=>T=>F=>(E)=>(E+T)=>(E+F)=>(E+i)=> (T+i)=>(T*F+i) 语法树:
句型(T*F+i)的语法树
② 短语:(T*F+i),T*F+i,T*F,i
素短语:T*F,i
最左素短语:T*F ③ 由于E =>E+T =>E+T*F,故E+T*F为该文法的句型
短语:T*F、E+T*F
直接短语:
13. 解答: 最左推导:
S=> (T) => (T,S) => (S,S) => (a,S) => (a,(T)) => (a,(T,S))
=> (a,(S,S)) => (a,(a,S)) => (a,(a,a)) 最右推导:
S=> (T) => (T,S) => (T,(T)) => (T,(T,S)) => (T,(T,a))
=> (T,(T,a)) => (T,(a,a)) => (S,(a,a)) => (a,(a,a)) 文法中S和T的FirstVT和LastVT集为:
FirstVT(S)={a,(}
FirstVT(T)={,,a, (}
lastVT(S)={a, )}
lastVT(T)={,,a,)}
文法G[S]的算符优先关系表:
根据优先关系表,对每个终结符或#建立符号f与g,把f(和g)分成一组。根据G[S]的算符优先关系表,画出如下的有向图。
优先函数如下:
用算符优先分析法分析句子(a,(a,a))。
给定的输入符号串是文法的一个句子。
14. 解答:
(1) 该文法的拓广文法G'为
0.S' → S
1.S → aSAB 2.S → BA
3.A → aA 4.A → B
其LR(0)项目集规范族和识别活前缀的DFA如下:
I0 = {S'→?S, S→?aSAB, S→?BA, B→?b} I1 = {S'→S?} I2 = {B→b?}
I3 = {S→a?SAB, S→?aSAB, S→?BA, B→?b} I4 = {S→B?A, A→?aA, A→?B, B→?b} I5 = {S→aS?AB, A→?aA, A→?B, B→?b} I6 = {S→aSA?B, B→?b}
I7 = {A→a?A, A→?aA, A→?B, B→?b} I8 = {A→B?} I9 = {S→BA?} I10 = {S→aSAB?} I11 = {A→aA?}
显然,上述状态中没有出现冲突。显然,该文法是LR(0)的文法,因此也是SLR(1)的。
求各个非终结符的Follow集,以便构造分析表:
Follow(S')={#}
Follow(S)={a,b,#}
Follow(A)={a,b,#}
Follow(B)={a,b,#}
构造的SLR(1)分析表如下:
(2) 该文法的拓广文法G'为
0.S' → S
1.S → Sab
2.S → bR
其LR(0)项目集规范族和识别活前缀的DFA如下:
I0 = {S'→?S, S→?Sab, S→?bR} I1 = {S'→S?, S→S?ab}
I2 = {S→b?R, R→?S, R→?a, S→?Sab, S→?bR} I3 = {S→Sa?b} I4 = {S→bR?}
I5 = {R→S?, S→S?ab} I6 = {R→a?}
I7 = {S→Sab?}
显然,I1和I5存在移进-归约冲突。求S'和R的Follow集:
Follow(S')={# }
Follow(R)=Follow(S)={a,#}
在I5中,出现的移进-归约冲突,且Follow(R)∩{a}={a},不能用SLR(1)方法解决。因此,此文法不是SLR(1)文法。
15. 解答:
(1) 构造其拓广文法G'的产生式为
0.S' → S
1.S → A 2.A → BA
3.A → ? 4.B → aB
构造其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下: I0 = { [S'→?S, #], [S→?A, #], [A→?BA, #, [A→?, #],
[B→?aB, a/b/#], [B→?b, a/b/#]}
I1 = {[S'→S?, #]} I2 = {[S→A?, #]}
I3 = {[A→B?A, #], [A→?BA, #], [A→?, #],
[B→?aB, a/b/#], [B→?b, a/b/#]} I4 = {[B→b?, a/b/#]}
I5 = {[B→a?B, a/b/#], [B→?aB, a/b/#],
[B→?b, a/b/#]} I6 = {[A→BA?, #]} I7 = {[B→aB?, a/b/#]}
该文法的LR(1)项目集规范族中没有冲突,所以该文法是LR(1)文法。 构造LR(1)分析表如下:
以上分析表无多的定义入口,所以该文法为LR(1)文法。 (3)对于输入串abab,其分析过程如下:
16. 解答:
(1) 对于产生式S→AaAb|BbBa 来说
First(AaAb)∩First(BbBa)={a}∩{b}=? A,B∈VN仅有一条候选式。 因此,这个文法是LL(1)的。
(2) 下面构造这个文法的识别活前缀的DFA。
I0 = {S'→?S, S→?AaAb, S→?BbBa, A→?, B→?}
I1 = {S'→S?} I2 = {S→A?aAb} I3 = {S→B?bBa}
I4 = {S→Aa?Ab, A→?} I5 = {S→Bb?Ba, B→?} I6 = {S→AaA?b} I7 = {S→BbB?a}
I8 = {S→AaAb?} I9 = {S→BbBa?}
由于Follow(A)=Follow(B)={a, b},因此项目集I0中存在归约-归约冲突。在I0状态下,当输入符号是a或是b时,不知用A→?还是B→?进行归约。故此文法不是SLR(1)的。但是,此文法时LR(1)的。 17. 解答:
该文法的拓广文法G'为
0.S' → S
1.S → (SR 2.S → a
3.R → ,SR 4.R → )
构造其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:
I0 = {S'→?S, S→?(SR, S→?a} I1 = {S'→S?}
I2 = {S→(?SR, S→?(SR, S→?a} I3 = {S→a?}
I4 = {S→(S?R, R→?,SR, R→?)} I5 = {S→(SR?} I6 = {R→)?}
I7 = {R→,?SR, S→?(SR, S→?a} I8 = {R→,S?R, R→?,SR, R→?)} I9 = {R→,SR?}
每个LR(0)项目集中没有冲突。因此,此文法是LR(0)文法。其分析表如下:
18.解答:
第5章习题解答:
1,2,3 解答:
略! 4. 解答:
(1) 设S,L,B的值的属性用val表示:
{printf(S.val)}
{S.val:= L1.Val+ L2.val/2L2.length} S→L
{S.val:=L.val}
{L.val:=L1.val*2+B.val,
L.length = L1.length+1
{L.val:=B.val),
L.length:=1
{B.val:=0} B→ 1
{B.val:=1}
(2) 为S,L引入属性h,用来记录配对的括号个数:
{printf(S.h)} S→a
{S.h:=0} S→(L)
{S.h:=S.h+1} L→L(1),S
{L.h:=L(1).h+S.h} L→S
{L.h:=S.h)}
(3) 为D引入一个综合属性h,用来记录D中含id的个数:
{printf(D.h)}
{D.h:=D1.h+D2.h} D→id:T
{D.h:=D1.h+1}
输入串为bcccaadadadb时的语法树为:
采用修剪语法树的方法,按句柄方式自下而上归约该语法树,在归约时调用相应的语义规则,由此得到最终的翻译结果为:. 解答:
(a+b)+(c+d/(e-3))*8 7. 解答:
(1) ab-c+*
(2) A not C D not or not or (3) abcde/+*+
(4) A B and C not D or or
(5) a-bc-d+*+
(6) A B or C D not E and or and 8. 解答:
四元式代码为:
1. (jnz,A,_, x) 2. (j,_,_,3) 3. (jnz,B,_,5) 4. (j,_,_,y) 5. (jnz,C,_,y) 6. (j,_,_,7) 7. (jnz,D,_,y)
8. (j,_,_,x)
10. 解答:
11. 解答:
(1) 四元式序列为:
8.(:=,T,-,C)
1.(j<,A,C,3)
2.(j,-,-,14) 9.(j,-,-,14)
3.(j<,B,D,5) 11.(j,-,-,14)
4.(j,-,-,14) 12.(+,A,2,T2)
5.(j=,A,1,7) 13.(:=, T2,-,A)
6.(j,-,-,10)
7.(+,c,1,T1)
(2) 四元式序列为:
1. (j>0,x,0,3) 7. (j,_,_,12)
2. (j,_,_,8) 8. (+,x,2,T2)
3. (j>,y,0,5) 9. (:=,T2,_,x)
4. (j,_,_,8) 10. (+,y,3,T3)
5. (+,x,y,T1) 11. (:=,T3,_,y)
12. 6. (:=,T1,_,z)
(3) 四元式序列为:
0. (+,A,3,t0) 4. (:=, t3, ,B)
1. (:=,t0 , ,t1) 5. (j<,X,0,7)
2. (*,C,A,t2) 6. (j, , ,0)
7. 3. (*,t2,2,t3)
(4) 四元式序列为:
0. (*,b,2,t0) 8. (+, c, d, t4 )
1. (:=, t0, ,i) 9. (*,t3, t4, t5)
2. (:=,100, , t1 ) 10. (+, a, b, t6 )
3. (j, , , 6) 11. (+, t6
4. (+,i,1,t2 ) 12. ( -, t5, t7, t8)
5. (:=, t2, , i) 13. ( :=, t8, , x )
6. (j>, i,t1,15)
7. (+, a, b, t3 )
12. 解答:略! 14. (j, , , 4) 15.
第6章习题解答:
1,2,3,4,5 解答:略!
本题考查的要点是掌握栈式动态存储分配策略中运行的布局,填充过程活动记录display表的内容。
运行栈的布局遵循“先进后出”原则,即一个过程调用另一个过程时,被调用过程则在调用过程的栈顶构筑自己的数据区,形成自己的活动记录,包括自己的display表。而display表内容的项数与过程的嵌套层次有关,一般比过程的嵌套层数大1。
(1) demo → A
此时的运行栈只有主程序demo和过程A的2个数据区,过程A只引用主程序demo全局数据和其自身的局部数据,因此其display表内容有2项,即主程序数据区首址和过程A的主程序数据区首址。
(2) demo →A→B
此时的运行栈只有主程序demo、过程A和过程B的3个数据区,过程B嵌套定义在过程A中,要引用主程序demo全局数据、过程A的数据和其自身的局部数据,因此其display
表内容有3项,即主程序数据区首址、过程A的主程序数据区首址和过程B本身的数据区首址。
(3) demo →A→B→B
此时的运行栈包括主程序demo、过程A和2个过程B的实例的4个数据区,过程B要引用的数据区还是3个:主程序demo全局数据、过程A的数据和当前活跃过程B的局部数据(栈顶数据项),因此其display表内容还是有3项,即主程序数据区首址、过程A的主程序数据区首址和当前活跃过程B本身的数据区首址。
(4) demo →A→B→B→A
此时的运行栈包括主程序demo、2个过程A和2个过程B的实例的5个数据区,但过程A只引用主程序demo全局数据和其自身的局部数据,因此其display表内容只有2项,即主程序数据区首址和过程A的主程序数据区首址。
各个运行时刻运行栈的布局和使用的display表如图。
第2章参考***:1,2,3:解答:略! 4. 解答:A:① B:③ C:① D:② 5. 解答: 用E表示,T表示,F表示,上述文法可以写为:E → T | E+T T → F | T*F F → (E) | i 最左推导:E…
第2章参考***:1,2,3:解答:略! 4. 解答:A:① B:③ C:① D:② 5. 解答: 用E表示,T表示,F表示,上述文法可以写为:E → T | E+T T → F | T*F F → (E) | i 最左推导:E…
第2章参考***:1,2,3:解答:略! 4. 解答:A:① B:③ C:① D:② 5. 解答: 用E表示,T表示,F表示,上述文法可以写为:E → T | E+T T → F | T*F F → (E) | i 最左推导:E…
本文由()首发,转载请保留网址和出处!
免费下载文档:编译原理***1-2_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
编译原理***1-2
上传于||文档简介
&&许​国​定​ ​编​译​原​理​答​案-​2
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩39页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

参考资料

 

随机推荐