Presentation is loading. Please wait.

Presentation is loading. Please wait.

Zhang Zhizheng 8 Intermediate code generation Zhang Zhizheng

Similar presentations


Presentation on theme: "Zhang Zhizheng 8 Intermediate code generation Zhang Zhizheng"— Presentation transcript:

1 Zhang Zhizheng seu_zzz@seu.edu.cn 8 Intermediate code generation Zhang Zhizheng seu_zzz@seu.edu.cn

2 Zhang Zhizheng seu_zzz@seu.edu.cn 8.0 Overview 1.Position of Intermediate code generator parser Token stream static checker Syntax tree Intermedi ate code generator Syntax tree Intermediate code Code generator

3 Zhang Zhizheng seu_zzz@seu.edu.cn 2.Benefits for using a machine- independent intermediate form Retargeting is facilitated ; a compiler for a different machine can be created by attaching a back end for the new machine to an existing front end. A machine-independent code optimizer can be applied to the intermediate representation.

4 Zhang Zhizheng seu_zzz@seu.edu.cn 3.Implementation of Intermediate code generator Syntax-directed translation, folded into parsing –Top-down parsing –Bottom-up parsing

5 Zhang Zhizheng seu_zzz@seu.edu.cn 8. 1 Intermediate languages 1.Intermediate representations –Syntax tree Syntax Tree Directed acyclic graph(DAG) –Postfix notation –Three-address code –Quadruple

6 Zhang Zhizheng seu_zzz@seu.edu.cn A syntax tree and DAG for the assignment statement : a:=b*-c+b*-c assign a + b ** buminus cc assign a + b * uminus c

7 Zhang Zhizheng seu_zzz@seu.edu.cn Production of Syntax Tree (and DAG) Production Semantic rules S  id:=E id.value=E.value E  E 1 + E 2 E.value=E 1.value+E 1.value E  E1 * E2 E.value=E1.value  E1.value E  - E1 E.value=-E1.value E  ( E1) E.value=E1.value E  id E.value=id.lexival Semantic rules on value attribution of assignment statement

8 Zhang Zhizheng seu_zzz@seu.edu.cn Production Semantic rules S  id:=E S.nptr:=maknode(‘assign’, mkleaf(id, id.place), E. nptr) E  E 1 + E 2 E.nptr= maknode(‘+’, E 1.nptr, E 1.nptr) E  E1 * E2 E.nptr= maknode(‘*’, E1.nptr, E1.nptr) E  - E1 E.nptr= maknode(‘uminus’, E1.nptr) E  ( E1) E.nptr= E1.nptr E  id E.nptr= maknode(id, id.place) Semantic rules on producing syntax tree of assignment statement

9 Zhang Zhizheng seu_zzz@seu.edu.cn Representations of the syntax tree ____the data structure of graph See Fig. 8.4

10 Zhang Zhizheng seu_zzz@seu.edu.cn 2.Three-address code(TAC) A sequence of statements of the general form x= y op z Here, x, y, z are names, constants, or compiler- generated temporaries; op stands for any operator

11 Zhang Zhizheng seu_zzz@seu.edu.cn Notes: 1)There is only one operator on the right side of a statement 2) Three address code is a linearized representation of a syntax tree or a DAG in which explicit names correspond to the interior nodes of the graph 3) Each three-address code statement contains three addresses, two for the operands and one for the result

12 Zhang Zhizheng seu_zzz@seu.edu.cn E.g, Tree address code corresponding to the above Tree and DAG t1:=-c t2:=b*t1 t3:=-c t4:=b*t3 t5:=t2+t4 a:=t5 Code for the syntax tree t1:=-c t2:=b*t1 t5:=t2+t2 a:=t5 Code for the DAG

