版本2符号表-NEW.pptVIP

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例 设A为一个10*20的数组,即n1= 10,n2= 20。并设w=4,数组第一个元素为 A[1,1] 。则有:((low1*n2)+low2)*w=(1*20 +1)*4=84。赋值语句x:=A[y,z]在由底向上的分析中被翻译成如下三地址语句序列:t1:= y*20 t1:= t1+z t2:= A-84 t3:= 4*t1 t4:= t2[t3] x:= t4 S L.place=x L.offset=null x := E.place=T4 L.place=T2 L.offset=T3 Elist.place=T1 Elist.ndim=2 Elist.array=A ] Elist.place=y Elist.ndim=1 Elist.array=A A [ E.place=y L.place=y L.offset=null , E.place=z L.place=z L.offset=null z y 访问记录中的域 编译器将记录的域的类型和相对地址保存在相应域名的符号表表项之中,可以把用在符号表中查找名字的程序同样用来查找域名。 例如:表达式:p↑.info+1 变量P是一个指向某个记录类型的指针,info 为其中一个算术型类型的域名。 编译程序内部把 p表示为:pointer(record(t)),域名info将可以在t所指向的符号表中查找。 P info next TYPE link=↑node; node=RECORD info:integer; next:link END; VAR p:link; 静态语义检查 按照编译工作的逻辑结构,紧接在词法分析和语法分析之后,编译程序要做的工作是进行静态语义检查和翻译。 静态语义检查 静态语义检查通常包括: 类型检查。验证程序中执行的每个操作是否遵守语言的类型系统的过程,编译程序必须报告不符合类型系统的信息。 控制流检查。控制流语句必须使控制转移到合法的地方。例如,在C语言中BREAK语句使控制跳离该语句的最小WHILE/FOR或SWITCH语句。如果不存在包括他的这样语句,则报错。 一致性检查。在很多场合要求对象只能被定义一次。例如PASCAL规定同一个标识符在一个分程序中只能说明一次。CASE语句中标号不能相同,枚举元素不能重复出现等等。 相关名字检查。 名字的作用域分析。 类型系统 基类型(base types) 程序设计语言通常包含基本类型:int, float, character, booleans 组合类型(compound and constructed types) 程序员通常需要更高层次的抽象,例如链表、图、树、表等。 程序语言提供一种组合对象的机制来得到新对象的类型 例如数组、结构、指针、可列举集合等 程序中的基类型和结构化类型每一种表达可以表示维一个类型表达式。 类型表达式 一个基本类型是一个类型表达式 integer, char, float 用类型构造符施于类型表达式,得到一个新的类型表达式。 Example int A[10] A的类型表达式 array(10,integer) (1) 过程说明D- proc id; D1; S 引进一个新的过程,其过程名id局部于这个新过程的外围过程,因此这个id应该出现在外围过程的符号表中。 (2)在遇到过程说明D-proc id; D1; S 时应该暂停它的外围过程说明语句的处理;为新过程创建一个符号表。将D1中所说明的名字在这张新的符号表中登记,他们都是局部于这个新过程的。 (3)外围过程中说明的名字全局于新过程,因此新过程的符号表中有一指针指向外围过程的符号表。 program sort var a , x procedure readarry var i begin … end // readarry procedure exchange begin x = a… end //exchange procedure quiksort var k , v function partition var i , j begin …a…. ;

文档评论(0)

精品课件 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档