第8章语法制导与中间代码生成研究.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例:设有语句 if X=Y+1 then X:=X*Y else while X≠0 do begin X:=X-1;Y:=Y+2 end 则其四元式如下: 1.(+, Y, 1, T1) Y+1 2.(=, X, T1, T2) X=Y+1 3.(then,T2, — ,—) 4.(*, X, Y, T3) X*Y 5.(=:, T3, —, X ) X:=X*Y 6.(else,—, —, —) 7.(while,—, —, —) 8.(≠, X , 0, T4) X≠0 9.(do, T4, —, —) 10.(-, X, 1, T5) X-1 11.(=:, T5, —, X) X:=X-1 12.(+, Y, 2, T6) Y+2 13.(=:, T6, —, Y) Y:=Y+2 14.(whend, —, —, —) 15.(ifend, —, —, —) 语法制导用的新文法可设计如下: Gs‘:S→Assig E | Ifthen S | Ifelse S | Whido S | begin B end | goto l | Label S Assig?i:= Ifthen?if E then Ifelse ?Ifthen S else Whido ? While E do While ?while Label ?l: B→S| B; S 8.6 复合变量的中间代码 及其语法制导生成 在Pascal中,变量形式定义是: V→id | V[E] | V.id 称后两种为复合变量。其中V又可以是任意变量,因此复合变量的形式可能是很复杂的。 首先考虑下标变量V[E]情形。 ClASS POINT a tp: L tp’ u l LOW UP CTP ClEN 其中tp’是成分类型的TYPEL地址,L是成分类型的长度。 若用typ(V)和addr(V)表示变量V的类型(TYPEL地址)和V的始地址,则有: addr(V[E])=addr(V)+(E-l)*L 其中 l=AINFL[TYPEL[tp].TPOINT].LOW L=AINFL[TYPEL[tp].TPOINT].CLEN 下面考虑域选择变量V.id情形。 设tpy(V)=tp,且TYPEL[tp].TCLASS=d.这是tp指向一个记录类型的内部表示: ClASS POINT d tp: RINFL 若用V.id中的id去查RINFL部分可得到id关于该记录的区距off。若用off (tp,id)表示id 关于tp记录的区距,则有: addr(V.id)=addr(V)+off(typ(V),id) 例:设有PASCAL说明: TYPE at=ARRAY[1..10]OF[1..5]OF integer; rt=RECORD d:real; a:at; b:at END; VAR c,g:at;r,u:rt; 则有:addr(c[i])=co+(i-1)*5 addr(c[i][j])=co+(i-1)*5+(j-1)*1 addr(u.a)=uo+1 addr(u.a[i])=uo+1+(i-1)*5 下面考虑V[E]和V.id情形的四元式。变量目标的任务是计算变量的地址,于是其四元式可描述如下: vfour(V): addr(V)=T 其中vfour表示变量的四元式。 变量的目标代码不一定要彻底计算出变量的地址并将它存于临时变量中。如果没有方便的目标代码,则计算X:=V[E]的过程大致是: 1) Addr(V)=T1 2) Value(E)?T2 3) T1+ T2?T3 4) @ T3?X 但如果有方便的目标代码,则计算过程可以是: 1) Addr(V)?T1 2) Value(E)?T2 3) T2[T1]?T3 V[E]的四元式结构可设计如下: vfour(V[E]):vfour(V) efour(E) (—,eres(E),l,T1) (*,T1,L,T2) ([],vres(V),T2,T) eres(E)是表示

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档