13 Zhang Zhizheng seu_zzz@seu.edu.cn 3. Types of TAC –x:=y op z //assignment statement, op is binary arithmetic or logical operation// –x:=op y //assignment statement, op is unary operation as minus, logical negative, conversion operator etc.// –x:=y //Copy assignment statement// –goto L //Unconditional jump// –If x relop y goto L //Conditional jump: if x stands in relation relop to y, then executes the statement with label L, else executed the following statement // –param x 1 …… param x n call p,n return y //Call procedure P with n parameters (x1,……,xn)//

14 Zhang Zhizheng seu_zzz@seu.edu.cn –x=y[i] x[i]=y –x=&y //the value of x is the location of y// x=*y *x=y

15 Zhang Zhizheng seu_zzz@seu.edu.cn 4.Syntax-directed Translation into TAC

16 Zhang Zhizheng seu_zzz@seu.edu.cn E.g, a:=b*-c+b*-c can be translated into t1:=-c t2:=b*t1 t3:=-c t4:=b*t3 t5:=t2+t4 a:=t5 How translate??

17 Zhang Zhizheng seu_zzz@seu.edu.cn Production Semantic Rules S  id:=E S.code:=E.code||gen(id.place ‘:=’ E.place) E  E 1 +E 2 E.place:=newtemp(); E.code:=E 1.code||E 2.code|| gen(E.place,’:=’,E 1.place ‘+’ E 2.place) E  E1*E2 E.place:=newtemp(); E.code:=E1.code||E2.code|| gen(E.place,’:=’,E1.place ‘*’ E2.place) E  -E1 E.place:=newtemp(); E.code:=E1.code|| gen(E.place,’:=’, ‘uminus’ E2.place) E  id E.place:=id.place E.code:=‘’ E.place,the name that will hold the value of E E.code, the sequence of three-address statements evaluating E.

18 Zhang Zhizheng seu_zzz@seu.edu.cn Production Semantic Rules S  while E do S 1 S.begin=newlabel(); S.after=newlabel(); S.code=gen(S.begin ‘:’)||E.code|| gen(‘if’ E.place ‘=‘ ‘0’ ‘goto’ S.after) || S 1.code || gen(‘goto’ S.begin) || gen(S.after ‘:’)

19 Zhang Zhizheng seu_zzz@seu.edu.cn Production Semantic Rules S  if E then S 1 S.after=newlabel(); S.code=E.code|| gen(‘if’ E.place ‘=‘ ‘0’ ‘goto’ S.after) || S 1.code || gen(S.after ‘:’)

20 Zhang Zhizheng seu_zzz@seu.edu.cn Production Semantic Rules S  if E then S 1 S.after=newlabel(); else S 2 E.false=newlabel(); S.code=E.code|| gen(‘if’ E.place ‘=‘ ‘0’ ‘goto’ E.false) || S 1.code || gen(‘goto’ S.after) || gen(E.false ‘:’) || S 2.code || gen(S.after ‘:’)

21 Zhang Zhizheng seu_zzz@seu.edu.cn 5.Addressing array elements 1)One-dimensional array Addr(A[i])=base+(i-low)*w=i*w+(base-low*w) Notes: 1)Here, we assume the width of each array element is w and the start address of the array block is base. 2)The array is defined as array[low..upper] of type 3)The sub-expression c=base-low*w can be evaluated when the declaration of the array is seen and we assume that c is saved in the symbol table entry for the array.

22 Zhang Zhizheng seu_zzz@seu.edu.cn 2)two-dimensional array (1)row-major form Addr(A[i1, i2])= base+((i1-low1)*n2+i2-low2)*w =(i1*n2+i2)*w+base-(low1*n2+low2)*w Where n2=upper2-low2+1 t1=low1*n2 t2=t1+low2 t3=t2*w t4=base-t3 t5=i1*n2 t6=t5+i2 t7=t6*w t4[t7]=x x=t4[t7] (2) column-major form

