加载中…
个人资料
紫魄
紫魄
  • 博客等级:
  • 博客积分:0
  • 博客访问:25
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

编译方法习题及答案

(2011-10-31 23:05:10)
标签:

杂谈

第2 形式语言基础

2.2 设有文法G[N]:   N -> D | ND

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

(1)    G[N]定义的语言是什么?

(2)    给出句子0123和268的最左推导和最右推导。      

解答:

(1)    L(G[N])={(0|1|2|3|4|5|6|7|8|9)+} 或L(G[N])={a| a为可带前导0的正整数}

(2)     

0123的最左推导:N Þ ND Þ NDD Þ NDDD Þ DDDD Þ 0DDD Þ 01DD Þ 012D Þ 0123

0123的最右推导:N Þ ND Þ N3 Þ ND3 Þ N23 Þ ND23 Þ N123 Þ D123 Þ 0123

268的最左推导:N Þ ND Þ NDD Þ DDD Þ 2DDD Þ 26D Þ 268

268的最右推导:N Þ ND Þ N8 Þ ND8 Þ N68 Þ D68 Þ 268

 

2.4 写一个文法,使其语言是奇数的集合,且每个奇数不以0开头。

解答:

N -> 1 | 3 | 5 | 7 | 9 | BN

B -> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | B0

 

2.7 下面文法生成的语言是什么?


G1

S->AB

A->aA| e

B->bc|bBc

G2

S->aA|a

A->aS

 


解答:


B Þ bc

B Þ bBcÞ bbcc

B Þ bBcÞ bbBcc Þ bbbccc

……

A Þ ε

A Þ aA Þ a

A Þ aA Þ aaA Þ aa

……

∴S Þ AB Þ ambncn , 其中m≥0,n≥1

即L(G1)={ ambncn   m≥0,n≥1}

S Þ a

S Þ aA Þ aaS Þ aaa

S Þ aA Þ aaS Þ aaaA ÞaaaaS Þ aaaaa

……

∴S Þ a2n+1 , 其中n≥0

即L(G2)={ a2n+1   n≥0}

 

 

 


 

2.11 已知文法G[S]:   S->(AS)|(b)

             A->(SaA)|(a)

请找出符号串(a)和(A((SaA)(b)))的短语、简单短语和句柄。

解答:


S

 


           )

 


   )(   )

 

因为S 不能 Þ (a),

所以 (a)不是文法的句型。

没有短语、直接短语和句柄。

 


S

 


           )

 


           )

 


    ) (    )

因为S Þ (AS) Þ(A(AS)) Þ (A((SaA)S)) Þ (A((SaA)(b))),

所以(A((SaA)(b)))是文法的句型。

短语:(A((SaA)(b))),((SaA)(b)),(SaA),(b)

直接短语:(SaA),(b)

句柄:(SaA)



第3 自动机基础

3.1 构造下列正规式相应的DFA

(2) (a|b)*(aa|bb)(a|b)*

解答:

NFA:            aa                         

                                             

           +          -         

                    bb                        

                                 

 

                                                

                                             

           +                 -         

                                                          

                                       

 

NFA化为DFA

                                 b

            {1}        {1,3}        {1,4}             {1}

           {1,3}       {1,2,3}       {1,4}               {2}

           {1,4}       {1,3}        {1,2,4}              {3}

          {1,2,3}      {1,2,3}       {1,2,4}            {4}

          {1,2,4}      {1,2,3}       {1,2,4}            {5}

 


                                          a

    a     -

                                           

                                             

           +                   a                           

                                                            

                                         

                                          b

 

最小化DFA:初始划分:{1,2,3},{4,5} à 最终划分:{1},{2},{3},{4,5}

            这样,状态4与状态5等价,将4和5合并:

   

                                                          

                                           a

           +                    -      

                                      b

                              

                                       

3.2 将下图中的(a)和(b)分别确定化和最小化。

 

 

a

a

0

+

1

(a)

a,b

-

a

(b)

b

0

+

-

1

2

3

4

5

-

b

b

b

b

b

a

a

a

a

a

 

 

 

 

 

 

 

 

 

 


解答:


(a) NFA化为DFA

                     b

  {0}       {0,1}       {1}      +-{1}

{0,1}      {0,1}       {1}       - {2}

{1}       {0}                   {3}

                       a

 

                       -

                    

         ±         b

                     

                       

                                    

