资源描述:
《原子语句的中间代码.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、原子语句的中间代码输入输出语句:SWrite(E)E.tuple(WRITE,E.Arg);SRead(V)V.tuple(READ,V.Arg)语法制导:SRead(V)#READSWrite(E)#WRITE赋值语句:赋值语句形式:V:=EVptr:=V1ptrf:=EVstr:=V1str赋值语句的中间代码形式:(ASSIGN,Arg1,Arg2,n)或(FLOAT,Arg1,Arg2)SL:=RL.tupleR.tuple(ASSIGN,R,Arg,L.Arg,size)或(FLOAT,R.Arg,L.Arg)语法制导:SL:=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空SGOTOLi(JUMP,ARG(Li))SLi: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语句的中间代码SWHILEEDOS1E.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语句的中间代码SrepeatSLuntilESL.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