23 Zhang Zhizheng seu_zzz@seu.edu.cn 3)n-dimensional array Array[l 1 :u 1,, l 2 :u 2,… l n :u n ] Let d i =u i -l i +1,i=1,2,…n, the width of each dimension is m D=a+((i 1 -l 1 )d 2 d 3 …d n + (i 2 -l 2 )d 3 d 4 …d n + (i n-1 -l n-1 )d n + (i n -l n ))m Change into D=conspart+varpart conspart=a-C C=((…(l 1 d 2 +l 2 )d 3 + l 3 ) d 3 …+ l n-1 ) d n + l n )m varpart= ((…(i 1 d 2 +i 2 )d 3 + i 3 ) d 3 …+ i n-1 ) d n + i n )m

24 Zhang Zhizheng seu_zzz@seu.edu.cn 6.Short-circuit code of Boolean expressions Translate a boolean expression into intermediate code without evaluating the entire expression.

25 Zhang Zhizheng seu_zzz@seu.edu.cn 7. Translation methods of Flow of control statements in Short-circuit code 1)Associate E with two labels E.true –The label to which control flows if E is true E.false –The label to which control flows if E is false

26 Zhang Zhizheng seu_zzz@seu.edu.cn 2)Associate S with a label S.next –Following S.code is a jump to some label

27 Zhang Zhizheng seu_zzz@seu.edu.cn Production Semantic Rules S  if E then S1 E.true=newlabel(); E.false=S.next; S1.next=S.next; S.code=E.code ||gen(E.true ‘:’) ||S1.code S  if E then S1 else S2 E.true=newlabel(); E.false=newlabel(); S1.next=S.next S2.next=S.next S.code=E.code ||gen(E.true ‘:’) ||S1.code||gen(‘goto’ S.next)|| gen(E.false ‘:’)||S2.code

28 Zhang Zhizheng seu_zzz@seu.edu.cn Production Semantic Rules S  while E do S1 S.begin=newlabel(); E.true=newlabel(); E.false=S.next; S1.next=S.begin S.code=gen(S.begin ‘:’)||E.code ||gen(E.true ‘:’) ||S1.code||gen(‘goto’ S.begin)

29 Zhang Zhizheng seu_zzz@seu.edu.cn Production Semantic Rules E  E1 or E2 E1.true=E.true; E1.false=newlabel(); E2.true=E.true; E2.false=E.false E.code=E1.code ||gen(E1.false ‘:’) ||E2.code E  E1 and E2 E1.true=newlabel(); E1.false=E.false; E2.true=E.true; E2.false=E.false E.code=E1.code ||gen(E1.true ‘:’) ||E2.code E  id1 relop id2 E.code=gen(‘if’ id1.place relop.op id2.place ‘goto’ E.true)||gen(‘goto’ E.false)

30 Zhang Zhizheng seu_zzz@seu.edu.cn 3)Examples (1)a { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/3416843/12/slides/slide_29.jpg", "name": "Zhang Zhizheng seu_zzz@seu.edu.cn 3)Examples (1)a

