欢迎来到天天文库
浏览记录
ID:58814403
大小:509.00 KB
页数:62页
时间:2020-10-01
《哈工大 编译原理ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、本节考虑由如下文法生成的布尔表达式:布尔表达式的作用:1.用作计算逻辑值2.用作控制流语句如if-then,if-then-else和while-do等之中的条件表达式布尔表达式:用布尔运算符号(and,or,not)作用到布尔变量或关系表达式上而组成7.2.3布尔表达式E→EorE
2、EandE
3、notE
4、(E)
5、idrelopid
6、true
7、false1优先级:not、and、orAnd、or左结合not右结合1、表示一个布尔表达式的值一、翻译布尔表达式的方法例1or(not0and0)or0方法一:用数值表示真和假,从而对布尔表达式的求值可以象对算术表达式的求值那样一步一步地来计算=1
8、or(1and0)or0=1or0or0=1or0=12方法二用于翻译控制流语句中的布尔表达式尤其方便。方法二:另一种方法是根据布尔表达式的特点,采用了某种优化措施。例:AorB如果A为真,那么B的值就不必计算,此时AorB的值已定,为真。同理,AandB如果A为假,那么B的值就不必计算,此时AandB的值已定,为假。3布尔表达式:aorbandnotc翻译成三地址代码序列:100:t1:=notc101:t2:=bandt1102:t3:=aort1用1表示真,0表示假来实现布尔表达式的翻译二、数值表示法4关系表达式:a9、l04。103:t:=1104:等价于ifa10、.place:=newtemp;emit(E.place':='E1.place'orE2.place)}E→notE1{E.place:=newtemp;②emit(E.place':=''not'E1.place)}E→E1andE2{E.place:=newtemp;①emit(E.place':='E1.place'andE2.place)}7E→ture{E.place:=newtemp;④emit(E.place':=''1')}E→false{E.place:=newtemp;⑤emit(E.place':=''0')}E→id1relopid2{E.place:=newte11、mp;emit('if'id1.placerelop.opid2.place'goto'nextstart+3);emit(E.place':=''0');③emit('goto'nextstat+2);emit(E.place':=''1')}8例:布尔表达式a12、to104107:t2=1{E.place=newtemp;emit(‘if’id1.placerelop.opid2.place‘goto’nextstart+3)emit(E.place‘=’‘0’)emit(‘goto’nextstart+2)emit(E.place‘=’‘1’)}{E.place=newtemp;emit(E.place‘=’E1.place‘and’E2.place)}108:t3=t1andt2{E.place=newtemp;emit(‘if’id1.placerelop.opid2.place‘goto’nextstart+3)emit(E.place‘=13、’‘0’)emit(‘goto’nextstart+2)emit(E.place‘=’‘1’)}109:ife
9、l04。103:t:=1104:等价于ifa10、.place:=newtemp;emit(E.place':='E1.place'orE2.place)}E→notE1{E.place:=newtemp;②emit(E.place':=''not'E1.place)}E→E1andE2{E.place:=newtemp;①emit(E.place':='E1.place'andE2.place)}7E→ture{E.place:=newtemp;④emit(E.place':=''1')}E→false{E.place:=newtemp;⑤emit(E.place':=''0')}E→id1relopid2{E.place:=newte11、mp;emit('if'id1.placerelop.opid2.place'goto'nextstart+3);emit(E.place':=''0');③emit('goto'nextstat+2);emit(E.place':=''1')}8例:布尔表达式a12、to104107:t2=1{E.place=newtemp;emit(‘if’id1.placerelop.opid2.place‘goto’nextstart+3)emit(E.place‘=’‘0’)emit(‘goto’nextstart+2)emit(E.place‘=’‘1’)}{E.place=newtemp;emit(E.place‘=’E1.place‘and’E2.place)}108:t3=t1andt2{E.place=newtemp;emit(‘if’id1.placerelop.opid2.place‘goto’nextstart+3)emit(E.place‘=13、’‘0’)emit(‘goto’nextstart+2)emit(E.place‘=’‘1’)}109:ife
10、.place:=newtemp;emit(E.place':='E1.place'orE2.place)}E→notE1{E.place:=newtemp;②emit(E.place':=''not'E1.place)}E→E1andE2{E.place:=newtemp;①emit(E.place':='E1.place'andE2.place)}7E→ture{E.place:=newtemp;④emit(E.place':=''1')}E→false{E.place:=newtemp;⑤emit(E.place':=''0')}E→id1relopid2{E.place:=newte
11、mp;emit('if'id1.placerelop.opid2.place'goto'nextstart+3);emit(E.place':=''0');③emit('goto'nextstat+2);emit(E.place':=''1')}8例:布尔表达式a12、to104107:t2=1{E.place=newtemp;emit(‘if’id1.placerelop.opid2.place‘goto’nextstart+3)emit(E.place‘=’‘0’)emit(‘goto’nextstart+2)emit(E.place‘=’‘1’)}{E.place=newtemp;emit(E.place‘=’E1.place‘and’E2.place)}108:t3=t1andt2{E.place=newtemp;emit(‘if’id1.placerelop.opid2.place‘goto’nextstart+3)emit(E.place‘=13、’‘0’)emit(‘goto’nextstart+2)emit(E.place‘=’‘1’)}109:ife
12、to104107:t2=1{E.place=newtemp;emit(‘if’id1.placerelop.opid2.place‘goto’nextstart+3)emit(E.place‘=’‘0’)emit(‘goto’nextstart+2)emit(E.place‘=’‘1’)}{E.place=newtemp;emit(E.place‘=’E1.place‘and’E2.place)}108:t3=t1andt2{E.place=newtemp;emit(‘if’id1.placerelop.opid2.place‘goto’nextstart+3)emit(E.place‘=
13、’‘0’)emit(‘goto’nextstart+2)emit(E.place‘=’‘1’)}109:ife
此文档下载收益归作者所有