码迷,mamicode.com
首页 > 其他好文 > 详细

编译器实现(六)

时间:2019-06-12 15:15:05      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:nbsp   asc   编译程序   包含   程序   pascal   最优   而在   位置   

1.语义分析

语义分析可以分为两类。

第1类是程序的分析,要求根据编程语言的规则建立其正确性,并保证其正确执行。对于不同的语言来说,语言定义所要求的这一类分析的总量变化很大。在LISP和Smalltalk这类动态制导的语言中,可能完全没有静态语义分析;而在A d a这类语言中就有很强的需求,程序必须提交执行。其他的语言介于这两种极端情况之间(例如 Pascal 语言,不像A d a和C对静态语义分析的要求那样严格,也不像 LISP 那样完全没有要求)。

语义分析的第2类是由编译程序执行的分析,用以提高翻译程序执行的效率。这一类分析通常包括对“最优化”或代码改进技术的讨论。

这两类分析也不是相互排斥的,因为与没有正确性要求的语言相比,如静态类型检查这样的正确性要求能使编译程序产生更加有效的代码。另外,值得注意的是,这里讨论的正确性要求永远不能建立程序的完全正确性,正确性仅仅是部分的。但这样的要求仍然是有用的,可以给编程人员提供一些信息,提高程序的安全性和有效性。

 

1.1 属性和属性文法

 属性( attribute)是编程语言结构的任意特性。属性在其包含的信息和复杂性等方面变化很大,特别是当它们能确定时翻译/执行过程的时间。

属性的典型例子有:

  • 变量的数据类型。
  • 表达式的值。
  • 存储器中变量的位置。
  • 程序的目标代码。
  • 数的有效位数。

 

编译器实现(六)

标签:nbsp   asc   编译程序   包含   程序   pascal   最优   而在   位置   

原文地址:https://www.cnblogs.com/x-police/p/11009693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!