原子语句的中间代码.ppt

原子语句的中间代码.ppt

ID:57972849

大小:159.50 KB

页数:26页

时间:2020-09-04

原子语句的中间代码.ppt_第1页
原子语句的中间代码.ppt_第2页
原子语句的中间代码.ppt_第3页
原子语句的中间代码.ppt_第4页
原子语句的中间代码.ppt_第5页
资源描述:

《原子语句的中间代码.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、原子语句的中间代码输入输出语句:SWrite(E)E.tuple(WRITE,E.Arg);SRead(V)V.tuple(READ,V.Arg)语法制导:SRead(V)#READSWrite(E)#WRITE赋值语句:赋值语句形式:V:=EVptr:=V1ptrf:=EVstr:=V1str赋值语句的中间代码形式:(ASSIGN,Arg1,Arg2,n)或(FLOAT,Arg1,Arg2)SL:=RL.tupleR.tuple(ASSIGN,R,Arg,L.Arg,size)或(FLOAT,R.Arg,L.Arg)语法制导:SL:=R#ASSIGN过函调用语句S

2、id(E1,E2,…,En)E1.tuple…En.tuple(ACT,E1.Arg)…(ACT,En.Arg)(CALL,,result)或(CALL,)传给形参形参实参结合中间代码:(VALACT,Ei.Arg,offseti,sizei)……值参(VARACT,Ei.Arg,offseti,sizei)……变参(FUNCACT,Ei.Arg,offseti,sizei)……函数参数(PROACT,Ei.Arg,offseti,sizei)……过程参数过/函调用代码:(call,,true,result)静态转向地址(call,,false,resul

3、t)动态转向地址GOTO语句和标号语句的中间代码LABELL1,L2,...,Ln空SGOTOLi(JUMP,ARG(Li))SLi:S(LABEL,ARG(Li))S.tuple结构语句的中间代码条件语句的中间代码While语句的中间代码Repeat语句的中间代码For语句的中间代码Case语句的中间代码条件语句的中间代码IFETHENS1ELSES2E.Tuple(JUMP0,E.Arg,S.ElseL)S1.Tuple(JUMP,S.OutL)(LABEL,S.ElseL)S2.Tuple(LABEL,S.OutL)IFETHENSE.Tuple(JUMP0,E.Arg

4、,S.OutL)S1.Tuple(LABEL,S.OutL)条件语句代码生成原理在if处:产生标号S.ElseL和S.OutL;在then处:产生中间代码(JUMP0,E.Arg,S.ElseL);在else处:产生中间代码(JUMP,S.OutL)(LABEL,S.ElseL)在S出口处:(LABEL,S.OutL).条件语句代码生成的LL文法S→if#StartIFEthen#TestIFS1ElsePartElsePart→else#GenJump#GenElseLS2#GenOutLElsePart→#GenElseL#StartIF:生成两个标号S.ElseL,S.O

5、utL#TestIF:Generate(JUMP0,E.Arg,S.ElseL)#GenJump:Generate(JUMP,ElsePart.OutL)#GenElseL:Generate(LABEL,ElsePart.ElseL)#GenOutL:Generate(LABEL,ElsePart.OutL)While语句的中间代码SWHILEEDOS1E.Tuple(JUMP0,E.Arg,S.OutL)S1.Tuple(JUMP,S.StartL)(LABEL,S.OutL)(LABEL,S.StartL)While语句代码生成原理当遇While时:产生新标号S.Start

6、L和S.OutL,产生代码(LABEL,S.StartL)当遇Do时:产生代码(JUMP0,E.Arg,S.OutL)当遇结束符时:产生代码(JUMP,S.StartL)(LABEL,S.OutL)While语句代码生成的LL文法S→while#StartWhileEdo#WhileTestS1#FinishWhile#StartWhile:产生新标号S.StartL,S.OutL#WhileTest:Generate(JUMP0,E.Arg,S.OutL)#FinishWhile:Generate(JUMP,S.StartL)Generate(LABEL,S.OutL)Repe

7、at语句的中间代码SrepeatSLuntilESL.Tuple(JUMP0,E.Arg,S.StartL)E.Tuple(LABEL,S.StartL)代码生成原理和LL动作文法循环入口处:(LABEL,S.StartL)循环出口处:(JUMP0,E.Arg,S.StartL)S→repeat#StartRepeatSLdoE#FinishRepeat#StartRepeat:生成S.StartLGenerate(LABEL,S.StartL)#FinishRepeat:Ge

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

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

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