最小化DFA:{1,2},{3}

                                              

                                 

        ±        

                                   

(b) 本身为DFA,最小化DFA

                           {0,1},{2,3,4,5} à{0,1},{2,4},{3,5}

 

                             a

                       b

±                     

                       b

 

 

 

 

 

 

 

 


3.4 给出文法G[S],构造相应最小的DFA

      S->aS|bA|b

      A->aS

解:  原文法等价于:S->aS|bA|bB

                    A->aS

                    B->ε

NFA:令 ①-S, ②-A, ③-B

                                                   

                 a                   

        +    b             -

                                            

 

NFA化为DFA

                     b

  {1}       {1}       {2,3}       +{1}

{2,3}      {1}                  - {2}

                                                   

                 a                   

        +    b     -

 

3.6 给出与下图中的NFA等价的正规文法G

a

+

-

b

a

b

b

b

a

-

解:G(A):A à aB | bD

          B à bC

          C à aA | bD | ε

          D à aB | bD| ε

补充题1:构造与正规式(a|b)*c+|ab等价的DFA

(1) 与之等价的NFA

(2) 消除ε边后的NFA

(3)确定化过程如下:

 

a

b

c

+ A {1,2}

B {2,4}

C {2}

D {3}

B {2,4}

C {2}

E {2,5}

D {3}

C {2}

C {2}

C {2}

D {3}

- D {3}

 

 

D {3}

- E {2,5}

C {2}

C {2}

D {3}

得到的DFA为:


第5 语法分析

