编译原理课后习题答案

更新时间:2024-04-12 15:54:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章

1.典型的编译程序在逻辑功能上由哪几部分组成?

答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。 2. 实现编译程序的主要方法有哪些?

答:主要有:转换法、移植法、自展法、自动生成法。

3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式?

答:编译法、解释法。

4. 编译方式和解释方式的根本区别是什么?

答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快;

解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。

1

第二章

1. 乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关

系如何?

答:1)0型文法、1型文法、2型文法、3型文法。

2)

2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。 答:

Z?SME | B

S?1|2|3|4|5|6|7|8|9 M?? | D | MD D?0|S B?2|4|6|8 E?0|B N? D|ND

D? 0|1|2|3|4|5|6|7|8|9

请给出句子123、301和75431的最右推导和最左推导。 答:N?ND?N3?ND3?N23?D23?123

N?ND?NDD?DDD?1DD?12D?123 N?ND?N1?ND1?N01?D01?301 N?ND?NDD?DDD?3DD?30D?301

N?ND?N1?ND1?N31?ND31?N431?ND431?N5431?D5431?75431

N?ND?NDD?NDDD?NDDDD?DDDDD?7DDDD?75DDD?754DD?7543D?75431

3. 设文法G为:

4. 证明文法 S?iSeS|iS| i是二义性文法。 答:对于句型iiSeS存在两个不同的最左推导:

S?iSeS?iiSes S?iS?iiSeS

所以该文法是二义性文法。 (1) L1={anbnci |n>=1,i>=0 } (2) L2={aibj|j>=i>=1} (3) L3={anbmcmdn |m,n>=0} 答:

(1) S?AB

A?aAb | ab B?cB | ?

(2) S?ASb |ab

2

5. 给出描述下面语言的上下文无关文法。

A?a | ?

(3) S?aSd | A | ?

A?bAc | ?

6. 设计一个最简的DFA M,使其能够识别所有的被3整除的无符号十进制整数。 答:

2|5|80|3|6|91|4|70|3|6|9011|4|720|3|6|92|5|82|5|81|4|7

7. 设计一个DFA,使其能够接受被4整除的二进制数。 答:

001110102103

8. 写出表达下列各项的正则表达式。

(1)二进制数且为5的倍数。

(2)Σ={a,b,c},第一个a位于第一个b之前的字符串。 (3)Σ={a,b,c},包含偶数个a的字符串。

(4)Σ={0,1},不包含11子串的字符串。 答: (1) 可以先画出相应的有限自动机: 101101AB10CD00E

添加新的开始状态S和终止状态T: 3

101101S?A?B10CD00ET 根据以上自动机,列出以下方程: ① S=A ② A=0A+1B+T ③ B=0C+1D ④ C=0E+1A ⑤ D=0B+1C ⑥ E=0D+1E 解以上方程组: ⑥? E=1*0D ②? A=0*1B+0*T ⑥代入④? C=01*0D+1A **⑤代入④? C=0100B+0101C+1A ? C=xB+yA 其中x=(01*01)*01*00 y=(01*01)*1 ⑤代入③? B=0C+10B+11C ? B=(0|11)C+10B ? B=(10)*(0|11)C 将C=xB+yA代入上式? B=uB+vA ? B=u*vA 其中u=(10)*(0|11)x v=(10)*(0|11)y 将B=u*vA代入②? A=0*1u*vA+0*T **** ? A=(01uv)0T 将A代入①? S=(0*1u*v)*0*T 串(0*1u*v)*0*即为所求。 (2)该题目理解为:至少有一个a和一个b,且a出现在b的前面(可以有间隔),则答案为: c*a(a|c)*b(a|b|c)* (3)((b|c)*a(b|c)*a)*(b|c)* (a(b|c)*a | b | c)* (4)(0|10)*(1|?) 4

第三章

1. 词法分析器的功能是什么?

答:读源程序的字符序列,逐个拼出单词,并构造相应的内部表示TOKEN;同时检查源程序中的词法错误。

2. 试分析分隔符(空格、跳格及回车等)对词法分析的影响。

答:空格、跳格、回车等分隔符号对词法分析不起作用,可以删除。但是回车符号可以用于错误定位,所以在删除回车符号前需要统计回车的个数。 3. 给出识别C语言全部实型常数的自动机。

答:(+|-|?)([1-9][0-9]*|0)(.[0-9][0-9]*|?) (E(+|-|?)[0-9][0-9]*) 4. 写出识别C语言中所有单词的LEX程序。

