计算机复试编译原理哈工大课件ch62_第1页
计算机复试编译原理哈工大课件ch62_第2页
计算机复试编译原理哈工大课件ch62_第3页
计算机复试编译原理哈工大课件ch62_第4页
计算机复试编译原理哈工大课件ch62_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7.2.3E→EorE|EandE|notE|(E)|idrelopid 1or(not0and0)or=1or(1and0)or=1or0or=1or2例:A例:AorB如果A为真,那么B必计算,此时AorB同理,Aand同理,AandB如果A为假,那么B就不必计算,此时AandB二、数值表示 布尔表达式:aorbandnot:t1:=not:t2:=band:t3:=aor关系表达式 :等价于ifa<bthen1else:100:ifa<bgoto 101:

101:(=,0,102:(j,,103:(=,1,址语句在输出序列中的索引序号,也就

101:(=,0,102:(j,,103:(=,1,E→E1or E→E1andE2 E→id1relopid2{emit('if'id1.placeemit(E.place':=''0'); emit(E.place':=''1')} 例:布尔表达式a<bandc<dande<f E E ③a<bandc<dande<语义动作执行顺序:③③①③ a<bandc<dande<f可100:ifa<bgoto103102:goto104:ifc<dgoto107106:goto104

108:t3=t1andt2109:ife<fgoto112111:goto113:t5=t3and对于出现在条件语句ifEthens1elses2中 ,对于while语句E.true指向循环的开始,E.false指向while1、基本思想:假定E形如a<d,则将生 E.true:ifa<bgotoE.true(真出口)E.false:gotoE.false E.true:(jabE.true)(真出口E.false:(j,,,E.false(假出口EandEEorE、notEE→E→E1andE→E1or

E→E1or

E→E1and

E1.false:=E.false; E1.true:=E.false;E1.false:=E.true;

E1.true:=E.true;E1.false:=E.false; E.code:=gen(‘if’id1.placerelop.opid2.place‘goto’ E.code:=gen(‘goto’E.true)E.code:=gen(‘goto’E.false)考虑如下表达式a<bandc<dande<fIfIfc<dgotoGotoIfa<bgotoGotoIfe<fgotoGoto(jnz,a,_,P)表示ifagotoPifxropygoto goto (J>,a,b, ,ifa>bthens1else(J>,a,b

,

ifa<bgotogotoL1:ifc<dgotogotoL2:ife<fgotogoto

Ifa<bandc<dande<fthens1elseifa<bthenx=0else2 ) ,)E→E1orM|E1andM|not|id1relop表,i是四元式数组的一个索引(下标),或说i是四元式代码序列的一个标号。

function{IFELSE{P=P2whileP的第4分量不为

whileQ≠0 M M.falselist=E.falselist}EE1OR EE1ANDEnot { E(E Eid1relop{E.truelist:=makelist(nextquad);E.falselist:=makelist(nextquad+1);emit(´if´id1.placerelop.op E 7E 重新考虑表达式a<bandc<dandE E2M

a<b andε⑧

,K+1 ,K+3 emit(goto— (j<,a,b,k+2(j (j<,c,d,k+4(j k+1(j<,e,b (j ,k+3

文法 S→ifEthen|ifEthenS1else|whileEdo

toE.truetoE.falsegotogoto

toE.truetoE.falsegotogoto

toE.truetoE.false语法制导定义S→ifEthen

S→ifEthenS1elseS2

doS1

E.false:=S.next;E.codegen(E.true’:’)S1.code例考虑如下语句whilea<bdoifc<dthenx:=y+z

L1:ifa<bgotogotoL2:ifc<dgotoL3gotoL4L3:t1:=gotoL1(L5)L4: S→ifES→ifEthenS→ifEthenSelseS→whileEdoS→beginLS→(6)S→(7)L→ A为赋值语 E为一个布尔表达

IfEIfEthens1else

S1的代 IfIfEthenS1

WhileEdoS1文法:(1) E(2)T→C1(3)S(4)SW→U→WESS→beginLS→S→L→ EC.nextlist=E.false}T→C1{q=nextquad 2 S.}W→U→WEU.Head=W.Head}S{PS.xt.e)emit(J,-,-,U.head)S.nextlist=U.nextlist}S LL1;M SbeginLifa<bandc<dande<f thenX=1 whileg<hdo a<bandc<dand

(j<,a,b,k+2 (j (j<,c,d,k+4 (j k+1 (j<,e,b (j ,k+3ififEX=1elseX=2TC③ Ethen① X=2*1KK(j<,a,b, (j (j<,c,d,k+4(j K+8(j<,e,b(j ,(=,1, (j ,)(=,1,x①*1⑨②*1⑨③eSe:=(3)SS}S;S;whileg<hdoX=3 UM⑦M AS11ε12while⑤ *2do X=31112⑤*2⑥*1⑨⑦

(j<,e,b, (j ,k+8 (=,1, (j ,K+9 (=,2, (j<,g,h,K+11 (j (10)LL1;M

(=,3 (j KK(j<,a,b,)(j ,)(j<,c,d)(j )eb,)(j,,k+8(=1, (j,,)(=1,,x(j<,g,h)(j ,)(=,3,a)(j , 7.2.4S→callidElist→ ③过程的运行状态;④返回地址应存入指定的单元中;⑤应生成一条转移指例过程调用“cal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论