编译原理课件CHAPTER 5(Semantic Analysis and Interme.ppt_第1页
编译原理课件CHAPTER 5(Semantic Analysis and Interme.ppt_第2页
编译原理课件CHAPTER 5(Semantic Analysis and Interme.ppt_第3页
编译原理课件CHAPTER 5(Semantic Analysis and Interme.ppt_第4页
编译原理课件CHAPTER 5(Semantic Analysis and Interme.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、2020/10/11,1,Chapter5Semantic Analysis and Intermediate Code Generation,语义分析概述 语法制导翻译 (Syntax-Directed Translation) 类型确定与类型检查 (Type Checking) 中间代码生成 (Intermediate Code Generation),2020/10/11,2,5.3 类型确定与类型检查,类型确定:确定标识符所代表对象的数据类型,要确定类型,基本工作是处理说明部分,把相关的类型等属性填入符号表相应的条目中,2020/10/11,3,5.3 类型确定与类型检查,一般的说明语

2、句的处理:P474 (Fig.8.11),注意语义动作 enter,为名字建立表项,对第一条产生式及翻译模式进行改写(见P474),引入标记非终结符号(Marker Nonterminals),改写后的语法制导定义是 S-属性定义,适合于自底向上翻译,2020/10/11,4,5.3 类型确定与类型检查,例子:处理语句 id1 : real ; id2 : integer,1、自底向上建立分析树,2、在建立分析树的同时执行语义规则完成翻译,2020/10/11,5,5.3 类型确定与类型检查,* 对说明语句的语义处理不产生中间代码,P,D,M,D2,D1,;,T2,T1,:,id2,id1,:

3、,real,T3,integer,1,2,3,4,5,6,7,8,2020/10/11,6,5.3 类型确定与类型检查,过程说明的处理:P477 (Fig.8.13) 针对允许嵌套过程的语言,如 PASCAL,sort,exchange,quicksort,readarray,partition,简要说明: P475 Fig.8.12 程序参见 P416 (2)-(19)都是说明部分,2020/10/11,7,5.3 类型确定与类型检查,P477 (Fig.8.13),此翻译模式只是一种解决方案,语义过程 mktable,enter,addwidth,enterproc,栈 tblptr,of

4、fset,2020/10/11,8,5.3 类型确定与类型检查,例子:分析如下程序的说明部分 画出分析树,详细说明,id1 : T1 ; proc id2 ; id3 : T2 ; S,2020/10/11,9,P,D,M,D2,D1,;,;,T1,id2,proc,id1,:,;,D3,N,S,T2,id3,:,1,1. t1 := mktable ( nil ) push ( t1 , tblptr ) push ( 0, offset ),id1 : T1 ; proc id2 ; id3 : T2 ; S,t1,0,2020/10/11,10,P,D,M,D2,D1,;,;,T1,id

5、2,proc,id1,:,;,D3,N,S,T2,id3,:,1,2,2. enter ( top( tblptr), , T1.type, top(offset) ) top( offset ) := top(offset) + T1.width,id1 : T1 ; proc id2 ; id3 : T2 ; S,t1,8,2020/10/11,11,P,D,M,D2,D1,;,;,T1,id2,proc,id1,:,;,D3,N,S,T2,id3,:,1,2,3,3. t2 := mktable ( top ( tblptr ) ) push ( t2 , tblptr

6、) push ( 0, offset ),id1 : T1 ; proc id2 ; id3 : T2 ; S,t1,8,t2,0,2020/10/11,12,P,D,M,D2,D1,;,;,T1,id2,proc,id1,:,;,D3,N,S,T2,id3,:,1,2,3,4,4. enter ( top( tblptr), , T2.type, top(offset) ) top( offset ) := top(offset) + T2.width,id1 : T1 ; proc id2 ; id3 : T2 ; S,t1,8,t2,4,2020/10/11,13,P,D

7、,M,D2,D1,;,;,T1,id2,proc,id1,:,;,D3,N,S,T2,id3,:,1,2,3,4,5,5. t := top ( tblptr ) addwidth ( t, top ( offset ) ) pop ( tblptr ) pop ( offset ) enterproc ( top( tblptr), , t ),id1 : T1 ; proc id2 ; id3 : T2 ; S,t1,8,2020/10/11,14,P,D,M,D2,D1,;,;,T1,id2,proc,id1,:,;,D3,N,S,T2,id3,:,1,2,3,4,5,6

8、,7,6. 7. addwidth ( top ( tblptr ), top ( offset ) ) pop ( tblptr ) pop ( offset ),id1 : T1 ; proc id2 ; id3 : T2 ; S,2020/10/11,15,P,D,M,D2,D1,;,;,T1,id2,proc,id1,:,;,D3,N,S,T2,id3,:,1,2,3,4,5,6,7,id1 : T1 ; proc id2 ; id3 : T2 ; S,2020/10/11,16,5.3 类型确定与类型检查,记录类型的处理:P477 (Fig.8.14),例子:分析句型 record

9、id1 : T ; id2 : T end,2020/10/11,17,5.3 类型确定与类型检查,T,D,record,D2,L,D1,;,T2,T1,:,id2,id1,:,end,1,2,3,4,5,2020/10/11,18,5.3 类型确定与类型检查,类型检查(Type Checking):按照所用语言的语义规则检查运算的合法性与运算分量类型的一致性或相容性,2020/10/11,19,5.3 类型确定与类型检查,表达式的类型检查(Type Checking of Expressions),1、E num E.type := integer ,2、E id E.type := loo

10、kup(id.entry) ,2020/10/11,20,5.3 类型确定与类型检查,3、E E1 op E2 E.type := if E1.type=integer and E2.type=integer then integer else type-error 一致性检查 * 假设 op 的运算分量必须是integer,结果也是integer,2020/10/11,21,5.3 类型确定与类型检查, E.type := if E1.type=integer and E2.type=integer then interger else if E1.type=integer and E2.t

11、ype=real then real else if E1.type=real and E2.type=integer then real else if E1.type=real and E2.type=real then real else type-error 相容性检查 必要的话可以使用强制转换函数 inttoreal * 假设 op 的运算分量可以是 integer 和 real,2020/10/11,22,5.3 类型确定与类型检查,4、E E1 E2 E.type := if E2.type=integer and E1.type=array(s,t) then t else t

12、ype-error ,5、E E1 E.type := if E1.type=pointer(t) then t else type-error ,2020/10/11,23,5.3 类型确定与类型检查,例:,E1,E,E4,E2,id1,num,+,*,E3,id2,1,2,3,4,5,2020/10/11,24,5.3 类型确定与类型检查,语句的类型检查(Type Checking of Statements),1、S id:=E S.type := if id.type=E.type then void else type-error ,2、S if E then S1 S.type := if E.type=boolean then S1.type else type-error ,2020/10/11,25,5.

温馨提示

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

评论

0/150

提交评论