编译器实现(六)

时间:2019-06-12
本文章向大家介绍编译器实现(六),主要包括编译器实现(六)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.语义分析

语义分析可以分为两类。

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

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

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

1.1 属性和属性文法

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

属性的典型例子有:

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

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