31 Zhang Zhizheng seu_zzz@seu.edu.cn (2)while a { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/3416843/12/slides/slide_30.jpg", "name": "Zhang Zhizheng seu_zzz@seu.edu.cn (2)while a

32 Zhang Zhizheng seu_zzz@seu.edu.cn 8.Implementations of three-address statements Quadruples –(op, arg1,arg2,result) Triples –(n) (op,arg1,arg2) –(m) (op,(n),arg) Notes: A three-address statement is an abstract form of intermediate codes

33 Zhang Zhizheng seu_zzz@seu.edu.cn 9.Advantages of quadruples Easy to generate target code Good for optimizing

34 Zhang Zhizheng seu_zzz@seu.edu.cn Exercises Please translate the following program fragment into three-address code using the form of short circuit code. i=2; loop=0; while (loop==0 && i<=10) { j=1; while (loop ==0 && j { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/3416843/12/slides/slide_33.jpg", "name": "Zhang Zhizheng seu_zzz@seu.edu.cn Exercises Please translate the following program fragment into three-address code using the form of short circuit code.", "description": "i=2; loop=0; while (loop==0 && i<=10) { j=1; while (loop ==0 && j

35 Zhang Zhizheng seu_zzz@seu.edu.cn Translate the following program fragment into three-address code. i=2; m=0; loop=0; while (loop==0 && i<=10) { j=1; while (loop ==0 && j<=i) if (a[i,j] != a[j,i]) //”!=” means “not equal to” { loop=1; m=1; } else j=j+1; if (loop==0) i=i+1; } Notes: Here we assume that the declaration of array A is array [1..10,1..10], each data element of array A would only use 1 storage unit, and the start address of array A’s storage area is addrA.

36 Zhang Zhizheng seu_zzz@seu.edu.cn 8. 2 Assignment statements 1 、 Assignment statements with only id 1) functions NEWTEMP() GEN(OP,ARG 1,ARG 2,RESULT) 2)Semantic rules for quadruple code generation

37 Zhang Zhizheng seu_zzz@seu.edu.cn (1)A  i=E {GEN(=, EPLACE,_, i.entry} (2)E  -E (1) {T=NEWTEMP(); GEN(@, E (1)PLACE,_,T); EPLACE =T } (3)E  E (1) *E (2) {T=NEWTEMP(); GEN(*, E (1)PLACE, E (2)PLACE,T); EPLACE =T } (4)E  E (1) + E (2) {T=NEWTEMP(); GEN(+, E (1)PLACE, E (2)PLACE,T); EPLACE =T } (5)E  (E (1) ) {EPLACE =E (1)PLACE } (6)E  i {EPLACE = i.entry}

38 Zhang Zhizheng seu_zzz@seu.edu.cn iputSYMPLACEquadruples A=-B*(C+D)# =-B*(C+D)#i - -B*(C+D)#i= -- B*(C+D)#i=- --- *(C+D)#i=-i --- *(C+D)#i=-E --- B *(C+D)#i=E -- T 1 (@,B, -,T 1 ) (C+D)#i=E* -- T 1 - C+D)#i=E*( -- T 1 -- +D)#i=E*(i -- T 1 -- C +D)#i=E*(E -- T 1 -- C

39 Zhang Zhizheng seu_zzz@seu.edu.cn 3.The translation scheme for addressing array elements 1) grammar A  V:=E V  i[Elist] | i Elist  Elist,E | E E  E op E | (E) | V

40 Zhang Zhizheng seu_zzz@seu.edu.cn 3.The translation scheme for addressing array elements 2) Rewriting of the grammar A  V:=E V  Elist] | i Elist  Elist (1),E | i[ E E  E op E | (E) | V Notes: This rewriting aims that the various dimensional limits n j of the array be available as we group index expressions into an Elist.

41 Zhang Zhizheng seu_zzz@seu.edu.cn 3.The translation scheme for addressing array elements 3) semantic variables ARRAY DIM PLACE OFFSET

42 Zhang Zhizheng seu_zzz@seu.edu.cn 3.The translation scheme for addressing array elements 4) Translation code (1)A  V=E {if (VOFFSET=null) GEN(=,E PLACE,_,VPLACE); else GEN([ ]=,EPLACE,_,VPLACE[VOFFSET])}

43 Zhang Zhizheng seu_zzz@seu.edu.cn (2)E  E (1) op E (2) {T=NEWTEMP(); GEN(op, E (1) PLACE, E (2) PLACE,T); E PLACE =T} (3)E  (E (1) ) {E PLACE = E (1) PLACE} (4)E  V {if (VOFFSET=null) E PLACE = V PLACE; else {T=NEWTEMP(); GEN(=[ ], E PLACE[V OFFSET],_,T); E PLACE =T;}}

44 Zhang Zhizheng seu_zzz@seu.edu.cn (5)V  Elist] {if (TYPE[ARRAY]<>1) {T=NEWTEMP(); GEN(*,ElistPLACE,TYPE[ARRAY],T); Elist PLACE=T;} V OFFSET=Elist PLACE; T=NEWTEMP(); GEN(-,HEAD[ARRAY],CONS[ARRAY],T); V PLACE=T} (6)V  i {V PLACE=ENTRY[i]; V OFFSET=null}

45 Zhang Zhizheng seu_zzz@seu.edu.cn (7)Elist  Elist (1),E {T=NEWTEMP(); k= Elist (1) DIM+1; d k =LIMIT(Elist (1) ARRAY,k); GEN(*,Elist (1) PLACE, d k,T); T 1 =NEWTEMP(); GEN(+,T,E PLACE, T 1 ); ElistARRAY= Elist (1) ARRAY; ElistPLACE= T 1 ; ElistDIM=k;

46 Zhang Zhizheng seu_zzz@seu.edu.cn (8)Elist  i[ E {ElistPLACE=EPLACE; ElistDIM=1; ElistARRAY=ENTRY(i)}

47 Zhang Zhizheng seu_zzz@seu.edu.cn E.g. Let A be an array:ARRAY[1:10,1:20]; the address of the beginning of the array is a, m=1. We can get C by the computing: (low1*n2+low2)*m=(1*20+1)*1=21 The quadruples for X=A[I,J] are: (1) (*,I,20,T 1 ) (2) (+, T 1,J, T 2 ) (3) (-,a,21, T 3 ) (4) (=[ ], T 3 [T 2 ],_, T 4 ) (5) (=, T 4,_,X)

48 Zhang Zhizheng seu_zzz@seu.edu.cn 8. 3 Boolean expressions 1.Primary purposes of boolean expressions –Compute logical values –Used as conditional expressions in statements that alter the flow of control,such as if or while statements. 2.Grammar –E  E and E | E or E | not E | (E) | i | E a rop E a

49 Zhang Zhizheng seu_zzz@seu.edu.cn 3.Numerical representation (1)E  E a (1) rop E a (2) {T=NEWTEMP(); GEN(rop, E a (1)PLACE, E a (2)PLACE,T); EPLACE =T } (2)E  E (1) bop E (2) {T=NEWTEMP(); GEN(bop, E (1)PLACE, E (2)PLACE,T); EPLACE =T }

50 Zhang Zhizheng seu_zzz@seu.edu.cn 3.Numerical representation (3)E  not E (1) {T=NEWTEMP; GEN( not, E (1)PLACE, _,T); EPLACE =T } (4)E  (E (1) ) {EPLACE =E (1)PLACE } (5)E  i {EPLACE = ENTRY(i)}

51 Zhang Zhizheng seu_zzz@seu.edu.cn 3.Numerical representation E.g. X+Y>Z or A and (not B or C) (+,X,Y,T 1 ) ;E+E (>, T 1,Z, T 2 ) ; E >E (not,B,_, T 3 ) ; not E (or, T 3,C, T 4 ) ; E or E (and,A, T 4,T 5 ) ; E and E (or, T 2, T 5, T 6 ) ; E or E

52 Zhang Zhizheng seu_zzz@seu.edu.cn 4.Short-circuit code Translate a boolean expression into intermediate code without evaluating the entire expression. Represent the value of an expression by a position in the code sequence.

53 Zhang Zhizheng seu_zzz@seu.edu.cn E.g. if A or B { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/3416843/12/slides/slide_52.jpg", "name": "Zhang Zhizheng seu_zzz@seu.edu.cn E.g.", "description": "if A or B

54 Zhang Zhizheng seu_zzz@seu.edu.cn 8.4 Backpatching 1.Why and what is backpatching? When generating code for boolean expressions and flow- of-control statements, we may not know the labels that control must go to. We can get around this problem by generating a series of branching statement with the targets of the jumps temporarily left unspecified. Each such statement will be put on a list of goto statements whose labels will be filled in when the proper label can be determined. This subsequent filling in of labels is called backpatching

55 Zhang Zhizheng seu_zzz@seu.edu.cn 2.Functions to manipulate lists of labels related to backpatching Makelist(i) –Creates a new list containing only i, an index into the array of quadruples; makelist returns a pointer to the list it has made. Merge(p1,p2) –Concatenates the lists pointed to by p1 and p2, and returns a pointer to the concatenated list. Backpatch(p,i) –Inserts i as the target label for each of the statements on the list pointed to by p.

56 Zhang Zhizheng seu_zzz@seu.edu.cn 3.Boolean expression 1)Modify the grammar E  E A E | E 0 E | not E | (E) | i | E a rop E a E A  E and E 0  E or 2)Semantic Rules (1) E  i {ETC=NXQ; EFC=NXQ+1; GEN(jnz,ENTRY(i),_,0); GEN(j,_,_,0)}

57 Zhang Zhizheng seu_zzz@seu.edu.cn 3.Boolean expression 2)Semantic Rules (2) E  E a rop E a {ETC=NXQ; EFC=NXQ+1; GEN(jrop, E a (1)PLACE, E a (2)PLACE,0); GEN(j,_,_,0)} (3) E  (E (1) ) {ETC= E (1)TC; EFC= E (1)FC} (4) E  not E (1) {ETC= E (1)FC; EFC= E (1)TC}

58 Zhang Zhizheng seu_zzz@seu.edu.cn 3.Boolean expression 2)Semantic Rules (5)E A  E (1) and {BACKPATCH(E (1)TC,NXQ); E A FC= E (1)FC;} (6) E  E A E (2) {ETC= E (2) TC; EFC=MERG(E A FC,E (2) FC}

59 Zhang Zhizheng seu_zzz@seu.edu.cn 3.Boolean expression 2)Semantic Rules (7)E 0  E (1) or {BACKPATCH(E (1) FC,NXQ); E 0 TC= E (1) TC;} (8) E  E 0 E (2) {EFC= E (2) FC; ETC=MERG(E 0 TC,E (2) TC}

60 Zhang Zhizheng seu_zzz@seu.edu.cn Translate A and B or not C -2----# E A i or not C# -2--# E A B or not C# 2.(j,-,-(5))-2--1-#E and B or not C# 1.(jnz,a,-,(3))-2#E and B or not C# -- #i and B or not C# --# A and B or not C# quadrupleFCTCSYMINPUT

61 Zhang Zhizheng seu_zzz@seu.edu.cn quadrupleFCTCSYMINPUT 3.(jnz,B, -,0) - 2 4 -- 3 # E A E or not C # success -5-5 -6-6 #E # 6.(j, -, -,3) -- 5 - 3 6 # E 0 E # 5.(jnz,C, -,0) --- 6 -3-5-3-5 # E 0 not E # -----3---3-- # E 0 not i # ----3--3- # E 0 not C # ---3-3 # E 0 not C # -4--4--3--3- #E or or not C # 4.(j, -, - (5)) -4-4 -3-3 #E or not C #

62 Zhang Zhizheng seu_zzz@seu.edu.cn 4.Flow of control statements 1)modify the grammar S  if E then S (1) else S (2)  C  if E then T  C S (1) else S  T S (2) S  if E then S (1)  C  if E then S  C S (1)

