编泽原理 语义分折和中闻代弱产鱼 表?.2产生赋值语句抽象语法树的属性文法 产生式 语义规则 s→id:=E S.nptr:=aknode('assign',akleaf (id,id.place),E.nptr) E→E1+E2 E.nptr:aknode'+,Ei.pt女,Ez.nptr) E→E超2 Eptr:aknode'术,Ei.npt虹,Ez.nptr) E→-E1 E.nptr:=aknode ('uninus',E1.nptr) E→但) E.nptr:=Ei.pt杠 E→id E.nptr:=nklef(id,id.place) 第16项
编译原理 第16页 语义分析和中间代码产生
编译原理 婚义分桥和中闻代号产熊 时节海-到h家从别号时k让 第7页
编译原理 第17页 语义分析和中间代码产生
编泽原理 特义分行和中闻代弱户生 三地址代码 墨三地址代码是由下面一般形式的语句构成的序列: x =y op z 其中,x,y,z为名字、常数或编译时产生的临时变量;op代表 运算符号如定点运算符、浮点运算符、逻辑运算符等等。 每个语句的右边只能有一个运算符。 例如,源语言表达式x+y*z可以被翻译为如下语句序列: T1:=y*z T2:=X+T1 其中,T山,T2为编译时产生的临时变量。 第8列
编译原理 第18页 语义分析和中间代码产生 三地址代码 三地址代码是由下面一般形式的语句构成的序列: x := y op z 其中,x,y,z为名字、常数或编译时产生的临时变量;op代表 运算符号如定点运算符、浮点运算符、逻辑运算符等等。 每个语句的右边只能有一个运算符。 例如,源语言表达式x+y*z 可以被翻译为如下语句序列: T1:=y*z T2:=x+T1 其中,Tl,T2为编译时产生的临时变量
编译原理 婚义分桥和中闻代号产熊 三地址代码可以看成是抽象语法树或DAG的一种线性表示。 T1:=-c T1:=-c T2:=b*灯1 T2:=b*灯1 T3:=-C Ts:=T2+T2 T4:=b*T3 a:=T5 Ts:=T2+Td a:=T5 (a) (b) 图7.5 相应于图7.3的树和DAG的三地址码 (a)对于抽象语法树的代码;(b)对于DAG的代码。 第19页
编译原理 第19页 语义分析和中间代码产生 三地址代码可以看成是抽象语法树或DAG的一种线性表示
编泽原理 语义分养和中间代号产生 三地址语句类似于汇编语言代码。语句可以带有符号标号, 而且存在各种控制流语句。符号标号代表存放中间代码的数 组中三地址代码语句的下标。 下面列出所使用的三地址语句的种类。 (1)形如X:=yopz的赋值语句,其中op为二元算术算符或 逻辑算符。 (2)形如x:=opy的赎值语句,其中op为一元算符,如一元 减ununus,逻辑非not,移位算符及转换算符(如将定点数转 换成浮点数)。 (3)形如x:y的复制语句,它将y的值赋给x。 (4)形如goto L的无条件转移语句,即下一条将被执行的语 句是带标号L的三地址语句。 第20负
编译原理 第20页 语义分析和中间代码产生 三地址语句类似于汇编语言代码。语句可以带有符号标号, 而且存在各种控制流语句。符号标号代表存放中间代码的数 组中三地址代码语句的下标。 下面列出所使用的三地址语句的种类。 (1)形如 x:=y op z 的赋值语句,其中 op 为二元算术算符或 逻辑算符。 (2)形如 x:= op y 的赎值语句,其中 op 为一元算符,如一元 减ununus,逻辑非not, 移位算符及转换算符(如将定点数转 换成浮点数)。 (3)形如 x:=y 的复制语句,它将y的值赋给x。 (4)形如 goto L 的无条件转移语句,即下一条将被执行的语 句是带标号L的三地址语句