最新编译原理复习课件资料-类型确定与类型检查.ppt

最新编译原理复习课件资料-类型确定与类型检查.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * Chapter5 Semantic Analysis and Intermediate Code Generation 语义分析概述 语法制导翻译 〔Syntax-Directed Translation〕 类型确定与类型检查 〔Type Checking〕 中间代码生成 〔Intermediate Code Generation〕 * * 5.3 类型确定与类型检查 类型确定:确定标识符所代表对象的数据类型 要确定类型,根本工作是处理说明局部,把相关的类型等属性填入符号表相应的条目中 * * 5.3 类型确定与类型检查 一般的说明语句的处理:P474 〔Fig.8.11〕 注意语义动作 enter 对第一条产生式及翻译模式进行改写〔见P474〕,引入标记非终结符号〔Marker Nonterminals〕,改写后的语法制导定义是 S-属性定义,适合于自底向上翻译 * * 5.3 类型确定与类型检查 例子:处理语句 id1 : real ; id2 : ↑integer 1、自底向上建立分析树 2、在建立分析树的同时执行语义规那么完成翻译 * * 5.3 类型确定与类型检查 * 对说明语句的语义处理不产生中间代码 P D M D2 ε D1 ; T2 T1 : id2 id1 : real T3 ↑ integer 1 2 3 4 5 6 7 8 id1 real 0 id2 pointer(integer) 8 * * 5.3 类型确定与类型检查 过程说明的处理:P477 〔Fig.8.13〕 针对允许嵌套过程的语言,如 PASCAL sort exchange quicksort readarray partition 简要说明: 程序参见 P416 〔2〕-〔19〕都是说明局部 * * 5.3 类型确定与类型检查 P477 〔Fig.8.13〕 此翻译模式只是一种解决方案 语义过程 mktable,enter,addwidth,enterproc 栈 tblptr,offset * * 5.3 类型确定与类型检查 例子:分析如下程序的说明局部 画出分析树,详细说明 nil header id1 real 0 id2 proc id1 : T1 ; proc id2 ; id3 : T2 ; S t1 header id3 integer 0 * * 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 * * P D M D2 ε D1 ; ; T1 id2 proc id1 : ; D3 N S ε T2 id3 : 1 2 2. enter ( top( tblptr), id1.name, T1.type, top(offset) ) top( offset ) := top(offset) + T1.width id1 : T1 ; proc id2 ; id3 : T2 ; S t1 8 * * 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 ) push ( 0, offset ) id1 : T1 ; proc id2 ; id3 : T2 ; S t1 8 t2 0 * * P D M D2 ε D1 ; ; T1 id2 proc id1 : ; D3 N S ε T2 id3 : 1 2 3 4 4. enter ( top( tblptr), id3.name, T2.type, top(offset) ) top( offset ) := top(offset) + T2.width id1 : T1 ; proc id2 ; id3 : T2 ; S t1 8 t2 4 * * P D 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

文档评论(0)

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

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

1亿VIP精品文档

相关文档