- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 7.1 语义分析 语义分析 属性文法和语法制导翻译方法和技术应用于语义分析中。 语义分析通常包括以下几个方面: * * (1)类型检查。验证程序中执行的每个操作是否遵守语言的类型系统的过程.,编译程序必须报告不符合类型系统的信息。 (2)控制流检查。控制流语句必须使控制转移到合法的地方。例如,在C语言中break语句使控制跳离包括该语句的最小while、for或switch语句。如果不存在包括它的这样的语句,则就报错。 (3)一致性检查。在很多场合要求对象只能被定义一次。例如Pascal语言规定同一标识符在一个分程序中只能被说明一次,同一case语句的标号不能相同,枚举类型的元素不能重复出现等等。 (4)相关名字检查。有时,同一名字必须出现两次或多次。例如,Ada 语言程序中,循环或程序块可以有一个名字,出现在这些结构的开头和结尾,编译程序必须检查这两个地方用的名字是相同的。 (5)名字的作用域分析 * * 类型和声明(Types and declarations) 一个类型是一组值和在这些值上的一组操作,程序设计语言中有三种类型: 基本类型:int, float, double, char, bool等等. 也可能允许在基本类型基础上用户自己定义的类型,如枚举型. 复合类型:数组,指针,记录/结构/联合,类等等.这些类型由基本类型构成. 复杂类型:链表,栈,队,树,堆,表格等等.可以把它们组织成ADT. 一个语言不一定支持这类高级的抽象。 声明是程序中的一个语句,是把数据对象的名称和类型,以及生命周期信息传给编译,声明的地方传递生命周期信息 也有些语言允许声明初始化变量。如: double calculate(int a, double b); // function prototype int x = 0; // global variables available throughout double y; // the program int main() { int m[3]; // local variables available only in main char *n; ... } * * 强类型的 -任何数据类型都可以在 编译时确定 弱类型的. 进行类型检查的时间:编译时,运行时,或者两者结合. 静态类型检查 编译时进行类型检查 动态类型检查,将类型信息并到运行时每个数据单元中. 隐含类型转换. * * P→D;E D→D;|id:T T→char | integer | aray [num]of T| ↑T E→literal|num | id| E mod E| E [E]|E↑ P代表程序;D代表说明;E代表表达式。如程序语句: key: integer; key mod 1999 语言本身提供两种基本类型:char和integer。 除此之外还有缺省的基本类型type_ error和void。假定所有数组都从下标1开始 * * 确定标识符类型的部分翻译模式 (1)P→D;E (2)D→D;D (3)D→id:T {addtype (id. Entry, T. type)} (4)T→char {T. Type:= char} (5)T→integer {T. Type:= integer} (6)T→↑T1 {T. Type:= pointer (T1. type)} (7)T→array [num]of T1 {T. Type: = array (num.Val, T1.type)} * * 语句的类型检查的翻译模式 S→id:=E { if id. Type= E. Type Then S. Type:= void else S. Type:= type_ error} S→if E then S1 {if E. type= boolean then S. Type:= S1. type else S. type := type_ error} S→while E do S1 {if E. type= boolean Then S. type:= S1. Type else S. type:= type_ error} * * 设计类型检查程序 1.辨认语言中可用的类型 2.辨认具有类型的语言结构 3.辨认语言的语义规则 *
您可能关注的文档
- Android程序设计课件.pptx
- CAXA制造工程师课件.pptx
- C语言程序设计课件.pptx
- ERP技术与应用课件.pptx
- 半导体材料课件.pptx
- 半导体工艺课件.pptx
- 半导体物理课件.pptx
- 薄膜物理课件.pptx
- 编译原理和技术课件.pptx
- 编译原理课件.pptx
- 2026年大连外国语大学翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
- 2026年电子科技大学翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
- 2026年东北大学翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
- 2026年东北师范大学翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
- 2026年东华大学翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
- 2026年福州大学翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
- 2026年贵州大学翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
- 2026年国际关系学院翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
- 2026年哈尔滨工业大学翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
- 2026年哈尔滨理工大学翻译硕士(MTI)考研招生人数、参考书、考研经验、真题回忆.pdf
原创力文档


文档评论(0)