4.3 设有文法G[S]:

      S->A

      A->B | AiB

      B->C | B+C

      C-> )A* | (

      (1) 将文法G[S]改写为LL(1)文法。

      (2) 构造改写后的文法的递归子程序(给出流程图即可)

      (3) 求经改写后的文法的每个非终结符的FIRST集和FOLLOW集。

      (4) 构造相应的LL(1)分析表,并给出输入串 (+)(*# 的分析过程。

解答:

(1) 原文法有左递归,利用A->Ab|a可以化为

A->aA`

A`->bA`|e

可以得到,原文法可以化为G`(S)

S->A

A->BA`

A`->iBA`|e

B->CB`

B`->+CB`|e

C->)A*|(

(2) 扩展文法,增设一个产生式S`->S,作为主程序,得到的递归下降子程序的流程如下:

主程序           子程序S:      子程序A:          子程序A`

                             

    子程序B:          子程序B`:         子程序C

                 

(3) 每个非终结符的FIRST集和FOLLOW集如下:

 

first

Follow

S

{ ), ( }

{ # }

A

{ ), ( }

{ #, * }

A`

{ i }

{ # , * }

B

{ ), ( }

{ i, # ,*}

B`

{ + }

{ i,#,* }

C

{ ), ( }

{ +, i ,# ,*}

其中,follow(B)=first(A`)∪follow(A)= first(A`)∪{*}∪follow(S)={i}∪{*}∪{#}

(4) 为产生式编号:

S->A   

A->BA`

A`->iBA` |e

B->CB`

B`->+CB` |e

C->)A* |(

       根据每个非终结符的FIRST集和FOLLOW集,可以得到各产生式的select集如下:

       select(①)=first(A) ={), (}

       select(②)= first(B) ={), (}

       select(③)=first(iBA`)={i}

       select()=first(e)∪follow(A`)={#,*}

select(⑤)=first(C)= {), (}

select(⑥)=first(+CB`)={+}

select()= first(e)∪follow(B`)={i,#,*}

select()=first()A*)={)}

select()=first(()={(}

       根据以上select集,可以得到LL(1)分析表:

 

 

 

 

 

i

+

)

*

(

#

S

 

 

 

 

A

 

 

 

 

A`

 

 

 

B

 

 

 

 

B`

 

 

C

 

 

 

 

根据以上LL(1)分析表,得出输入串 (+)(*# 的分析过程如下:

分析栈

当前符号

剩余符号

查分析表:操作

#S

(

+)(*#

①: push(A)

#A

(

+)(*#

②: push(A`B)

#A`B

(

+)(*#

⑤: push(B`C)

#A`B`C

(

+)(*#

⑨: push(()

#A`B`(

(

+)(*#

匹配( next(w)

#A`B`

+

)(*#

⑥: push(B`C+)

#A`B`C+

+

)(*#

匹配+ next(w)

#A`B`C

)

(*#

⑧:push(*A))

#A`B`*A)

)

(*#

匹配) next(w)

#A`B`*A

(

*#

②: push(A`B)

#A`B`*A`B

(

*#

⑤: push(B`C)

#A`B`*A`B`C

(

*#

⑨: push(()

#A`B`*A`B`(

(

*#

匹配( next(w)

#A`B`*A`B`

*

#

⑦: push(e)

#A`B`*A`

*

#

④: push(e)

#A`B`*

*

#

匹配* next(w)

#A`B`

#

 

⑦: push(e)

#A`

#

 

④: push(e)

#

#

 

OK

 

4.9 设文法G[S]为:

      S->rD

      D->D,i | i

      (1) 构造文法的句柄识别器。

      (2) 该文法是LR(0)文法吗?请说明理由。

      (3) 该文法是SLR(1)文法吗?若是,构造它的SLR(1)分析表,并给出符号串 ri,i# 的分析过程。

解答:

(1)扩展文法:

       S`->S  (0)

       S->r (1)

       D->D , i  (2)| i  (3)

构造的文法的句柄识别器为:

 

(2)由上图可以看出,在③状态处存在移进和规约冲突,即{,4}和{r(1)},因此,不是LR(0)文法。

(3)对以上移进和规约冲突{,4}和{r(1)},(1)号产生式为S->r D,follow(S)∩{,}={#}∩{,}=F,因此,是SLR(1)文法。

根据文法的句柄识别器及移进和规约冲突的解决,得到的SLR(1)分析表如下:

 

r

,

i

#

S

D

0

r2

 

 

 

S1

 

1

 

 

 

OK

 

 

2

 

 

i6

 

 

D3

3

 

,4

 

r1

 

 

4

 

 

i5

 

 

 

5

r2

r2

r2

r2

 

 

6

r3

r3

r3

r3

 

 

符号串ri,i# 的SLR(1)分析过程为:

分析栈

当前符号

剩余符号

执行的动作

#0

r

i,i#

push(r2)

#0r2

i

,i#

push(i6)

#0r2i6

,

i#

r(3)

#0r2D3

,

i#

push(,4)

#0r2 D3,4

i

#

push(i5)

#0r2 D3,4i5

#

 

r(2)

#0r2D3

#

 

r(1)

#0S1

#

 

OK

4.10 考虑文法G[S]:

      S->aA | bB

      A->0A |1

      B->0B |1

      (1) 构造文法的句柄识别器。

      (2) 判断该文法是否为LR(0)文法,若是,请构造LR(0)分析表,并给出符号串 a001# 的分析过程;若不是,请说明理由。

解答:

(1) 扩展文法:

       S`->S  (0)

S->a A (1)| b B (2)

    A->0 A (3) |1 (4)

    B->0 B (5) |1 (6)

构造的文法的句柄识别器为:

 

(2) 从以上句柄识别器中可以看出,没有任何状态存在移进和规约冲突,因此,是LR(0)文法。根据句柄识别器,可以得到LR(0)分析表如下:

 

a

b

0

1

#

S

A

B

0

a2

b4

 

 

 

S1

 

 

1

 

 

 

 

OK

 

 

 

2

 

 

06

18

 

 

A3

 

3

r(1)

r(1)

r(1)

r(1)

r(1)

 

 

 

4

 

 

09

1 11

 

 

 

B5

5

r(2)

r(2)

r(2)

r(2)

r(2)

 

 

 

6

 

 

06

18

 

 

A7

 

7

r(3)

r(3)

r(3)

r(3)

r(3)

 

 

 

8

r(4)

r(4)

r(4)

r(4)

r(4)

 

 

 

9

 

 

09

1 11

 

 

 

B10

10

r(5)

r(5)

r(5)

r(5)

r(5)

 

 

 

11

r(6)

r(6)

r(6)

r(6)

r(6)

 

 

 

符号串 a001# 的LR(0)分析过程如下:

分析栈

当前符号

剩余符号

执行的动作

#0

a

001#

push(a2)

#0a2

0

01#

push(06)

#0a206

0

1#

push(06)

#0a20606

1

#

push(18)

#0a2060618

#

 

r(4)

#0a20606A7

#

 

r(3)

#0a206A7

#

 

r(3)

#0a2A3

#

 

r(1)

#0S1

#

 

OK

附加题1:已知文法G[A]为:

A->aAB1|a

B->Bb|d

(1) 给出与G[A]等价的LL(1)文法G'[A];

(2) 构造G'[A]的预测分析表;

(3) 给出输入串aad1#的分析过程;

解答:

(1) 将递归和公因子处理后,得到的文法G'[A]为:

A->aA'

A'->AB1|ε

B->dB'

B'->bB'|ε

(2) 预测分析表为

 

a

b

1

d

#

A

->aA'

 

 

 

 

A'

->AB1

 

 

->ε

->ε

B

 

 

 

->dB'

 

B'

 

->bB

->ε

 

 

(3) 输入串aad1#的分析过程:

分析栈

当前符号

剩余符号

查分析表:操作

#A

a

ad1#

push(aA')

#A'a

a

ad1#

匹配a next(w)

#A'

a

d1#

 push(1B A)

#1BA

a

d1#

 push(A'a)

#1BA'a

a

d1#

匹配a next(w)

#1BA'

d

1#

 

#1B

d

1#

push(B'd)

#1B`d

d

1#

匹配d next(w)

#1B

1

#

push(ε)

#1

1

#

匹配1 next(w)

#

#

 

匹配,分析成功

 


第6章  中间代码及其翻译

【习题1】写出下列语句的四元式序列:

      (1) if(x>0) x=(a-b/2)*c

      (2) while (a∨b) b=2*a/5;

      (3) a1: y=2*x-6; …; goto a1;

解答:

(1)    四元式序列:

(2)    四元式序列:

(3)    四元式序列:

(1) ( lb   a1 )

(2) (*  t1 )

(3) ( -  t1  t2 )

(4) ( =  t2  y )

......

(8)  ( gt  a1 )

【习题2】表达式E的“值”描述如下:

如采用LR分析法,给出表达式(5*4+8)*2的语法树并在各结点注明语义值 val

解答:

按照表达式属性文法中的语义动作,得到属性语法树:

【习题3】设有文法G

E-> E + T | T

T-> T * F | F

F-> P↑F | P

P-> (E) | i

(1) 消除文法的左递归性,并构造适合递归子程序法的属性翻译文法。

(2) 消除文法的左递归性,并构造适合LL(1)分析法的属性翻译文法。

解答:

(1)    消除文法的左递归,可得到以下文法:

E -> T { + T}

T -> F { * F}

F-> P↑F | P

P -> ( E ) | i

根据这个文法,构造的适合递归子程序法的属性翻译文法:

E -> T { + T{GEQ(+)}}

T -> F { * F{GEQ(*)}}

F-> P↑F{GEQ(↑)} | P

P -> ( E ) | i {PUSH(i)}

(2) 消除文法的左递归,可得到以下文法:

E -> T E´                    

E´-> + T E´| e

T -> F T´

T´-> * F T´| e

F-> P↑F | P

P -> ( E ) | i

根据以上文法,构造的适合LL(1)分析法的属性翻译文法:

E -> T E´                    

E´-> + T {GEQ(+)} E´| e

T -> F T´

T´-> * F {GEQ(*)} T´| e

F-> P↑F{GEQ(↑)} | P

P -> ( E ) | i {PUSH(i)}

【习题4】根据6.4.2节给出的表达式的四元式属性翻译文法,写出a+b/c-d#的四元式 LL(1)法翻译过程(参照【例6.13 】)。

解答:

6.4.2节给出的表达式的四元式属性翻译文法为:

E -> T E´ ①                   

E´-> + T {GEQ(+)} E´②| - T {GEQ(-)} E´③| e

T -> F T´⑤

T´-> * F {GEQ(*)} T´⑥| / F {GEQ(/)} T´⑦| e

F -> i {PUSH(i)} ⑨ | ( E )

LL(1)分析表如下:

a+b/c-d#的四元式 LL(1)法翻译过程为:

SYN[n]

x

w

操作

SEM[M]

QT[q]

#E

E

a

pushR

 

 

#E´T

T

a

pushR

 

 

#E´T´F

F

a

pushR

 

 

#E´T´{PUSH(a)}a

a

a

next(w)

 

 

#E´T´{PUSH(a)}

 

+

PUSH(a)

a

 

#E´T´

T´

+

pushR

a

 

#E´

E´

+

pushR

a

 

# E´{GEQ(+)}T+

+

+

next(w)

a

 

# E´{GEQ(+)}T

T

b

pushR

a

 

# E´{GEQ(+)}T´F

F

b

pushR

a

 

# E´{GEQ(+)}T´{PUSH(b)}b

b

b

next(w)

a

 

# E´{GEQ(+)}T´{PUSH(b)}

 

/

PUSH(b)

a b

 

# E´{GEQ(+)}T´

T´

/

pushR

ab

 

# E´{GEQ(+)}T´{GEQ(/)}F/

/

/

next(w)

ab

 

# E´{GEQ(+)}T´{GEQ(/)}F

F

c

pushR

ab

 

# E´{GEQ(+)}T´{GEQ(/)}{PUSH(c)}c

c

c

next(w)

ab

 

# E´{GEQ(+)}T´{GEQ(/)}{PUSH(c)}

 

-

PUSH(c)

abc

 

# E´{GEQ(+)}T´{GEQ(/)}

 

-

GEQ(/)

abc

(/ b c t1)

# E´{GEQ(+)}T´

T´

-

pushR

a t1

 

# E´{GEQ(+)}

 

-

GEQ(+)

a t1

(+ a t1 t2)

# E´

E´

-

pushR

t2

 

# E´{GEQ(-)}T -

-

-

next(w)

t2

 

# E´{GEQ(-)}T

T

d

pushR

t2

 

# E´{GEQ(-)}T´F

F

d

pushR

t2

 

# E´{GEQ(-)}T´{PUSH(d)}d

d

d

next(w)

t2

 

# E´{GEQ(-)}T´{PUSH(d)}

 

#

PUSH(d)

t2 d

 

# E´{GEQ(-)}T´

T´

#

pushR

t2 d

 

# E´{GEQ(-)}

 

#

GEQ(-)

t2 d

(- t2 d t3)

# E´

E´

#

pushR

t3

 

#

 

#

OK

 

 

 

【习题5】给定二进制数的文法G(S)如下:

令 S 的综合属性 val 给出G(S)中 S 产生的二进制数的值,例如,对于输入 101.101 时,S.val=5.625

试给出二进制数求值的属性文法(给出属性求值规则)。

 

产生式

语义规则

S ->L 1.L2

S.val=L1.val+L2.val/2L2.length

S->L

S.val=L.val

L -> L1B

L.val=L1.val*2+B.val

L.length=L1.length+1

L -> B

L.val=B.val

L.length=1

B -> 0

B.val=0

B -> 1

B.val=1

 


第7章  符号表组织

【习题】设有程序片断如下,试填写符号表:

       float exe(x,y)

          int  x, y[5][10];

         { float a;  int b[5][10];

            

            b[2,5]=15; …

         }

 


第8章  代码优化

【习题1】试把以下程序段划分为基本块,并做出其程序流程:     

int C;

A = 0;

B = 1;

L1 :  A = A + B;

If B >= C goto L2;

B = B + 1;

goto L1;

L2:  print A;

halt;

基本块的划分:                           程序流程如下:

                  

根据基本块的入口语句的判断条件,入口语句为(1)、(4)、(8)、(9)、(12)

【习题2】设有基本块上的语句序列:

      A=2*3+B/C;

      B=2*3+B/C;

      C=2*3+B/C;

   1. 写出四元式序列,构造优化的 DAG 表示;

   2. 根据优化的 DAG ,重组四元式。

解答:

1.         以上序列的四元式序列为

(1)    ( * 2 3 t1)

(2)    (/ B C t2)

(3)    (+ t1 t2 t3)

(4)    (= t3 _ A)

(5)    ( * 2 3 t4)

(6)    (/ B C t5)

(7)    (+ t4 t5 t6)

(8)    (= t6 _ B)

(9)    ( * 2 3 t7)

(10) (/ B C t8)

(11) (+ t7 t8 t9)

(12) (= t9 _ C)

构造DAG,进行常值表达式节省、公共表达式节省和删除多余运算等优化,得到的优化的DAG为:

交换临时变量与非临时变量(t9与C,t3与A)后得到如下DAG

 

2. 根据基本块内优化的DAG,重组四元式:

(1) (/ B C t2)

(2) (+ 6 t2 A)

(3) (= A _ B)

(4) (/ A C t8)

(5) (+ 6 t8 C)


第 9 章  目标代码及其生成

9.4 假设可用寄存器为R0和R1,试对以下四元式序列G给出目标代码的生成过程:

T1=B-C

T2=A*T1

T3=D+1

T4=E-F

T5=T3*T4

W=T2/T5

解:

四元式

目标代码

寄存器

内存

T1=B-C

①LD R0,B

②SUB R0,C

R0含T1

 

T2=A*T1

③MUL R0,A

R0含T2

 

T3=D+1

④LD R1,D

⑤ADD R1,1

R0含T2

R1含T3

 

T4=E-F

⑥ST R0,T2

⑦LD R0,E

SUB R0,F

R0含T4

R1含T3

M含T2

T5=T3*T4

MUL R1,R0

R0含T4

R1含T5

M含T2

W=T2/T5

LD R0,T2

DIV R0,R1

ST R0,W

 

M含W

 


补充题

已知下列语句:

① if(a+b<c) x=(a+b)/(c-d)+(a+b);

② while (A!=0){A=2+B/C;B=2+B/C;}

试分别解答:

写出优化的四元式序列;

标记变量的活跃信息;

描述单寄存器R下的目标代码生成过程。

解:① if(a+b<c) x=(a+b)/(c-d)+(a+b)优化的四元式序列:

(1)  (+, a, b, t1)

(2)  (<, t1, c, t2)

(3)  (if, t2 , _ , 9)     

(4)  (+, a, b, t3)

(5)  (-, c, d, t4)

(6)  (/, t3, t4, t5                   

(7)  (+, t5, t3, x)                     

(8)  (ie, _, _, _)                                                    

附有活跃信息的四元式序列:

(1)  (+, a(y), b(y), t1(y))

(2)  (<, t1(n), c(y), t2(y))

(3)  (if, t2(n) , _ , 9)     

(4)  (+,a(y), b(y), t3(y))

(5)  (-, c(y), d(y), t4(y))

(6)  (/, t3(y), t4(n), t5(y))                    

(7)  (+, t5(n), t3(n), x(y))                     

(8)  (ie, _, _, _)                                                    

单寄存器R下的目标代码生成过程:

四元式

目标代码

SEM

RDV

(1)  (+, a(y), b(y), t1(y))

(1)LD R,a

(2)ADD R,b

 

t1(y)

(2)  (<, t1(n), c(y), t2(y))

(3)LT R,c

 

t2(y)

(3)  (if, t2(n) , _ , 9)

(4)FJ R,?(15)

(4)

 

(4)  (+,a(y), b(y), t3(y))

(5)LD R,a

(6)ADD R,b

 

t3(y)

(5)  (-, c(y), d(y), t4(y))

(7)ST R,t3

(8)LD R,c

(9)SUB R,d

 

t4(y)

(6)  (/, t3(y), t4(n), t5(y))

(10)ST R,t4

(11)LD R,t3

(12)DIV R,t4

 

t5(y)

(7)  (+, t5(n), t3(n), x(y))

(13)ADD R,t3

 

x

(8)  (ie, _, _, _)

(14)ST R,x

 

 

 

(15)

 

 

 

 

 

 

② while (A!=0){A=2+B/C;B=2+B/C;}优化的四元式序列:

(1)  (wh, _, _, _)

(2)  (!=, A, 0, t1)

(3)  (do, t1, _, 8)

(4)  (/, B, C, t2)

(5)  (+, 2, t2, A)

(6)  (=, A, _, B)

(7)  (we, _, _, 2)

附有活跃信息的四元式序列:

(1)  (wh, _, _, _)

(2)  (!=, A(y), 0, t1(y))

(3)  (do, t1(n), _, 8)

(4)  (/, B(y), C(y), t2(y))

(5)  (+, 2, t2(n), A(y))

(6)  (=, A(y), _, B(y))

(7)  (we, _, _, 2)

单寄存器R下的目标代码生成过程:

四元式

目标代码

SEM

RDV

(1)  (wh, _, _, _)

(1)

(1)

 

(2)  (!=, A(y), 0, t1(y))

(1)LD R,A

(2)NE R,0

 

t1(y)

(3)  (do, t1(n), _, 8)

(3)FJ R,?(10)

(3)

 

(4)  (/, B(y), C(y), t2(y))

(4)LD R,B

(5)DIV R,C

 

t2(y)

 

(5)  (+, 2, t2(n), A(y))

(6)ADD R,2

 

A

(6)  (=, A(y), _, B(y))

(7)ST R,B

 

A

(7)  (we, _, _, 2)

(8)ST R,A

(9)JMP ?(1)

 

 

 

(10)

 

 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有