编译原理 第四章语义分析和中间代码生成.ppt

编译原理 第四章语义分析和中间代码生成.ppt

ID:48751414

大小:199.50 KB

页数:26页

时间:2020-01-21

编译原理   第四章语义分析和中间代码生成.ppt_第1页
编译原理   第四章语义分析和中间代码生成.ppt_第2页
编译原理   第四章语义分析和中间代码生成.ppt_第3页
编译原理   第四章语义分析和中间代码生成.ppt_第4页
编译原理   第四章语义分析和中间代码生成.ppt_第5页
资源描述:

《编译原理 第四章语义分析和中间代码生成.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第四章语义分析 和中间代码生成属性文法属性文法(attributegrammar)是一个三元组:A=(G,V,F),其中G:是一个上下文无关文法V:有穷的属性集,每个属性与文法的一个终结符或非终结符相连,F:关于属性的属性断言或谓词集.每个断言与一个产生式相联.而此断言只引用该产生式左端或右端的终结符或非终结符相联的属性表达式文法E→T+T

2、TorT T→n

3、bE→T1+T2{T1.type=intT2.type=T1.typeE.type:=int}E→T1orT2{T1.type=boolT2.type=T1.typeE.type:=bool}T→n{T.type:=int

4、}T→b{T.type:=bool}综合属性用于“自下而上”传递信息。由相应分析树中结点的分支结点属性计算得到。语义规则LEEE1+TETTT1*FTFF(E)FdigitPrint(E.val)E.val:=E1.val+T.valE.val:=T.valT.val:=T1.valF.valT.val:=F.valF.val:=E.valF.val:=digit.lexval产生式LE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F.val=3F.val=5digit.lexval=4digit.lexval=5digit.lexv

5、al=3+*3*5+4的带注释的分析树继承属性用于“自上而下”传递信息。由相应分析树中结点的父结点属性计算得到。产生式语义规则DTLTintTfloatLL1,idLidL.in:=T.typeT.type=intT.type:=floatL1.in:=L.in;addtype(id.entry,L.in)addtype(id.entry,L.in)floatid1,id2,id3的带注释的分析树DL.in=floatL.in=floatL.in=floatT.type=floatfloatid2id1id3,,1.语法树①根与内部结点由表达式中的操作符标记;②叶子由

6、表达式中的操作数标记;③用于改变运算优先级和结合性的括弧,被隐含在语法树的结构中;例:语法树只反映句型的结构,忽略了推导句型的过程。+id*idid几种常见的中间语言几种常见的中间语言2.逆波兰表示法a.表达式的逆波兰表示:①若E是变量或常数,则表示为:E②若为E1opE2形式,且op为二元运算符,则表示为:E1E2op③若为opE1形式,且op为一元运算符,则表示为:E1op④若为(E)形式,则表示为:E例:a*(b+c)可看成Eop(EopE),可写成abc+*(-a)*b+c*d可写成a-b*cd*+几种常见的中间语言2.逆波兰表示法b.程序语句的逆波兰表示:①BL:转向

7、某标号;②BT:条件为真时转移;③BF:条件为假时转移;④BR:无条件转移.几种常见的中间语言3.三地址代码三地址代码语句的一般形式为x=yopz例:表达式x+y*z的三地址语句为:t1=y*zt2=x+t1x=t2常用的三地址语句:x=yopzx=-yx=yparx1callpgotoLifxropygotoL几种常见的中间语言三地址代码的具体实现:四元式、三元式、间接三元式a.四元式的记录结构为:(op,arg1,arg2,result)例:求赋值语句a=b*(c+d)的四元式代码:首先写出这个赋值语句的三地址代码语句为:t1=c+dt2=b*t1a=t2再根据三地址代码语

8、句写出四元式代码为:(+,c,d,t1)(*,b,t1,t2)(=,t2,_,a)几种常见的中间语言b.三元式的记录结构为:(op,arg1,arg2)例:求赋值语句a=b*(c+d)的三元式代码:首先写出这个赋值语句的三地址代码语句为:t1=c+dt2=b*t1a=t2再根据三地址代码语句写出三元式代码为:①(+,c,d)②(*,b,①)③(=,a,②)几种常见的中间语言c.间接三元式例:求赋值语句a=b*(c+d)的三元式代码:首先写出这个赋值语句的三地址代码语句为:t1=c+dt2=b*t1a=t2再根据三地址代码语句写出间接三元式代码为:三元式表:①(+,c,d)②(*

9、,b,①)③(=,a,②)间接码表:①②③表达式及赋值语句的翻译1.简单算术表达式和赋值语句的翻译例:分析赋值语句X=-B*(C+D)的翻译过程.先转化为三地址代码:再翻译成四元式:T1=-B(uminus,B,_,T1)T2=C+D(+,C,D,T2)T3=T1*T2(*,T1,T2,T3)X=T3(=,T3,_,X)例:文法Ai=EEE+E

10、E*E

11、-E

12、(E)

13、i语义变量:i.name,E.place语义函数:lookup(i.name),newtemp()语义过程:emit(op

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

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

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