63 Zhang Zhizheng seu_zzz@seu.edu.cn 4.Flow of control statements 2) Semantic Rules C  if E then {BACKPATCH(ETC,NXQ); CCHAIN=EFC;} T  C S (1) else {q=NXQ; GEN(j, -, - 0); BACKPATCH(CCHAIN,NXQ); T CHAIN=MERG(S (1)CHAIN,q)} S  T S (2) {SCHAIN=MERG(TCHAIN,S (2)CHAIN)} S  C S (1) {SCHAIN=MERG(CCHAIN,S (1)CHAIN)}

64 Zhang Zhizheng seu_zzz@seu.edu.cn e.g. If a then if b then A:=2 else A:=3 Else if c then A=4 Else a=5 (1) (jnz,a,_,0) (2) (j,_,_,0)

65 Zhang Zhizheng seu_zzz@seu.edu.cn If a then if b then A:=2 else A:=3 Else if c then A=4 Else a=5 (1)(jnz,a,_,(3)) (2)(j,_,_,0) (3)(jnz,b,_,0) (4)(j,_,_,0) CaCHAIN->2

66 Zhang Zhizheng seu_zzz@seu.edu.cn If a then if b then A:=2 else A:=3 Else if c then A=4 Else a=5 (1)(jnz,a,_,(3)) (2)(j,_,_,0) (3)(jnz,b,_,(5)) (4)(j,_,_,0) CaCHAIN->2 CbCHAIN->4 (5)(:=,2,_,A)