答: L=[A-Z] | [a-z] D=[0-9] D1=[1-9] %% (L|_)(L|D|_)* {return (1);} D1D* {return (2);} + {return (3);} ……

5

第四章

1. 设有如下文法G[S]:

S?aABbcd | ? A?ASd | ? B?SAh | eC | ? C?Sf | Cg | ?

(1) 求每个产生式的Predict集。 (2) 该文法是否为LL(1)文法?为什么? 答:(1)

Predict(S?aABbcd)={a} Predict(S? ?)={#,d,f,a,h } Predict(A?ASd)={a,d} Predict(A? ?)={h,a,d,b,e} Predict(B?SAh)={a,d,h} Predict(B? eC)={e} Predict(B? ?)={b} Predict(C?Sf)={a,f} Predict(C? Cg)={a,f,g} Predict(C? ?)={g,b}

(2)由于Predict(A?ASd)? Predict(A? ?)??,所以该文法不是LL(1)文法。 (1) S?(SS’ | ?

S’ ?) | ? (2) S?(S)S | ? (3) S?S(S)S | ? (4) S?(S | S’

S’?(S’) | ?

答:(1)不是,(2)是,(3)不是,(4)不是 3. 已知文法G[E]:

E?E+T | T T?T*F | F F?i | (E)

请按递归下降法构造该文法的语法分析程序。 答:求产生式的predict集合:

2. 下列描述括号匹配的文法中,哪些是LL(1)文法?

predict(E?E+T)={i,(} predict(E?T)={i,(} predict(T?T*F)={i,(} predict(T?F)={i,(}

6

由于文法中非终极符号E和T对应的产生式的predict集合的交集都不为空,所以该文E?TE’ E’?+TE’ | ? T?FT’ T’?*FT’ | ? F?i F?(E)

求新文法的predict集合: Predict(E?TE’)=,(,i- Predict(E’?+TE’)=,+- Predict(E’??)={#,)} Predict(T?FT’)=,i,(- Predict(T’?*FT’)=,*- Predict(T’??)={+,),#} Predict(F?i)={i} Predict(F?(E))={(}

由于以上文法中任意非终极符号对应的产生式的predict集合的交集都为空,所以满足Void E()

{ if(token?{(,i-) ,T();E’();- else Error();} void E’()

{ if(token?{+-) ,Match(‘+’);T();E’();- else if(token?{#,)}) {;} else Error();} void T()

{ if(token?{i,(-) ,F();T’();- else Error();} void T’()

{ if(token?{*-) ,Match(‘*’);F();T’();- else if(token?{+,),#}) {;} else Error();} void F()

{ if(token?{i-) ,Match(‘i’);-

else if(token?{(-) ,Match(‘(‘);E();Match(‘)’);- else Error();}

L={? | ?为字母表?上不包括两个相邻的1的非空串},其中?={0,1}。

法不满足自顶向下分析的条件,现对文法进行等价变换得到如下文法:

自顶向下分析的条件,所以可以写出如下的递归下降语法分析伪代码:

4. 构造一个LL(1)文法G,它能识别语言L: 并证明你所构造的文法是LL(1)文法。

7

答:A?0E | 1F

B?0E | 1F C?0E E?B | ? F?C | ?

Predict(A?0E)={0} Predict(A?1F)={1} Predict(B?0E)={0} Predict(B?1F)={1} Predict(E?B)={0,1} Predict(E??)={#} Predict(F?C)={0} Predict(F??)={#}

对任意非终极符号对应的产生式的predict集合的交集都为空,所以该文法是LL(1)文

法。

5. 已知文法G[A]为:

A?aABe | a B?Bb | d

(1) 试给出与G[A]等价的LL(1)文法G’*A+。

(2) 构造G’*A+的LL(1)分析表并给出输入串aade#的分析过程。 答:(1)所求G’*A+为:

A?aA’ A’?ABe A’? ?

B?dB’ B’?bB’ B’? ?

(1) (2) (3) (4) (5) (6)

Predict(A?aA’)=,a- Predict(A’?ABe)={a} Predict(A’??)={#,d} Predict(B?dB’)=,d- Predict(B’?bB’)=,b- Predict(B’??)={e}

对任意非终极符号对应的产生式的predict集合的交集都为空,所以该文法是LL(1)文(3) 分析表如下: 法。 A A’ a (1) (2) b d (3) e # (3) 8

B B’

(5) (4) (6) aade#的分析过程如下 分析栈 A# aA’ # A’ # ABe# aA’Be# A’Be# Be# dB’e# B’e# e# #

输入流 aade# aade# ade# ade# ade# de# de# de# e# e# # 动作 替换(1) 匹配 替换(2) 替换(1) 匹配 替换(3) 替换(4) 匹配 替换 匹配 成功 9

第五章(这章答案是错的) 1. 设有下列文法:

(1) S?aA

A?Ab A?b S?aSSS S?c S?b A?SA A?a S?ccB B?ccB B?b A?cA A?a

(2) S?aSSb

(3) S?AS

(4) S?cA

构造上述文法的LR(0)归约活前缀状态机,并给出LR(0)分析表。 答:

(1)

Ch05-1-(1)0Z→.SS→.aAA→.AbA→.b3A→b.

(2)

有移入、规约冲突1SaZ→S.2S→a.AA→.AbA→.bbA4S→aA.A→A.bb5A→Ab.

10

Ch05-1-(2)1Z→S.S0Z→.SS→.aSSbS→.aSSSS→.cc5S→c.c2S→a.SSbS→a.SSSS→.cS→.aSSbS→.aSSSacaS3S→aS.SbS→aS.SSS→.cS→.aSSbS→.aSSSa4S→aSS.bS→aSS.SS→.cS→.aSSbS→.aSSScbS6S→aSSb.7S→aSSS.aS

actionaS0Z→.S (1)S→.aSSb (2)S→.aSSS (3)S→.c (4)S1S2S3S4S5S6S7

(3)

gotocs5Accs5s5#S1347R4R2R3

bs2s2s2s2R4R2R3s6R4R2R3s5R4R2R3 11

Ch05-1-(3)有移入、规约冲突2A→SA.1Z→S.A→S.AA→.SAA→.aSa4aA→a.5bS→b.bS7S→AS.AS3A→S.AA→.aA→.SAS→.ASS→.bb8A→SA.S→A.SS→.ASS→.bA9SS→AS.S10AS→.ASS→A.SS→.bASbb0Z→.SS→.ASS→.bA→.SAA→.aA6S→A.SS→.ba

(4)

Ch05-1-(4)0Z→.SS→.cAS→.ccB2Z→S.S4S→cA.A1S→c.AcS→c.cBcA→.cAA→.aaa3A→a.6S→ccB.B5S→cc.BB→.ccBB→.bA→c.AA→.cAA→.a8B→c.cBA→c.AA→.cAA→.acA7AA→cA.b9B→b.cc11B→ccB.B10B→cc.BB→.ccBB→.bA→c.AA→.cAA→.aAbaa

12

Z→S (1)S→cA (2)S→ccB (3)B→ccB (4)B→b (5)A→cA (6)A→a (7)aS0S1S2S3S4S5S6S7S8S9S10S11s3R7R6s3R3R2s3R5s3R4actionbcs1s5R7R6s8R3R2s10R5s8R4#A4gotoBS2R7R6s9R3R2R5s9R4AccR7R67R3R27R57R411

62. 设有下列文法:

(1) S?SaS | b (2) S?bSb | cSc | b | c (3) S?bSb | bSc | d (4) S?aSb | bSa | ab (5) S?Sab | bR

R?S | a B?b A?aA | B B?? A?? B?dB | ? (6) S?SAB | BA

(7) S?AaAb | BbBa

(8) A?aABe | Ba

说明上述文法是否为SLR(1)文法。若是,请构造SLR(1)分析表;若不是,请说明理由。 答:

(1)

Ch05-2-(1)不是SLR(1)Follow(S)={#,a}0Z→.SS→.SaSS→.bb1S→b.2SZ→S.S→S.aS3S→Sa.SaS→.SaSS→.bbSa4S→SaS.S→S.aS

13

(2)

Ch05-2-(2)不是SLR(1)Follow(S)={#,b,c}01S→b.SbS→b.S→.bSbS→.cScS→.bS→.cZ→.SS→.bSbS→.cScS→.bS→.c

(3)

b

Ch05-2-(3)Z→.SS→.bSbS→.bScS→.dS1Z→S.0是SLR(1)3dS→d.5S→bSb.b4S→bS.bS→bS.cc6S→bSc.d2S→b.SbbS→b.ScS→.bSbbS→.bScS→.dS

Z→.S (1)S→.bSb (2) S→.bSc (3)S→.d (4) S0S1S2S3S4S5S6bs2s2R4s5R2R3actioncds3s3#gotoS1R4s6R2R3AccCh05-2-74R4R2R3

(4)

14

Ch05-2-(4)不是SLR(1)Follow(S)={#,a,b}2S→a.SbS→a.bS→.aSbS→.bSaS→.ab4S→b.SaS→.aSbS→.bSaS→.ab3S→aS.b5S→ab.S→b.SaS→.aSbS→.bSaS→.abb4S→aSb.Sb0Z→.SS→.aSbS→.bSaS→.abS1Z→S.ab

(5)

Ch05-2-(5)不是SLR(1)Follow(R)={#,a}1Z→S.S→S.abS0Z→.SS→.SabS→.bRb4S→b.RR→.SR→.aS→.SabS→.bRRS5S→bR.4R→S.S→S.aba2S→Sa.bb3S→Sab.

(6)

Ch05-2-(6)是SLR(1)20bB→b.Z→.SS→.SABbS→.BA3BS→B.AB→.bA→.aASA→.B1B→.bZ→S.aS→S.ABb2A→.aAA→.BB5B→.bA8S→SA.B9BB→.bS→SAB.ABa4S→BA.A→B.5B6A→a.AA→.aAA→.BB→.b2bAaB7A→aA.b

15

actionaZ→S (1)S→SAB (2)S→BA (3)A→aA (4)A→B (5) B→b (6)S0S1S2S3S4S5S6S7S8S9s6R6s6R3R5s6R4R2bs2s2R6s2R3R5s2R4s2R2#AccR6R3R5gotoAB385Ch05-2-745S17R459R2

(7)

Ch05-2-(7)不是SLR(1)Follow(A)={a,b} Follow(B)={a,b}0Z→.SS→.AaAbS→.BbBaA→.B→.SAB1Z→S.2S→A.aAb3S→B.bBa4S→Aa.AbaA→.b5S→Bb.BaB→.A6S→AaA.b7S→BbB.a8bS→AaAb.9aS→BbBa.B

(8) Ch05-2-(8)不是SLR(1) Follow(B)={a,e}a3A→a.ABeA→.aABeA→.BaB→.dBB→.B4A→B.a5B→d.BB→.dBB→.6A→aA.BeB→.dBB→.7A→aAB.ee8A→aABe.d1Z→A.A0Z→.AA→.aABeA→.BaB→.dBB→.ABaBdadB9A→Ba.d10B→dB.

3. 设有下列文法:

S?aAd | bBd | aBe | bAe A?g B?g

说明该文法是LR(1)文法,但不是LALR(1)文法。 答:

16

Ch05-3 是LR(1)文法2S→a.AdS→a.BeA→.gaB→.g##de4AS→aA.d5BS→aB.e6gA→g.B→g.9AS→bA.e10BS→bB.d11gA→g.B→g.##de12eS→bAe.13dS→bBd.7dS→aAd.8eS→aBe.##Z→.SS→.aAdS→.bBdS→.aBeS→.bAe0#####SbZ→S.1#3S→b.BdS→b.AeA→.gB→.g##ed##ed##

Ch05-3 不是LALR(1)文法2S→a.AdS→a.BeA→.gaB→.g##de4AS→aA.d5BS→aB.egA→g.B→g.##ed##7dS→aAd.8eS→aBe.##Z→.SS→.aAdS→.bBdS→.aBeS→.bAe0#####S6bZ→S.1#3S→b.BdS→b.AeA→.gB→.ggd,ee,d##12eS→bAe.13dS→bBd.##9AS→bA.e10BS→bB.d

4. 设有下列文法:

(1) E?E+T | T

T?TF | T F?(E) | F* | a | b A?d

(2) S?Aa | bAc | dc | bda

说明上述文法是否为SLR(1)文法?是否为LALR(1)文法?并构造相应的分析表。 答:(1)

17

Ch05-4-(1) 不是SLR(1)文法Follow(T)={#,(,a,b,+,)}3E→E+T.T→T.F6T→T.aF→a.F→.(E)T7bF→.F*F→b.F→.a11F→.b(E→T.8T→T.FF→(.E)(T→T.E→.E+TF→.(E)EE→.TF→.F*T→.TFTF→.aT→.TF→.b4FT→TF.F→F.*5*F→F*.0Z→.EE→.E+TE→.TT→.TFT→.T1Z→E.EE→E.+T2E→E+.T+T→.TFT→.T+Fab46710F→(E).9)F→(E.)E→E.+T

F→F*.54#+(ab**Ch05-4-(1) 不是LALR(1)文法3E→E+T.T→T.FT→T.2F→.(E)E→E+.T#+(ab*)F→.F*TT→.TF#+(abF→.a+T→.T#+(abF→.b(+89F→(.E)F→(E.)#+(ab*)E→.E+TE→E.+T#+(ab*)EE→.T(T→.TF10T→.TF→(E).#+(ab*)1Z→E.#E→E.+T#+E0Z→.E#E→.E+T#+E→.T#+T→.TF#+(abT→.T#+(ab#+#+(abFT→TF.#+(ab#+(ab*F→F.*#+(ab6#+(ab*aF→a.#+(ab*#+(ab*7#+(ab*bF→b.#+(ab*#+(ab*#+(ab*)#+(ab*)#+(ab*)#+(ab*)#+(ab*)E→T.(T→T.FT→T.F→.(E)TF→.F*F→.aF→.b11#+(ab*)#+(ab*)#+(ab*)#+(ab*)#+(ab*)#+(ab*)#+(ab*)

(2)

Ch05-4-(2) 不是SLR(1)文法Follow(A)={a,c}0Z→.SS→.AaS→.bAcS→.dcS→.bdaA→.dS1Z→S.2AS→A.a4dS→d.cA→d.6bS→b.AcS→b.daA→.d3aS→Aa.5cS→dc.Ad7S→bA.c9S→bd.aA→d.cc8S→bAc.10S→bda.

18

Ch05-4-(2) 是LALR(1)文法Z→S.1S0#S→Aa.AS→A.ab5a4####c9AS→bA.cc10S→bAc.#Z→.SS→.AaS→.bAcS→.dcS→.bdaA→.dS→d.cA→d.#####a#ad2cS→dc.3#6S→b.AcS→b.daA→.dd7S→bd.aA→d.a8S→bda.##c#

aactionbcs6s3R4s5R2s7s8R6R5s10R39gotods2#AccR6A4S1Z→.S (1)S→.Aa (2)S→.bAc (3)S→.dc (4)S→.bda (5)A→.d (6)S0S1S2S3S4S5S6S7S8S9S10

5. 设有下列文法:

L?MLb | a

M??

说明上述文法是否为LR(1)文法,若不是,请说明理由。 答:

Ch05-5 是LR(1)文法5L→a.a0Z→.LL→.MLbL→.aM→.L1Z→L.#L→a.10b###a2ML→M.LbL→.MLbL→.aM→.#bba3LL→ML.bM4bbba#7bL→MLb.L8L→ML.b#9bL→MLb.bL→M.LbL→.MLbL→.aaM→.bbM

19

第六章

1.试写出下列类型的内部表示: a.integer

b.ARRAY [1..5] of RECORD i:integer; b:boolean END

c.ARRAY [1..5] of RECORD a:ARRAY [1..10]; r:RECORD i,j:integer END END d. RECORD r: RECORD x,y:real END;a: ARRAY [1..10] of integer END 2. 设当前层数为l,可用区距为101,且有下列程序段: CONST mm=333;nn=444; TYPE atype = ARRAY[1..10] OF real; rtype = RECORD i,j:integer END; VAR a,b:atype; x,y:real

试写出各标识符的内部表示。

3. 设当前层数和区距分别为l和off,且有函数说明首部: FUNCTION f(A:atype;VAR B:atype;VAR X:real):integer 其中atype的定义见题5,试写出f的内部表示。 4. 要求在下面括号中写上相应?(层数)和区距(off)。 ()()PROCEDURE g(A:atype;()()

VAR B:atype;()() VAR X:real()())()().

5. 给出下面C程序扫描到语句c=a+b+x时相应的全局符号表(采用顺序表结构)。

main()

{

int a=0; float c=1.0; {

float a=3.0; {

float x=1.3; float b=0.3; } {

int b=10; c=a+b+x; } } }

6. 给出题1中程序扫描到语句c=a+b+x时相应的全局符号表(采用外拉链的散列表结构)。

20

7. 根据标识符的作用域规则,分别给出图6.5的程序中,过程P、Q、R、S中有效的标识符。

21

第七章

1. 将算术表达式 (a+b)*(c+d)-(a+b+c) 翻译成四元式序列。 2. 将下列语句翻译成四元式序列:

a. IF x>0 THEN x:=0 ELSE x:=1 b. WHILE x>0 DO x:=x-1 c. IF x>0 THEN x:=x+1 ELSE

IF x <0 THEN x:=x+1 ELSE x:=x+1 d. WHILE x > 0 DO

WHILE y > 0 DO BEGIN y:=y-x; x:=x-1 END

3. 给出如下程序段的四元式序列。(四元式的操作符可用自身代替)。其中A:Array of [1..10]

of integer。 a:=1;

while a<=10 do begin if a<>b then

A[a]:=A[b]+2;

else a:=a+1; b:=b+1; end

4. 试将FOR语句翻译成四元式序列。 5. 试将UNTIL语句翻译成四元式序列。 6. 试将CASE语句翻译成四元式序列。

7. 试给出4、5、6题中翻译过程的语法制导程序。

22

第八章

1. 将下面的程序段划分为基本块并画出其程序流图。

read(A); read(B); F:=1; C:=A*A; D:=B*B; if C100 goto L2; goto L3; goto L1;

L1: E:=B*B;

L2: F:=F-1; L3: write(E);

2. 假设有如下语句序列,写出常表达式优化前和优化后的四元式中间代码。

(1) i:=1;

(2) a:=20; b:=a*(a+10);

c:=a*b;

j:=i*(i+1); k:=2*(i+j);

3. 假设有如下语句序列或表达式,写出公共表达式优化前和优化后的四元式中间代码。

(1) x:=x*y+z; y:=x*y+z; z:=x*y+z; (2) (a*b+c)/(a*b-c)+(c*b+a-d)/(a*b+c) while i<=100 do

begin end

u:=A*B; m:=u*u; S:=S+m*m; i:=i+1;

4. 写出如下循环语句不变式外提后的四元式中间代码。

5. 写出下面循环语句不变式外提后的四元式中间代码,其中数组各下标的类型为1..10。

while i<=100 do

begin

j:=1;

while j<=100 do

23

end

begin end

k:=1;

while k<=100 do

A[i][j][k]:=0;

24

第九章

1.过程活动记录包含哪些信息?各信息的作用?何时填写它们?

2.下面是一个调用递归函数的Pascal程序

program PP(input,output) VAR k:integer;

FUNCTION F(n:integer):integer begin

if n<=0 then F:=1 else F:=n*F(n-1); end; begin

k:=F(10); … end.

当第二次(递归地)进入F后,DISPLAY的内容是什么?当时整个运行栈的内容是什么? 3.对于下面的程序:

procedure P(X,Y,Z); begin

Y:=Y+1; Z:=Z+X; end P; begin A:=2; B:=3;

P(A+B,A,A); print A end

当参数传递的办法分别为(1)传值;(2)传地址;(3)值-结果;(4)传名时,程序执行时输出的A分别是什么?

4.应用Pascal语言的作用域规则,说明下面程序中的名字a和b的每一次出现所应用的声明。

program a(input,output);

procedure b(u,v,x,y:integer); var a:record a,b:integer end; b:reocrd b,a:integer end; begin

with a do begin a:=u;b:=v end; with b do begin a:=x;b:=y end; writeln(a.a,a.b,b.a,b.b) end; begin

b(1,2,3,4) end.

5.为下面的C程序构造一个可能的运行时环境。

int a[10];

char *a=”hello”; int f(int i,int b[]) { int j=1; A: { int i=j;

char c=b[I]; … } }

25

void g(char *s) { char c[10]; B: { int a[5]; ... } }

main() { int x=1; x=f(x,a); g(s);

return 0; }

(1)在进入函数f中的块A之后。 (2)在进入函数g中的块B之后。

6.Display表和静态链的作用是什么?试举一个程序例子,并考察其Display表和静态链的内容。

7.过程参数的传递方式有几种?简述\传地址\和\传值\的实现原理。

26

第十章 1. 2. 3. 4.

什么叫指令的执行代价? 寄存器分配的原则是什么?

在剥夺寄存器的时候,应考虑哪些因素?什么时候一个变量可以主动释放它所占 试写出程序段

IF x > 0 THEN y:=y+1 ELSE IF x < 0 THEN y:=y-1

的目标代码,其中的变量均为非形参实型变量。 5.

试写出程序段

WHILE x < y DO BEGIN y :=y + 1;

IF y > 0 THEN y :=y-x ELSE WHILE y < 0 DO y := y + x END

的目标代码,其中变量均为非形参实型变量。 6. 7. 8.

试为FOR循环语句设计目标代码。 试为REPEAT循环语句设计目标代码。 试为CASE语句设计目标代码。

用的寄存器?

27

28

本文来源:https://www.bwwdw.com/article/jwzp.html

Top