a:=b(c)+b*(-c)的图表示 法 assign assign minus b minus b ulmus 抽象语法树 DAG
a:=b*(-c)+b*(-c)的图表示 法 assign a + * b uminus c DAG assign a + * b uminus c 抽象语法树 * b uminus c
x生赋值话句抽象语法树的属性文法 产生式 语义规则 S+id: =E Snptr: =mknode( assign' mkleaf(id, id place), E.nptr) EE+E2 Enptr: =mknode( + E,nptr, E2nptr) EE E2 Enptr: =mknode(*, E, nptr, E2 nptr) E→-E E nptr: =mknode(uminus', E, nptr) E→(E1 Enptr:=E1nptr E-id Enptr: =mkleaf(id, id place)
产生赋值语句抽象语法树的属性文法 产 生 式 语义规则 S→id:=E S.nptr:=mknode(‘assign’ , mkleaf(id,id.place), E.nptr) E→E1+E2 E.nptr:=mknode(‘+’,E1 .nptr, E2 .nptr) E→E1 *E2 E.nptr:=mknode(‘*’,E1 .nptr, E2 .nptr) E→-E1 E.nptr:=mknode(‘uminus’, E1 .nptr) E→ (E1 ) E.nptr:=E1 .nptr E→id E.nptr:=mkleaf(id, id.place)
2713三地址代码 三地址代码的一般形式: X=y op Z 三地址代码可以看成是抽象语法树或 DAG的一种线性表示
2.7.1.3 三地址代码 三地址代码的一般形式: x:=y op z 三地址代码可以看成是抽象语法树或 DAG的一种线性表示
a:ab(-c)+b*(-c)的代码 =-C T:=-C 2:=bT1 +T2 T2= T1 T2:=-C T'=b*T a T≤=T2+T a 5 对于抽象语法树的代码对于DAG的代码
a:=b*(-c)+b*(-c)的代码 T1 :=-c T1 :=-c T2 :=b*T1 T2 :=b*T1 T3 :=-c T5 :=T2+T2 T4 :=b*T3 a:=T5 T5 :=T2+T4 a:=T5 对于抽象语法树的代码 对于DAG的代码
地址语句的种类 eX: y op Z ●x:=opy PX:=y ● goto L e if x relop y goto Liif a goto L ● param x和calp.n,以及返回语句 return y ●X:=y及Ⅺ[j=y的索引赋值 ●x:=&y,x:=y和*x=y的地址和指针赋值
三地址语句的种类 x:=y op z x:=op y x:=y goto L if x relop y goto L或if a goto L param x和call p,n,以及返回语句return y x:=y[i]及x[i]:=y的索引赋值 x:=&y, x:=*y和*x:=y的地址和指针赋值