67 Zhang Zhizheng seu_zzz@seu.edu.cn If a then if b then A:=2 else A:=3 Else if c then A=4 Else a=5 (1)(jnz,a,_,(3)) (2)(j,_,_,0) (3)(jnz,b,_,(5)) (4)(j,_,_,(7)) (5)(:=,2,_,A) CaCHAIN->2 CbCHAIN->6 (6)(j,_,_,0)

68 Zhang Zhizheng seu_zzz@seu.edu.cn Answer (1)(jnz,a,_,(3)) (8)(j,_,_,6) (2)(j,_,_,(9)) (9)(jnz,c,_,(11)) (3)(jnz,b,_,(5)) (10)(j,_,_,(13)) (4)(j,_,_,(7)) (11)(:=,4,_,A) (5)(:=,2,_,A) (12)(j,_,_,8) (6)(j,_,_,0) (13)(:=,5,_,A) (7)(:=,3,_,A) SCHAIN->6->8->12

69 Zhang Zhizheng seu_zzz@seu.edu.cn a b S1(A:=2) S2(A:=3) c S3(A:=4) S4(A:=5) TRUE FALSE 1,2 3,4 5 7 9,10 11 13 6 8 12

70 Zhang Zhizheng seu_zzz@seu.edu.cn 4.Flow of control statements 3) While statement S  while E do S (1)  W  while W d  W E do S  W d S (1)

