语义分析与中间代码生成(I)

语义分析与中间代码生成(I)

ID:42282767

大小:590.51 KB

页数:35页

时间:2019-09-11

语义分析与中间代码生成(I)_第1页
语义分析与中间代码生成(I)_第2页
语义分析与中间代码生成(I)_第3页
语义分析与中间代码生成(I)_第4页
语义分析与中间代码生成(I)_第5页
资源描述:

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

1、编译原理第5章语法制导翻译技术和中间代码生成编译过程图词法分析语法分析语义分析及 中间代码生成代码优化目标代码生成词法规则→单词符号语法规则,语法成分、语法检查语义审查,中间代码等价变换更为高效机器指令代码语义处理分析语义,语法上合法的程序的意义属性文法,描述语义语义正确的前提下,进行代码翻译语法制导翻译法某种形式的中间语言代码5.1属性文法上下文无关文法的基础上,允许每个文法符号根据处理的需要,定义与之相关联的属性,属性的计算规则。E→E+TE的数据类型E.typeE的存储位置E.placeE的值E.value属性文法AG=(G,V,E)G上下文无关文法V属性E断言

2、(谓词),语义规则产生式语义规则LEnprint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valTT1*FT.val:=T1.val*F.valTFT.val:=F.valF(E)F.val:=E.valFdigitF.val:=digit.lexval表6.1一个简单台式计算器的属性文法属性与变量一样,可以进行计算和传递。属性加工的过程即是语义处理的过程。属性的计算规则L的虚属性换行符属性通常分为两类综合属性用于“自下而上”传递信息继承属性用于“自上而下”传递信息或者在兄弟之间传递信息语义规则的形式在一个属性文

3、法中,对应于每个产生式A→α都有一套与之相关联的语义规则,每条规则的形式为b=f(c1,c2,…,ck)属性b依赖于属性c1,c2,…,ck(1)b是A的一个综合属性,并且c1,c2,…,ck是产生式右边文法符号的属性;(2)b是产生式右边某个文法符号的一个继承属性,并且c1,c2,…,ck是A或产生式右边任何文法符号的属性。注意终结符只有综合属性,它们由词法分析器提供非终结符既可有综合属性也可有继承属性产生式DTLTintTrealLL1,idLid表6.2带继承属性L.in的属性文法语义规则L.in:=T.typeT.type:=integerT.typ

4、e:=realL1.in:=L.in;addtype(id.entry,L.in)addtype(id.entry,L.in)D→intL

5、realLL→L,id

6、idreala,b,crealid1,id2,id3的带注释的语法树图6.2在每个L结点都带有继承属性的语法树DTLL.in:=T.typeTintT.type:=integerTrealT.type:=realLL1,idL1.in:=L.in;addtype(id.entry,L.in)Lidaddtype(id.entry,L.in)DrealT,id3LLLid2id1,.type=rea

7、l.in=real.in=real.in=real继承属性综合属性终结符只有综合属性8+5*2LEnprint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valTT1*FT.val:=T1.val*F.valTFT.val:=F.valF(E)F.val:=E.valFdigitF.val:=digit.lexval8+5*2nLEnprint(E.val)EE1+TE.val:=E1.val+T.valETE.val:=T.valTT1*FT.val:=T1.val*F.valTFT.val:=F.va

8、lF(E)F.val:=E.valFdigitF.val:=digit.lexvaldigitLEnTETFdigitT+*FFdigit.lexval=8.val=8带注释的语法树(结点带有语义信息).val=8.val=8.val=18.lexval=5.val=5.val=5.val=10.lexval=2.val=2继承属性在语法树中,一个结点的继承属性由此结点的父结点和/或兄弟结点的某些属性确定。用继承属性来表示程序设计语言结构中的上下文依赖关系很方便。语义规则属性计算类型说明符号表操作代码生成……补充例1为文法S(L)

9、aLL,S

10、S写一个语义规则

11、,输出括号的对数。SSprint(S.num)S(L)S.num:=L.num+1SaS.num:=0LL1,SL.num:=L1.num+S.numLSL.num:=S.num为下面文法配备语义规则,使得语义处理结果是将中缀表达式变为后缀表达式如:输入是3+4*5输出是345*+补充例2G:EE+T

12、TTT*F

13、FF(E)

14、iEE+T{print‘+’}ETTT*F{print‘*’}TFF(E)Fi{print‘i’}F345EET+*T3F345+*3TFF*ETF345+TFF345ETETF345+*TFF3+

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

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

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