中间代码生成29259

中间代码生成29259

ID:38389504

大小:96.50 KB

页数:11页

时间:2019-06-11

中间代码生成29259_第1页
中间代码生成29259_第2页
中间代码生成29259_第3页
中间代码生成29259_第4页
中间代码生成29259_第5页
资源描述:

《中间代码生成29259》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第八章中间代码生成中间语言简单表达式的中间代码生成原子语句的中间代码生成结构语句的中间代码生成声明的中间代码中间语言后缀式----逆波兰式三地址中间代码(三元式、四元式)图结构中间代码(语法树、DAG)三地址中间代码三元式:i:(,op1,op2)四元式:(,op1,op2,result)如:a:=b×c+b×d三元式四元式(1)(×,b,c)(1)(×,b,c,t1)(2)(×,b,d)(2)(×,b,d,t2)(3)(+,(1),(2))(3)(+,t1,t2,t3)(4)(:=,(3),a)(4)(:=,t3,a,-)简单表达式的中间代码形式ECTuple(E)=

2、空,ARG(E)=C.valExTuple(E)=空,ARG(E)=x.valEE1E2Tuple(E)=Tuple(E1)

3、

4、Tuple(E2)

5、

6、(,ARG(E1),ARG(E2),t)ARG(E)=t,t是临时变量表达式的语义信息:表达式种类:E.kind表达式的类型:E.type表达式的结果值ARG:E.Arg或ARG(E)标号L:ARG(L)=LabelForm’(L)整数C:ARG(C)=ValueForm’(C)源程序变量X:ARG(X)=AddrForm’(L,Off,Mode)临时变量T:ARG(T)=AddrForm’(-1,off,Mode)表达

7、式的中间代码:E.tuple产生一条中间代码的子程序GenCode():运算分量(栈顶和次栈顶)类型检查;如需类型转换:生成类型转换中间代码;生成操作的中间代码;从栈中删除运算分量的语义信息;表达式结果的语义信息压栈简单表达式中间代码 的LR语法制导ETEE+T#GenCode(+)TPTT×P#GenCode(×)PC{Push((C.type,C.Arg))}Pid{Push(VarType(entry),VarArg(entry))}P(E)简单表达式的LL语法制导ETEsEs+T#GenAddEsEsTPTsTs*P#GenMulTsTs

8、Pid#VPrimaryPC#CPrimaryP(E)GenAdd:GenCode(+);GenMul:GenCode(×)Vprimary,Cprimary:同上。变量中间代码结构V.tuple=空VV1.idV1.tuple(AADD,V1.Arg,offset(id),V.Arg)VV1[E]V1.tupleE.tuple(SUBI,E.Arg,low,t1)(MULTI,t1,size,t2)(AADD,V1.Arg,t2,V.Arg)VV1V1.tuple(ASSIGN,V1.Arg,V.Arg)Vid变量中间代码的LR语法制导Vid{Push

9、((VarType(entry),VarArg(entry)))}VV1.id#FieldVarFieldVar:L:=Sem[top-1];R:=Sem[top];ResultArg:=NewTemp(indir);Generate(AADD,L.Arg,R.arg,ResultArg)Pop(2),Push((R.type,ResultArg))VV1[E]#IndexVarIndexVar:L:=Sem[top-1];R:=Sem[top];ResultArg:=NewTemp(indir);ResultType:=L.Type.ElemType;Low:=L.Ty

10、pe.Low;Size:=L.Type.ElemSize;Generate(SUBI,R.Arg,Low,t1);Generate(MULI,t1,Size,t2);Generate(AADD,L.Arg,t2,ResultArg);POP(2);Push((ResultType,ResultArg));VV1#DenoVarDenoVar:ResultArg:=NewTemp(indir);ResultType:=Sem[top].Type.BaseType;Generate(ASSIG,Sem[top].Arg,ResultArg)POP(1);Push((Resul

11、tType,ResultArg))表达式中间代码生成的例子a[5+i].x+m*z其中,i,m:integer;z:real;a:array[1..100]ofrt;rt=recordy:int;x:realend(ADDI,5,i,t1)(SUBI,t1,1,t2)(MULTI,t2,2,t3)(AADD,a,t3,t4)5.(AADD,t4,1,t5)6.(FLOAT,m,t6)7.(MULTF,t6,z,t7)8.(ADDF,t5,t7,t8)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。