71 Zhang Zhizheng seu_zzz@seu.edu.cn 4.flow of control statements 3) While statement W  while {WQUAD=NXQ} W d  W E do {BACKPATCH(ETC,NXQ); W dCHAIN=EFC; W dQUAD=WQUAD;} S  W d S (1) {BACKPATCH(S (1)CHAIN, W dQUAD); GEN(j,_,_, W dQUAD); S CHAIN= W dCHAIN}

72 Zhang Zhizheng seu_zzz@seu.edu.cn 4.flow of control statements 3) While statement Code of E Code of S (1) S.CHAIN

73 Zhang Zhizheng seu_zzz@seu.edu.cn e.g. While (A { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/3416843/12/slides/slide_72.jpg", "name": "Zhang Zhizheng seu_zzz@seu.edu.cn e.g.", "description": "While (A

74 Zhang Zhizheng seu_zzz@seu.edu.cn e.g. While (A { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/3416843/12/slides/slide_73.jpg", "name": "Zhang Zhizheng seu_zzz@seu.edu.cn e.g.", "description": "While (A

75 Zhang Zhizheng seu_zzz@seu.edu.cn e.g. While (A { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/3416843/12/slides/slide_74.jpg", "name": "Zhang Zhizheng seu_zzz@seu.edu.cn e.g.", "description": "While (A

76 Zhang Zhizheng seu_zzz@seu.edu.cn e.g. While (A { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/3416843/12/slides/slide_75.jpg", "name": "Zhang Zhizheng seu_zzz@seu.edu.cn e.g.", "description": "While (A


Download ppt "Zhang Zhizheng 8 Intermediate code generation Zhang Zhizheng"

Similar presentations


Ads by Google