版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七讲
语法制导翻译和中间代码7.1属性文法7.2语法制导翻译概论7.3中间代码7.4一些语句的翻译第1页,共36页。属性文法属性文法(attributegrammar)是一个三元组:A=(G,V,F)F:关于属性的属性断言或谓词集.每个断言与一个产生式相联.而此断言只引用该产生式左端或右端的终结符或非终结符相联的属性V:有穷的属性集,每个属性与文法的一个终结符或非终结符相连G:是一个上下文无关文法第2页,共36页。表达式文法E→T+T|TorT
T→n|true|falseE→
T1+T2
{T1.type=intANDT2.type=T1.typeE.type:=int}E→
T1orT2
{T1.type=boolANDT2.type=T1.typeE.type:=bool}T→n{T.type:=int}T→true{T.type:=bool}T→false{T.type:=bool}类型检查的属性文法:第3页,共36页。语义规则
LEEE1+TETTT1*FTFF(E)FdigitPrint(E.val)
E.val:=E1.val+T.val
E.val:=T.val
T.val:=T1.val
F.val
T.val:=F.valF.val:=E.valF.val:=digit.lexval产生式综合属性val综合属性在分析树中,如果一个结点的某一个属性由其子结点的属性确定,则称这种属性为该结点的综合属性。产生副作用的语义规则,如打印一个值、向符号表中插入信息或更新一个全程变量等。语义规则函数都不具有副作用的语法制导定义称为属性文法。第4页,共36页。在语法制导定义中,一条语义规则完成一个计算属性值的动作。digit是终结符,只使用综合属性,且其属性值由词法分析器提供,通常不要计算属性值。LE.val=19E.val=15T.val=4T.val=15F.val=4T.val=3F.val=3F.val=5digit.lexval=4digit.lexval=5digit.lexval=3+*3*5+4的带注释的分析树如果一个语法制导定义仅仅使用综合属性,则称这种语法制导定义为S属性定义。通常采用自底向上的方法对其分析树加注释,即从树叶到树根,按照语义规则计算每个节点的属性值。第5页,共36页。继承属性一个结点的继承属性值是由此结点的父结点和/或兄弟结点的某些属性来决定的。生产式语义规则D
TL
T
int
T
real
L
L1,idL
idL.in:=T.typeT.type=integerT.type:=real
L1.in:=L.in
addtype(id.entry,L.in)
addtype(id.entry,L.in)继承属性L.in第6页,共36页。语句:
realid1,id2,id3
的分析树,采用自上而下的分析方法产生式语义规则D
TL
T
int
T
real
L
L1,idL
idL.in:=T.typeT.type=integerT.type:=real
L1.in:=L.in
addtype(id.entry,L.in)
addtype(id.entry,L.in)DL.in=realL.in=realL.in=realT.type=realrealid2id1id3..,,第7页,共36页。type#idA:=-B*(C+D)#true:将下列语句翻译成后缀式:{T1.true)(1)G:是一个上下文无关文法查看语意义子程序4~6type:=bool}#idA:=ET1*(ET2)#Sub2(+,C,D,T2)T=F(3)ifc<dgoto(5)place:=E1.语法制导翻译概论在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义子程序(或语义规则描述的语义动作)进行翻译的办法称作语法制导翻译。参见P.157-159对表达式2+3*5进行的分析第8页,共36页。中间代码的形成中间代码的常见形式:逆波兰记号三元式(树形表示)间接三元式四元式第9页,共36页。逆波兰记号(后缀式)将运算对象写在前面,把运算符号写在后面表达式逆波兰式a+bab+a+b*cabc*+(a+b)*cab+c*a:=b*c+b*dabc*bd*+:=计算方法:自左向右扫描逆波兰式,遇到运算对象则入栈,遇到算符则将相应数目的运算对象出栈计算后结果入栈。第10页,共36页。逆波兰记号的扩充用途-ii@GotoLLjumpifEthenS1elseS2ES1S2¥A[n][m]nmAsubs复杂性:压栈的可能是地址(如变量赋值),不是值;栈中不一定产生结果。第11页,共36页。逆波兰示例把下述产生式定义的算术表达式映射到后缀式表示:
EE+TET
TTFTF
F(E)
Fa
E=ET+
E=T
T=TF
T=F
F=E
F=a产生式 翻译成分第12页,共36页。确定输入a+a
a的输出:(E,E)(E+T,ET+)
(T+T,TT+)(F+T,FT+)(a+T,aT+)(a+TF,aTF+)(a+FF,aFF+)(a+aF,aaF+)(a+aa,aaa+)
EE+TET
TTFTF
F(E)
Fa
E=ET+
E=T
T=TF
T=F
F=E
F=a产生式 翻译成分第13页,共36页。将下列语句翻译成后缀式:
ifx>ytheny=y+zelsex=x+z错误的翻译:(ifEthenS1elseS2翻译成:ES1S2¥)xyyz>y+=z+xx=¥正确的翻译:xyyz>y+=z+xx=……L1JzL2Jmp
L1L2……第14页,共36页。三元式和树形表示格式:
(算符,第一运算对象,第二运算对象)如:
a:=b*c+b*d
(1) (*,b,c)
(2) (*,b,d)
(3) (+,(1),(2))
(4) (:=,(3),a):=a+**bcbd三元式表示树形表示第15页,共36页。间接三元式执行表三元式表第16页,共36页。例如:x:=(a+b)*c
b:=a+b
y:=c*(a+b)三元式:(+,a,b)(*,(1),c)(:=,(2),x)(+,a,b)(:=,(4),b)(+,a,b)(*,c,(6))(:=,(7),y)间接三元式:
三元式表执行表(+,a,b)(1)(*,(1),c)(2)(:=,(2),x)(3)(:=,(1),b)(1)(:=,(2),y)(4)
(1)
(2)
(5)第17页,共36页。四元式格式:
(算符,第一运算对象,第二运算对象,结果)如:
a:=b*c+b*d
(1) (*,b,c,t1)
(2) (*,b,d,t2)
(3) (+,t1,t2,t3)
(4) (:=,t3,,a)第18页,共36页。四元式的特点类似于三地址指令利于优化和代码生成第19页,共36页。四元式的直观表示t1:=b*c
t2:=b*d
t3:=t1+t2
a:=t3(jump,,,L) gotoL(jrop,B,C,L) ifBropCgotoL第20页,共36页。E.(1)(@,B,,T1)type=real*/thenplace“:=”“uminus”E1.E.p10(5)E(E1)true:=merge(E而此断言只引用该产生式左端或右端的终结符或非终结符相联的属性place“:=”E1.type:=int}第七讲语法制导翻译和中间代码三元式表执行表简单赋值语句的翻译四元式形式:
t:=arg1oparg2语义属性:,E.place
函数:lookup();
过程:emit(t:=arg1oparg2);
newtemp;返回指向id的指针输出四元式生成临时变量E.place:值E的位置第21页,共36页。产生式和语义描述:(1)S
id:=E{P:=lookup();ifP
nilthenemit(P“:=”E.place)elseerror}(2)E
E1+E2
{E.place:=newtemp;emit(E.place“:=”E1.place“+”E2.place)}(3)E
E1*E2
{E.place:=newtemp;emit(E.place“:=”E1.place“*”E2.place)}返回第22页,共36页。(4)E
-E1
{E.place:=newtemp;emit(E.place“:=”“uminus”E1.place)}(5)E
(E1){E.place:=E1.place}(6)E
id{P:=lookup();ifP
nilthenE.place:=Pelseerror}返回第23页,共36页。例:将下列语句翻译成四元式形式:A:=-B*(C+D)#A:=-B*(C+D)#查看语意义子程序1~3查看语意义子程序4~6
栈余留输入字符语意义动作产生的四元式#idA:=-B*(C+D)##idA:=-B*(C+D)##idA:=-B*(C+D)##idA:=-idB*(C+D)##idA:=-EB*(C+D)#Sub6#idA:=ET1*(C+D)#Sub4(@,B,,T1)#idA:=ET1*(C+D)##idA:=ET1*(C+D)##idA:=ET1*(idC+D)##idA:=ET1
*(EC+D)#Sub6#idA:=ET1*(EC+D)#第24页,共36页。查看语意义子程序1~3查看语意义子程序4~6栈余留输入字符语意义动作产生的四元式#idA:=ET1*(EC+D)##idA:=ET1*(EC+idD)##idA:=ET1*(EC+ED)#Sub6#idA:=ET1*(ET2)#Sub2(+,C,D,T2)#idA:=ET1*(ET2)##idA:=ET1*ET2#Sub5#idA:=ET3#Sub3(*,T1,T2,T3)#S
#Sub1(:=,T3,,A)第25页,共36页。语句A:=-B*(C+D)翻译成四元式形式为:(1)(@,B,,T1)(2)(+,C,D,T2)(3)(*,T1,T2,T3)(4)(:=,T3,,A)第26页,共36页。类型转换的语义处理E
E1*E2{E.place:=newtemp;ifE1.type=intANDE2.type=intthenBeginemit(E.place,‘:=’,E1.place,‘*i’,E2.place,);E.type=int;EndelseifE1.type=realANDE2.type=realthenBeginemit(E.place,‘:=’,E1.place,‘*r’,E2.place,);E.type=real;EndelseifE1.type=int/*E2.type=real*/thenBegint:=newtemp;emit(t,‘:=’,‘irt’,E1.place,);emit(E.place,‘:=’,t,‘*r’,E2.place,);E.type=real;Endelse/*E1.type=
real
AND
E2.type=int
*/
Begint:=newtemp;emit(t,‘:=’,‘irt’,E2.place);emit(E.place,‘:=’,E1.place,‘*r’,t);E.type=real;End}第27页,共36页。E.false控制语句中布尔表达式的翻译控制语句S®ifEthenS1
elseS2
E的代码
E.true
E.true:S1的代码
gotooutE.false:S2的代码out:……第28页,共36页。1.
把条件转移的布尔表达式E翻译成仅含
条件真
转
和
无条件
转
的四元式
E:aropb
?ifaropbgotoE.true
gotoE.false如
:a<borc<dande<f
可
翻译成如下四元式:(1)ifa<bgotoE.true(2)
goto(3)(3)
ifc<dgoto(5)(4)
gotoE.false(5)
ife<fgotoE.true(6)
gotoE.false
(翻译不是最优)第29页,共36页。2.拉链返填
……(10)
gotoL(10)goto0
……
……
链尾
(10)(20)
gotoL(20)goto10
……
……(30)
gotoL
(30)goto20
……
……
链头(30)(40)L:……
(40)L:?第30页,共36页。语句ifa<borc<dande<fthenS1
elseS2的四元式(1)
ifa<bgoto(7)
(E.true)(1)和(5)(2)goto(3)
拉链(真)(3)ifc<dgoto(5)(4)goto(p+1)(E.false)(4)和(6)(5)ife<fgoto(7)拉链(假)(6)goto(p+1)(7)(S1的四元式
……(p-1)……)(p)goto
(q)(p+1)(S2的四元式……(q-1)……)(q)第31页,共36页。(1)
ifa<bgoto(E.true)(2)
goto(3)(3)ifc<dgoto(5)(4)goto(E.false)(5)ife<fgoto(E.true)(6)goto(E.false)(E.true)(S1的四元式序列
……
……)(p)goto
(q)(E.false)(S2的四元式序列……(q-1)……)(q)第32页,共36页。语义描述使用的变量和过程:
E.true:
“真”链,
E.false:
“假”链
。
E.codebegin:
E的第一个四元式
Nextstat:
下一四元式地址
过程:
emit()
输出一条四元式
merge(p1,p2)把p1的链头填在p2的链尾例:
merge(p1,p2)(p10)0……
p1链(p100)
p10……`(p1)p100(p20)0……p2链(p200)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 诗歌常用表达技巧清单
- 初中三年级道德与法治·中考冲刺23天备考参考
- 劳动·新技术体验与应用·三年级下册教学设计
- 高中一年级心理健康教育“新学期适应”主题班会教案
- 刷拖鞋-劳动项目六(教案)小学劳动一年级下册人教版
- 高中地理必修一“走近桂林山水”素养导学案设计
- 造纸和纸制品业2026年安全月活动方案(人人讲安全、个个会应急-排查整治风险隐患)3023
- 高二坚守主题班会教案:你的坚持终将不凡-2026年高二上学期“相信坚持的力量”主题班会教学设计
- 初中主题班会教学设计:撕开“假努力”面具掌握高效复习认知密码
- 静水深流思维生光-高中二年级“安静的力量”心理健康主题班会教学设计
- 国家事业单位招聘2025国家文化和旅游部恭王府博物馆应届毕业生招聘4人笔试历年参考题库典型考点附带答案详解
- 盐热敷疗法蒙医
- 2026贵州农商联合银行社会招聘20人备考题库含答案详解(达标题)
- 2026年达芬奇调色考证高分题库及答案详解(夺冠)
- 2026年高考高三考前预测卷物理试卷(湖南专用)(含答案)
- 2026家电行业创新零售白皮书-
- 心理康复的常用技术
- 江小白营销案例分析
- 中职机械教学中数字化教学资源的开发与应用课题报告教学研究课题报告
- 宜宾市自然资源和规划局竞争性比选工作人员的考试参考试题及答案解析
- 《道路运输企业主要负责人和安全生产管理人员安全考核机动车维修企业》专业部分题库(附答案)
评论
0/150
提交评论