编译原理课后习题答案

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

联系客服:779662525#qq.com(#替换为@)